본문으로 바로가기

안드로이드·갤럭시·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