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

129 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# iOS Testing Environment
{{#include ../../banners/hacktricks-training.md}}
## Apple Developer Program
A **provisioning identity** ni mkusanyiko wa funguo za umma na za kibinafsi ambazo zinahusishwa na akaunti ya mdevelopa wa Apple. Ili **kusaini programu** unahitaji kulipa **99$/mwaka** ili kujiandikisha katika **Apple Developer Program** kupata kitambulisho chako cha usambazaji. Bila hii huwezi kuendesha programu kutoka kwa msimbo wa chanzo kwenye kifaa halisi. Chaguo lingine la kufanya hivi ni kutumia **kifaa kilichovunjwa**.
Kuanzia Xcode 7.2 Apple imeweka chaguo la kuunda **profaili ya usambazaji ya maendeleo ya iOS bure** inayoruhusu kuandika na kujaribu programu yako kwenye iPhone halisi. Nenda kwenye _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Ongeza ID mpya ya Appli na akcredentials zako) --> _Bonyeza kwenye Apple ID iliyoundwa_ --> _Manage Certificates_ --> _+_ (Maendeleo ya Apple) --> _Done_\
\_\_Kisha, ili kuendesha programu yako kwenye iPhone yako unahitaji kwanza **kuonyesha iPhone kuamini kompyuta.** Kisha, unaweza kujaribu **kuendesha programu kwenye simu kutoka Xcode,** lakini hitilafu itaonekana. Hivyo nenda kwenye _Settings_ --> _General_ --> _Profiles and Device Management_ --> Chagua profaili isiyoaminika na bonyeza "**Amini**".
Kumbuka kwamba **programu zilizotiwa saini na cheti sawa za saini zinaweza kushiriki rasilimali kwa njia salama, kama vitu vya keychain**.
Profaili za usambazaji zimehifadhiwa ndani ya simu katika **`/Library/MobileDevice/ProvisioningProfiles`**
## **Simulator**
> [!NOTE]
> Kumbuka kwamba **simulator si sawa na emulator**. Simulator inasimulia tu tabia ya kifaa na kazi lakini haitumii kwa kweli.
### **Simulator**
Jambo la kwanza unahitaji kujua ni kwamba **kutekeleza pentest ndani ya simulator kutakuwa na mipaka zaidi kuliko kufanya hivyo kwenye kifaa kilichovunjwa**.
Zana zote zinazohitajika kujenga na kusaidia programu ya iOS zina **tu zinasupport rasmi kwenye Mac OS**.\
Zana ya de facto ya Apple kwa kuunda/kukarabati/kufanya kazi za iOS ni **Xcode**. Inaweza kutumika kupakua vipengele vingine kama **simulators** na **SDK** **toleo** tofauti zinazohitajika kujenga na **kujaribu** programu yako.\
Inapendekezwa sana **kupakua** Xcode kutoka kwenye **duka rasmi la programu**. Toleo lingine linaweza kubeba malware.
Faili za simulator zinaweza kupatikana katika `/Users/<username>/Library/Developer/CoreSimulator/Devices`
Ili kufungua simulator, endesha Xcode, kisha bonyeza kwenye _Xcode tab_ --> _Open Developer tools_ --> _Simulator_\
\_\_Katika picha ifuatayo bonyeza "iPod touch \[...]" unaweza kuchagua kifaa kingine cha kujaribu:
![](<../../images/image (270).png>)
![](<../../images/image (520).png>)
### Applications in the Simulator
Ndani ya `/Users/<username>/Library/Developer/CoreSimulator/Devices` unaweza kupata **simulators zote zilizowekwa**. Ikiwa unataka kufikia faili za programu iliyoundwa ndani ya moja ya emulators inaweza kuwa vigumu kujua **katika ipi programu imewekwa**. Njia ya haraka ya **kupata UID sahihi** ni kutekeleza programu kwenye simulator na kutekeleza:
```bash
xcrun simctl list | grep Booted
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
```
Mara tu unavyojua UID, programu zilizowekwa ndani yake zinaweza kupatikana katika `/Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application`
Hata hivyo, kwa kushangaza huwezi kupata programu hapa. Unahitaji kufikia `/Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/`
Na katika folda hii unaweza **kupata kifurushi cha programu.**
## Emulator
Corellium ndiyo emulator pekee ya iOS inayopatikana hadharani. Ni suluhisho la SaaS la biashara lenye mfano wa leseni kwa mtumiaji na halitoi leseni ya majaribio.
## Hakuna Jailbreak inayohitajika
Angalia chapisho hili la blog kuhusu jinsi ya pentest programu ya iOS katika **kifaa kisichokuwa na jailbroken**: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
## Jailbreaking
Apple inahitaji kwa nguvu kwamba msimbo unaotumika kwenye iPhone lazima uwe **umetiwa saini na cheti kilichotolewa na Apple**. **Jailbreaking** ni mchakato wa kukwepa **vizuizi kama hivyo** na udhibiti mwingine wa usalama uliowekwa na OS. Hivyo, mara kifaa kinapokuwa kimejailbreak, **ukaguzi wa uadilifu** ambao unawajibika kwa kuangalia programu zinazowekwa unarekebishwa ili **upitishwe**.
> [!NOTE]
> Tofauti na Android, **huwezi kubadilisha kuwa "Mode ya Developer"** katika iOS ili kuendesha msimbo usio na saini/usioaminika kwenye kifaa.
### Android Rooting vs. iOS Jailbreaking
Ingawa mara nyingi hufananishwa, **rooting** kwenye Android na **jailbreaking** kwenye iOS ni michakato tofauti kimsingi. Rooting vifaa vya Android inaweza kujumuisha **kufunga `su` binary** au **kurekebisha mfumo kwa ROM iliyoshikiliwa**, ambayo haihitaji lazima matumizi ya exploit ikiwa bootloader imefunguliwa. **Kuflash ROM za kawaida** kunabadilisha OS ya kifaa baada ya kufungua bootloader, wakati mwingine kunahitaji exploit.
Kwa upande mwingine, vifaa vya iOS haviwezi kuflash ROM za kawaida kutokana na vizuizi vya bootloader vya kuanzisha picha zilizotiwa saini na Apple pekee. **Jailbreaking iOS** inalenga kukwepa ulinzi wa saini wa msimbo wa Apple ili kuendesha msimbo usio na saini, mchakato ambao unachanganya na maboresho ya usalama ya Apple yanayoendelea.
### Changamoto za Jailbreaking
Jailbreaking iOS inakuwa ngumu zaidi kadri Apple inavyorekebisha udhaifu haraka. **Kudondosha iOS** kunawezekana tu kwa muda mfupi baada ya kutolewa, na kufanya jailbreaking kuwa suala la muda. Vifaa vinavyotumika kwa majaribio ya usalama havipaswi kusasishwa isipokuwa re-jailbreaking inahakikishwa.
Sasisho za iOS zinadhibitiwa na **mekanismu ya changamoto-jibu** (SHSH blobs), ikiruhusu usakinishaji tu kwa majibu yaliyotiwa saini na Apple. Mekanismu hii, inayojulikana kama "dirisha la saini", inapunguza uwezo wa kuhifadhi na kutumia baadaye vifurushi vya firmware vya OTA. Tovuti ya [IPSW Downloads](https://ipsw.me) ni rasilimali ya kuangalia dirisha za sasa za saini.
### Aina za Jailbreak
- **Jailbreak za tethered** zinahitaji muunganisho wa kompyuta kwa kila upya.
- **Jailbreak za semi-tethered** zinaruhusu kuanzisha katika hali isiyo na jailbroken bila kompyuta.
- **Jailbreak za semi-untethered** zinahitaji re-jailbreaking ya mikono bila kuhitaji kompyuta.
- **Jailbreak za untethered** zinatoa suluhisho la kudumu la jailbreak bila haja ya kuomba tena.
### Zana na Rasilimali za Jailbreaking
Zana za jailbreaking zinatofautiana kulingana na toleo la iOS na kifaa. Rasilimali kama [Can I Jailbreak?](https://canijailbreak.com), [The iPhone Wiki](https://www.theiphonewiki.com), na [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/) zinatoa taarifa za kisasa. Mifano ni pamoja na:
- [Checkra1n](https://checkra.in/) kwa vifaa vya chip A7-A11.
- [Palera1n](https://palera.in/) kwa vifaa vya Checkm8 (A8-A11) kwenye iOS 15.0-16.5.
- [Unc0ver](https://unc0ver.dev/) kwa toleo za iOS hadi 14.8.
Kurekebisha kifaa chako kuna hatari, na jailbreaking inapaswa kuchukuliwa kwa tahadhari.
### Manufaa na Hatari za Jailbreaking
Jailbreaking **inondoa sandboxing iliyowekwa na OS**, ikiruhusu programu kufikia mfumo mzima wa faili. Uhuru huu unaruhusu usakinishaji wa programu zisizothibitishwa na ufikiaji wa APIs zaidi. Hata hivyo, kwa watumiaji wa kawaida, jailbreaking **haitashauriwa** kutokana na hatari za usalama na kutokuwa thabiti kwa kifaa.
### **Baada ya Jailbreaking**
{{#ref}}
basic-ios-testing-operations.md
{{#endref}}
### **Ufuatiliaji wa Jailbreak**
**Programu kadhaa zitajaribu kugundua ikiwa simu imejailbroken na katika hali hiyo programu haitafanya kazi**
- Baada ya jailbreaking iOS **faili na folda kwa kawaida huwekwa**, hizi zinaweza kutafutwa ili kubaini ikiwa kifaa kimejailbroken.
- Katika kifaa kilichojailbreak programu zinapata **ufikiaji wa kusoma/kandika kwa faili mpya** nje ya sandbox
- Baadhi ya **API** **itoaji** zitakuwa **na tabia tofauti**
- Uwepo wa huduma ya **OpenSSH**
- Kuita `/bin/sh` itarudisha **1** badala ya 0
**Taarifa zaidi kuhusu jinsi ya kugundua jailbreaking** [**hapa**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**.**
Unaweza kujaribu kuepuka hizi kugundua kwa kutumia **objection's** `ios jailbreak disable`
## **Kuepuka Ufuatiliaji wa Jailbreak**
- Unaweza kujaribu kuepuka hizi kugundua kwa kutumia **objection's** `ios jailbreak disable`
- Unaweza pia kufunga zana **Liberty Lite** (https://ryleyangus.com/repo/). Mara tu repo itakapoongezwa, programu inapaswa kuonekana katika tab ya Search
## Marejeleo
- [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}}