iOS Basics
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
In iOS, 'n onderskeid in voorregte bestaan tussen die gebruiker-toeganklike toepassings en die stelsels se kernprosesse. Toepassings loop onder die mobile
gebruikersidentiteit, terwyl die belangrike stelsels prosesse as root
werk. Hierdie skeiding word versterk deur 'n sandbox-meganisme, wat streng beperkings op wat aksies toepassings kan onderneem, afdwing. Byvoorbeeld, selfs al deel toepassings dieselfde gebruikersidentiteit, is hulle verbied om toegang te verkry tot of mekaar se data te verander.
Toepassings word in 'n spesifieke gids (private/var/mobile/Applications/{random ID}
) geïnstalleer en het beperkte lees toegang tot sekere stelsels areas en funksies, soos SMS en telefoonoproepe. Toegang tot beskermde areas aktiveer 'n pop-up versoek om gebruikers toestemming.
iOS bied ontwikkelaars die Data Protection APIs, gebou op die Secure Enclave Processor (SEP) — 'n toegewyde koprosessor vir kriptografiese operasies en sleutelbestuur. Die SEP verseker data beskerming integriteit deur 'n unieke toestel-spesifieke sleutel, die toestel UID, wat daarin ingebed is.
By die skep van 'n lêer, word 'n unieke 256-bit AES-enkripsiesleutel gegenereer, wat die lêer se inhoud enkripteer. Hierdie enkripsiesleutel, saam met 'n klas ID, word dan geënkripteer met 'n klas sleutel en in die lêer se metadata gestoor. Om 'n lêer te dekripteer, behels die gebruik van die stelselsleutel om toegang tot die metadata te verkry, die klas sleutel met die klas ID te herwin, en dan die lêer se unieke enkripsiesleutel te dekripteer.
iOS definieer vier beskermingsklasse vir datasekuriteit, wat bepaal wanneer en hoe data toegang kan verkry:
Complete Protection (NSFileProtectionComplete): Data is ontoeganklik totdat die toestel ontgrendel word met die gebruiker se wagwoord.
Protected Unless Open (NSFileProtectionCompleteUnlessOpen): Laat lêer toegang toe selfs nadat die toestel vergrendel is, mits die lêer geopen was toe die toestel ontgrendel is.
Protected Until First User Authentication (NSFileProtectionCompleteUntilFirstUserAuthentication): Data is toeganklik na die eerste gebruiker ontgrendeling na opstart, en bly toeganklik selfs al is die toestel weer vergrendel.
No Protection (NSFileProtectionNone): Data is slegs beskerm deur die toestel UID, wat vinnige afstandsdata-wissing fasiliteer.
Die enkripsie van alle klasse, behalwe vir NSFileProtectionNone
, behels 'n sleutel wat afgelei is van beide die toestel UID en die gebruiker se wagwoord, wat verseker dat dekriptering slegs op die toestel met die korrekte wagwoord moontlik is. Vanaf iOS 7, is die standaard beskermingsklas "Protected Until First User Authentication".
Ontwikkelaars kan FileDP gebruik, 'n hulpmiddel om die dataprotectie klas van lêers op 'n iPhone te inspekteer.
In iOS dien 'n Sleutelhouer as 'n veilige geënkripteerde houer vir die stoor van sensitiewe inligting, wat slegs toeganklik is deur die toepassing wat dit gestoor het of dié wat eksplisiet gemagtig is. Hierdie enkripsie word versterk deur 'n unieke wagwoord wat deur iOS gegenereer word, wat self geënkripteer is met AES. Hierdie enkripsieproses benut 'n PBKDF2-funksie, wat die gebruiker se toegangscode kombineer met 'n sout wat afkomstig is van die toestel se UID, 'n komponent waartoe slegs die veilige enklawe-skyf toegang kan hê. Gevolglik, selfs al is die gebruiker se toegangscode bekend, bly die Sleutelhouer-inhoud ontoeganklik op enige toestel anders as die een waar dit oorspronklik geënkripteer is.
Bestuur en toegang tot die Sleutelhouer-data word hanteer deur die securityd
daemon, gebaseer op spesifieke app-regte soos Keychain-access-groups
en application-identifier
.
Die Sleutelhouer API, gedetailleerd by Apple se Sleutelhouer Dienste dokumentasie, bied noodsaaklike funksies vir veilige stoorbestuur:
SecItemAdd
: Voeg 'n nuwe item by die Sleutelhouer.
SecItemUpdate
: Werk 'n bestaande item in die Sleutelhouer by.
SecItemCopyMatching
: Verkry 'n item uit die Sleutelhouer.
SecItemDelete
: Verwyder 'n item uit die Sleutelhouer.
Brute-forcing van die Sleutelhouer wagwoord behels of om die geënkripteerde sleutel direk aan te val of om te probeer om die toegangscode op die toestel self te raai, wat aansienlik belemmer word deur die veilige enklawe se afdwinging van 'n vertraging tussen mislukte pogings.
Databeskermingsvlakke vir Sleutelhouer-items word gestel met die kSecAttrAccessible
attribuut tydens itemcreasie of -opdatering. Hierdie vlakke, soos gespesifiseer deur Apple, bepaal wanneer en hoe Sleutelhouer-items toeganklik is:
kSecAttrAccessibleAlways
: Te alle tye toeganklik, ongeag toestel se vergrendelstatus.
kSecAttrAccessibleAlwaysThisDeviceOnly
: Altijd toeganklik, maar nie ingesluit in rugsteun nie.
kSecAttrAccessibleAfterFirstUnlock
: Toeganklik na die eerste ontgrendeling na herstart.
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
: Dieselfde as hierbo, maar nie oordraagbaar na nuwe toestelle nie.
kSecAttrAccessibleWhenUnlocked
: Slegs toeganklik wanneer die toestel ontgrendel is.
kSecAttrAccessibleWhenUnlockedThisDeviceOnly
: Toeganklik wanneer ontgrendel, nie ingesluit in rugsteun nie.
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
: Vereis toestel toegangscode, nie ingesluit in rugsteun nie.
AccessControlFlags
verfyn verder toegangmetodes, wat biometriese verifikasie of toegangscode gebruik moontlik maak.
Op jailbroken toestelle is die Sleutelhouer se beskerming gecompromitteer, wat 'n beduidende sekuriteitsrisiko inhou.
Anders as app-spesifieke data wat verwyder word wanneer die app verwyder word, volhard Sleutelhouer data op die toestel. Hierdie eienskap kan nuwe eienaars van 'n tweedehandse toestel in staat stel om toegang te verkry tot die vorige eienaar se toepassingsdata bloot deur die apps weer te installeer. Ontwikkelaars word aangeraai om proaktief Sleutelhouer data te skoon te maak tydens app-installasie of tydens afmelding om hierdie risiko te verminder. Hier is 'n Swift-kodevoorbeeld wat demonstreer hoe om Sleutelhouer data skoon te maak tydens die eerste app-lancering:
In die wêreld van app-ontwikkeling speel sandboxing 'n belangrike rol in die verbetering van sekuriteit. Hierdie proses verseker dat elke app binne sy eie unieke huisgids werk, wat voorkom dat dit toegang tot stelselfeite of data wat aan ander apps behoort, verkry. Die afdwinging van hierdie beperkings word uitgevoer deur middel van sandbox-beleide, wat deel uitmaak van die Trusted BSD (MAC) Verpligte Toegang Beheerraamwerk.
Ontwikkelaars het die vermoë om sekere vermoëns of toestemmings vir hul apps te konfigureer, soos Data Beskerming of Keychain Deel. Hierdie toestemmings word onmiddellik toegepas nadat die app geïnstalleer is. Nietemin, om toegang tot sekere beskermde hulpbronne te verkry, moet die app eksplisiete toestemming van die gebruiker verkry tydens die eerste poging. Dit word bereik deur die gebruik van doelstrings of gebruik beskrywing strings, wat aan gebruikers in 'n toestemming versoek waarskuwing voorgelê word.
Vir diegene met toegang tot die bronkode, kan die verifikasie van toestemmings ingesluit in die Info.plist
-lêer gedoen word deur:
Die projek in Xcode te open.
Die Info.plist
-lêer te vind en te open.
Te soek na sleutels wat met "Privacy -"
begin, met die opsie om rou sleutels/waardes vir duidelikheid te sien.
Wanneer daar met 'n IPA-lêer gewerk word, kan die volgende stappe gevolg word:
Unzip die IPA.
Vind die Info.plist
-lêer binne Payload/<appname>.app/
.
Converteer die lêer na XML-formaat indien nodig, vir makliker inspeksie.
Byvoorbeeld, die doelstrings in die Info.plist
-lêer mag soos volg lyk:
Die Info.plist
lêer van 'n app spesifiseer toestel vermoëns wat die App Store help om apps te filtreer vir toestelkompatibiliteit. Hierdie word gedefinieer onder die UIRequiredDeviceCapabilities
sleutel. Byvoorbeeld:
This example indicates that the app is compatible with the armv7 instruction set. Developers may also specify capabilities like nfc to ensure their app is only available to devices supporting NFC.
Entitlements is 'n ander kritieke aspek van iOS-app ontwikkeling, wat dien as sleutel-waarde pare wat apps toestemming gee om sekere operasies uit te voer wat buite runtime kontroles is. Byvoorbeeld, om Data Protection in 'n app in te skakel, behels dit die toevoeging van 'n spesifieke entitlement in die Xcode-projek, wat dan in die app se entitlement-lêer of die ingebedde mobiele voorsieningslêer vir IPAs weerspieël word.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)