hacktricks/mobile-pentesting/ios-pentesting/ios-testing-environment.md

11 KiB
Raw Blame History

iOS Testing Environment

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %} {% endhint %}

Apple Developer Program

Bir provisioning identity, bir Apple geliştirici hesabıyla ilişkili olan bir dizi genel ve özel anahtardır. Uygulamaları imzalamak için 99$/yıl ödeyerek Apple Developer Program'a kaydolmanız gerekir. Bunu yapmadan, bir fiziksel cihazda kaynak kodundan uygulamaları çalıştıramazsınız. Bunu yapmanın bir diğer seçeneği ise jailbroken bir cihaz kullanmaktır.

Xcode 7.2 ile birlikte Apple, gerçek bir iPhone'da uygulamanızı yazmanıza ve test etmenize olanak tanıyan ücretsiz bir iOS geliştirme provisioning profili oluşturma seçeneği sunmuştur. Xcode --> Preferences --> Accounts --> + (Kimlik bilgilerinizi ekleyin) --> Oluşturduğunuz Apple ID'ye tıklayın --> Manage Certificates --> + (Apple Development) --> Done
__Daha sonra, uygulamanızı iPhone'unuzda çalıştırmak için önce iPhone'un bilgisayarı güvenilir olarak göstermesini sağlamanız gerekir. Ardından, Xcode'dan mobilde uygulamayı çalıştırmayı deneyebilirsiniz, ancak bir hata görünecektir. Bu nedenle Settings --> General --> Profiles and Device Management --> Güvenilmeyen profili seçin ve "Trust" butonuna tıklayın.

Aynı imzalama sertifikasıyla imzalanmış uygulamalar, güvenli bir şekilde kaynakları paylaşabilir, örneğin anahtar zinciri öğeleri.

Provisioning profilleri telefonun içinde /Library/MobileDevice/ProvisioningProfiles dizininde saklanır.

Simulator

{% hint style="info" %} Bir simülatörün emülatörle aynı olmadığını unutmayın. Simülatör, cihazın davranışını ve işlevlerini simüle eder, ancak bunları gerçekten kullanmaz. {% endhint %}

Simulator

Bilmeniz gereken ilk şey, bir simülatör içinde pentest yapmanın, jailbreak yapılmış bir cihazda yapmaktan çok daha sınırlı olacağıdır.

iOS uygulaması oluşturmak ve desteklemek için gereken tüm araçlar sadece resmi olarak Mac OS'ta desteklenmektedir.
Apple'ın iOS uygulamalarını oluşturmak/ayarlarını düzeltmek/geliştirmek için kullanılan de facto aracı Xcode'dur. Uygulamanızı oluşturmak ve test etmek için gereken diğer bileşenleri, örneğin simülatörler ve farklı SDK sürümlerini indirmek için kullanılabilir.
Xcode'u resmi uygulama mağazasından indirmek şiddetle tavsiye edilir. Diğer sürümler kötü amaçlı yazılım içerebilir.

Simülatör dosyaları /Users/<username>/Library/Developer/CoreSimulator/Devices dizininde bulunabilir.

Simülatörü açmak için Xcode'u çalıştırın, ardından Xcode sekmesine basın --> Open Developer tools --> Simulator
__Aşağıdaki resimde "iPod touch [...]" üzerine tıklayarak test etmek için başka bir cihaz seçebilirsiniz:

Simülatördeki Uygulamalar

/Users/<username>/Library/Developer/CoreSimulator/Devices dizininde tüm kurulu simülatörleri bulabilirsiniz. Emülatörlerden birinde oluşturulmuş bir uygulamanın dosyalarına erişmek istiyorsanız, uygulamanın hangi emülatörde kurulu olduğunu bilmek zor olabilir. Doğru UID'yi bulmanın hızlı bir yolu, simülatörde uygulamayı çalıştırmak ve şunu yürütmektir:

xcrun simctl list | grep Booted
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)

Once you know the UID the apps installed within it can be found in /Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application

Ancak, şaşırtıcı bir şekilde burada uygulamayı bulamayacaksınız. /Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/ adresine erişmeniz gerekiyor.

Ve bu klasörde uygulamanın paketini bulabilirsiniz.

Emulator

Corellium, kamuya açık tek iOS emülatörüdür. Kullanıcı başına lisans modeli ile bir kurumsal SaaS çözümüdür ve herhangi bir deneme lisansı sunmamaktadır.

Jailbeaking

Apple, iPhone'da çalışan kodun Apple tarafından verilen bir sertifika ile imzalanmasını kesinlikle gerektirir. Jailbreaking, OS tarafından konulan bu tür kısıtlamaları ve diğer güvenlik kontrollerini aşma sürecidir. Bu nedenle, cihaz jailbreak edildiğinde, uygulamaların yüklenmesini kontrol eden bütünlük kontrolü yamanır, böylece bypass edilir.

{% hint style="info" %} Android'in aksine, iOS'ta cihazda imzasız/güvenilmeyen kod çalıştırmak için "Geliştirici Modu"na geçemezsiniz. {% endhint %}

