iOS Basics

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Utofautishaji wa Haki na Sanduku la Mchanga

Katika iOS, kuna tofauti katika haki kati ya programu zinazopatikana kwa mtumiaji na michakato muhimu ya mfumo. Programu zinaendeshwa chini ya kitambulisho cha mtumiaji mobile, wakati michakato muhimu ya mfumo inafanya kazi kama root. Tofauti hii inaboreshwa na kifaa cha sanduku la mchanga, ambacho kinaweka vizuizi vikali juu ya hatua ambazo programu zinaweza kuchukua. Kwa mfano, hata kama programu zinashiriki kitambulisho cha mtumiaji sawa, zinaruhusiwa kufikia au kubadilisha data ya programu nyingine.

Programu zinafungwa katika saraka maalum (private/var/mobile/Applications/{kitambulisho cha kubahatisha}) na zina ufikiaji mdogo wa kusoma kwa maeneo na utendaji fulani wa mfumo, kama vile SMS na simu. Kufikia maeneo yaliyolindwa kunasababisha ombi la idhini ya mtumiaji.

Ulinzi wa Data

iOS inatoa watumiaji wa maendeleo API za Ulinzi wa Data, zilizojengwa juu ya Kipuri cha Usalama (SEP) - kifaa maalum cha kushirikiana kwa shughuli za kryptografia na usimamizi wa funguo. SEP inahakikisha usalama wa data kupitia funguo maalum za kifaa, UID ya kifaa, iliyojumuishwa ndani yake.

Wakati wa kuunda faili, funguo la kryptografia la AES la biti 256 lenye kipekee huzalishwa, likificha yaliyomo ya faili. Funguo hili la kryptografia, pamoja na kitambulisho cha darasa, kisha hufichwa kwa kutumia funguo la darasa na kuhifadhiwa ndani ya metadata ya faili. Kufichua faili kunahusisha kutumia funguo la mfumo kupata metadata, kupata funguo la darasa na kitambulisho cha darasa, na kisha kufichua funguo la kryptografia la faili.

iOS inaainisha darasa nne za ulinzi kwa usalama wa data, ambazo zinaamua lini na jinsi data inaweza kupatikana:

  • Ulinzi Kamili (NSFileProtectionComplete): Data haiwezi kufikiwa hadi kifaa kifunguliwe kwa kutumia nambari ya siri ya mtumiaji.

  • Lindwa Isipokuwa Ikiwa Imefunguliwa (NSFileProtectionCompleteUnlessOpen): Inaruhusu ufikiaji wa faili hata baada ya kifaa kufungwa, ikiwa faili ilifunguliwa wakati kifaa kilipokuwa kimefunguliwa.

  • Lindwa Mpaka Kwanza Mtumiaji Aithibitishe (NSFileProtectionCompleteUntilFirstUserAuthentication): Data inapatikana baada ya kufungua mtumiaji wa kwanza baada ya kuanza, na inabaki kupatikana hata kama kifaa kinafungwa tena.

  • Hakuna Ulinzi (NSFileProtectionNone): Data inalindwa tu na UID ya kifaa, ikirahisisha kufuta haraka data kwa mbali.

Ufichuzi wa darasa zote, isipokuwa NSFileProtectionNone, unahusisha funguo inayotokana na UID ya kifaa na nambari ya siri ya mtumiaji, ikihakikisha ufichuzi unawezekana tu kwenye kifaa chenye nambari ya siri sahihi. Tangu iOS 7, darasa la ulinzi la chaguo-msingi ni "Lindwa Mpaka Kwanza Mtumiaji Aithibitishe".

Watumiaji wa maendeleo wanaweza kutumia FileDP, chombo cha kuangalia darasa la ulinzi wa data ya faili kwenye iPhone.

# 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 chombo kilichofichwa na salama kwa kuhifadhi taarifa nyeti, inayopatikana tu na programu ambayo iliihifadhi au wale walio na idhini maalum. Ufichaji huu unalindwa na nenosiri la kipekee lililotengenezwa na iOS, ambalo lenyewe limefichwa kwa kutumia AES. Mchakato huu wa ufichaji unatumia kazi ya PBKDF2, ikichanganya kodi ya mtumiaji na chumvi iliyotokana na UID ya kifaa, sehemu ambayo chipseti ya enclave salama pekee inaweza kufikia. Kwa hivyo, hata kama kodi ya mtumiaji inajulikana, maudhui ya Keychain hayapatikani kwenye kifaa kingine chochote isipokuwa kile ambacho yalifichwa awali.

Usimamizi na ufikiaji wa data ya Keychain unashughulikiwa na daemani ya securityd, kulingana na idhini maalum za programu kama vile Keychain-access-groups na application-identifier.

Operesheni za API ya Keychain

API ya Keychain, iliyoelezewa kwa undani katika nyaraka za Huduma za Keychain za Apple, inatoa kazi muhimu za usimamizi wa uhifadhi salama:

  • SecItemAdd: Inaongeza kipengee kipya kwenye Keychain.

  • SecItemUpdate: Inasasisha kipengee kilichopo kwenye Keychain.

  • SecItemCopyMatching: Inapata kipengee kutoka kwenye Keychain.

  • SecItemDelete: Inaondoa kipengee kutoka kwenye Keychain.

Kuvunja nguvu ya nenosiri la Keychain kunahusisha kushambulia moja kwa moja ufunguo uliofichwa au kujaribu kuhadithi kodi ya mtumiaji kwenye kifaa yenyewe, ikizuiliwa sana na kucheleweshwa kwa enclave salama baada ya jaribio lisilofanikiwa.

Kuweka Ulinzi wa Data ya Kipengee cha Keychain

