[안드로이드 모의해킹] Activity 강제 실행 취약점

직접 연구하여 작성한 자료입니다. 공식 출처가 명시되지 않은 자료의 무단 복제, 사용을 금지합니다.
공격 기법은 학습용, 허가된 환경에서 실습 바랍니다. 실 운영망 대상 공격은 처벌받습니다. (정보통신망법 제48조 1항)

개요

AndroidManifest.xml 파일에는 앱 구성 요소의 정보를 포함하여 앱의 기본 구성을 정의한다. <activity> 태그는 액티비티 구성 요소를 선언하는 데 사용되며, 이 태그를 사용하여 액티비티를 앱 구성 요소로 등록할 수 있다. 이 때, <activity> 태그의 속성을 적절하게 설정하지 않으면 Activity 강제 실행 취약점이 발생할 수 있다.

예를 들어, 앱에서 인증 절차를 수행하는 액티비티를 선언할 때, 이 액티비티는 다른 앱에서 강제로 실행되어서는 안된다. 따라서, 이 액티비티를 보호하기 위해서는 다음과 같이 <activity> 태그의 속성을 설정해야 한다.

<activity
    android:name=".MyAuthActivity"
    android:exported="false"
    android:permission="com.myapp.permission.AUTH">
</activity>

위 코드에서 android:exported 속성을 false로 설정함으로써 다른 앱에서 이 액티비티를 직접 실행할 수 없도록 한다. 또한, android:permission 속성을 이용하여 이 액티비티에 접근할 수 있는 권한을 설정할 수 있다. 이 경우, 다른 앱에서 이 액티비티를 실행하려면 com.myapp.permission.AUTH 권한을 가지고 있어야 한다.

만약, android:exported 속성을 true로 설정하거나, 권한을 적절히 설정하지 않은 경우, 다른 앱에서도 이 액티비티를 직접 실행할 수 있게 되어 Activity 강제 실행 취약점이 발생할 수 있니다. 따라서, <activity> 태그를 사용할 때는 적절한 속성을 설정하여 앱 구성 요소를 보호해야 한다.

Activity 강제실행 취약점

취약점이 발생하는 주된 위치는 인증 우회가 가능한지 확인하는 것이다. 인증 절차를 수행하는데 사용되는 액티비티를 보호하지 않고 다른 앱으로부터의 강제 실행을 허용하고 인증 이후의 화면에 접근 가능하거나 계정정보의 탈취가 가능한 경우 취약으로 진단한다.

예를 들어, 앱에서 비밀번호를 입력받는 화면이 있는데, 이 화면이 강제 실행을 막지 않고 다른 앱에서도 접근 가능하다면, 다른 앱에서 해당 화면을 강제로 실행시키고 비밀번호를 가로채는 등의 공격이 가능하다.

진단방법

adb를 이용하여 Activity 강제 실행 취약점을 확인할 수 있다. 아래의 과정을 따른다.

1. USB 디버깅을 허용하고, Android 기기와 컴퓨터를 연결한다.

2. 다음 명령어를 사용하여 adb 쉘에 접속한다.

adb shell

3. 다음 명령어를 사용하여 앱의 패키지 이름을 확인한다.(또는 AndroidManifest.xml 에서 확인할 수 있다.)

dumpsys package <package_name> | grep -i activity

<package_name>는 확인하려는 앱의 패키지 명이다. 해당 패키지에 대한 정보를 확인할 수 있으며, 출력된 정보 중에서 'Activity Resolver Table' 섹션을 찾는다.

4. 'Activity Resolver Table' 섹션에서 'Priority' 항목이 '0'인 액티비티를 찾는다. 이 액티비티는 <intent-filter>를 가지고 있지 않으며, 다른 앱에서도 강제로 실행할 수 있다.

5. 다음 명령어를 사용하여 해당 액티비티를 실행한다.(또는 AndroidManifest에서 식별한 액티비티로 직접 실행한다.)

am start -n <package_name>/<activity_name>

6. 실행된 액티비티가 정상적으로 실행되는지 확인한다.

보안대책

보안적으로 민감한 액티비티는 반드시 보호하도록 해야한다. 이를 위해서는 안드로이드에서 제공하는 Intent 필터를 이용하여 특정 액티비티가 다른 앱에서 실행되는 것을 막을 수 있다. 또한, 인증 절차 등 민감한 데이터는 가능한 한 적은 권한을 가진 액티비티에서 처리하고, 안드로이드 시스템에서 제공하는 샌드박스 기능을 이용하여 안전하게 보호해야 한다.

출처

1. https://developer.android.com/guide/components/activities/intro-activities?hl=ko

 

 

반응형