hacktricks/mobile-pentesting/ios-pentesting/ios-basics.md

157 lines
13 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
2024-02-11 02:07:06 +00:00
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 02:07:06 +00:00
Ander maniere om HackTricks te ondersteun:
2022-04-28 16:01:33 +00:00
2024-02-11 02:07:06 +00:00
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling 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 hacktruuks 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.
2022-04-28 16:01:33 +00:00
</details>
2024-02-11 02:07:06 +00:00
# Privilege Separation en Sandboks
2024-02-11 02:07:06 +00:00
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.
2024-02-11 02:07:06 +00:00
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.
2024-02-11 02:07:06 +00:00
# Data Beskerming
2024-02-11 02:07:06 +00:00
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.
2024-02-11 02:07:06 +00:00
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.
2024-02-11 02:07:06 +00:00
iOS definieer **vier beskermingsklasse** vir data-sekuriteit wat bepaal wanneer en hoe data toeganklik is:
2024-02-11 02:07:06 +00:00
- **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.
2024-02-11 02:07:06 +00:00
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".
2024-02-11 02:07:06 +00:00
Ontwikkelaars kan [**FileDP**](https://github.com/abjurato/FileDp-Source) gebruik, 'n instrument om die data-beskermingsklas van lêers op 'n iPhone te ondersoek.
2024-02-08 03:08:28 +00:00
```python
# 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
```
2024-02-11 02:07:06 +00:00
## **Die Sleutelbos**
2024-02-11 02:07:06 +00:00
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.
2024-02-11 02:07:06 +00:00
**Bestuur en toegang** tot die Sleutelbosdata word hanteer deur die **`securityd` daemon**, gebaseer op spesifieke toepassingsbevoegdhede soos `Keychain-access-groups` en `application-identifier`.
2024-02-11 02:07:06 +00:00
### **Sleutelbos API-operasies**
2024-02-11 02:07:06 +00:00
Die Sleutelbos API, in detail beskryf in [Apple se Sleutelbosdiensdokumentasie](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/02concepts/concepts.html), bied essensiële funksies vir die bestuur van veilige stoor:
2024-02-11 02:07:06 +00:00
- **`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.
2024-02-11 02:07:06 +00:00
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.
2024-02-11 02:07:06 +00:00
### **Konfigurering van Sleutelbositemdata-beskerming**
2024-02-11 02:07:06 +00:00
Data-beskermingsvlakke vir Sleutelbositems word ingestel deur die `kSecAttrAccessible` eienskap tydens die skep of opdateer van 'n item. Hierdie vlakke, [soos deur Apple gespesifiseer](https://developer.apple.com/documentation/security/keychain_services/keychain_items/item_attribute_keys_and_values#1679100), bepaal wanneer en hoe Sleutelbositems toeganklik is:
2024-02-11 02:07:06 +00:00
- **`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.
2024-02-11 02:07:06 +00:00
**`AccessControlFlags`** verfyn verdere toegangsmetodes, wat biometriese verifikasie of wagwoordgebruik moontlik maak.
2024-02-11 02:07:06 +00:00
### **Waarskuwing vir Gehackte Toestelle**
{% hint style="warning" %}
2024-02-11 02:07:06 +00:00
Op **gehackte toestelle** is die beskerming van die Sleutelbos gekompromitteer, wat 'n aansienlike veiligheidsrisiko inhou.
{% endhint %}
2024-02-11 02:07:06 +00:00
### **Volharding van Sleutelbosdata**
2024-02-11 02:07:06 +00:00
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:
2024-02-08 03:08:28 +00:00
```swift
let userDefaults = UserDefaults.standard
if userDefaults.bool(forKey: "hasRunBefore") == false {
2024-02-11 02:07:06 +00:00
// Remove Keychain items here
2024-02-11 02:07:06 +00:00
// Update the flag indicator
userDefaults.set(true, forKey: "hasRunBefore")
userDefaults.synchronize() // Forces the app to update UserDefaults
}
```
2024-02-11 02:07:06 +00:00
# **App-vermoëns**
2024-02-11 02:07:06 +00:00
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**.
2021-05-17 19:08:47 +00:00
2024-02-11 02:07:06 +00:00
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.
2021-05-17 19:08:47 +00:00
2024-02-11 02:07:06 +00:00
Vir diegene wat toegang tot die bronkode het, kan verifikasie van toestemmings wat in die `Info.plist`-lêer ingesluit is, gedoen word deur:
2021-05-17 19:08:47 +00:00
2024-02-11 02:07:06 +00:00
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.
2021-05-17 19:08:47 +00:00
2024-02-11 02:07:06 +00:00
Wanneer 'n IPA-lêer hanteer word, kan die volgende stappe gevolg word:
2021-05-17 19:08:47 +00:00
2024-02-11 02:07:06 +00:00
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.
2021-05-17 19:08:47 +00:00
2024-02-11 02:07:06 +00:00
Byvoorbeeld, die doelstrengs in die `Info.plist`-lêer kan so lyk:
2024-02-08 03:08:28 +00:00
```xml
<plist version="1.0">
<dict>
2024-02-11 02:07:06 +00:00
<key>NSLocationWhenInUseUsageDescription</key>
<string>Your location is used to provide turn-by-turn directions to your destination.</string>
2024-02-08 03:08:28 +00:00
```
2024-02-11 02:07:06 +00:00
## 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:
2024-02-08 03:08:28 +00:00
```xml
2021-05-17 19:08:47 +00:00
<key>UIRequiredDeviceCapabilities</key>
<array>
2024-02-11 02:07:06 +00:00
<string>armv7</string>
2021-05-17 19:08:47 +00:00
</array>
```
2024-02-11 02:07:06 +00:00
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.
2021-05-17 19:08:47 +00:00
2024-02-11 02:07:06 +00:00
## Toekennings
2021-05-17 19:08:47 +00:00
2024-02-11 02:07:06 +00:00
**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.
2021-05-17 19:08:47 +00:00
2024-02-11 02:07:06 +00:00
# Verwysings
2024-02-08 03:08:28 +00:00
* [https://mas.owasp.org/MASTG/iOS/0x06d-Testing-Data-Storage](https://mas.owasp.org/MASTG/iOS/0x06d-Testing-Data-Storage)
* [https://github.com/OWASP/owasp-mastg/blob/master/Document/0x06h-Testing-Platform-Interaction.md](https://github.com/OWASP/owasp-mastg/blob/master/Document/0x06h-Testing-Platform-Interaction.md)
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0069/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0069/)
* [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/](https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/)
2022-04-28 16:01:33 +00:00
<details>
2024-02-11 02:07:06 +00:00
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 02:07:06 +00:00
Ander maniere om HackTricks te ondersteun:
2022-04-28 16:01:33 +00:00
2024-02-11 02:07:06 +00:00
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks-uitrusting**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling 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 PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
2022-04-28 16:01:33 +00:00
</details>