hacktricks/mobile-pentesting/ios-pentesting/ios-basics.md
2024-02-11 02:07:06 +00:00

13 KiB

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Privilege Separation en Sandboks

In iOS bestaan daar 'n onderskeid in voorreg tussen die gebruikerstoeganklike programme en die kernprosesse van die stelsel. Programme loop onder die mobile-gebruikersidentiteit, terwyl die kritieke stelselprosesse as root werk. Hierdie skeiding word versterk deur 'n sandboks-meganisme wat streng beperkings plaas op die aksies wat programme kan onderneem. Byvoorbeeld, selfs al deel programme dieselfde gebruikersidentiteit, word hulle verbied om toegang tot of wysiging van mekaar se data te verkry.

Programme word geïnstalleer in 'n spesifieke gids (private/var/mobile/Applications/{willekeurige ID}) en het beperkte leestoegang tot sekere stelselareas en -funksies, soos SMS'e en telefoonoproepe. Toegang tot beskermde areas veroorsaak 'n pop-upversoek vir gebruikerstoestemming.

Data Beskerming

iOS bied ontwikkelaars die Data Protection APIs aan, gebou op die Secure Enclave Processor (SEP) - 'n toegewyde koprotsessor vir kriptografiese operasies en sleutelbestuur. Die SEP verseker data-beskermingsintegriteit deur middel van 'n unieke toestelspesifieke sleutel, die toestel UID, wat daarin ingebed is.

By die skep van 'n lêer word 'n unieke 256-bit AES-kripteringssleutel gegenereer wat die inhoud van die lêer kripteer. Hierdie kripteringssleutel, tesame met 'n klas-ID, word dan gekripteer met behulp van 'n klasleutel en binne die lêer se metadata gestoor. Die ontkriptering van 'n lêer behels die gebruik van die stelsel se sleutel om toegang tot die metadata te verkry, die klasleutel met die klas-ID te herwin, en dan die unieke kripteringssleutel van die lêer te ontkripteer.

iOS definieer vier beskermingsklasse vir data-sekuriteit wat bepaal wanneer en hoe data toeganklik is:

  • Volledige Beskerming (NSFileProtectionComplete): Data is ontoeganklik totdat die toestel ontgrendel word met die gebruiker se wagwoord.
  • Beskerm, tensy Oop (NSFileProtectionCompleteUnlessOpen): Maak lêertoegang moontlik selfs nadat die toestel gesluit is, op voorwaarde dat die lêer geopen is toe die toestel ontgrendel was.
  • Beskerm tot Eerste Gebruikersverifikasie (NSFileProtectionCompleteUntilFirstUserAuthentication): Data is toeganklik na die eerste gebruikersontsluiting na opstart, en bly toeganklik selfs as die toestel weer gesluit word.
  • Geen Beskerming (NSFileProtectionNone): Data word slegs beskerm deur die toestel UID, wat vinnige verwydering van data op afstand fasiliteer.

Die kriptering van alle klasse, behalwe NSFileProtectionNone, behels 'n sleutel wat afgelei word van sowel die toestel UID as die gebruiker se wagwoord, om te verseker dat ontkriptering slegs moontlik is op die toestel met die korrekte wagwoord. Vanaf iOS 7 is die verstek beskermingsklas "Beskerm tot Eerste Gebruikersverifikasie".

Ontwikkelaars kan FileDP gebruik, 'n instrument om die data-beskermingsklas van lêers op 'n iPhone te ondersoek.

# Example code to use FileDP for checking file protection class
# Note: Ensure your device is jailbroken and has Python installed to use FileDP.
# Installation and usage of FileDP:
git clone https://github.com/abjurato/FileDp-Source
cd FileDp-Source
python filedp.py /path/to/check

Die Sleutelbos

In iOS dien 'n Sleutelbos as 'n veilige versleutelde houer vir die stoor van sensitiewe inligting, wat slegs toeganklik is deur die toepassing wat dit gestoor het of deur diegene wat uitdruklik gemagtig is. Hierdie versleuteling word versterk deur 'n unieke wagwoord wat deur iOS gegenereer word, wat self versleutel is met AES. Hierdie versleutelingsproses maak gebruik van 'n PBKDF2-funksie, wat die gebruiker se wagwoord kombineer met 'n sout wat afgelei is van die toestel se UID, 'n komponent wat slegs die veilige enclave chipset kan bereik. Gevolglik bly die inhoud van die Sleutelbos ontoeganklik op enige toestel anders as die een waar dit oorspronklik versleutel is, selfs as die gebruiker se wagwoord bekend is.

Bestuur en toegang tot die Sleutelbosdata word hanteer deur die securityd daemon, gebaseer op spesifieke toepassingsbevoegdhede soos Keychain-access-groups en application-identifier.

Sleutelbos API-operasies

Die Sleutelbos API, in detail beskryf in Apple se Sleutelbosdiensdokumentasie, bied essensiële funksies vir die bestuur van veilige stoor:

  • SecItemAdd: Voeg 'n nuwe item by die Sleutelbos.
  • SecItemUpdate: Werk 'n bestaande item in die Sleutelbos by.
  • SecItemCopyMatching: Haal 'n item uit die Sleutelbos op.
  • SecItemDelete: Verwyder 'n item uit die Sleutelbos.

Die kragtige krag van die Sleutelbos wagwoord behels óf die aanval op die versleutelde sleutel self of die poging om die wagwoord op die toestel self te raai, wat aansienlik bemoeilik word deur die veilige enclave se afdwinging van 'n vertraging tussen mislukte pogings.

Konfigurering van Sleutelbositemdata-beskerming

Data-beskermingsvlakke vir Sleutelbositems word ingestel deur die kSecAttrAccessible eienskap tydens die skep of opdateer van 'n item. Hierdie vlakke, soos deur Apple gespesifiseer, bepaal wanneer en hoe Sleutelbositems toeganklik is:

  • kSecAttrAccessibleAlways: Altyd toeganklik, ongeag die toestel se sluitstatus.
  • kSecAttrAccessibleAlwaysThisDeviceOnly: Altyd toeganklik, maar nie ingesluit in rugsteun nie.
  • kSecAttrAccessibleAfterFirstUnlock: Toeganklik na die eerste ontgrendeling na herlaai.
  • kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly: Dieselfde as bogenoemde, 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 wagwoord, nie ingesluit in rugsteun nie.

AccessControlFlags verfyn verdere toegangsmetodes, wat biometriese verifikasie of wagwoordgebruik moontlik maak.

Waarskuwing vir Gehackte Toestelle

{% hint style="warning" %} Op gehackte toestelle is die beskerming van die Sleutelbos gekompromitteer, wat 'n aansienlike veiligheidsrisiko inhou. {% endhint %}

Volharding van Sleutelbosdata

In teenstelling met toepassingsspesifieke data wat uitgevee word wanneer die toepassing gedeïnstalleer word, volhard Sleutelbosdata op die toestel. Hierdie kenmerk kan nuwe eienaars van 'n tweedehandse toestel in staat stel om die vorige eienaar se toepassingsdata toeganklik te maak deur eenvoudigweg die toepassings te herinstalleer. Ontwikkelaars word aangeraai om proaktief Sleutelbosdata uit te wis by die installering van die toepassing of tydens afmelding om hierdie risiko te verminder. Hier is 'n voorbeeld van Swift-kode wat demonstreer hoe om Sleutelbosdata uit te wis by die eerste aanvang van die toepassing:

let userDefaults = UserDefaults.standard

if userDefaults.bool(forKey: "hasRunBefore") == false {
// Remove Keychain items here

// Update the flag indicator
userDefaults.set(true, forKey: "hasRunBefore")
userDefaults.synchronize() // Forces the app to update UserDefaults
}

App-vermoëns

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 tuisgids werk, en voorkom dus dat dit toegang tot stelsel lêers of data van ander apps verkry. Die afdwinging van hierdie beperkings word gedoen deur middel van sandbox-beleide, wat deel vorm van die Trusted BSD (MAC) Mandatory Access Control Framework.

Ontwikkelaars het die vermoë om sekere vermoëns of toestemmings vir hul apps te konfigureer, soos Data Protection of Keychain Sharing. Hierdie toestemmings word onmiddellik toegepas nadat die app geïnstalleer is. Nietemin, om toegang tot sekere beskermde hulpbronne te verkry, moet die app uitdruklike toestemming van die gebruiker kry tydens die eerste poging. Dit word bereik deur die gebruik van doelstrengs of gebruiksbeskrywingsstrengs, wat aan gebruikers in 'n toestemmingsversoekwaarskuwing voorgelê word.

Vir diegene wat toegang tot die bronkode het, kan verifikasie van toestemmings wat in die Info.plist-lêer ingesluit is, gedoen word deur:

  1. Die projek in Xcode oop te maak.
  2. Die Info.plist-lêer op te spoor en oop te maak.
  3. Soek na sleutels met die voorvoegsel "Privacy -", met die opsie om rou sleutels/waardes vir duidelikheid te vertoon.

Wanneer 'n IPA-lêer hanteer word, kan die volgende stappe gevolg word:

  1. Die IPA-lêer uitpak.
  2. Die Info.plist-lêer binne Payload/<appnaam>.app/ opspoor.
  3. Die lêer na XML-formaat omskakel indien nodig, vir makliker inspeksie.

Byvoorbeeld, die doelstrengs in die Info.plist-lêer kan so lyk:

<plist version="1.0">
<dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Your location is used to provide turn-by-turn directions to your destination.</string>

Toestelvermoëns

Die Info.plist lêer van 'n app spesifiseer toestelvermoëns wat help om die App Store te gebruik om apps te filter vir toestelverenigbaarheid. Hierdie vermoëns word gedefinieer onder die UIRequiredDeviceCapabilities sleutel. Byvoorbeeld:

<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>

Hierdie voorbeeld dui daarop dat die app versoenbaar is met die armv7 instruksiestel. Ontwikkelaars kan ook funksies soos nfc spesifiseer om te verseker dat hul app slegs beskikbaar is vir toestelle wat NFC ondersteun.

Toekennings

Toekennings is 'n ander kritieke aspek van iOS-app-ontwikkeling, wat dien as sleutel-waardepare wat apps toestemming gee om sekere handelinge uit te voer buite die uitvoeringstyd kontroles. Byvoorbeeld, om Data Protection in 'n app te aktiveer, moet 'n spesifieke toekenning by die Xcode-projek gevoeg word, wat dan weerspieël word in die app se toekenningslêer of die ingebedde mobiele voorsieningslêer vir IPAs.

Verwysings

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: