tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Kutenganisha Mamlaka na Sanduku

Katika iOS, kuna tofauti katika mamlaka kati ya programu zinazoweza kufikiwa na mtumiaji na michakato ya msingi ya mfumo. Programu zinafanya kazi chini ya utambulisho wa mtumiaji mobile, wakati michakato muhimu ya mfumo inafanya kazi kama root. Kutenganisha hili kunaboreshwa na mekanismu ya sanduku, ambayo inatoa mipaka madhubuti juu ya vitendo ambavyo programu zinaweza kuchukua. Kwa mfano, hata kama programu zinashiriki utambulisho sawa wa mtumiaji, zinakatazwa kufikia au kubadilisha data za kila mmoja.

Programu zinawekwa katika directory maalum (private/var/mobile/Applications/{random ID}) na zina upatikanaji wa kusoma uliozuiliwa kwa maeneo na kazi fulani za mfumo, kama vile SMS na simu. Upatikanaji wa maeneo yaliyolindwa unachochea ombi la pop-up kwa ruhusa ya mtumiaji.

Ulinzi wa Data

iOS inatoa waendelezaji Data Protection APIs, zilizojengwa juu ya Secure Enclave Processor (SEP) — coprocessor maalum kwa ajili ya operesheni za kificho na usimamizi wa funguo. SEP inahakikisha ulinzi wa data kupitia funguo maalum za kifaa, UID ya kifaa, iliyojumuishwa ndani yake.

Wakati wa kuunda faili, funguo ya kipekee ya AES ya bit 256 inazalishwa, ikificha maudhui ya faili. Funguo hii ya kificho, pamoja na ID ya darasa, kisha inafichwa kwa kutumia funguo ya darasa na kuhifadhiwa ndani ya metadata ya faili. Kufichua faili kunahusisha kutumia funguo ya mfumo kufikia metadata, kupata funguo ya darasa na ID ya darasa, na kisha kufichua funguo ya kipekee ya kificho ya faili.

iOS inaelezea darasa nne za ulinzi kwa ajili ya usalama wa data, ambazo zinatofautisha wakati na jinsi data inaweza kufikiwa:

  • Ulinzi Kamili (NSFileProtectionComplete): Data haiwezi kufikiwa hadi kifaa kifunguliwe kwa kutumia nambari ya siri ya mtumiaji.
  • Ililindwa Isipokuwa Iwapo Imefunguliwa (NSFileProtectionCompleteUnlessOpen): Inaruhusu upatikanaji wa faili hata baada ya kifaa kufungwa, ikiwa faili ilifunguliwa wakati kifaa kilifunguliwa.
  • Ililindwa Hadi Uthibitisho wa Kwanza wa Mtumiaji (NSFileProtectionCompleteUntilFirstUserAuthentication): Data inapatikana baada ya uthibitisho wa kwanza wa mtumiaji baada ya kuanzisha, ikibaki inapatikana hata kama kifaa kimefungwa tena.
  • Hakuna Ulinzi (NSFileProtectionNone): Data inalindwa tu na UID ya kifaa, ikiruhusu kufuta data kwa haraka kwa mbali.

Kufichwa kwa madarasa yote, isipokuwa NSFileProtectionNone, kunahusisha funguo inayotokana na UID ya kifaa na nambari ya siri ya mtumiaji, kuhakikisha kwamba kufichua kunawezekana tu kwenye kifaa chenye nambari sahihi ya siri. Kuanzia iOS 7 na kuendelea, darasa la ulinzi la default ni "Ililindwa Hadi Uthibitisho wa Kwanza wa Mtumiaji".

Waendelezaji wanaweza kutumia FileDP, chombo cha kuchunguza darasa la ulinzi wa data la faili kwenye iPhone.

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

Keychain