Android Rooting vs. iOS Jailbreaking

Sıklıkla karşılaştırılsa da, Android'de rooting ve iOS'ta jailbreaking temelde farklı süreçlerdir. Android cihazlarda su ikili dosyasını yüklemek veya sistemi köklü bir özel ROM ile değiştirmek gibi işlemler, bootloader kilidi açıldığında mutlaka istismar gerektirmeyebilir. Özel ROM'ların yüklenmesi, bootloader kilidi açıldıktan sonra cihazın işletim sistemini değiştirir ve bazen bir istismar gerektirebilir.

Buna karşılık, iOS cihazları, bootloader'ın yalnızca Apple imzalı görüntüleri başlatma kısıtlaması nedeniyle özel ROM'ları yükleyemez. iOS'u jailbreak etmek, imzasız kod çalıştırmak için Apple'ın kod imzalama korumalarını aşmayı hedefler; bu süreç, Apple'ın sürekli güvenlik iyileştirmeleri ile karmaşıklaşır.

Jailbreaking Challenges

iOS'u jailbreak etmek, Apple'ın güvenlik açıklarını hızla yamalaması nedeniyle giderek zorlaşmaktadır. iOS'u düşürmek, bir sürümden sonra sınırlı bir süre için mümkündür ve bu da jailbreak işlemini zaman açısından hassas hale getirir. Güvenlik testi için kullanılan cihazlar, yeniden jailbreak garantisi verilmedikçe güncellenmemelidir.

iOS güncellemeleri, yalnızca Apple imzalı yanıtlar için yüklemeye izin veren bir challenge-response mekanizması (SHSH blobları) ile kontrol edilir. "İmzalama penceresi" olarak bilinen bu mekanizma, OTA firmware paketlerini depolama ve daha sonra kullanma yeteneğini sınırlar. IPSW Downloads web sitesi, mevcut imzalama pencerelerini kontrol etmek için bir kaynaktır.

Jailbreak Varieties

  • Tethered jailbreaks, her yeniden başlatma için bir bilgisayar bağlantısı gerektirir.
  • Semi-tethered jailbreaks, bilgisayar olmadan jailbreak edilmemiş moda geçişe izin verir.
  • Semi-untethered jailbreaks, bilgisayar gerektirmeden manuel yeniden jailbreak etmeyi gerektirir.
  • Untethered jailbreaks, yeniden uygulama gerektirmeden kalıcı bir jailbreak çözümü sunar.

Jailbreaking Tools and Resources

Jailbreaking araçları, iOS sürümüne ve cihaza göre değişir. Can I Jailbreak?, The iPhone Wiki ve Reddit Jailbreak gibi kaynaklar güncel bilgiler sağlar. Örnekler:

  • A7-A11 çipli cihazlar için Checkra1n.
  • iOS 15.0-16.5'te Checkm8 cihazları için Palera1n.
  • iOS sürümleri için Unc0ver 14.8'e kadar.

Cihazınızı değiştirmek risk taşır ve jailbreak işlemi dikkatle yaklaşılmalıdır.

Jailbreaking Benefits and Risks

Jailbreaking, OS tarafından dayatılan sandboxing'i kaldırır, uygulamaların tüm dosya sistemine erişmesine izin verir. Bu özgürlük, onaylanmamış uygulamaların yüklenmesini ve daha fazla API'ye erişimi sağlar. Ancak, normal kullanıcılar için, potansiyel güvenlik riskleri ve cihaz kararsızlığı nedeniyle jailbreak tavsiye edilmez.

After Jailbreaking

{% content-ref url="basic-ios-testing-operations.md" %} basic-ios-testing-operations.md {% endcontent-ref %}

Jailbreak Detection

Birçok uygulama, mobil cihazın jailbreak edilip edilmediğini tespit etmeye çalışacak ve bu durumda uygulama çalışmayacaktır.

  • Jailbreak işleminden sonra bir iOS'da dosyalar ve klasörler genellikle yüklenir, bu dosyalar cihazın jailbreak edilip edilmediğini belirlemek için aranabilir.
  • Jailbreak edilmiş bir cihazda uygulamalar, sandbox dışındaki yeni dosyalara okuma/yazma erişimi alır.
  • Bazı API çağrıları farklı davranacaktır.
  • OpenSSH hizmetinin varlığı.
  • /bin/sh çağrısı 0 yerine 1 döndürecektir.

Jailbreaking'i tespit etme yöntemleri hakkında daha fazla bilgi burada.

Bu tespitlerden kaçınmayı deneyebilirsiniz objection'ın ios jailbreak disable komutunu kullanarak.

Jailbreak Detection Bypass

  • Bu tespitlerden kaçınmayı deneyebilirsiniz objection'ın ios jailbreak disable komutunu kullanarak.
  • Ayrıca Liberty Lite (https://ryleyangus.com/repo/) aracını yükleyebilirsiniz. Repo eklendikten sonra, uygulama 'Arama' sekmesinde görünmelidir.

References

Support HackTricks
{% endhint %} {% endhint %}