Viwango vya ulinzi wa data kwenye vitu vya Keychain vinawekwa kwa kutumia sifa ya kSecAttrAccessible wakati wa kuunda au kusasisha kipengee. Viwango hivi, kama ilivyoelezwa na Apple, vinadhibiti wakati na jinsi vitu vya Keychain vinavyopatikana:

  • kSecAttrAccessibleAlways: Vinapatikana wakati wowote, bila kujali hali ya kufunga kifaa.

  • kSecAttrAccessibleAlwaysThisDeviceOnly: Vinapatikana wakati wowote, lakini havijumuishwi kwenye nakala za akiba.

  • kSecAttrAccessibleAfterFirstUnlock: Vinapatikana baada ya kufungua kifaa mara ya kwanza baada ya kuanza upya.

  • kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly: Sawa na hapo juu, lakini haviwezi kuhamishwa kwenye vifaa vipya.

  • kSecAttrAccessibleWhenUnlocked: Vinapatikana tu wakati kifaa kimefunguliwa.

  • kSecAttrAccessibleWhenUnlockedThisDeviceOnly: Vinapatikana wakati kimefunguliwa, lakini havijumuishwi kwenye nakala za akiba.

  • kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly: Inahitaji kodi ya kifaa, lakini havijumuishwi kwenye nakala za akiba.

AccessControlFlags inaboresha njia za ufikiaji, kuruhusu uwakilishi wa kibaiolojia au matumizi ya kodi ya mtumiaji.

Onyo kuhusu Vifaa Vilivyofunguliwa

Kwenye vifaa vilivyofunguliwa, ulinzi wa Keychain unakuwa hatarini, na kuweka hatari kubwa ya usalama.

Uthabiti wa Data ya Keychain

Tofauti na data maalum ya programu ambayo inafutwa wakati programu inapoondolewa, data ya Keychain inadumu kwenye kifaa. Tabia hii inaweza kuwezesha wamiliki wapya wa kifaa cha mkono cha mtu wa zamani kupata data ya programu ya mmiliki wa awali kwa kusakinisha tena programu. Waendelezaji wanashauriwa kufuta data ya Keychain kwa kusudi kabla ya kusakinisha programu au wakati wa kujitolea ili kupunguza hatari hii. Hapa kuna mfano wa nambari ya Swift inayoonyesha jinsi ya kufuta data ya Keychain wakati wa uzinduzi wa kwanza wa programu:

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
}

Uwezo wa Programu

Katika uwanja wa maendeleo ya programu, sandboxing inacheza jukumu muhimu katika kuimarisha usalama. Mchakato huu huhakikisha kuwa kila programu inafanya kazi ndani ya saraka yake ya nyumbani ya kipekee, hivyo kuzuia upatikanaji wake kwa faili za mfumo au data inayomilikiwa na programu nyingine. Utekelezaji wa vizuizi hivi hufanywa kupitia sera za sandbox, ambazo ni sehemu ya Trusted BSD (MAC) Mandatory Access Control Framework.

Wabunifu wa programu wana uwezo wa kusanidi uwezo au ruhusa fulani kwa programu zao, kama vile Data Protection au Keychain Sharing. Ruhusa hizi zinafanywa mara moja baada ya programu kusakinishwa. Hata hivyo, ili kupata rasilimali zilizolindwa fulani, programu lazima ipate idhini wazi kutoka kwa mtumiaji wakati wa jaribio la kwanza. Hii inafanikiwa kupitia matumizi ya purpose strings au usage description strings, ambazo hupewa watumiaji katika ombi la idhini.

Kwa wale walio na ufikiaji wa msimbo wa chanzo, uthibitisho wa ruhusa zilizojumuishwa katika faili ya Info.plist unaweza kufanywa kwa:

  1. Kufungua mradi katika Xcode.

  2. Kupata na kufungua faili ya Info.plist.

  3. Kutafuta funguo zilizo na kipimo cha "Privacy -", na chaguo la kuona funguo/thamani za asili kwa uwazi.

Wakati unashughulika na faili ya IPA, hatua zifuatazo zinaweza kufuatwa:

  1. Kufungua faili ya IPA.

  2. Kupata faili ya Info.plist ndani ya Payload/<jina la programu>.app/.

  3. Geuza faili kuwa muundo wa XML ikiwa ni lazima, kwa ukaguzi rahisi.

Kwa mfano, purpose strings katika faili ya Info.plist inaweza kuonekana kama ifuatavyo:

<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 ya Info.plist ya programu inaonyesha uwezo wa kifaa ambao husaidia Duka la App kuchuja programu kulingana na uwezo wa kifaa. Haya yamefafanuliwa chini ya ufunguo wa UIRequiredDeviceCapabilities. Kwa mfano:

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

Mfano huu unaonyesha kuwa programu inalingana na seti ya maagizo ya armv7. Watengenezaji pia wanaweza kubainisha uwezo kama vile nfc ili kuhakikisha kuwa programu yao inapatikana tu kwenye vifaa vinavyounga mkono NFC.

Haki za Matumizi

Haki za Matumizi ni sehemu muhimu nyingine ya maendeleo ya programu za iOS, zikitumika kama jozi za thamani muhimu ambazo hutoa ruhusa kwa programu kutekeleza operesheni fulani zaidi ya ukaguzi wa wakati wa uendeshaji. Kwa mfano, kuwezesha Ulinzi wa Data katika programu kunahusisha kuongeza haki maalum katika mradi wa Xcode, ambayo kisha inaonyeshwa katika faili ya haki za programu au faili ya utoaji wa simu iliyowekwa kwa IPAs.

Marejeo

Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Last updated