Katika iOS, Keychain inatumika kama konteina salama iliyo na usimbuaji kwa ajili ya kuhifadhi taarifa nyeti, inayoweza kufikiwa tu na programu iliyohifadhi taarifa hizo au zile zilizoidhinishwa wazi. Usimbuaji huu unalindwa na nenosiri la kipekee lililotengenezwa na iOS, ambalo lenyewe limefichwa kwa AES. Mchakato huu wa usimbuaji unatumia PBKDF2 function, ukichanganya nambari ya siri ya mtumiaji na chumvi inayotokana na UID ya kifaa, sehemu ambayo ni ya secure enclave chipset pekee inayoweza kufikiwa. Hivyo, hata kama nambari ya siri ya mtumiaji inajulikana, maudhui ya Keychain yanabaki kuwa yasiyoweza kufikiwa kwenye kifaa kingine chochote isipokuwa kile ambacho yalifichwa awali.

Usimamizi na ufikiaji wa data za Keychain unashughulikiwa na securityd daemon, kulingana na haki maalum za programu kama Keychain-access-groups na application-identifier.

Keychain API Operations

Keychain API, iliyoelezwa katika Apple's Keychain Services documentation, inatoa kazi muhimu za usimamizi wa hifadhi salama:

  • SecItemAdd: Inongeza kipengele kipya kwenye Keychain.
  • SecItemUpdate: Inasasisha kipengele kilichopo kwenye Keychain.
  • SecItemCopyMatching: Inapata kipengele kutoka kwenye Keychain.
  • SecItemDelete: Inafuta kipengele kutoka kwenye Keychain.

Kujaribu kuvunja nenosiri la Keychain kunahusisha ama kushambulia funguo zilizofichwa moja kwa moja au kujaribu kukisia nambari ya siri kwenye kifaa chenyewe, ambayo inakabiliwa kwa kiasi kikubwa na utekelezaji wa kuchelewesha wa secure enclave kati ya majaribio yasiyofanikiwa.

Configuring Keychain Item Data Protection

Viwango vya ulinzi wa data kwa vipengele vya Keychain vinakabiliwa kwa kutumia sifa ya kSecAttrAccessible wakati wa kuunda au kusasisha kipengele. Viwango hivi, kama ilivyoainishwa na Apple, vinatambulisha wakati na jinsi vipengele vya Keychain vinavyoweza kufikiwa:

  • kSecAttrAccessibleAlways: Inapatikana wakati wowote, bila kujali hali ya kufunga kifaa.
  • kSecAttrAccessibleAlwaysThisDeviceOnly: Inapatikana kila wakati, lakini haijajumuishwa kwenye nakala za akiba.
  • kSecAttrAccessibleAfterFirstUnlock: Inapatikana baada ya kufungua mara ya kwanza baada ya kuanzisha upya.
  • kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly: Kama ilivyo hapo juu, lakini haiwezi kuhamishwa kwa vifaa vipya.
  • kSecAttrAccessibleWhenUnlocked: Inapatikana tu wakati kifaa kimefunguliwa.
  • kSecAttrAccessibleWhenUnlockedThisDeviceOnly: Inapatikana wakati kimefunguliwa, haijajumuishwa kwenye nakala za akiba.
  • kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly: Inahitaji nambari ya siri ya kifaa, haijajumuishwa kwenye nakala za akiba.

AccessControlFlags zinaboresha zaidi mbinu za ufikiaji, kuruhusu uthibitisho wa kibaiolojia au matumizi ya nambari ya siri.

Jailbroken Devices Warning

warning

Kwenye vifaa vilivyovunjwa, ulinzi wa Keychain umeharibiwa, ukileta hatari kubwa ya usalama.

Persistence of Keychain Data

Tofauti na data maalum za programu zinazofutwa wakati wa kufuta programu, data za Keychain zinadumu kwenye kifaa. Tabia hii inaweza kuwapa wamiliki wapya wa kifaa cha pili ufikiaji wa data za programu za mmiliki wa awali kwa kuanzisha upya programu. Wanakuza wanashauriwa kufuta data za Keychain kwa hiari wakati wa usakinishaji wa programu au wakati wa kutoka ili kupunguza hatari hii. Hapa kuna mfano wa msimbo wa Swift unaoonyesha jinsi ya kufuta data za Keychain wakati wa uzinduzi wa kwanza wa programu:

swift
let userDefaults = UserDefaults.standard

if userDefaults.bool(forKey: "hasRunBefore") == false {
// Remove Keychain items here

// Update the flag indicator
userDefaults.set(true, forKey: "hasRunBefore")
userDefaults.synchronize() // Forces the app to update UserDefaults
}

App Capabilities

Katika eneo la maendeleo ya programu, sandboxing ina jukumu muhimu katika kuimarisha usalama. Mchakato huu unahakikisha kwamba kila programu inafanya kazi ndani ya saraka yake ya nyumbani ya kipekee, hivyo kuzuia kufikia faili za mfumo au data zinazomilikiwa na programu nyingine. Utekelezaji wa vizuizi hivi unafanywa kupitia sera za sandbox, ambazo ni sehemu ya Trusted BSD (MAC) Mandatory Access Control Framework.

Wakuu wa programu wana uwezo wa kuunda uwezo au ruhusa fulani kwa programu zao, kama vile Data Protection au Keychain Sharing. Ruhusa hizi zinatumika mara moja baada ya programu kufungwa. Hata hivyo, ili kufikia rasilimali fulani zilizolindwa, programu inapaswa kupata idhini wazi kutoka kwa mtumiaji wakati wa jaribio la kwanza. Hii inafanywa kwa kutumia purpose strings au usage description strings, ambazo zinawasilishwa kwa watumiaji katika arifa ya ombi la ruhusa.

Kwa wale wenye ufikiaji wa msimbo wa chanzo, uthibitisho wa ruhusa zilizo katika faili ya Info.plist unaweza kufanywa kwa:

  1. Kufungua mradi katika Xcode.
  2. Kutafuta na kufungua faili ya Info.plist.
  3. Kutafuta funguo zilizoanzishwa na "Privacy -", ikiwa na chaguo la kuona funguo/thamani za asili kwa uwazi.

Wakati wa kushughulikia faili la IPA, hatua zifuatazo zinaweza kufuatwa:

  1. Fungua faili la IPA.
  2. Tafuta faili ya Info.plist ndani ya Payload/<appname>.app/.
  3. Geuza faili kuwa katika muundo wa XML ikiwa ni lazima, kwa ukaguzi rahisi.

Kwa mfano, purpose strings katika faili ya Info.plist zinaweza kuonekana kama hii:

xml
<plist version="1.0">
<dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Your location is used to provide turn-by-turn directions to your destination.</string>

Uwezo wa Kifaa

Faili la Info.plist la programu linaelezea uwezo wa kifaa ambao husaidia Duka la Programu kuchuja programu kwa ajili ya ulinganifu wa kifaa. Haya yanafafanuliwa chini ya ufunguo wa UIRequiredDeviceCapabilities. Kwa mfano:

xml
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>

Mfano huu unaonyesha kwamba programu inafaa na seti ya maagizo ya armv7. Wataalamu wa programu wanaweza pia kubainisha uwezo kama nfc ili kuhakikisha programu yao inapatikana tu kwa vifaa vinavyounga mkono NFC.

Mamlaka

Mamlaka ni kipengele kingine muhimu katika maendeleo ya programu za iOS, kinachofanya kazi kama jozi za funguo-thamani zinazotoa ruhusa kwa programu kufanya operesheni fulani zaidi ya ukaguzi wa wakati wa utekelezaji. Kwa mfano, kuwezesha Ulinzi wa Data katika programu inahusisha kuongeza mamlaka maalum katika mradi wa Xcode, ambayo kisha inaonyeshwa katika faili za mamlaka za programu au faili ya usambazaji wa simu iliyojumuishwa kwa IPAs.

Marejeleo

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks