Translated ['src/mobile-pentesting/android-app-pentesting/android-task-h

This commit is contained in:
Translator 2025-07-30 08:13:10 +00:00
parent 3fcca29c9e
commit 619016f2cc

View File

@ -4,13 +4,13 @@
## 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 edilir. 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 da onu **ön planda görev** haline getirir.
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** şimdi ön plandadır.
- **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](<../../images/image (698).png>)
@ -19,15 +19,15 @@ Aktivite geçişlerinin hızlı bir özeti:
## Görev yakınlığı saldırıları
`taskAffinity`, Android'e bir `Activity`'nin hangi göreve *ait olmayı 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**.
`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 gelse 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*, uygulamayı Android 11 öncesi sürümlerde görev ele geçirmeye açık bırakır.
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ığı sürece). 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 bir aktiviteyi şu şekilde tanımlar:
1. Saldırgan, aşağıdaki gibi bir aktivite tanımlar:
```xml
<activity android:name=".EvilActivity"
android:exported="true"
@ -39,7 +39,7 @@ android:launchMode="singleTask" >
</intent-filter>
</activity>
```
2. 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. Kötü niyetli uygulama bir kez başlatılır, böylece (sahte yakınlığa sahip) görev son görevler içinde var olur.
3. 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.
4. Saldırganın arayüzü ilk olarak gösterilir.
@ -52,7 +52,7 @@ android:launchMode="singleTask" >
class HackActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
moveTaskToBack(true) // görevi görünmez ama son görevler arasında tut
moveTaskToBack(true) // görevi son görevlerde tut ama görünmez yap
}
}
```
@ -70,26 +70,65 @@ android:taskAffinity="com.caller.id.phone.number.block" >
3. 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).
4. 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ştirmez, bu da bu belirli varyantı azaltır. Eski sürümler hala savunmasızdır.
> NOT: **Android 11 (API 30)** ile birlikte sistem, varsayılan olarak aynı UID'nin parçası olmayan iki paketi aynı göreve yerleştirmez, bu belirli varyantı azaltır. 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 gerçekleştirilebilir ve görevlerin *yakınlığı* ile paket adı farklı olan şüpheli aktiviteleri izleyerek yapılabilir.
Eski cihazlar için azaltma, klasik Görev Ele Geçirme ile aynıdır **artı** çalışma zamanı doğrulaması (örneğin, [`ActivityManager#getRunningTasks`](https://developer.android.com/reference/android/app/ActivityManager#getRunningTasks(int)) çağrısı yaparak ve kendi paket adınızı doğrulayarak).
---
## Tespit & Sömürü kontrol listesi
1. Hedef APK'den `AndroidManifest.xml` dosyasını çekin ve her `<activity>` (veya global `<application>` öğesi) için `android:taskAffinity=""` (boş) **veya** özelleştirilmiş bir değer içerip içermediğini kontrol edin.
2. Eğer değilse, kötü niyetli bir uygulama oluşturun:
- `android:taskAffinity` = kurban paket adı.
- Kullanıcının bir kez açabilmesi için bir `MAIN/LAUNCHER` niyeti sağlayın.
- İsteğe bağlı olarak hemen gizlemek için `moveTaskToBack(true)` çağrısı yapın.
3. Kurbanın meşru uygulamasını açmasına izin verin → ele geçirme.
1. **Statik inceleme** Hedef APK'dan `AndroidManifest.xml` dosyasını çekin ve her `<activity>` (veya global `<application>` öğesi) için `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
```
2. **Dinamik inceleme** Cihazda hedef uygulamayıı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](https://github.com/WithSecureLabs/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
```
---
## Azaltma
Geliştiriciler şunları yapmalıdır:
* `<application>` seviyesinde `android:taskAffinity=""`ıkça ayarlamak (önerilir) **veya** her aktiviteye benzersiz, özel bir yakınlık vermek.
* `<application>` seviyesinde `android:taskAffinity=""`'yiı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`](https://developer.android.com/reference/android/content/pm/ActivityInfo#launchMode) 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 aldatması) ile birleştirilir veya onunla değiştirilir. 2025 **TapTrap** araştırması, tamamen şeffaf *animasyon destekli* aktivitelerin Android 1214'te tanıtılan overlay dokunma kısıtlamalarını aşabileceğini ve kullanıcıları tehlikeli izinler vermeye ikna edebileceğ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.
---
@ -99,5 +138,7 @@ Geliştiriciler şunları yapmalıdır:
- [https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html](https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html)
- [Android Manifest Misconfiguration Leading to Task Hijacking in Caller ID app](https://github.com/KMov-g/androidapps/blob/main/caller.id.phone.number.block.md)
- [https://medium.com/mobile-app-development-publication/the-risk-of-android-strandhogg-security-issue-and-how-it-can-be-mitigated-80d2ddb4af06](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](https://promon.io/resources/downloads/strandhogg-2-0-new-serious-android-vulnerability)
- [USENIX 2025 TapTrap: Animation-Driven Tapjacking on Android](https://www.usenix.org/conference/usenixsecurity25/presentation/beer)
{{#include ../../banners/hacktricks-training.md}}