mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
135 lines
8.6 KiB
Markdown
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:
|
|
|
|
.png>)
|
|
|
|
.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}}
|