Gebruik [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) om maklik en **outomatiese werksvloei** te bou wat aangedryf word deur die wêreld se **mees gevorderde** gemeenskaplike gereedskap.\
<summary><strong>Leer AWS-hacking van nul tot held met</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
Tydens die toetsing **sal verskeie operasies voorgestel word** (verbind met die toestel, lees/skryf/oordra/laai lêers af, gebruik van sekere gereedskap...). As jy dus nie weet hoe om enige van hierdie aksies uit te voer nie, **begin deur die bladsy te lees**:
Dit word aanbeveel om die gereedskap [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) te gebruik om 'n outomatiese Statisiese Analise op die IPA-lêer uit te voer.
***PIE (Position Independent Executable)**: Wanneer dit geaktiveer is, laai die aansoek in 'n ewekansige geheue-adres elke keer as dit begin, wat dit moeiliker maak om sy aanvanklike geheue-adres te voorspel.
***Stapelkanaries**: Om die integriteit van die stapel te valideer, word 'n 'kanarie'-waarde op die stapel geplaas voordat 'n funksie aangeroep word en word weer gevalideer sodra die funksie eindig.
Kyk na die dinamiese analise wat [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) uitvoer. Jy sal deur die verskillende aansigte moet blaai en met hulle moet interaksie hê, maar dit sal verskeie klasse koppel en ander dinge doen en 'n verslag voorberei sodra jy klaar is.
Die struktuur van 'n **IPA-lêer** is essensieel dié van 'n **gezip-pakket**. Deur sy uitbreiding te hernoem na `.zip`, kan dit **gedekomprimeer** word om sy inhoud te onthul. Binne hierdie struktuur verteenwoordig 'n **Bundel** 'n ten volle verpakte aansoek gereed vir installasie. Binne-in sal jy 'n gids vind met die naam `<NAME>.app`, wat die hulpbronne van die aansoek inkapsuleer.
* **`Info.plist`**: Hierdie lêer bevat spesifieke konfigurasiebesonderhede van die aansoek.
* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Dit word gebruik om jou aansoek se permanente data vir aflyngebruik te stoor, tydelike data te kacheer, en om ongedaanmaakfunksionaliteit by jou aansoek op 'n enkele toestel by te voeg. Om data oor verskeie toestelle in 'n enkele iCloud-rekening te sinchroniseer, boots Core Data outomaties jou skema na 'n CloudKit-houer.
* [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): Die `PkgInfo`-lêer is 'n alternatiewe manier om die tipe en skepperkodes van jou aansoek of bundel te spesifiseer.
* **en.lproj, fr.proj, Base.lproj**: Is die taalpakette wat hulpbronne vir daardie spesifieke tale bevat, en 'n verstekhulpbron in geval 'n taal nie ondersteun word nie.
* **Sekuriteit**: Die `_CodeSignature/`-gids speel 'n kritieke rol in die aansoek se sekuriteit deur die integriteit van alle gebundelde lêers deur digitale handtekeninge te verifieer.
* **Batebestuur**: Die `Assets.car`-lêer gebruik kompressie om grafiese bates doeltreffend te bestuur, wat noodsaaklik is vir die optimalisering van aansoekprestasie en die vermindering van sy algehele grootte.
* **Raamwerke en Inproppe**: Hierdie gide beklemtoon die modulariteit van iOS-aansoeke, wat ontwikkelaars in staat stel om herbruikbare kodelêers (`Frameworks/`) in te sluit en aansoekfunksionaliteit uit te brei (`PlugIns/`).
* **Lokalisering**: Die struktuur ondersteun meertaligheid, wat globale aansoekbereik fasiliteer deur hulpbronne vir spesifieke taalpakette in te sluit.
Die **Info.plist** dien as 'n hoeksteen vir iOS-aansoeke, wat sleutelkonfigurasiedata inkapsuleer in die vorm van **sleutel-waarde** pare. Hierdie lêer is 'n vereiste nie net vir aansoeke nie, maar ook vir aansoekuitbreidings en raamwerke wat daarin gebundel is. Dit is gestruktureer in XML of 'n binêre formaat en bevat kritieke inligting wat strek van aansoektoestemmings tot sekuriteitskonfigurasies. Vir 'n gedetailleerde verkenning van beskikbare sleutels, kan 'n persoon verwys na die [**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information\_property\_list?language=objc).
Vir diegene wat met hierdie lêer wil werk in 'n meer toeganklike formaat, kan die XML-omskakeling moeiteloos bereik word deur die gebruik van `plutil` op macOS (beskikbaar natively op weergawes 10.2 en later) of `plistutil` op Linux. Die opdragte vir omskakeling is as volg:
Onder die menigte inligting wat die **Info.plist** lêer kan onthul, sluit noemenswaardige inskrywings in soos app-toestemmingsreekse (`UsageDescription`), aangepaste URL-skemas (`CFBundleURLTypes`), en konfigurasies vir App Transport Security (`NSAppTransportSecurity`). Hierdie inskrywings, saam met ander soos uitgevoerde/ingevoerde aangepaste dokumenttipes (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), kan maklik gevind word deur die lêer te ondersoek of deur 'n eenvoudige `grep`-bevel te gebruik:
In die iOS-omgewing word gids spesifiek aangewys vir **sisteemtoepassings** en **gebruiker-geïnstalleerde toepassings**. Sisteemtoepassings bly in die `/Applications` gids, terwyl gebruiker-geïnstalleerde toepassings onder `/private/var/containers/` geplaas word. Hierdie toepassings word 'n unieke identifiseerder toegewys wat bekend staan as 'n **128-bis UUID**, wat die taak van die handmatig vind van 'n toepassing se gids moeilik maak as gevolg van die willekeurigheid van die gidsname.
Om die ontdekking van 'n gebruiker-geïnstalleerde toepassing se installasiegids te vergemaklik, bied die **objection tool** 'n nuttige bevel, `env`. Hierdie bevel onthul gedetailleerde gidsinligting vir die betrokke toepassing. Hieronder is 'n voorbeeld van hoe om hierdie bevel te gebruik:
Opdragte soos `ps` en `lsof` kan ook gebruik word om die proses van die program te identifiseer en om oop lêers te lys, onderskeidelik, wat insig bied in die aktiewe gids van die aansoek:
* Dit is die Aansoekbondel soos voorheen gesien in die IPA, dit bevat noodsaaklike aansoekdata, statiese inhoud sowel as die aansoek se saamgestelde binêre.
* Die aansoek kan paaie deaktiveer deur `NSURLIsExcludedFromBackupKey` in te stel.
* **Biblioteek/**
* Bevat alle **lêers wat nie gebruikersspesifiek is nie**, soos **gekassetteerde**, **voorkeure**, **koekies**, en eiendomslys (plist) konfigurasie lêers.
* iOS-aansoeke gebruik gewoonlik die `Toepassingsondersteuning` en `Kassette` subgidse, maar die aansoek kan aangepaste subgidse skep.
Laten ons 'n nader blik werp op iGoat-Swift se Aansoekbondel (.app) gids binne die Bondelgids (`/var/containers/Bondel/Aansoek/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`):
Binne die `<application-name>.app`-vouer sal jy 'n binêre lêer genaamd `<application-name>` vind. Hierdie is die lêer wat **uitgevoer** sal word. Jy kan 'n basiese inspeksie van die binêre lêer uitvoer met die hulpmiddel **`otool`**:
Togtans, die beste opsies om die binêre kode te ontleed is: [**Hopper**](https://www.hopperapp.com/download.html?) en [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/).
Gebruik [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) om maklik te bou en **werkstrome outomaties** te dryf met die wêreld se **mees gevorderde** gemeenskapshulpmiddels.\
Die volgende plekke om inligting te berg moet **direk na die installering van die aansoek** nagegaan word, **nadat al die funksionaliteite** van die aansoek nagegaan is en selfs nadat **uitgelê is van een gebruiker en ingeteken is by 'n ander**.\
Die doel is om **onbeskermde sensitiewe inligting** van die aansoek (wagwoorde, tokens), van die huidige gebruiker en van vorige ingeteken gebruikers te vind.
**plist** lêers is gestruktureerde XML-lêers wat **sleutel-waarde pare bevat**. Dit is 'n manier om volgehoue data te berg, so soms mag jy **sensitiewe inligting in hierdie lêers vind**. Dit word aanbeveel om hierdie lêers na die installering van die aansoek en na intensiewe gebruik daarvan te ondersoek om te sien of nuwe data geskryf is.
Die mees algemene manier om data in plist-lêers vol te hou is deur die gebruik van **NSUserDefaults**. Hierdie plist-lêer word binne die aansoek se sandput in **`Library/Preferences/<appBundleID>.plist`** gestoor.
Die [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) klas bied 'n programmatiese koppelvlak vir interaksie met die verstekstelsel. Die verstekstelsel laat 'n aansoek toe om sy gedrag aan te pas volgens **gebruikersvoorkeure**. Data wat deur `NSUserDefaults` gestoor word, kan in die aansoekbundel besigtig word. Hierdie klas berg **data** in 'n **plist****lêer**, maar dit is bedoel om met klein hoeveelhede data gebruik te word.
Om al die plist-lêers wat deur die aansoek gebruik word te vind, kan jy toegang kry tot `/private/var/mobile/Containers/Data/Application/{APPID}` en hardloop:
[`Kern Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple\_ref/doc/uid/TP40001075-CH8-SW1) is 'n raamwerk vir die bestuur van die model-laag van voorwerpe in jou aansoek. [Kern Data kan SQLite gebruik as sy permanente stoor](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), maar die raamwerk self is nie 'n databasis nie.\
CoreData enkripteer nie sy data standaard nie. 'n Bykomende enkripsie-laag kan egter by CoreData gevoeg word. Sien die [GitHub Repo](https://github.com/project-imas/encrypted-core-data) vir meer besonderhede.
Jy kan die SQLite Kern Data-inligting van 'n aansoek vind in die pad `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`
Dit is algemeen vir toepassings om hul eie sqlite-databasis te skep. Hulle kan **sensitiewe****data** daarop **berg** en dit ongeënkripteer los. Daarom is dit altyd interessant om elke databasis binne die toepassingsgids te ondersoek. Gaan dus na die toepassingsgids waar die data gestoor word (`/private/var/mobile/Containers/Data/Application/{APPID}`)
Ontwikkelaars kan **data stoor en sinchroniseer** binne 'n **NoSQL wolk-gehoste databasis** deur Firebase Real-Time Databases. Die data word gestoor in JSON-formaat en sinchroniseer na alle gekoppelde kliënte in werklike tyd.
[Realm Objective-C](https://realm.io/docs/objc/latest/) en [Realm Swift](https://realm.io/docs/swift/latest/) bied 'n kragtige alternatief vir data stoor, wat nie deur Apple voorsien word nie. Standaard **stoor hulle data onversleutel**, met versleuteling beskikbaar deur spesifieke konfigurasie.
Die databasisse is geleë by: `/private/var/mobile/Containers/Data/Application/{APPID}`. Om hierdie lêers te verken, kan mens bevele soos die volgende gebruik:
[Couchbase Lite](https://github.com/couchbase/couchbase-lite-ios) word beskryf as 'n **ligte** en **ingeboude** databasis-enjin wat die **dokumentgeoriënteerde** (NoSQL) benadering volg. Dit is ontwerp om inheems te wees aan **iOS** en **macOS**, en bied die vermoë om data naatloos te sinchroniseer.
iOS stoor die koekies van die programme in die **`Library/Cookies/cookies.binarycookies`** binne elke program se vouer. Ontwikkelaars besluit egter soms om hulle in die **sleutelhangertoestel** te stoor aangesien die genoemde **koekie lêer in rugsteune toeganklik is**.
Om die koekies lêer te ondersoek, kan jy [**hierdie Python-skrip**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) gebruik of objection se **`ios cookies get`.**\
Standaard stoor NSURLSession data, soos **HTTP-versoeke en -antwoorde in die Cache.db** databasis. Hierdie databasis kan **sensitiewe data** bevat, as tokkens, gebruikersname of enige ander sensitiewe inligting gekasheer is. Om die gekasheerde inligting te vind, open die data-gids van die program (`/var/mobile/Containers/Data/Application/<UUID>`) en gaan na `/Library/Caches/<Bundle Identifier>`. Die **WebKit-cache word ook gestoor in die Cache.db** lêer. **Objection** kan die databasis oopmaak en daarmee interaksie hê met die opdrag `sqlite connect Cache.db`, aangesien dit 'n **normale SQLite-databasis** is.
Dit word **aanbeveel om hierdie data se Kassering te deaktiveer**, aangesien dit sensitiewe inligting in die versoek of antwoord kan bevat. Die volgende lys toon verskillende maniere om dit te bereik:
1. Dit word aanbeveel om Gekasheerde antwoorde na afmelding te verwyder. Dit kan gedoen word met die voorsiene metode deur Apple genaamd [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses) Jy kan hierdie metode soos volg aanroep:
2. As jy nie die voordeel van koekies wil gebruik nie, word dit aanbeveel om net die [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) konfigurasie-eienskap van URLSession te gebruik, wat koekies en Kassering deaktiveer.
`'n Ephemeral-sessiekonfigurasie-objek is soortgelyk aan 'n verstek-sessiekonfigurasie (sien verstek), behalwe dat die ooreenstemmende sessieobjek nie kassas, geloofsbewaarplekke, of enige sessie-verwante data na skyf stoor nie. In plaas daarvan word sessie-verwante data in RAM gestoor. Die enigste tyd wat 'n ephemeral-sessie data na skyf skryf, is wanneer jy dit sê om die inhoud van 'n URL na 'n lêer te skryf.`
3. Kassering kan ook gedeaktiveer word deur die Kasseringbeleid in te stel op [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Dit sal die stoor van Kassering op enige manier, hetsy in geheue of op skyf, deaktiveer.
Telkens wanneer jy die tuisknoppie indruk, **neem iOS 'n oorskot van die huidige skerm** om die oorgang na die program op 'n baie gladder manier te kan doen. Maar as **sensitiewe data** teenwoordig is op die huidige skerm, sal dit **gestoor** word in die **beeld** (wat **oorleef****herlaaiings**). Dit is die oorskotte wat jy ook kan toegang deur dubbelklik op die tuiskerm om tussen programme te skakel.
Tensy die iPhone gejailbreak is, moet die **aanvaller** toegang hê tot die **toestel** wat **onblokkeer** is om hierdie skermskote te sien. Standaard word die laaste oorskot gestoor in die program se sandput in `Library/Caches/Snapshots/` of `Library/SplashBoard/Snapshots` gids (die vertroude rekenaars kan nie toegang kry tot die lêersisteem vanaf iOX 7.0 nie).
Een manier om hierdie slegte gedrag te voorkom, is om 'n leë skerm te plaas of die sensitiewe data te verwyder voordat die oorskot geneem word met behulp van die `ApplicationDidEnterBackground()`-funksie.
Hierdie stel die agtergrondbeeld in op `overlayImage.png` wanneer die aansoek na die agtergrond gaan. Dit voorkom dat sensitiewe data uitlek omdat `overlayImage.png` altyd die huidige aansig sal oorskryf.
Vir toegang tot en bestuur van die iOS-sleutelbos, is gereedskap soos [**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper) beskikbaar, geskik vir gejailbreakte toestelle. Daarbenewens bied [**Objection**](https://github.com/sensepost/objection) die bevel `ios keychain dump` vir soortgelyke doeleindes.
Die **NSURLCredential** klas is ideaal vir die stoor van sensitiewe inligting direk in die sleutelbos, wat die behoefte aan NSUserDefaults of ander omhulsels omseil. Om gelde na die aanmelding te stoor, word die volgende Swift-kode gebruik:
## **Aangepaste Sleutelborde en Sleutelbordgeheue**
Met iOS 8.0 en later kan gebruikers aangepaste sleutelborduitbreidings installeer, wat bestuurbaar is onder **Instellings > Algemeen > Sleutelbord > Sleutelborde**. Terwyl hierdie sleutelborde uitgebreide funksionaliteit bied, hou hulle 'n risiko in vir sleutelstroklogging en die oordra van data na eksterne bedieners, alhoewel gebruikers in kennis gestel word van sleutelborde wat netwerktoegang benodig. Programme kan, en behoort, die gebruik van aangepaste sleutelborde vir die invoer van sensitiewe inligting te beperk.
* Wees bewus van die outokorreksie en outo-voorstelle van die verstek iOS-sleutelbord, wat sensitiewe inligting in geheue lêers wat in `Library/Keyboard/{locale}-dynamic-text.dat` of `/private/var/mobile/Library/Keyboard/dynamic-text.dat` geleë is, kan stoor. Hierdie geheue lêers moet gereeld nagegaan word vir sensitiewe data. Dit word aanbeveel om die sleutelbordwoordeboek te herstel via **Instellings > Algemeen > Herstel > Herstel Sleutelbordwoordeboek** om gekaapte data te skoonmaak.
Die [UITextInputTraits-protokol](https://developer.apple.com/reference/uikit/uitextinputtraits) bied eienskappe om outokorreksie en veilige teksinvoer te bestuur, wat noodsaaklik is vir die voorkoming van die stoor van sensitiewe inligting. Byvoorbeeld, die deaktivering van outokorreksie en die aktivering van veilige teksinvoer kan bereik word met:
Daarbenewens moet ontwikkelaars verseker dat teksvelde, veral dié vir die invoer van sensitiewe inligting soos wagwoorde en PINs, die kaching deaktiveer deur `autocorrectionType` in te stel op `UITextAutocorrectionTypeNo` en `secureTextEntry` op `YES`.
Foutopsporing van kode behels dikwels die gebruik van **logging**. Daar is 'n risiko betrokke aangesien **logs sensitiewe inligting kan bevat**. Voorheen, in iOS 6 en vroeëre weergawes, was logs toeganklik vir alle programme, wat 'n risiko van die lekkasie van sensitiewe data inhou. **Nou is programme beperk tot toegang tot slegs hul eie logs**.
Ten spyte van hierdie beperkings kan 'n **aanvaller met fisiese toegang** tot 'n ontslote toestel dit steeds uitbuit deur die toestel aan 'n rekenaar te koppel en die logs te **lees**. Dit is belangrik om te let dat logs op die skyf bly selfs nadat die toepassing gedeïnstalleer is.
Om risiko's te verminder, word dit aanbeveel om **deeglik met die toepassing te interageer**, al sy funksies en insette te verken om te verseker dat geen sensitiewe inligting onbedoeld gelog word nie.
Wanneer jy die bronkode van die toepassing deurkyk vir potensiële lekkasies, soek na beide **voorgedefinieerde** en **aangepaste logging-stellings** met sleutelwoorde soos `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` vir ingeboude funksies, en enige vermeldings van `Logging` of `Logfile` vir aangepaste implementasies.
Volg bevele om logaktiwiteite te observeer, wat van onschatbare waarde kan wees vir die diagnose van probleme of die identifisering van potensiële datalek in logboeke.
Gebruik [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) om maklik **werkstrome te bou** en te **outomatiseer** wat aangedryf word deur die wêreld se **mees gevorderde** gemeenskapsinstrumente.\
**Outomatiese agteruitskopiekenmerke** is geïntegreer in iOS, wat die skep van toesteldatakopieë fasiliteer deur iTunes (tot macOS Catalina), Finder (vanaf macOS Catalina voortwaarts), of iCloud. Hierdie agteruitskopieë dek bykans alle toesteldata, met uitsluiting van hoogs sensitiewe elemente soos Apple Pay besonderhede en Touch ID konfigurasies.
Die insluiting van **geïnstalleerde programme en hul data** in agteruitskopieë bring die kwessie van potensiële **datalek** na vore en die risiko dat **agteruitskopiewysigings programme-funksionaliteit kan verander**. Dit word aanbeveel om **nie sensitiewe inligting in platte teks te stoor** binne enige program se gids of sy subgidse om hierdie risiko's te verminder.
Lêers in `Documents/` en `Library/Application Support/` word standaard agteruitgekopieer. Ontwikkelaars kan spesifieke lêers of gidse uit agteruitskopieë uitsluit deur `NSURL setResourceValue:forKey:error:` te gebruik met die `NSURLIsExcludedFromBackupKey`. Hierdie praktyk is noodsaaklik om sensitiewe data te beskerm teen insluiting in agteruitskopieë.
Om 'n program se agteruitskopie-sekuriteit te assesseer, begin deur **'n agteruitskopie te skep** met Finder, en vind dit dan met behulp van leiding van [Apple se amptelike dokumentasie](https://support.apple.com/en-us/HT204215). Analiseer die agteruitskopie vir sensitiewe data of konfigurasies wat verander kan word om programgedrag te affekteer.
Sensitiewe inligting kan opgespoor word met behulp van opdraglyninstrumente of toepassings soos [iMazing](https://imazing.com). Vir versleutelde agteruitskopieë kan die teenwoordigheid van versleuteling bevestig word deur die "IsEncrypted" sleutel in die "Manifest.plist" lêer by die agteruitskopie se hoof te kontroleer.
Vir die hantering van versleutelde rugsteun, kan Python-skripte beskikbaar in [DinoSec se GitHub-opberging](https://github.com/dinosec/iphone-dataprotection/tree/master/python\_scripts), soos **backup\_tool.py** en **backup\_passwd.py**, nuttig wees, alhoewel dit moontlik aanpassings mag vereis vir versoenbaarheid met die nuutste iTunes/Finder weergawes. Die [**iOSbackup**-werktuig](https://pypi.org/project/iOSbackup/) is 'n ander opsie vir die toegang tot lêers binne wagwoordbeskermde rugsteune.
'n Voorbeeld van die verandering van app-gedrag deur rugsteunwysigings word gedemonstreer in die [Bither bitcoin-bewaarplek-app](https://github.com/bither/bither-ios), waar die UI-slot-PIN binne `net.bither.plist` onder die **pin\_code** sleutel gestoor word. Die verwydering van hierdie sleutel uit die plist en die herstel van die rugsteun verwyder die PIN-vereiste, wat onbeperkte toegang bied.
Wanneer daar gehandel word met sensitiewe inligting wat in 'n aansoek se geheue gestoor word, is dit noodsaaklik om die blootstellingsduur van hierdie data te beperk. Daar is twee primêre benaderings om geheue-inhoud te ondersoek: **die skep van 'n geheue-dump** en **die analise van die geheue in werklike tyd**. Beide metodes het hul uitdagings, insluitend die potensiaal om kritieke data tydens die dump- of analiseproses te mis.
Vir beide gejailbreakte en nie-gejailbreakte toestelle, maak gereedskap soos [objection](https://github.com/sensepost/objection) en [Fridump](https://github.com/Nightbringer21/fridump) die dump van 'n aansoek se prosesgeheue moontlik. Nadat dit gedump is, vereis die analise van hierdie data verskeie gereedskap, afhangende van die aard van die inligting wat jy soek.
**r2frida** bied 'n kragtige alternatief vir die inspeksie van 'n toepassing se geheue in werklike tyd, sonder om 'n geheue-afvoer nodig te hê. Hierdie instrument maak die uitvoering van soekopdragte direk op die lopende toepassing se geheue moontlik:
Sommige ontwikkelaars stoor sensitiewe data in die plaaslike stoor en kripteer dit met 'n sleutel wat hardgekodel/voorspelbaar in die kode is. Dit behoort nie gedoen te word nie, aangesien sommige omkeerwerk dit vir aanvallers moontlik kan maak om die vertroulike inligting te onttrek.
Ontwikkelaars behoort nie **verouderde algoritmes** te gebruik om outorisasie **kontroles** uit te voer, data te **stoor** of te **stuur** nie. Sommige van hierdie algoritmes is: RC4, MD4, MD5, SHA1... As **hasse** byvoorbeeld gebruik word om wagwoorde te stoor, moet hasse wat weerstand bied teen brutale kragte met sout gebruik word.
Die hoofkontroles wat uitgevoer moet word, is om te kyk of jy **hardgekodelde** wagwoorde/geheime in die kode kan vind, of hierdie voorspelbaar is, en of die kode van 'n soort **swak****kriptografie**-algoritmes gebruik maak.
Vir **meer inligting** oor iOS kriptografiese API's en biblioteke, besoek [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography)
**Plaaslike verifikasie** speel 'n belangrike rol, veral wanneer dit gaan oor die beskerming van toegang tot 'n afgeleë eindpunt deur middel van kriptografiese metodes. Die essensie hier is dat sonder behoorlike implementering, plaaslike verifikasiemeganismes omseil kan word.
Apple se [**Plaaslike Verifikasieraamwerk**](https://developer.apple.com/documentation/localauthentication) en die [**sleutelhang**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) bied robuuste API's vir ontwikkelaars om gebruikersverifikasie-dialoge te fasiliteer en geheime data veilig te hanteer, onderskeidelik. Die Veilige Omsluiting beveilig vingerafdruk-ID vir Touch ID, terwyl Face ID staatmaak op gesigskenning sonder om biometriese data in gevaar te stel.
* **`Security.framework`** vir laervlak-sleutelhangdiensetoegang, wat geheime data met biometriese verifikasie beveilig. Verskeie [oopbron-omhulsels](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) maak sleutelhangtoegang eenvoudiger.
Nietemin, beide `LocalAuthentication.framework` en `Security.framework` het kwesbaarhede, aangesien hulle hoofsaaklik booleaanwaardes teruggee sonder om data vir verifikasieprosesse oor te dra, wat hulle vatbaar maak vir omseiling (sien [Moenie my so aanraak nie, deur David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)).
'n Suksesvolle verifikasie word aangedui deur 'n booleaanwaarde wat teruggegee word deur **`evaluatePolicy`**, wat 'n potensiële sekuriteitsfout aandui.
Die implementering van **plaaslike verifikasie** in iOS-toepassings behels die gebruik van **sleutelhang-API's** om geheime data soos verifikasietokens veilig te stoor. Hierdie proses verseker dat die data slegs deur die gebruiker toegang kan word, deur hul toestel wagwoord of biometriese verifikasie soos Touch ID te gebruik.
Die sleutelhang bied die vermoë om items met die `SecAccessControl`-eienskap in te stel, wat toegang tot die item beperk totdat die gebruiker suksesvol verifieer via Touch ID of toestel wagwoord. Hierdie kenmerk is noodsaaklik vir die verbetering van sekuriteit.
Hieronder is kodevoorbeelde in Swift en Objective-C wat demonstreer hoe om 'n string na/die sleutelhang te stoor en te herwin, deur van hierdie sekuriteitskenmerke gebruik te maak. Die voorbeelde toon spesifiek hoe om toegangsbeheer op te stel om Touch ID-verifikasie te vereis en te verseker dat die data slegs toeganklik is op die toestel waarop dit opgestel is, onder die voorwaarde dat 'n toestel wagwoord geconfigureer is.
Hierdie afdeling bevat inligting oor die pentesting van iOS-toepassings wat in Objective-C geskryf is. Dit dek verskeie tegnieke en hulpmiddels wat gebruik kan word vir die ondersoek en evaluering van die sekuriteit van iOS-toepassings wat met Objective-C ontwikkel is.
Nou kan ons die gestoorde item van die sleutelketting aanvra. Sleutelkettingdienste sal die verifikasie dialoog aan die gebruiker vertoon en data of nil teruggee, afhangende van of 'n geskikte vingerafdruk voorsien was of nie.
Hierdie afdeling bevat inligting oor die pentesting van iOS-toepassings wat in Objective-C geskryf is. Dit sluit in basiese stappe vir die evaluering van die veiligheid van 'n iOS-toepassing, insluitend die identifisering van potensiële kwessies en die toepassing van veiligheidsmaatreëls.
Die gebruik van raamwerke in 'n toep kan ook opgespoor word deur die lys van gedeelde dinamiese biblioteke van die toep se binêre lêer te analiseer. Dit kan gedoen word deur `otool` te gebruik:
Indien `LocalAuthentication.framework` in 'n app gebruik word, sal die uitset beide van die volgende lyne bevat (onthou dat `LocalAuthentication.framework``Security.framework` onder die oppervlak gebruik):
Deur die **Beswaar Biometriese Omgang**, geleë op [hierdie GitHub-bladsy](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), is 'n tegniek beskikbaar om die **LocalAuthentication** meganisme te omseil. Die kern van hierdie benadering behels die benutting van **Frida** om die `evaluatePolicy`-funksie te manipuleer, wat verseker dat dit konsekwent 'n `True` uitkoms lewer, ongeag die werklike verifikasiesukses. Dit is veral nuttig vir die omseil van gebrekkige biometriese verifikasieprosesse.
[TouchIDAuthentication showAlert:@"Your device doesn't support Touch ID or you haven't configured Touch ID authentication on your device" withTitle:@"Error"];
Om die **omseil** van Plaaslike Verifikasie te bereik, word 'n Frida-skripsie geskryf. Hierdie skripsie teiken die **evaluatePolicy**-kontrole deur sy terugroep te onderskep om te verseker dat dit **success=1** teruggee. Deur die gedrag van die terugroep te verander, word die verifikasie kontrole effektief omseil.
Die onderstaande skripsie word ingespuit om die resultaat van die **evaluatePolicy**-metode te wysig. Dit verander die resultaat van die terugroep om altyd sukses aan te dui.
Dit is belangrik om te kontroleer dat geen kommunikasie plaasvind **sonder versleuteling** en ook dat die aansoek korrek die TLS-sertifikaat van die bediener **valideer**.\
Een algemene probleem met die validering van die TLS-sertifikaat is om te kontroleer of die sertifikaat deur 'n **vertroude CA** onderteken is, maar **nie te kontroleer** of **die naam van die bediener** van die sertifikaat die toegangde naam is nie.\
Om hierdie probleem met Burp te toets, nadat jy die Burp CA op die iPhone vertrou het, kan jy **'n nuwe sertifikaat met Burp vir 'n ander naam van die bediener skep** en dit gebruik. As die aansoek steeds werk, dan is daar iets kwesbaar.
As 'n aansoek SSL Pinning korrek gebruik, sal die aansoek net werk as die sertifikaat die verwagte een is. Wanneer jy 'n aansoek toets **kan dit 'n probleem wees omdat Burp sy eie sertifikaat sal dien.**\
Om hierdie beskerming binne 'n jailbroken-toestel te omseil, kan jy die aansoek installeer [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) of installeer [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)
* **`/Library/*`**: Bevat die voorkeure en cache. In **`/Library/Cache/Snapshots/*`** kan jy die oomblikopname vind wat na die aansoek geneem is voordat dit na die agtergrond gestuur is.
Die ontwikkelaars kan afstandbeheer **alle installasies van hul aansoek onmiddellik patch** sonder om die aansoek na die App Store te herindien en te wag tot dit goedgekeur word.\
Vir hierdie doel word gewoonlik [**JSPatch**](https://github.com/bang590/JSPatch)** gebruik.** Maar daar is ook ander opsies soos [Siren](https://github.com/ArtSabintsev/Siren) en [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
**Dit is 'n gevaarlike meganisme wat misbruik kan word deur skadelike derde party SDK's, daarom word aanbeveel om te toets watter metode gebruik word vir outomatiese opdatering (indien enige) en dit te toets.** Jy kan 'n vorige weergawe van die aansoek aflaai vir hierdie doel.
'n Beduidende uitdaging met **3de party SDK's** is die **gebrek aan fyn beheer** oor hul funksionaliteite. Ontwikkelaars staar 'n keuse in die gesig: of integreer die SDK en aanvaar al sy funksies, insluitend potensiële sekuriteitskwessies en privaatheidskwessies, of verwerp heeltemal die voordele daarvan. Dikwels is ontwikkelaars nie in staat om kwessies binne hierdie SDK's self te herstel nie. Verder, soos SDK's vertroue in die gemeenskap verwerf, mag sommige malware begin bevat.
Die dienste wat deur derde party SDK's verskaf word, mag gebruikersgedragopsporing, advertensieweergawes of gebruikerservaringsverbeterings insluit. Dit bring egter 'n risiko mee aangesien ontwikkelaars dalk nie ten volle bewus is van die kode wat deur hierdie biblioteke uitgevoer word nie, wat kan lei tot potensiële privaatheids- en sekuriteitsrisiko's. Dit is noodsaaklik om die inligting wat met derde party dienste gedeel word, te beperk tot wat nodig is en te verseker dat geen sensitiewe data blootgestel word nie.
Die implementering van derde party dienste kom gewoonlik in twee vorms voor: 'n selfstandige biblioteek of 'n volledige SDK. Om gebruikersprivaatheid te beskerm, moet enige data wat met hierdie dienste gedeel word, **geanonimiseer** word om die bekendmaking van Persoonlik Identifiseerbare Inligting (PII) te voorkom.
Om die biblioteke wat 'n aansoek gebruik, te identifiseer, kan die **`otool`**-bevel gebruik word. Hierdie instrument moet teen die aansoek en elke gedeelde biblioteek wat dit gebruik, uitgevoer word om addisionele biblioteke te ontdek.
Gebruik [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) om maklik te bou en **outomatiseer werksvloei** aangedryf deur die wêreld se **mees gevorderde** gemeenskaplike gereedskap.\
<summary><strong>Leer AWS hak van nul tot held met</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* As jy wil sien jou **maatskappy geadverteer in HackTricks** of **laai HackTricks af in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.