iOS Pentesting
Last updated
Last updated
Koristite Trickest za lako kreiranje i automatizaciju radnih tokova pokretanih najnaprednijim alatima zajednice na svetu. Pribavite pristup danas:
Na ovoj stranici možete pronaći informacije o iOS simulatoru, emulatorima i jailbreak-u:
Tokom testiranja biće predložene nekoliko operacija (povezivanje sa uređajem, čitanje/pisanje/otpremanje/preuzimanje datoteka, korišćenje nekih alata...). Stoga, ako ne znate kako da izvršite neku od ovih radnji, molimo vas da počnete sa čitanjem stranice:
Za sledeće korake aplikacija treba da bude instalirana na uređaju i treba da je već dobila IPA datoteku aplikacije. Pročitajte stranicu Osnovne iOS Testne Operacije da biste naučili kako to da uradite.
Preporučuje se korišćenje alata MobSF za automatsku statičku analizu IPA datoteke.
Identifikacija zaštita prisutnih u binarnom kodu:
PIE (Position Independent Executable): Kada je omogućeno, aplikacija se učitava na nasumičnu adresu u memoriji svaki put kada se pokrene, što otežava predviđanje njene početne adrese u memoriji.
Stack Canaries: Da bi se proverila integritet stoga, ‘kanarin’ vrednost se postavlja na stog pre pozivanja funkcije i ponovo se proverava kada funkcija završi.
ARC (Automatic Reference Counting): Da bi se sprečili uobičajeni problemi sa oštećenjem memorije
Enkriptovana Binarna Datoteka: Binarna datoteka treba da bude enkriptovana
Identifikacija Osetljivih/Neosiguranih Funkcija
Slabi Hashing Algoritmi
Neosigurane Nasumične Funkcije
Neosigurana ‘Malloc’ Funkcija
Neosigurane i Ranljive Funkcije
Pogledajte dinamičku analizu koju vrši MobSF. Moraćete da se krećete kroz različite prikaze i interagujete sa njima, ali će se povezati sa nekoliko klasa dok radite druge stvari i pripremiće izveštaj kada završite.
Koristite komandu frida-ps -Uai
da odredite bundle identifier instaliranih aplikacija:
Naučite kako da enumerate the components of the application i kako lako da hook methods and classes sa objection:
Struktura IPA datoteke je suštinski kao zipped package. Preimenovanjem ekstenzije u .zip
, može se dekompresovati da bi se otkrio njen sadržaj. Unutar ove strukture, Bundle predstavlja potpuno upakovanu aplikaciju spremnu za instalaciju. Unutra, naći ćete direktorijum nazvan <NAME>.app
, koji obuhvata resurse aplikacije.
Info.plist
: Ova datoteka sadrži specifične konfiguracione detalje aplikacije.
_CodeSignature/
: Ovaj direktorijum uključuje plist datoteku koja sadrži potpis, osiguravajući integritet svih datoteka u paketu.
Assets.car
: Kompresovana arhiva koja čuva datoteke resursa kao što su ikone.
Frameworks/
: Ova fascikla sadrži nativne biblioteke aplikacije, koje mogu biti u obliku .dylib
ili .framework
datoteka.
PlugIns/
: Ovo može uključivati ekstenzije aplikacije, poznate kao .appex
datoteke, iako nisu uvek prisutne. * Core Data
: Koristi se za čuvanje trajnih podataka vaše aplikacije za offline korišćenje, za keširanje privremenih podataka i za dodavanje funkcionalnosti poništavanja u vašu aplikaciju na jednom uređaju. Da bi se podaci sinhronizovali između više uređaja u jednom iCloud nalogu, Core Data automatski odražava vašu šemu u CloudKit kontejneru.
PkgInfo
: PkgInfo
datoteka je alternativni način za određivanje tipa i kodova kreatora vaše aplikacije ili paketa.
en.lproj, fr.proj, Base.lproj: Su paketi jezika koji sadrže resurse za te specifične jezike, i podrazumevani resurs u slučaju da je jezik nije podržan.
Bezbednost: Direktorijum _CodeSignature/
igra ključnu ulogu u bezbednosti aplikacije verifikovanjem integriteta svih pakovanih datoteka putem digitalnih potpisa.
Upravljanje Resursima: Datoteka Assets.car
koristi kompresiju za efikasno upravljanje grafičkim resursima, što je ključno za optimizaciju performansi aplikacije i smanjenje njene ukupne veličine.
Frameworks i PlugIns: Ovi direktorijumi naglašavaju modularnost iOS aplikacija, omogućavajući programerima da uključe ponovo upotrebljive biblioteke koda (Frameworks/
) i prošire funkcionalnost aplikacije (PlugIns/
).
Lokalizacija: Struktura podržava više jezika, olakšavajući globalni doseg aplikacije uključivanjem resursa za specifične jezičke pakete.
Info.plist
Info.plist služi kao kamen temeljac za iOS aplikacije, obuhvatajući ključne konfiguracione podatke u obliku key-value parova. Ova datoteka je neophodna ne samo za aplikacije već i za ekstenzije aplikacija i frameworke koji su upakovani unutar. Struktuirana je u XML ili binarnom formatu i sadrži kritične informacije od dozvola aplikacije do bezbednosnih konfiguracija. Za detaljno istraživanje dostupnih ključeva, možete se obratiti Apple Developer Documentation.
Za one koji žele da rade sa ovom datotekom u pristupačnijem formatu, konverzija u XML može se lako postići korišćenjem plutil
na macOS-u (dostupno nativno na verzijama 10.2 i novijim) ili plistutil
na Linuxu. Komande za konverziju su sledeće:
Za macOS:
Za Linux:
Među bezbrojnim informacijama koje Info.plist datoteka može otkriti, značajni unosi uključuju stringove dozvola aplikacije (UsageDescription
), prilagođene URL sheme (CFBundleURLTypes
), i konfiguracije za App Transport Security (NSAppTransportSecurity
). Ovi unosi, zajedno sa drugim poput eksportovanih/importovanih prilagođenih tipova dokumenata (UTExportedTypeDeclarations
/ UTImportedTypeDeclarations
), mogu se lako pronaći pregledanjem datoteke ili korišćenjem jednostavne grep
komande:
Putanje podataka
U iOS okruženju, direktorijumi su posebno određeni za sistemske aplikacije i aplikacije instalirane od strane korisnika. Sistemske aplikacije se nalaze u direktorijumu /Applications
, dok se aplikacije instalirane od strane korisnika nalaze pod /var/mobile/containers/Data/Application/
. Ove aplikacije imaju jedinstveni identifikator poznat kao 128-bitni UUID, što otežava ručno lociranje fascikle aplikacije zbog nasumičnosti imena direktorijuma.
Kako aplikacije u iOS moraju biti u sandboxu, svaka aplikacija će takođe imati fasciklu unutar $HOME/Library/Containers
sa CFBundleIdentifier
aplikacije kao imenom fascikle.
Međutim, obe fascikle (fascikle podataka i kontejnera) imaju datoteku .com.apple.mobile_container_manager.metadata.plist
koja povezuje obe datoteke u ključnoj reči MCMetadataIdentifier
).
Da bi se olakšalo otkrivanje direktorijuma instalacije aplikacije instalirane od strane korisnika, objection alat pruža korisnu komandu, env
. Ova komanda otkriva detaljne informacije o direktorijumu za dotičnu aplikaciju. Ispod je primer kako koristiti ovu komandu:
Alternativno, ime aplikacije može se pretraživati unutar /private/var/containers
koristeći find
komandu:
Komande kao što su ps
i lsof
se takođe mogu koristiti za identifikaciju procesa aplikacije i listanje otvorenih fajlova, redom, pružajući uvide u aktivne putanje direktorijuma aplikacije:
Bundle directory:
AppName.app
Ovo je Application Bundle kao što je viđeno ranije u IPA, sadrži osnovne podatke aplikacije, statički sadržaj kao i kompajlirani binarni fajl aplikacije.
Ova direktorija je vidljiva korisnicima, ali korisnici ne mogu pisati u nju.
Sadržaj u ovoj direktoriji nije backup-ovan.
Sadržaj ove fascikle se koristi za validaciju potpisa koda.
Data directory:
Documents/
Sadrži sve podatke koje generišu korisnici. Krajnji korisnik aplikacije pokreće kreiranje ovih podataka.
Vidljiva korisnicima i korisnici mogu pisati u nju.
Sadržaj u ovoj direktoriji je backup-ovan.
Aplikacija može onemogućiti putanje postavljanjem NSURLIsExcludedFromBackupKey
.
Library/
Sadrži sve fajlove koji nisu specifični za korisnika, kao što su kešovi, preferencije, kolačići i konfiguracione datoteke (plist).
iOS aplikacije obično koriste poddirektorijume Application Support
i Caches
, ali aplikacija može kreirati prilagođene poddirektorijume.
Library/Caches/
Sadrži polu-permanentne keširane fajlove.
Nevidljiva korisnicima i korisnici ne mogu pisati u nju.
Sadržaj u ovoj direktoriji nije backup-ovan.
OS može automatski obrisati fajlove iz ove direktorije kada aplikacija nije pokrenuta i kada je prostor za skladištenje nizak.
Library/Application Support/
Sadrži permanentne fajlove neophodne za rad aplikacije.
Nevidljiva korisnicima i korisnici ne mogu pisati u nju.
Sadržaj u ovoj direktoriji je backup-ovan.
Aplikacija može onemogućiti putanje postavljanjem NSURLIsExcludedFromBackupKey
.
Library/Preferences/
Koristi se za čuvanje svojstava koja mogu ostati čak i nakon ponovnog pokretanja aplikacije.
Informacije se čuvaju, nešifrovane, unutar sandbox-a aplikacije u plist datoteci pod nazivom [BUNDLE_ID].plist.
Svi parovi ključ/vrednost sačuvani koristeći NSUserDefaults
mogu se naći u ovoj datoteci.
tmp/
Koristite ovu direktoriju za pisanje privremenih fajlova koji ne moraju da opstanu između pokretanja aplikacije.
Sadrži nepermanentne keširane fajlove.
Nevidljiva korisnicima.
Sadržaj u ovoj direktoriji nije backup-ovan.
OS može automatski obrisati fajlove iz ove direktorije kada aplikacija nije pokrenuta i kada je prostor za skladištenje nizak.
Hajde da bliže pogledamo Application Bundle (.app) direktoriju iGoat-Swift unutar Bundle direktorije (/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app
):
Unutar <application-name>.app
fascikle naći ćete binarni fajl pod nazivom <application-name>
. Ovo je fajl koji će biti izvršen. Možete izvršiti osnovnu inspekciju binarnog fajla pomoću alata otool
:
Proverite da li je aplikacija enkriptovana
Pogledajte da li ima nekog izlaza za:
Disassembling the binary
Disassemble the text section:
Da bi se odštampao Objective-C segment uzorka aplikacije, može se koristiti:
Da biste dobili kompaktiniji Objective-C kod, možete koristiti class-dump:
Međutim, najbolje opcije za dekompilaciju binarnog koda su: Hopper i IDA.
Koristite Trickest za lako kreiranje i automatizaciju radnih tokova pokretanih najnaprednijim alatima zajednice na svetu. Pribavite pristup danas:
Da biste saznali kako iOS skladišti podatke na uređaju, pročitajte ovu stranicu:
Sledeća mesta za skladištenje informacija treba proveriti odmah nakon instalacije aplikacije, nakon provere svih funkcionalnosti aplikacije i čak nakon odjave jednog korisnika i prijave drugog. Cilj je pronaći nezaštićene osetljive informacije aplikacije (lozinke, tokeni), trenutnog korisnika i prethodno prijavljenih korisnika.
plist datoteke su strukturirane XML datoteke koje sadrže parove ključ-vrednost. To je način za skladištenje trajnih podataka, tako da ponekad možete pronaći osetljive informacije u ovim datotekama. Preporučuje se da proverite ove datoteke nakon instalacije aplikacije i nakon intenzivnog korišćenja da vidite da li su napisani novi podaci.
Najčešći način za trajno skladištenje podataka u plist datotekama je korišćenjem NSUserDefaults. Ova plist datoteka se čuva unutar sandbox-a aplikacije u Library/Preferences/<appBundleID>.plist
Klasa NSUserDefaults
pruža programski interfejs za interakciju sa podrazumevanim sistemom. Podrazumevani sistem omogućava aplikaciji da prilagodi svoje ponašanje prema preferencama korisnika. Podaci sačuvani pomoću NSUserDefaults
mogu se pregledati u paketu aplikacije. Ova klasa skladišti podatke u plist datoteci, ali je namenjena za korišćenje sa malim količinama podataka.
Ovi podaci više ne mogu biti direktno dostupni putem pouzdanog računara, ali se mogu pristupiti izvođenjem backup-a.
Možete izvući informacije sačuvane korišćenjem NSUserDefaults
koristeći objection-ov ios nsuserdefaults get
Da biste pronašli sve plist datoteke koje koristi aplikacija, možete pristupiti /private/var/mobile/Containers/Data/Application/{APPID}
i pokrenuti:
Da biste konvertovali datoteke iz XML ili binarnog (bplist) formata u XML, dostupne su različite metode u zavisnosti od vašeg operativnog sistema:
Za korisnike macOS-a: Iskoristite plutil
komandu. To je ugrađeni alat u macOS-u (10.2+), dizajniran za ovu svrhu:
Za Linux korisnike: Prvo instalirajte libplist-utils
, a zatim koristite plistutil
da konvertujete vaš fajl:
Unutar Objection sesije: Za analizu mobilnih aplikacija, specifična komanda vam omogućava da direktno konvertujete plist fajlove:
Core Data
je okvir za upravljanje model slojem objekata u vašoj aplikaciji. Core Data može koristiti SQLite kao svoj trajni skladište, ali sam okvir nije baza podataka.
CoreData po defaultu ne enkriptuje svoje podatke. Međutim, dodatni sloj enkripcije može se dodati CoreData. Pogledajte GitHub Repo za više detalja.
Možete pronaći informacije o SQLite Core Data aplikacije na putanji /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support
Ako možete otvoriti SQLite i pristupiti osetljivim informacijama, onda ste pronašli pogrešnu konfiguraciju.
YapDatabase je skladište ključ/vrednost izgrađeno na vrhu SQLite-a. Pošto su Yap baze podataka sqlite baze, možete ih pronaći koristeći predloženu komandu u prethodnom odeljku.
Uobičajeno je da aplikacije kreiraju svoje vlastite sqlite baze podataka. Mogu čuvati osetljive podatke na njima i ostaviti ih nešifrovane. Stoga, uvek je zanimljivo proveriti svaku bazu podataka unutar direktorijuma aplikacija. Stoga idite u direktorijum aplikacije gde su podaci sačuvani (/private/var/mobile/Containers/Data/Application/{APPID}
)
Razvijači mogu čuvati i sinhronizovati podatke unutar NoSQL cloud-hosted baze podataka putem Firebase Real-Time Databases. Podaci se čuvaju u JSON formatu i sinhronizuju se svim povezanim klijentima u realnom vremenu.
Možete pronaći kako da proverite pogrešno konfigurisane Firebase baze podataka ovde:
Realm Objective-C i Realm Swift nude moćnu alternativu za čuvanje podataka, koju Apple ne pruža. Po defaultu, čuvaju podatke nešifrovane, a šifrovanje je dostupno kroz specifičnu konfiguraciju.
Baze podataka se nalaze na: /private/var/mobile/Containers/Data/Application/{APPID}
. Da biste istražili ove datoteke, možete koristiti komande kao:
Za pregled ovih datoteka baze podataka, preporučuje se alat Realm Studio.
Za implementaciju enkripcije unutar Realm baze podataka, može se koristiti sledeći kod:
Couchbase Lite se opisuje kao lagani i ugrađeni sistem za upravljanje bazama podataka koji prati orijentisani na dokumente (NoSQL) pristup. Dizajniran da bude nativan za iOS i macOS, nudi mogućnost besprekornog sinhronizovanja podataka.
Da bi se identifikovale potencijalne Couchbase baze podataka na uređaju, sledeći direktorijum treba pregledati:
iOS čuva kolačiće aplikacija u Library/Cookies/cookies.binarycookies
unutar svake aplikacione fascikle. Međutim, programeri ponekad odluče da ih sačuvaju u keychain jer se pomenuti kolačić fajl može pristupiti u rezervnim kopijama.
Da biste pregledali kolačić fajl, možete koristiti ovaj python skript ili koristiti objection-ov ios cookies get
.
Takođe možete koristiti objection da konvertujete ove fajlove u JSON format i pregledate podatke.
Po defaultu, NSURLSession čuva podatke, kao što su HTTP zahtevi i odgovori u Cache.db bazi podataka. Ova baza podataka može sadržati osetljive podatke, ako su tokeni, korisnička imena ili bilo koje druge osjetljive informacije keširane. Da biste pronašli keširane informacije, otvorite direktorijum podataka aplikacije (/var/mobile/Containers/Data/Application/<UUID>
) i idite na /Library/Caches/<Bundle Identifier>
. WebKit keš se takođe čuva u Cache.db datoteci. Objection može otvoriti i interagovati sa bazom podataka pomoću komande sqlite connect Cache.db
, jer je to normalna SQLite baza.
Preporučuje se onemogućiti keširanje ovih podataka, jer može sadržati osjetljive informacije u zahtevu ili odgovoru. Sledeća lista prikazuje različite načine za postizanje ovog:
Preporučuje se ukloniti keširane odgovore nakon odjave. To se može uraditi pomoću metode koju je obezbedio Apple pod nazivom removeAllCachedResponses
. Možete pozvati ovu metodu na sledeći način:
URLCache.shared.removeAllCachedResponses()
Ova metoda će ukloniti sve keširane zahteve i odgovore iz Cache.db datoteke. 2. Ako ne trebate koristiti prednost kolačića, preporučuje se da jednostavno koristite .ephemeral konfiguracionu osobinu URLSession-a, koja će onemogućiti čuvanje kolačića i keševa.
Objekat konfiguracije ephemerne sesije je sličan podrazumevanoj konfiguraciji sesije (vidi podrazumevano), osim što odgovarajući objekat sesije ne čuva keševe, skladišta akreditiva ili bilo koje podatke vezane za sesiju na disku. Umesto toga, podaci vezani za sesiju se čuvaju u RAM-u. Jedini put kada ephemerna sesija zapisuje podatke na disk je kada joj kažete da zapiše sadržaj URL-a u datoteku.
3. Keš se takođe može onemogućiti postavljanjem politike keširanja na .notAllowed. To će onemogućiti čuvanje keša na bilo koji način, bilo u memoriji ili na disku.
Kad god pritisnete dugme za početnu stranu, iOS uzima snimak trenutnog ekrana kako bi mogao da izvrši prelaz na aplikaciju na mnogo glatkiji način. Međutim, ako su osetljivi podatci prisutni na trenutnom ekranu, biće sačuvani u slici (koja ostaje i nakon ponovnog pokretanja). Ovo su snimci koje možete takođe pristupiti dvostrukim dodirom na početnom ekranu da biste prešli između aplikacija.
Osim ako iPhone nije jailbreak-ovan, napadač treba da ima pristup uređaju otključanom da bi video ove snimke ekrana. Po defaultu, poslednji snimak se čuva u sandbox-u aplikacije u Library/Caches/Snapshots/
ili Library/SplashBoard/Snapshots
folderu (pouzdani računari ne mogu pristupiti datotečnom sistemu od iOS 7.0).
Jedan od načina da se spreči ovo loše ponašanje je da se stavi prazan ekran ili ukloni osjetljivi podatak pre nego što se uzme snimak koristeći funkciju ApplicationDidEnterBackground()
.
Sledeći je primer metode za otklanjanje problema koja će postaviti podrazumevani snimak ekrana.
Swift:
Objective-C:
Ovo postavlja pozadinsku sliku na overlayImage.png
kada je aplikacija u pozadini. Sprečava curenje osetljivih podataka jer će overlayImage.png
uvek zameniti trenutni prikaz.
Za pristup i upravljanje iOS keychain-om, dostupni su alati poput Keychain-Dumper, pogodnih za jailbroken uređaje. Pored toga, Objection pruža komandu ios keychain dump
za slične svrhe.
Klasa NSURLCredential je idealna za čuvanje osetljivih informacija direktno u keychain-u, zaobilazeći potrebu za NSUserDefaults ili drugim omotačima. Da bi se akreditivi sačuvali nakon prijave, koristi se sledeći Swift kod:
Da bi se izvukle ove sačuvane kredencijale, koristi se Objectionova komanda ios nsurlcredentialstorage dump
.
Sa iOS 8.0 i novijim verzijama, korisnici mogu instalirati prilagođene ekstenzije tastatura, koje se mogu upravljati pod Podešavanja > Opšte > Tastatura > Tastature. Iako ove tastature nude proširenu funkcionalnost, predstavljaju rizik od beleženja pritisaka tastera i slanja podataka na spoljne servere, iako su korisnici obavešteni o tastaturama koje zahtevaju pristup mreži. Aplikacije mogu, i treba, da ograniče korišćenje prilagođenih tastatura za unos osetljivih informacija.
Preporuke za Bezbednost:
Preporučuje se onemogućavanje tastatura trećih strana radi poboljšane bezbednosti.
Budite svesni funkcija automatskog ispravljanja i automatskih predloga podrazumevane iOS tastature, koje mogu sačuvati osetljive informacije u keš datotekama smeštenim u Library/Keyboard/{locale}-dynamic-text.dat
ili /private/var/mobile/Library/Keyboard/dynamic-text.dat
. Ove keš datoteke treba redovno proveravati na prisustvo osetljivih podataka. Preporučuje se resetovanje rečnika tastature putem Podešavanja > Opšte > Resetuj > Resetuj Rečnik Tastature za brisanje keširanih podataka.
Presretanje mrežnog saobraćaja može otkriti da li prilagođena tastatura prenosi pritiske tastera na daljinu.
UITextInputTraits protokol nudi svojstva za upravljanje automatskim ispravljanjem i sigurnim unosom teksta, što je od suštinskog značaja za sprečavanje keširanja osetljivih informacija. Na primer, onemogućavanje automatskog ispravljanja i omogućavanje sigurnog unosa teksta može se postići sa:
Pored toga, programeri bi trebalo da osiguraju da tekstualna polja, posebno ona za unos osetljivih informacija kao što su lozinke i PIN-ovi, onemoguće keširanje postavljanjem autocorrectionType
na UITextAutocorrectionTypeNo
i secureTextEntry
na YES
.
Debugging code often involves the use of logging. There's a risk involved as logovi mogu sadržati osetljive informacije. Previously, in iOS 6 and earlier versions, logs were accessible to all apps, posing a risk of sensitive data leakage. Sada, aplikacije su ograničene na pristup samo svojim logovima.
Despite these restrictions, an napadač sa fizičkim pristupom to an unlocked device can still exploit this by connecting the device to a computer and čitajući logove. It is important to note that logs remain on the disk even after the app's uninstallation.
To mitigate risks, it is advised to temeljno interagovati sa aplikacijom, exploring all its functionalities and inputs to ensure no sensitive information is being logged inadvertently.
When reviewing the app's source code for potential leaks, look for both predefinisane and prilagođene logovanje izjave using keywords such as NSLog
, NSAssert
, NSCAssert
, fprintf
for built-in functions, and any mentions of Logging
or Logfile
for custom implementations.
Apps log various pieces of information which can be sensitive. To monitor these logs, tools and commands like:
su korisni. Pored toga, Xcode pruža način za prikupljanje konzolnih logova:
Otvorite Xcode.
Povežite iOS uređaj.
Idite na Window -> Devices and Simulators.
Izaberite svoj uređaj.
Aktivirajte problem koji istražujete.
Koristite dugme Open Console da biste pregledali logove u novom prozoru.
Za naprednije logovanje, povezivanje sa shell-om uređaja i korišćenje socat može pružiti praćenje logova u realnom vremenu:
Slede komande za posmatranje log aktivnosti, što može biti neprocenjivo za dijagnostikovanje problema ili identifikovanje potencijalnog curenja podataka u logovima.
Koristite Trickest za lako kreiranje i automatizaciju radnih tokova pokretanih najnaprednijim alatima zajednice na svetu. Pribavite pristup danas:
Funkcije automatskog bekapa su integrisane u iOS, olakšavajući kreiranje kopija podataka uređaja putem iTunes (do macOS Catalina), Finder (od macOS Catalina nadalje) ili iCloud. Ovi bekapovi obuhvataju skoro sve podatke uređaja, osim veoma osetljivih elemenata kao što su detalji o Apple Pay-u i konfiguracije Touch ID-a.
Uključivanje instaliranih aplikacija i njihovih podataka u bekapove postavlja pitanje potencijalnog curenja podataka i rizika da modifikacije bekapa mogu promeniti funkcionalnost aplikacije. Preporučuje se da ne čuvate osetljive informacije u običnom tekstu unutar bilo kog direktorijuma aplikacije ili njenih poddirektorijuma kako biste umanjili ove rizike.
Fajlovi u Documents/
i Library/Application Support/
se po defaultu bekapuju. Programeri mogu isključiti specifične fajlove ili direktorijume iz bekapa koristeći NSURL setResourceValue:forKey:error:
sa NSURLIsExcludedFromBackupKey
. Ova praksa je ključna za zaštitu osetljivih podataka od uključivanja u bekapove.
Da biste procenili bezbednost bekapa aplikacije, počnite sa kreiranjem bekapa koristeći Finder, a zatim ga locirajte koristeći uputstva iz Apple-ove zvanične dokumentacije. Analizirajte bekap za osetljive podatke ili konfiguracije koje bi mogle biti promenjene da utiču na ponašanje aplikacije.
Osetljive informacije se mogu tražiti koristeći alate komandne linije ili aplikacije poput iMazing. Za enkriptovane bekapove, prisustvo enkripcije može se potvrditi proverom ključa "IsEncrypted" u "Manifest.plist" fajlu na korenu bekapa.
Za rad sa enkriptovanim backup-ima, Python skripte dostupne u DinoSec-ovom GitHub repozitorijumu, kao što su backup_tool.py i backup_passwd.py, mogu biti korisne, iako potencijalno zahtevaju prilagođavanje za kompatibilnost sa najnovijim verzijama iTunes/Finder-a. iOSbackup alat je još jedna opcija za pristup datotekama unutar zaštićenih backup-a.
Primer menjanja ponašanja aplikacije kroz modifikacije backup-a prikazan je u Bither bitcoin novčaniku, gde je UI zaključavanje PIN kod pohranjen unutar net.bither.plist
pod ključem pin_code. Uklanjanjem ovog ključa iz plist-a i vraćanjem backup-a uklanja se zahtev za PIN-om, omogućavajući neograničen pristup.
Kada se radi sa osetljivim informacijama pohranjenim u memoriji aplikacije, ključno je ograničiti vreme izlaganja ovih podataka. Postoje dva osnovna pristupa za istraživanje sadržaja memorije: kreiranje dump-a memorije i analiza memorije u realnom vremenu. Oba metoda imaju svoje izazove, uključujući potencijal da se propuste kritični podaci tokom procesa dump-a ili analize.
Za uređaje sa i bez jailbreak-a, alati kao što su objection i Fridump omogućavaju dump-ovanje memorije procesa aplikacije. Kada se dump-uje, analiza ovih podataka zahteva različite alate, u zavisnosti od prirode informacija koje tražite.
Da biste izvukli stringove iz dump-a memorije, mogu se koristiti komande kao što su strings
ili rabin2 -zz
:
Za detaljniju analizu, uključujući pretragu specifičnih tipova podataka ili obrazaca, radare2 nudi opsežne mogućnosti pretrage:
r2frida pruža moćnu alternativu za inspekciju memorije aplikacije u realnom vremenu, bez potrebe za dump-om memorije. Ovaj alat omogućava izvršavanje komandi pretrage direktno na memoriji pokrenute aplikacije:
Neki programeri čuvaju osetljive podatke u lokalnoj memoriji i enkriptuju ih sa ključem koji je hardkodiran/predvidljiv u kodu. To ne bi trebalo da se radi jer bi neki proces obrnute inženjeringa mogao omogućiti napadačima da izvuku poverljive informacije.
Programeri ne bi trebali koristiti zastarele algoritme za obavljanje provera autorizacije, čuvanje ili slanje podataka. Neki od ovih algoritama su: RC4, MD4, MD5, SHA1... Ako se hash koriste za čuvanje lozinki, na primer, treba koristiti hash koji je otporan na brute-force sa solju.
Glavne provere koje treba izvršiti su da se utvrdi da li možete pronaći hardkodirane lozinke/tajne u kodu, ili da li su one predvidljive, i da li kod koristi neku vrstu slabe kriptografije algoritama.
Zanimljivo je znati da možete pratiti neke crypto biblioteke automatski koristeći objection sa:
Za više informacija o iOS kriptografskim API-ima i bibliotekama, posetite https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography
Lokalna autentifikacija igra ključnu ulogu, posebno kada je u pitanju zaštita pristupa na udaljenom kraju putem kriptografskih metoda. Suština je da bez pravilne implementacije, mehanizmi lokalne autentifikacije mogu biti zaobiđeni.
Apple-ov Local Authentication framework i keychain pružaju robusne API-je za programere kako bi olakšali dijaloge za autentifikaciju korisnika i sigurno upravljali tajnim podacima, redom. Secure Enclave osigurava ID otiska prsta za Touch ID, dok Face ID zavisi od prepoznavanja lica bez kompromitovanja biometrijskih podataka.
Da bi integrisali Touch ID/Face ID, programeri imaju dva izbora API-ja:
LocalAuthentication.framework
za visoko-nivo korisničku autentifikaciju bez pristupa biometrijskim podacima.
Security.framework
za pristup uslugama keychain-a na nižem nivou, osiguravajući tajne podatke biometrijskom autentifikacijom. Različiti open-source wrapper-i olakšavaju pristup keychain-u.
Međutim, i LocalAuthentication.framework
i Security.framework
predstavljaju ranjivosti, jer prvenstveno vraćaju boolean vrednosti bez prenosa podataka za procese autentifikacije, što ih čini podložnim zaobilaženju (pogledajte Don't touch me that way, by David Lindner et al).
Da bi zatražili autentifikaciju od korisnika, programeri treba da koriste evaluatePolicy
metodu unutar LAContext
klase, birajući između:
deviceOwnerAuthentication
: Zatražuje Touch ID ili lozinku uređaja, neuspešno ako nijedno nije omogućeno.
deviceOwnerAuthenticationWithBiometrics
: Isključivo traži Touch ID.
Uspešna autentifikacija se označava boolean povratnom vrednošću iz evaluatePolicy
, ističući potencijalnu sigurnosnu slabost.
Implementacija lokalne autentifikacije u iOS aplikacijama uključuje korišćenje keychain API-ja za sigurno čuvanje tajnih podataka kao što su tokeni za autentifikaciju. Ovaj proces osigurava da podaci mogu biti dostupni samo korisniku, koristeći lozinku uređaja ili biometrijsku autentifikaciju poput Touch ID.
Keychain nudi mogućnost postavljanja stavki sa SecAccessControl
atributom, koji ograničava pristup stavci dok korisnik uspešno ne autentifikuje putem Touch ID ili lozinke uređaja. Ova funkcija je ključna za poboljšanje sigurnosti.
Ispod su primeri koda u Swift-u i Objective-C-u koji prikazuju kako sačuvati i preuzeti string iz keychain-a, koristeći ove sigurnosne funkcije. Primeri posebno pokazuju kako postaviti kontrolu pristupa da zahteva Touch ID autentifikaciju i osigurati da su podaci dostupni samo na uređaju na kojem su postavljeni, pod uslovom da je lozinka uređaja konfigurisana.
Sada možemo zatražiti sačuvani predmet iz keychain-a. Usluge keychain-a će prikazati dijalog za autentifikaciju korisniku i vratiti podatke ili nil u zavisnosti od toga da li je pružen odgovarajući otisak prsta ili ne.
Korišćenje okvira u aplikaciji takođe se može otkriti analizom liste deljenih dinamičkih biblioteka binarnog fajla aplikacije. To se može uraditi korišćenjem otool
:
Ako se LocalAuthentication.framework
koristi u aplikaciji, izlaz će sadržati obe sledeće linije (zapamtite da LocalAuthentication.framework
koristi Security.framework
u pozadini):
Ako se koristi Security.framework
, biće prikazan samo drugi.
Kroz Objection Biometrics Bypass, koji se nalazi na ovoj GitHub stranici, dostupna je tehnika za prevazilaženje LocalAuthentication mehanizma. Suština ovog pristupa uključuje korišćenje Frida za manipulaciju funkcijom evaluatePolicy
, osiguravajući da ona dosledno daje True
rezultat, bez obzira na stvarni uspeh autentifikacije. Ovo je posebno korisno za zaobilaženje neispravnih procesa biometrijske autentifikacije.
Da bi se aktiviralo ovo zaobilaženje, koristi se sledeća komanda:
Ova komanda pokreće sekvencu u kojoj Objection registruje zadatak koji efikasno menja ishod evaluatePolicy
provere na True
.
Primer korišćenja evaluatePolicy
iz DVIA-v2 aplikacije:
Da bi se postigao bypass lokalne autentifikacije, napisan je Frida skript. Ova skripta cilja evaluatePolicy proveru, presrećući njen callback kako bi osigurala da vraća success=1. Menjanjem ponašanja callback-a, provera autentifikacije se efikasno zaobilazi.
Skripta ispod se injektuje da bi se izmenio rezultat evaluatePolicy metode. Menja rezultat callback-a da uvek označava uspeh.
Da biste ubrizgali Frida skriptu i zaobišli biometrijsku autentifikaciju, koristi se sledeća komanda:
Važno je proveriti da li ne dolazi do komunikacije bez enkripcije i takođe da aplikacija ispravno validira TLS sertifikat servera. Da biste proverili ovakve probleme, možete koristiti proxy kao što je Burp:
Jedan uobičajen problem prilikom validacije TLS sertifikata je provera da li je sertifikat potpisan od strane pouzdanog CA, ali ne proverava da li je hostname sertifikata hostname koji se pristupa. Da biste proverili ovaj problem koristeći Burp, nakon što poverite Burp CA na iPhone-u, možete napraviti novi sertifikat sa Burp-om za drugi hostname i koristiti ga. Ako aplikacija i dalje radi, onda je nešto ranjivo.
Ako aplikacija ispravno koristi SSL Pinning, onda će aplikacija raditi samo ako je sertifikat onaj koji se očekuje. Kada testirate aplikaciju to može biti problem jer će Burp poslužiti svoj sertifikat. Da biste zaobišli ovu zaštitu unutar jailbroken uređaja, možete instalirati aplikaciju SSL Kill Switch ili instalirati Burp Mobile Assistant
Takođe možete koristiti objection's ios sslpinning disable
U /System/Library
možete pronaći okvire instalirane na telefonu koje koriste sistemske aplikacije
Aplikacije koje je korisnik instalirao iz App Store-a nalaze se unutar /User/Applications
A /User/Library
sadrži podatke sačuvane od strane aplikacija na korisničkom nivou
Možete pristupiti /User/Library/Notes/notes.sqlite
da biste pročitali beleške sačuvane unutar aplikacije.
Unutar foldera instalirane aplikacije (/User/Applications/<APP ID>/
) možete pronaći neke zanimljive datoteke:
iTunesArtwork
: Ikona koju koristi aplikacija
iTunesMetadata.plist
: Informacije o aplikaciji korišćene u App Store-u
/Library/*
: Sadrži postavke i keš. U /Library/Cache/Snapshots/*
možete pronaći snimak napravljen za aplikaciju pre nego što je poslata u pozadinu.
Programeri mogu daljinski patch-ovati sve instalacije svoje aplikacije trenutno bez potrebe da ponovo podnose aplikaciju u App Store i čekaju da bude odobrena. Za ovu svrhu obično se koristi JSPatch. Ali postoje i druge opcije kao što su Siren i react-native-appstore-version-checker. Ovo je opasan mehanizam koji bi mogli zloupotrebiti zlonamerni SDK-ovi, stoga se preporučuje da se proveri koja metoda se koristi za automatsko ažuriranje (ako postoji) i testira. Možete pokušati da preuzmete prethodnu verziju aplikacije u tu svrhu.
Značajan izazov sa 3rd party SDK-ovima je nedostatak granularne kontrole nad njihovim funkcionalnostima. Programeri se suočavaju sa izborom: ili integrišu SDK i prihvate sve njegove funkcije, uključujući potencijalne sigurnosne ranjivosti i probleme sa privatnošću, ili potpuno odustanu od njegovih prednosti. Često, programeri nisu u mogućnosti da patch-uju ranjivosti unutar ovih SDK-ova sami. Štaviše, kako SDK-ovi stiču poverenje unutar zajednice, neki mogu početi da sadrže malware.
Usluge koje pružaju SDK-ovi trećih strana mogu uključivati praćenje ponašanja korisnika, prikazivanje reklama ili poboljšanja korisničkog iskustva. Međutim, to uvodi rizik jer programeri možda nisu potpuno svesni koda koji izvršavaju ove biblioteke, što dovodi do potencijalnih rizika za privatnost i sigurnost. Ključno je ograničiti informacije koje se dele sa uslugama trećih strana na ono što je neophodno i osigurati da nijedni osetljivi podaci nisu izloženi.
Implementacija usluga trećih strana obično dolazi u dva oblika: samostalna biblioteka ili pun SDK. Da bi se zaštitila privatnost korisnika, svi podaci koji se dele sa ovim uslugama trebali bi biti anonimizovani kako bi se sprečilo otkrivanje ličnih identifikacionih informacija (PII).
Da biste identifikovali biblioteke koje aplikacija koristi, može se koristiti komanda otool
. Ovaj alat treba pokrenuti protiv aplikacije i svake deljene biblioteke koju koristi da bi otkrio dodatne biblioteke.
OWASP iGoat https://github.com/OWASP/igoat <<< Objective-C verzija https://github.com/OWASP/iGoat-Swift <<< Swift verzija
Koristite Trickest za lako kreiranje i automatizaciju radnih tokova pokretanih najnaprednijim alatima zajednice. Pribavite pristup danas:
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)