hacktricks/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md

135 lines
8.6 KiB
Markdown

# iOS Testing Environment
{{#include ../../banners/hacktricks-training.md}}
## Apple Developer Program
**Provisioning identity** je skup javnih i privatnih ključeva koji su povezani sa Apple developerskim nalogom. Da biste **potpisali aplikacije**, potrebno je da platite **99$/god** da biste se registrovali u **Apple Developer Program** kako biste dobili svoju provisioning identity. Bez toga nećete moći da pokrenete aplikacije iz izvornog koda na fizičkom uređaju. Druga opcija je korišćenje **jailbroken uređaja**.
Počevši od Xcode 7.2, Apple je omogućio opciju za kreiranje **besplatnog iOS razvojnog provisioning profila** koji omogućava pisanje i testiranje vaše aplikacije na pravom iPhone-u. Idite na _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Dodajte novi Appli ID sa vašim podacima) --> _Kliknite na kreirani Apple ID_ --> _Manage Certificates_ --> _+_ (Apple Development) --> _Done_\
\_\_Zatim, da biste pokrenuli vašu aplikaciju na vašem iPhone-u, prvo morate **naznačiti iPhone da veruje računaru.** Zatim, možete pokušati da **pokrenete aplikaciju na mobilnom iz Xcode-a,** ali će se pojaviti greška. Idite na _Settings_ --> _General_ --> _Profiles and Device Management_ --> Izaberite nepouzdani profil i kliknite na "**Trust**".
Napomena da **aplikacije potpisane istim potpisnim sertifikatom mogu deliti resurse na siguran način, kao što su stavke iz keychain-a**.
Provisioning profili se čuvaju unutar telefona u **`/Library/MobileDevice/ProvisioningProfiles`**
## **Simulator**
> [!TIP]
> Napomena da **simulator nije isto što i emulator**. Simulator samo simulira ponašanje uređaja i funkcije, ali ih zapravo ne koristi.
### **Simulator**
Prva stvar koju treba da znate je da je **izvođenje pentesta unutar simulatora mnogo ograničenije nego na jailbroken uređaju**.
Svi alati potrebni za izgradnju i podršku iOS aplikaciji su **samo zvanično podržani na Mac OS**.\
Apple-ov de facto alat za kreiranje/debugovanje/instrumentaciju iOS aplikacija je **Xcode**. Može se koristiti za preuzimanje drugih komponenti kao što su **simulatori** i različite **SDK** **verzije** potrebne za izgradnju i **testiranje** vaše aplikacije.\
Preporučuje se da **preuzmete** Xcode iz **zvanične prodavnice aplikacija**. Druge verzije mogu sadržati malver.
Datoteke simulatora se mogu naći u `/Users/<username>/Library/Developer/CoreSimulator/Devices`
Da biste otvorili simulator, pokrenite Xcode, zatim pritisnite na _Xcode tab_ --> _Open Developer tools_ --> _Simulator_\
\_\_Na sledećoj slici klikom na "iPod touch \[...\]" možete izabrati drugi uređaj za testiranje:
![](<../../images/image (270).png>)
![](<../../images/image (520).png>)
### Aplikacije u Simulatoru
Unutar `/Users/<username>/Library/Developer/CoreSimulator/Devices` možete pronaći sve **instalirane simulatore**. Ako želite da pristupite datotekama aplikacije kreirane unutar jednog od emulatora, može biti teško znati **u kojem je instalirana aplikacija**. Brz način da **pronađete tačan UID** je da pokrenete aplikaciju u simulatoru i izvršite:
```bash
xcrun simctl list | grep Booted
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
```
Jednom kada znate UID, aplikacije instalirane unutar njega mogu se pronaći u `/Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application`
Međutim, iznenađujuće, ovde nećete pronaći aplikaciju. Morate pristupiti `/Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/`
I u ovoj fascikli možete **pronaći paket aplikacije.**
## Emulator
Corellium je jedini javno dostupan iOS emulator. To je preduzetničko SaaS rešenje sa modelom licence po korisniku i ne nudi probnu licencu.
## Nema potrebe za Jailbreak-om
Pogledajte ovaj blog post o tome kako testirati iOS aplikaciju na **uređaju koji nije jailbreak-ovan**:
{{#ref}}
ios-pentesting-without-jailbreak.md
{{#endref}}
## Jailbreaking
Apple strogo zahteva da kod koji se izvršava na iPhone-u mora biti **potpisan sertifikatom koji je izdao Apple**. **Jailbreaking** je proces aktivnog **zaobilaženja takvih ograničenja** i drugih bezbednosnih kontrola koje postavlja OS. Stoga, kada je uređaj jailbreak-ovan, **provera integriteta** koja je odgovorna za proveru instaliranih aplikacija je zakrpljena, tako da je **zaobilažena**.
> [!TIP]
> Za razliku od Android-a, **ne možete preći u "Developer Mode"** na iOS-u da biste pokrenuli nepodpisani/neprovereni kod na uređaju.
### Android Rooting vs. iOS Jailbreaking
Iako se često upoređuju, **rooting** na Android-u i **jailbreaking** na iOS-u su fundamentalno različiti procesi. Rooting Android uređaja može uključivati **instalaciju `su` binarnog fajla** ili **zamenu sistema sa root-ovanim prilagođenim ROM-om**, što ne zahteva nužno eksploate ako je bootloader otključan. **Flashing custom ROM-ova** zamenjuje OS uređaja nakon otključavanja bootloader-a, ponekad zahtevajući eksploataciju.
Nasuprot tome, iOS uređaji ne mogu flash-ovati prilagođene ROM-ove zbog ograničenja bootloader-a da pokreće samo Apple-om potpisane slike. **Jailbreaking iOS** ima za cilj da zaobiđe Apple-ove zaštite potpisivanja koda kako bi se pokrenuo nepodpisani kod, proces koji komplikuje kontinuirana poboljšanja bezbednosti od strane Apple-a.
### Izazovi Jailbreakinga
Jailbreaking iOS-a postaje sve teži jer Apple brzo zakrpljuje ranjivosti. **Downgrade iOS-a** je moguć samo na ograničeno vreme nakon izdanja, što čini jailbreaking vremenski osetljivim pitanjem. Uređaji korišćeni za testiranje bezbednosti ne bi trebali biti ažurirani osim ako re-jailbreaking nije zagarantovan.
Ažuriranja iOS-a kontrolišu **mehanizam izazov-odgovor** (SHSH blobs), omogućavajući instalaciju samo za Apple-om potpisane odgovore. Ovaj mehanizam, poznat kao "prozor potpisivanja", ograničava mogućnost čuvanja i kasnije korišćenje OTA firmware paketa. [IPSW Downloads website](https://ipsw.me) je resurs za proveru trenutnih prozora potpisivanja.
### Varijante Jailbreakinga
- **Tethered jailbreaks** zahtevaju vezu sa računarom za svaki reboot.
- **Semi-tethered jailbreaks** omogućavaju pokretanje u ne-jailbroken režimu bez računara.
- **Semi-untethered jailbreaks** zahtevaju ručni re-jailbreaking bez potrebe za računarom.
- **Untethered jailbreaks** nude trajno rešenje za jailbreak bez potrebe za ponovnom primenom.
### Alati i Resursi za Jailbreaking
Alati za jailbreaking variraju prema verziji iOS-a i uređaju. Resursi kao što su [Can I Jailbreak?](https://canijailbreak.com), [The iPhone Wiki](https://www.theiphonewiki.com), i [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/) pružaju ažurirane informacije. Primeri uključuju:
- [Checkra1n](https://checkra.in/) za A7-A11 čip uređaje.
- [Palera1n](https://palera.in/) za Checkm8 uređaje (A8-A11) na iOS 15.0-16.5.
- [Unc0ver](https://unc0ver.dev/) za iOS verzije do 14.8.
Modifikovanje vašeg uređaja nosi rizike, i jailbreaking treba pristupiti sa oprezom.
### Prednosti i Rizici Jailbreakinga
Jailbreaking **uklanja sandboxing koji nameće OS**, omogućavajući aplikacijama pristup celom fajl sistemu. Ova sloboda omogućava instalaciju neodobrenih aplikacija i pristup više API-ja. Međutim, za obične korisnike, jailbreaking **nije preporučen** zbog potencijalnih bezbednosnih rizika i nestabilnosti uređaja.
### **Nakon Jailbreakinga**
{{#ref}}
basic-ios-testing-operations.md
{{#endref}}
### **Detekcija Jailbreakinga**
**Nekoliko aplikacija će pokušati da detektuje da li je mobilni uređaj jailbreak-ovan i u tom slučaju aplikacija neće raditi**
- Nakon jailbreakinga na iOS-u **fajlovi i fascikle se obično instaliraju**, ovi se mogu pretraživati da bi se utvrdilo da li je uređaj jailbreak-ovan.
- Na jailbreak-ovanom uređaju aplikacije dobijaju **read/write pristup novim fajlovima** van sandbox-a
- Neki **API** **pozivi** će **drugačije reagovati**
- Prisutnost **OpenSSH** servisa
- Pozivanje `/bin/sh` će **vratiti 1** umesto 0
**Više informacija o tome kako detektovati jailbreaking** [**ovde**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**.**
Možete pokušati da izbegnete ovu detekciju koristeći **objection's** `ios jailbreak disable`
## **Zaobilaženje Detekcije Jailbreakinga**
- Možete pokušati da izbegnete ovu detekciju koristeći **objection's** `ios jailbreak disable`
- Takođe možete instalirati alat **Liberty Lite** (https://ryleyangus.com/repo/). Kada se repo doda, aplikacija bi trebala da se pojavi u 'Search' tabu
## Reference
- [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
{{#include ../../banners/hacktricks-training.md}}