Everything is hacked.

There is no 100 % security.

Tools/Android

Run DeepLink Pentesting Android

Kai_HT 2025. 6. 9. 02:06

https://www.android.com/

모의해킹 실무에서 사용하던 취약점 중 하나가 '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) 정보에 대한 확인이 가능하다.

AndroidManifest.xml

 노출된 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 를 이용한 딥링크 호출 명령이다.

adb shell am start -a android.intent.action.VIEW -d "[DeepLinkURI]://AttackerSite.kr/"

해당 명령을 이용하여 앱이 실행 여부를 이용하여 딥링크 임의 실행 여부를 파악할 수 있으며, 작성한 값 - redsec.kaiht.kr/WebServer/ 으로 앱으로 전달하는 것을 확인할 수 있다.

AndroidStudio 내 Logcat
Target Application 실행 화면

필자 본인이 딥링크 요청 시, 전달하는 값은 본인의 웹사이트 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