모의해킹 실무에서 사용하던 취약점 중 하나가 'Activity 강제 실행' 을 이용한 취약점이 존재한다.
해당 취약점은 앱 내 존재하는 Activity 중 실행 가능한 Activity 를 임의 실행하여, 서비스 권한을 얻거나 특정 구간을 우회하는 것에서 사용한다.
adb shell am start -n $package/$actName
해당 명령을 디바이스가 연결된 PC 터미널에서 입력하여 실행시킬 수 있으며, 해당 명령을 이용하여 bash 파일로 작성하는 경우 다음과 같이 작성할 수 있다.
#!/bin/bash
echo "-----------------------------------"
echo "[+] Activate Application's Activity"
echo "[+] Starting App's Activity"
echo "[*] Input PackageName to Run: "
read package
echo "[+] Writing PackageName is $package from user"
echo .
echo "[*] Input Activity Name to Run: "
read actName
echo .
am start -n $package/$actName
echo "-----------------------------------"
단순하게 안드로이드 어플리케이션 내 존재하는 Activity 만 실행하여 검증하는 것이 목표라면 해당 코드로 충분히 취약점 체크가 가능하나, 현재 확인하려는 것은 딥링크나 Intent 실행 검증이다.
Activity 실행 우회 취약점, Intent Injection 취약점, 그리고 딥링크 검증 미흡 이 3개의 취약점에 대한 공통점이 존재한다.
1. 컴포넌트 간 통신 취약점
- Activity와 서비스, 그리고 브로드케스트 리시버 (Receiver) 간 Intent 통신 메커니즘이 사용됨.
- Android 시스템의 암기적/명시적 Intent 처리 방식과 연관됨.
2. 우회 공격 가능성
- 권한 없는 기능 실행이 가능
- CWE-940 (Improper Verification of Intent by Broadcast Receiver) 관련
3. 검증 부재 핵심 원인
- 입력 값 검증 누락 - 화이트리스트 및 블랙리스트 미구현
- Intent 필드 (action, data, extra) 에 대한 검증 미구현
위 세 가지가 공통점인데, 해당 취약점에 대한 가장 큰 공통점은 바로 컴포넌트간 통신의 메커니즘이 동일한 방법으로 사용된다는 것이다. 따라서 셋다 adb shell am start ~~ 형식으로 취약점에 대한 검증이 가능하며, 예시는 다음과 같다.
1. Activity 실행 검증 취약점 검증 코드:
adb shell am start -n $package/$actName
2. Intent Injection 취약점 검증 코드:
adb shell am start -n $package/$actName --es url "http://HackerSite.com"
3. 딥링크 검증 미흡 취약점 검증 코드:
adb shell am start -a android.intent.action.VIEW -d "testingapp://path?url=http://HackerSite.com"
세 개다 앱을 실행시키는 것을 목적으로 코드가 작성되고 수행된다.
Acitivity 실행 검증 취약점은 직접적으로 패키지명과 Activitiy 명을 호출해서, Intent Injection 은 직접 호출하며 HackerSite.com 을 불러오는 것으로, 그리고 딥링크 검증 미흡 취약점의 경우 안드로이드 Intent action VIEW 를 실행하여 어플리케이션의 딥링크 testingapp 을 호출해 실행하게된다.
그러나 몇 가지 다른 점이 있는 것을 알 수 있는데, .다른 점은 다음과 같다.
구분 | Intent Injection | 딥링크 검증 미흡 | Activity 실행 우회 |
공격 벡터 | 다른 앱 → 타겟 앱 | 딥링크 URI 호출 | Activity 직접 실행 |
주요 영향 범위 | Intent 수신 컴포넌트 | 딥링크 핸들러 | 모든 Exported 컴포넌트 |
대표 시나리오 | WebView Javascript 인터페이스 악용 | intent:// 체계 미검증 | android:exported=true 과다 설정 |
검증 포인트 | Intent.get*() | URI 파라미터/구조 분석 | 컴포넌트 노출 필요성 검토 |
Intent Injection 의 경우 Activity 실행 우회 취약점과 딥링크 검증 미흡 취약점은 앱이 외부 - 악성 앱이나 adb 등에서 전달된 Intent 및 Activity 가 직접적으로 수행되어 실행되는 것과 다르게 intent 실행 컴포넌트로 부터 딥링크(URI) 값이 전달되어 간접적으로 실행된다는 점에서 우선 다르다.
또한 Intent Injection 은 Intent 객체 자체의 속성 및 Extra 데이터 조작, Activity 실행 우회 취약점은 Activity 객체 속성 및 Extra 데이터 조작에서 가능하나 딥링크 검증 미흡 취약점은 URI(딥링트) 파라미터 조작 및 전달, 그리고 외부 링크를 통한 진입에서부터 조작이 되는 점이다.
위에서 간단하게 (?) 비슷한 세개의 취약점에 대해 공통점과 차이점을 서술했고, 이제 딥링크 취약점은 어떻게 수행하여 검증할 수 있는지 확인해보자.
대상 앱을 디컴파일 해보거나 앱 패키지 내 AndroidManifext.xml 파일을 확인해보면 Exported 값이 true 로 설정된 Activity 를 확인이 가능하며, 사용가능한 intent 들과 딥링크 (URI) 정보에 대한 확인이 가능하다.
노출된 Intent 값, 그리고 URI 값을 이용하여 해당 앱의 실행 여부 체킹이 가능하다.
호출 코드:
adb shell am start -a android.intent.action.VIEW -d "[DeepLinkURI]://path?url=https://HackerSites"
adb shell am start -n [TargetApplicationID]/[TargetApplicationActivity] -d "[ApplicationURI]://path?url=https://HackerSites"
adb shell am start -a android.intent.action.VIEW -d "[DeepLinkURI]://Test"
가장 간단한 딥링크 실행은 세 번째 명령이며, 첫 번째 코드는 임의 Intent 경로를 이용한 딥링크 호출, 그리고 두 번째 명령의 경우 실행 가능 Activity 를 이용한 딥링크 호출 명령이다.
해당 명령을 이용하여 앱이 실행 여부를 이용하여 딥링크 임의 실행 여부를 파악할 수 있으며, 작성한 값 - redsec.kaiht.kr/WebServer/ 으로 앱으로 전달하는 것을 확인할 수 있다.
필자 본인이 딥링크 요청 시, 전달하는 값은 본인의 웹사이트 URL 값이나 해당 값에 대한 처리 구간 별도로 존재하지 않아 해당 사이트로 직접적인 요청이 가지 않는 것을 확인하였다. 본 앱을 이용한 임의 사이트 접근 등에 대해서는 이후 별도 게시글을 통해 정리해볼 예정이다.
- Android 모바일 딥링크 점검 도구 참고:
GitHub - KaiHT-Ladiant/Pentest-DeepLink-Application-in-Android: An app that tests deep link vulnerabilities for specific applica
An app that tests deep link vulnerabilities for specific applications within Android devices. - KaiHT-Ladiant/Pentest-DeepLink-Application-in-Android
github.com
'Tools > Android' 카테고리의 다른 글
Include Burpsuite Certification in Android Devices (Feat. TWRP) (0) | 2025.04.03 |
---|---|
TWRP ROM Install with Original Android Firmware without rooting (0) | 2025.04.03 |
Unlock Android Screen With TWRP (0) | 2025.03.13 |
Android Custome Firmware Lineage Update (0) | 2025.03.13 |
ADB Attach From Multi Device (0) | 2025.02.20 |