안드로이드·갤럭시·AOS 애플리케이션 취약점진단/모의해킹 무료 강의 학식(hagsig)
가. 취약점 정의
- Broadcast Receiver는 디바이스(시스템) 또는 다른 앱으로부터 발생하는 이벤트 신호를 받아 정해진 작업을 수행한다.
- *Androidmanifest.xml(매니페스트) 파일의 <receiver></receiver> 요소에 정의된다.
*AndroidManifest.xml : Android가 앱을 실행하기 위해 알아야 하는 앱의 모든 컴포넌트가 정의되어 있는 파일
- <receiver> 요소의 exported 속성이 true로 설정되어 있고 권한설정이 적용되지 않은 경우, 공격자는 임의의 브로드캐스트 신호를 생성하여 사용자가 받는 알림(메시지, 전화 등)을 가로채거나 특정 상황에서 발생하는 작업을 우회하는 등의 공격을 수행할 수 있다.
# 취약한 브로드캐스트 리시버 예시 1
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="APP_SPECIFIC_BROADCAST" />
</intent-filter>
</receiver>
# 취약한 브로드캐스트 리시버 예시 2
<receiver android:name=".MyBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="APP_SPECIFIC_BROADCAST" />
</intent-filter>
</receiver>
나. 대응방안
1. exported 속성을 false로 설정
- 앱 외부로부터 브로드캐스트를 수신이 필요하지 않을 경우 exported 속성을 false로 설정하여야 한다.
※ exported 속성이 설정되어 있지 않으나 <intent-filter>를 사용할 경우 기본값이 true로 설정된다.
# 안전한 브로드캐스트 리시버 예시
<receiver android:name=".MyBroadcastReceiver" android:exported="false">
<intent-filter>
<action android:name="APP_SPECIFIC_BROADCAST" />
</intent-filter>
</receiver>
2. protectionLevel을 signature로 설정
- 연동이 필요할 경우 exported 속성을 true로 설정한 뒤, protectionLevel을 signature로 설정한다.
- signature 로 설정되는 경우 같은 서명을 사용하는 앱 간에만 액티비티를 호출할 수 있다.
# 보안설정한 액티비티 예시1
<permission
android:name="com.hagsig.permission"
android:protectionLevel="signature"/>
<activity
android:name="com.hagsig.blog"
android:exported="true"
android:permission="com.hagsig.permission">
</activity>
# 보안설정한 액티비티 예시2
<permission
android:name="com.hagsig.permission"
android:protectionLevel="signature"/>
<activity
android:name="com.hagsig.blog"
android:permission="com.hagsig.permission">
<intent-filter>
<action android:name="hagsigtistoryblog"/>
</intent-filter>
</activity>
- permission을 부여하여 사용중일 경우 다른 앱에서 해당 앱의 액티비티를 호출하기 위해 uses-permission을 선언해야 한다.
# 다른 애플리케이션에서의 보안 설정
<uses-permission android:name="com.hagsig.permission"/>
3. 루팅 또는 애뮬레이터 환경 체크 기능 추가
- 액티비티에 export, protectionLevel 보안설정을 적용하더라도 루팅 또는 애뮬레이터에서는 액티비티를 강제 실행할 수 있다.
- 루팅 또는 애뮬레이터 환경에서 앱이 실행될 경우, 앱이 강제 종료되는 기능을 추가하여 보안 설정한 액티비티가 강제 실행되는것을 방지한다.
다. 취약점 진단 실습
1. 분석 대상 앱 설치
- 실습을 위해 인시큐어뱅크 애플리케이션을 설치한다.
※ 인시큐어뱅크 앱이 설치되어있지 않은 사람은 아래의 글을 참고하여 앱을 설치하길 바란다.
2023.04.10 - [Mobile App 취약점 진단/AOS App 진단] - 인시큐어뱅크 앱 설치 및 실행 방법 정리(InsecureBankv2)
인시큐어뱅크 앱 설치 및 실행 방법 정리(InsecureBankv2)
1. 인시큐어뱅크 앱 이란? - 모바일 뱅킹 취약점 진단을 위한 테스트 용도로 제작된 애플리케이션이다. - 안드로이드 앱 취약점 진단을 실습할 수 있는 환경을 제공한다. - 2019년 이후로 업데이트
hagsig.tistory.com
2. 진단 대상 앱 apk 파일 추출
- 아래의 링크를 참고하여 인시큐어뱅크 앱으로부터 apk 파일을 추출한다.
안드로이드 앱(app)으로부터 apk 파일 추출 방법 정리
안드로이드 앱(app)으로부터 apk 파일 추출 방법 정리
1. apk 파일이란? - 안드로이드(Android) OS에 애플리케이션(Application, App)을 설치할 수 있는 파일이다. - 윈도우 OS의 설치파일(exe, msi)같은거라 생각하면 쉽다. 2. apk 파일을 추출해야하는 이유 - 취약
hagsig.tistory.com
3. JADX를 이용하여 APK파일 분석
- 아래의 링크에 접속하여 jadx-gui-x.x.x-with-jre-win.zip 파일을 다운로드한 뒤, 압축을 해제한다.
https://github.com/skylot/jadx/releases/tag/v1.4.7
Release 1.4.7 · skylot/jadx
Features [core] Inline lambdas by instance field (#1800) [plugins] Allow to load classes using input stream or byte array in jadx-input plugin (#1457) Bug Fixes [core] Restore missing type param...
github.com
- jadx-gui-x.x.x.exe 를 실행한 뒤 위에서 추출한 인시큐어뱅크 apk파일을 로드한다.
- InsecureBankv2.1.0.apk → 리소스 → AndroidManifest.xml

- Androidmanifest.xml에 선언된 브로드캐스트 리시버를 확인한다.

<receiver android:name="com.android.insecurebankv2.MyBroadCastReceiver" android:exported="true">
<intent-filter>
<action android:name="theBroadcast"/>
</intent-filter>
</receiver>
- "com.android.insecurebankv2.MyBroadCastReceiver" 리시버를 더블클릭하거나 화면 좌측 탐색기에서 파일을 연다.

- 코드를 확인해보니 외부로부터 phonenumber, newpass 파라미터를 입력받고 기존에 사용하던 패스워드와 입력받은 값을 시스템 로그로 내보내는 것을 알 수 있다.

- ADB를 이용하여 파라미터가 포함된 브로드캐스트 생성한다.
# 명령어 형식
adb shell am broadcast -a [action] -n [package name/component name] -e <KEY> <VALUE>
# 명령어 예시
adb shell am broadcast -a theBroadcast -n com.android.insecurebankv2/.MyBroadCastReceiver -e phonenumber 01012345678 -e newpass hagsig

- Logcat으로 확인한 결과 기존에 사용하던 비밀번호가 평문으로 노출되는 것을 확인할 수 있다.

※ 디바이스 로그를 확인하는 방법은 아래의 게시글을 참고하길 바란다.
[AOS 취약점 진단] 08강 - 디바이스 로그 내 저장된 중요정보 확인(실습 1)
[AOS 취약점 진단] 08강 - 디바이스 로그 내 저장된 중요정보 확인(실습 1)
안드로이드·갤럭시·AOS 애플리케이션 취약점진단/모의해킹 무료 강의 학식(hagsig) 가. 취약점 정의 - 디바이스 로그란 모바일 애플리케이션 사용 시 디바이스에 저장되는 로그를 말한다. - 로그
hagsig.tistory.com
[AOS 취약점 진단] 08강 - 디바이스 로그 내 저장된 중요정보 확인(실습 2)
[AOS 취약점 진단] 08강 - 디바이스 로그 내 저장된 중요정보 확인(실습 2)
안드로이드·갤럭시·AOS 애플리케이션 취약점진단/모의해킹 무료 강의 학식(hagsig) 가. 취약점 정의 - 디바이스 로그란 모바일 애플리케이션 사용 시 디바이스에 저장되는 로그를 말한다. - 로그
hagsig.tistory.com
라. 참고자료
https://developer.android.com/guide/components/broadcasts?hl=ko
브로드캐스트 개요 | Android 개발자 | Android Developers
브로드캐스트 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android 앱은 Android 시스템 및 기타 Android 앱에서 게시-구독 디자인 패턴과 유사한 브로드캐
developer.android.com
https://eclipse-owl.tistory.com/21
[BroadcastReceiver] Broadcast permission 주기
Android 개발을 하다 보면 BroadcastReceiver를 이용한 이벤트 전달 방식을 사용하게 됩니다. 현재 앱이 실행중일때 푸시메시지 수신시 이벤트만 날려주거나, 알람설정을 해놨다가 시간이 되었다는 이
eclipse-owl.tistory.com