iOS Pentesting

Tumia Trickest kujenga na kutumia workflows kwa kutumia zana za jamii ya juu zaidi duniani. Pata Ufikiaji Leo:

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

Njia nyingine za kusaidia HackTricks:

Misingi ya iOS

pageiOS Basics

Mazingira ya Majaribio

Kwenye ukurasa huu unaweza kupata habari kuhusu simulator ya iOS, emulators na jailbreaking:

pageiOS Testing Environment

Uchambuzi wa Awali

Operesheni za Msingi za Uchunguzi wa iOS

Wakati wa uchunguzi operesheni kadhaa zitapendekezwa (unganisha kifaa, soma/andika/pakia/shusha faili, tumia baadhi ya zana...). Kwa hivyo, ikiwa hujui jinsi ya kufanya mojawapo ya hatua hizi tafadhali, anza kusoma ukurasa:

pageiOS Basic Testing Operations

Kwa hatua zifuatazo programu inapaswa kuwa imewekwa kwenye kifaa na tayari kupata faili ya IPA ya programu. Soma ukurasa wa Operesheni za Msingi za Uchunguzi wa iOS kujifunza jinsi ya kufanya hivi.

Uchambuzi wa Starehe wa Msingi

Inashauriwa kutumia zana MobSF kufanya Uchambuzi wa Starehe wa moja kwa moja kwa faili ya IPA.

Uthibitisho wa ulinzi uliopo kwenye binary:

  • PIE (Position Independent Executable): Ikiwa imewezeshwa, programu inapakia kwenye anwani ya kumbukumbu ya kubahatisha kila wakati inapoanzishwa, ikifanya iwe ngumu kutabiri anwani yake ya kumbukumbu ya awali.

otool -hv <app-binary> | grep PIE   # Inapaswa kujumuisha bendera ya PIE
  • Stack Canaries: Kuthibitisha uadilifu wa steki, thamani ya 'canary' hutiwa kwenye steki kabla ya kuita kazi na kuthibitishwa tena mara tu kazi inapomalizika.

otool -I -v <app-binary> | grep stack_chk   # Inapaswa kujumuisha alama: stack_chk_guard na stack_chk_fail
  • ARC (Automatic Reference Counting): Kuzuia kasoro za kawaida za uharibifu wa kumbukumbu

otool -I -v <app-binary> | grep objc_release   # Inapaswa kujumuisha alama ya _objc_release
  • Binary Iliyofichwa: Binary inapaswa kuwa imefichwa

otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT   # cryptid inapaswa kuwa 1

Uthibitisho wa Kazi Zenye Hisia/Zisizo Salama

  • Algorithms Dhaifu za Hashing

# Kwenye kifaa cha iOS
otool -Iv <app> | grep -w "_CC_MD5"
otool -Iv <app> | grep -w "_CC_SHA1"

# Kwenye linux
grep -iER "_CC_MD5"
grep -iER "_CC_SHA1"
  • Kazi Dhaifu za Random

# Kwenye kifaa cha iOS
otool -Iv <app> | grep -w "_random"
otool -Iv <app> | grep -w "_srand"
otool -Iv <app> | grep -w "_rand"

# Kwenye linux
grep -iER "_random"
grep -iER "_srand"
grep -iER "_rand"
  • Kazi ya 'Malloc' Isiyokuwa Salama

# Kwenye kifaa cha iOS
otool -Iv <app> | grep -w "_malloc"

# Kwenye linux
grep -iER "_malloc"
  • Kazi Zisizo Salama na Zenye Madoa

# Kwenye kifaa cha iOS
otool -Iv <app> | grep -w "_gets"
otool -Iv <app> | grep -w "_memcpy"
otool -Iv <app> | grep -w "_strncpy"
otool -Iv <app> | grep -w "_strlen"
otool -Iv <app> | grep -w "_vsnprintf"
otool -Iv <app> | grep -w "_sscanf"
otool -Iv <app> | grep -w "_strtok"
otool -Iv <app> | grep -w "_alloca"
otool -Iv <app> | grep -w "_sprintf"
otool -Iv <app> | grep -w "_printf"
otool -Iv <app> | grep -w "_vsprintf"

# Kwenye linux
grep -R "_gets"
grep -iER "_memcpy"
grep -iER "_strncpy"
grep -iER "_strlen"
grep -iER "_vsnprintf"
grep -iER "_sscanf"
grep -iER "_strtok"
grep -iER "_alloca"
grep -iER "_sprintf"
grep -iER "_printf"
grep -iER "_vsprintf"

Uchambuzi wa Kisasa wa Msingi

Angalia uchambuzi wa kisasa ambao MobSF hufanya. Utahitaji kutembea kupitia maoni tofauti na kuingiliana nao lakini itakuwa ikishikilia darasa kadhaa na kufanya mambo mengine na itakuandaa ripoti mara utakapomaliza.

Orodha ya Programu Zilizowekwa

Tumia amri frida-ps -Uai kubaini kitambulisho cha pakiti cha programu zilizowekwa:

$ frida-ps -Uai
PID  Name                 Identifier
----  -------------------  -----------------------------------------
6847  Calendar             com.apple.mobilecal
6815  Mail                 com.apple.mobilemail
-  App Store            com.apple.AppStore
-  Apple Store          com.apple.store.Jolly
-  Calculator           com.apple.calculator
-  Camera               com.apple.camera
-  iGoat-Swift          OWASP.iGoat-Swift

Uchambuzi wa Msingi & Hooking

Jifunze jinsi ya kuchambua vipengele vya programu na jinsi ya kuunganisha njia na madarasa kwa urahisi na objection:

pageiOS Hooking With Objection

Muundo wa IPA

Muundo wa faili ya IPA ni kimsingi kama wa paki iliyozipwa. Kwa kubadilisha kipengee chake kuwa .zip, inaweza kufunguliwa ili kuonyesha maudhui yake. Ndani ya muundo huu, Bundle inawakilisha programu kamili tayari kwa usakinishaji. Ndani yake, utapata saraka iliyoitwa <JINA>.app, ambayo inaleta pamoja rasilimali za programu.

  • Info.plist: Faili hii inashikilia maelezo maalum ya usanidi wa programu.

  • _CodeSignature/: Saraka hii inajumuisha faili ya plist ambayo ina saini, ikidhibitisha uadilifu wa faili zote katika bundle.

  • Assets.car: Hifadhi iliyozipwa inayohifadhi faili za mali kama vile icons.

  • Frameworks/: Saraka hii ina maktaba za asili za programu, ambazo zinaweza kuwa katika mfumo wa faili za .dylib au .framework.

  • PlugIns/: Hii inaweza kujumuisha nyongeza za programu, inayojulikana kama faili za .appex, ingawa mara nyingi hazipo.

  • Core Data: Inatumika kuhifadhi data ya kudumu ya programu yako kwa matumizi nje ya mtandao, kuhifadhi data ya muda, na kuongeza uwezo wa kufuta hatua kwenye programu yako kwenye kifaa kimoja. Ili kusawazisha data kwenye vifaa vingi katika akaunti moja ya iCloud, Core Data inaiga schema yako kiotomatiki kwenye chombo cha CloudKit.

  • PkgInfo: Faili ya PkgInfo ni njia mbadala ya kutaja aina na waumbaji wa programu au bundle yako.

  • en.lproj, fr.proj, Base.lproj: Ni pakiti za lugha zinazohifadhi rasilimali kwa lugha hizo maalum, na rasilimali ya msingi ikiwa lugha fulani haitegemezwi.

  • Usalama: Saraka ya _CodeSignature/ inacheza jukumu muhimu katika usalama wa programu kwa kudhibitisha uadilifu wa faili zote zilizofungwa kupitia saini za kidijitali.

  • Usimamizi wa Mali: Faili ya Assets.car hutumia ujazo kusimamia mali za kielelezo kwa ufanisi, muhimu kwa kuboresha utendaji wa programu na kupunguza ukubwa wake jumla.

  • Mfumo wa Tabaka na Nyongeza: Saraka hizi zinaonyesha modularity ya programu za iOS, ikiruhusu watengenezaji kuongeza maktaba za namna ya kutumika tena (Frameworks/) na kuongeza uwezo wa programu (PlugIns/).

  • Ulokishaji: Muundo unaweza kusaidia lugha nyingi, ikirahisisha kufikia programu kimataifa kwa kujumuisha rasilimali kwa pakiti za lugha maalum.

Info.plist

Info.plist inatumika kama msingi wa programu za iOS, ikijumuisha data muhimu ya usanidi kwa mfumo wa jozi za funguo-na-thamani. Faili hii ni lazima si tu kwa programu bali pia kwa nyongeza za programu na maktaba zilizojumuishwa ndani. Imeandikwa kwa muundo wa XML au muundo wa binary na inashikilia taarifa muhimu kutoka kwa ruhusa za programu hadi usanidi wa usalama. Kwa uchunguzi wa kina wa funguo zilizopo, mtu anaweza kurejelea Hati ya Maendeleo ya Apple.

Kwa wale wanaotaka kufanya kazi na faili hii kwa muundo unaoweza kupatikana zaidi, uongofu wa XML unaweza kupatikana kwa urahisi kupitia matumizi ya plutil kwenye macOS (inapatikana kiasili kwenye toleo 10.2 na baadaye) au plistutil kwenye Linux. Amri za uongofu ni kama ifuatavyo:

  • Kwa macOS:

$ plutil -convert xml1 Info.plist
  • Kwa Linux:

$ apt install libplist-utils
$ plistutil -i Info.plist -o Info_xml.plist

Miongoni mwa wingi wa habari ambazo faili ya Info.plist inaweza kufichua, vipengele muhimu ni pamoja na maneno ya ruhusa za programu (UsageDescription), mipango ya URL za desturi (CFBundleURLTypes), na mipangilio ya Usalama wa Usafirishaji wa Programu (NSAppTransportSecurity). Vipengele hivi, pamoja na vingine kama vile aina za hati za nyaraka za desturi zilizosafirishwa/kuingizwa (UTExportedTypeDeclarations / UTImportedTypeDeclarations), vinaweza kupatikana kwa urahisi kwa kuchunguza faili au kutumia amri ya grep rahisi:

$ grep -i <keyword> Info.plist

Njia za Data

Katika mazingira ya iOS, directories zinatengwa kwa maombi ya mfumo na maombi yaliyowekwa na mtumiaji. Maombi ya mfumo yanapatikana katika directory ya /Applications, wakati maombi yaliyowekwa na mtumiaji hupangwa chini ya /var/mobile/containers/Data/Application/. Maombi haya hupewa kitambulisho cha kipekee kinachoitwa 128-bit UUID, hivyo kufanya kazi ya kutafuta folda ya programu kwa mkono kuwa ngumu kutokana na uchanganyikaji wa majina ya directory.

Kwa kuwa maombi katika iOS lazima yawe ndani ya sanduku la mchanga, kila programu itakuwa na folda pia ndani ya $HOME/Library/Containers yenye CFBundleIdentifier ya programu kama jina la folda.

Hata hivyo, folda zote (data & folda za kontena) zina faili ya .com.apple.mobile_container_manager.metadata.plist ambayo inaunganisha faili zote katika ufunguo MCMetadataIdentifier).

Ili kurahisisha ugunduzi wa directory ya usanidi wa programu iliyowekwa na mtumiaji, zana ya objection hutoa amri muhimu, env. Amri hii inaonyesha habari za kina za directory kwa programu husika. Hapa chini ni mfano wa jinsi ya kutumia amri hii:

OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # env

Name               Path
-----------------  -------------------------------------------------------------------------------------------
BundlePath         /var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app
CachesDirectory    /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Library/Caches
DocumentDirectory  /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Documents
LibraryDirectory   /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Library

Au kwa upande mwingine, jina la programu linaweza kutafutwa ndani ya /private/var/containers kwa kutumia amri ya find:

find /private/var/containers -name "Progname*"

Amri kama vile ps na lsof pia zinaweza kutumika kutambua mchakato wa programu na orodha ya faili zilizofunguliwa, mtawalia, zikitoa ufahamu katika njia za saraka za aktiva za programu:

ps -ef | grep -i <app-name>
lsof -p <pid> | grep -i "/containers" | head -n 1

Folda ya Bundle:

  • AppName.app

  • Hii ni Bundle ya Maombi kama ilivyoonekana awali katika IPA, ina data muhimu ya maombi, yaliyomo ya msingi pamoja na binary iliyokompiliwa ya maombi.

  • Folda hii inaonekana kwa watumiaji, lakini watumiaji hawawezi kuandika humo.

  • Yaliyomo katika folda hii hayana nakala rudufu.

  • Yaliyomo katika folda hii hutumiwa kwa uthibitisho wa saini ya nambari.

Folda ya Data:

  • Documents/

  • Ina data yote iliyoanzishwa na mtumiaji. Mtumiaji wa mwisho wa maombi ndiye anayeanzisha uundaji wa data hii.

  • Inaonekana kwa watumiaji na watumiaji wanaweza kuandika humo.

  • Yaliyomo katika folda hii yana nakala rudufu.

  • Maombi yanaweza kulemaza njia kwa kuweka NSURLIsExcludedFromBackupKey.

  • Library/

  • Ina faili zote ambazo si za mtumiaji fulani, kama cache, mapendeleo, vidakuzi, na faili za usanidi wa orodha ya mali (plist).

  • Programu za iOS kawaida hutumia vijisehemu vya Application Support na Caches, lakini programu inaweza kuunda vijisehemu vya desturi.

  • Library/Caches/

  • Ina faili zilizohifadhiwa kwa muda mrefu.

  • Haionekani kwa watumiaji na watumiaji hawawezi kuandika humo.

  • Yaliyomo katika folda hii hayana nakala rudufu.

  • OS inaweza kufuta faili za folda hii moja kwa moja wakati maombi hayapo na nafasi ya kuhifadhi inapungua.

  • Library/Application Support/

  • Ina faili za kudumu zinazohitajika kwa ajili ya kuendesha maombi.

  • Haionekani na watumiaji na watumiaji hawawezi kuandika humo.

  • Yaliyomo katika folda hii ina nakala rudufu.

  • Maombi yanaweza kulemaza njia kwa kuweka NSURLIsExcludedFromBackupKey.

  • Library/Preferences/

  • Hutumiwa kuhifadhi mali ambazo zinaweza kudumu hata baada ya maombi kuanzishwa upya.

  • Taarifa hii huokolewa, bila kufichuliwa, ndani ya sanduku la maombi katika faili ya plist iliyoitwa [BUNDLE_ID].plist.

  • Vifunguo/vilishi vyote vilivyohifadhiwa kwa kutumia NSUserDefaults vinaweza kupatikana katika faili hii.

  • tmp/

  • Tumia folda hii kuandika faili za muda ambazo hazihitaji kudumu kati ya kuzinduliwa upya kwa maombi.

  • Ina faili zilizohifadhiwa kwa muda mfupi.

  • Haionekani kwa watumiaji.

  • Yaliyomo katika folda hii hayana nakala rudufu.

  • OS inaweza kufuta faili za folda hii moja kwa moja wakati maombi hayapo na nafasi ya kuhifadhi inapungua.

Hebu tuangalie kwa karibu Folda ya Maombi ya iGoat-Swift (.app) ndani ya folda ya Bundle (/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app):

OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # ls
NSFileType      Perms  NSFileProtection    ...  Name
------------  -------  ------------------  ...  --------------------------------------
Regular           420  None                ...  rutger.html
Regular           420  None                ...  mansi.html
Regular           420  None                ...  splash.html
Regular           420  None                ...  about.html

Regular           420  None                ...  LICENSE.txt
Regular           420  None                ...  Sentinel.txt
Regular           420  None                ...  README.txt

Kubadilisha Binary

Ndani ya folda ya <jina-la-programu>.app utapata faili ya binary inayoitwa <jina-la-programu>. Hii ndio faili itakayotekelezwa. Unaweza kufanya ukaguzi wa msingi wa binary hiyo kwa kutumia zana ya otool:

otool -Vh DVIA-v2 #Check some compilation attributes
magic  cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
MH_MAGIC_64    ARM64        ALL  0x00     EXECUTE    65       7112   NOUNDEFS DYLDLINK TWOLEVEL WEAK_DEFINES BINDS_TO_WEAK PIE

otool -L DVIA-v2 #Get third party libraries
DVIA-v2:
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.1)
/usr/lib/libsqlite3.dylib (compatibility version 9.0.0, current version 274.6.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.11)
@rpath/Bolts.framework/Bolts (compatibility version 1.0.0, current version 1.0.0)
[...]

Angalia kama programu imefichwa

Angalia kama kuna matokeo ya:

otool -l <app-binary> | grep -A 4 LC_ENCRYPTION_INFO

Kuvunja sehemu ya binary

Vunja sehemu ya maandishi:

otool -tV DVIA-v2
DVIA-v2:
(__TEXT,__text) section
+[DDLog initialize]:
0000000100004ab8    sub    sp, sp, #0x60
0000000100004abc    stp    x29, x30, [sp, #0x50]   ; Latency: 6
0000000100004ac0    add    x29, sp, #0x50
0000000100004ac4    sub    x8, x29, #0x10
0000000100004ac8    mov    x9, #0x0
0000000100004acc    adrp    x10, 1098 ; 0x10044e000
0000000100004ad0    add    x10, x10, #0x268

Kuchapisha sehemu ya Objective-C ya programu ya sampuli mtu anaweza kutumia:

otool -oV DVIA-v2
DVIA-v2:
Contents of (__DATA,__objc_classlist) section
00000001003dd5b8 0x1004423d0 _OBJC_CLASS_$_DDLog
isa        0x1004423a8 _OBJC_METACLASS_$_DDLog
superclass 0x0 _OBJC_CLASS_$_NSObject
cache      0x0 __objc_empty_cache
vtable     0x0
data       0x1003de748
flags          0x80
instanceStart  8

Ili kupata msimbo wa Objective-C uliofupishwa zaidi unaweza kutumia class-dump:

class-dump some-app
//
//     Generated by class-dump 3.5 (64 bit).
//
//     class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2013 by Steve Nygard.
//

#pragma mark Named Structures

struct CGPoint {
double _field1;
double _field2;
};

struct CGRect {
struct CGPoint _field1;
struct CGSize _field2;
};

struct CGSize {
double _field1;
double _field2;
};

Hata hivyo, chaguo bora la kuchambua faili ya binary ni: Hopper na IDA.

Tumia Trickest kujenga na kutumia mifumo ya kiotomatiki inayotumia zana za jamii ya juu zaidi ulimwenguni. Pata Ufikiaji Leo:

Uhifadhi wa Data

Ili kujifunza jinsi iOS inavyohifadhi data kwenye kifaa soma ukurasa huu:

pageiOS Basics

Maeneo yafuatayo ya kuhifadhi habari yanapaswa kuchunguzwa mara baada ya kusakinisha programu, baada ya kuangalia kazi zote za programu na hata baada ya kutoka kwa mtumiaji mmoja na kuingia kwa mwingine. Lengo ni kupata habari nyeti zisizolindwa za programu (nywila, tokeni), ya mtumiaji wa sasa na wa watumiaji waliowahi kuingia awali.

Plist

Faili za plist ni faili za XML zilizo na jozi za funguo-na-thamani. Ni njia ya kuhifadhi data endelevu, kwa hivyo mara nyingi unaweza kupata habari nyeti katika faili hizi. Inashauriwa kuchunguza faili hizi baada ya kusakinisha programu na baada ya kutumia kwa kiasi kikubwa kuona ikiwa data mpya imeandikwa.

Njia ya kawaida zaidi ya kuhifadhi data katika faili za plist ni kupitia matumizi ya NSUserDefaults. Faili hii ya plist hufutwa ndani ya sanduku la programu katika Library/Preferences/<appBundleID>.plist

Darasa la NSUserDefaults hutoa kiolesura cha programu kwa kuingiliana na mfumo wa chaguo-msingi. Mfumo wa chaguo-msingi huruhusu programu kubadilisha tabia yake kulingana na mapendeleo ya mtumiaji. Data iliyohifadhiwa na NSUserDefaults inaweza kuonekana katika sanduku la programu. Darasa hili hifadhi data katika faili ya plist, lakini inakusudiwa kutumika na kiasi kidogo cha data.

Data hii haiwezi kupatikana moja kwa moja kupitia kompyuta iliyothibitishwa, lakini inaweza kupatikana kwa kufanya chelezo.

Unaweza kudondosha habari iliyohifadhiwa kwa kutumia NSUserDefaults kwa kutumia ios nsuserdefaults get ya objection.

Ili kupata plist zote zinazotumiwa na programu unaweza kupata /private/var/mobile/Containers/Data/Application/{APPID} na kukimbia:

find ./ -name "*.plist"

Kubadilisha faili kutoka muundo wa XML au binary (bplist) kwenda XML, njia mbalimbali zinapatikana kulingana na mfumo wako wa uendeshaji:

Kwa Watumiaji wa macOS: Tumia amri ya plutil. Ni chombo kilichojengwa ndani ya macOS (10.2+), kimeundwa kwa kusudi hili:

$ plutil -convert xml1 Info.plist

Kwa Watumiaji wa Linux: Sakinisha libplist-utils kwanza, kisha tumia plistutil kubadilisha faili yako:

$ apt install libplist-utils
$ plistutil -i Info.plist -o Info_xml.plist

Ndani ya Kikao cha Objection: Kwa kuchambua programu za simu, amri maalum inaruhusu kubadilisha faili za plist moja kwa moja:

ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>/Library/Preferences/com.some.package.app.plist

Core Data

Core Data ni mfumo wa kusimamia safu ya mfano wa vitu katika programu yako. Core Data inaweza kutumia SQLite kama hifadhi yake endelevu, lakini mfumo yenyewe si database. CoreData haitumii usimbaji wa data kwa chaguo-msingi. Hata hivyo, safu ya usimbaji wa ziada inaweza kuongezwa kwa CoreData. Angalia GitHub Repo kwa maelezo zaidi.

Unaweza kupata habari ya SQLite Core Data ya programu katika njia /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support

Ikiwa unaweza kufungua SQLite na kupata habari nyeti, basi umepata hitilafu ya usanidi.

-(void)storeDetails {
AppDelegate * appDelegate = (AppDelegate *)(UIApplication.sharedApplication.delegate);

NSManagedObjectContext *context =[appDelegate managedObjectContext];

User *user = [self fetchUser];
if (user) {
return;
}
user = [NSEntityDescription insertNewObjectForEntityForName:@"User"
inManagedObjectContext:context];
user.email = CoreDataEmail;
user.password = CoreDataPassword;
NSError *error;
if (![context save:&error]) {
NSLog(@"Error in saving data: %@", [error localizedDescription]);

}else{
NSLog(@"data stored in core data");
}
}

YapDatabase

YapDatabase ni duka la data la funguo/thamani lililojengwa juu ya SQLite. Kwa kuwa mabara ya Yap ni mabara ya sqlite unaweza kuyapata kwa kutumia amri iliyopendekezwa katika sehemu iliyopita.

Mabara Mengine ya SQLite

Ni kawaida kwa programu kuunda mabara yao wenyewe ya sqlite. Wanaweza kuhifadhi data nyeti ndani yao na kuiacha bila kusimbwa. Hivyo, ni vyema daima kuchunguza kila bara ndani ya saraka ya programu. Hivyo nenda kwenye saraka ya programu ambapo data inahifadhiwa (/private/var/mobile/Containers/Data/Application/{APPID})

find ./ -name "*.sqlite" -or -name "*.db"

Maudhui halisi ya Firebase Real-Time Databases

Wabunifu wanaweza kuhifadhi na kusawazisha data ndani ya database iliyohifadhiwa kwenye wingu bila muundo kupitia Firebase Real-Time Databases. Data inahifadhiwa kwa muundo wa JSON, na data hiyo hufanyiwa usawazishaji kwa wateja wote waliounganishwa kwa wakati halisi.

Unaweza kupata jinsi ya kuchunguza mabara ya Firebase yaliyopangwa vibaya hapa:

pageFirebase Database

Mabara ya Realm

Realm Objective-C na Realm Swift hutoa mbadala yenye nguvu kwa uhifadhi wa data, ambao hautoiwa na Apple. Kwa chaguo-msingi, wanahifadhi data bila kufichuliwa, na ufichaji upatikana kupitia usanidi maalum.

Mabara hayo yako katika: /private/var/mobile/Containers/Data/Application/{APPID}. Kuchunguza faili hizi, mtu anaweza kutumia amri kama:

iPhone:/private/var/mobile/Containers/Data/Application/A079DF84-726C-4AEA-A194-805B97B3684A/Documents root# ls
default.realm  default.realm.lock  default.realm.management/  default.realm.note|

$ find ./ -name "*.realm*"

Kwa kuangalia faili hizi za database, zana ya Realm Studio inapendekezwa.

Kutekeleza encryption ndani ya database ya Realm, unaweza kutumia msururu wa nambari ufuatao:

// Open the encrypted Realm file where getKey() is a method to obtain a key from the Keychain or a server
let config = Realm.Configuration(encryptionKey: getKey())
do {
let realm = try Realm(configuration: config)
// Use the Realm as normal
} catch let error as NSError {
// If the encryption key is wrong, `error` will say that it's an invalid database
fatalError("Error opening realm: \(error)")
}

Databases za Couchbase Lite

Couchbase Lite inaelezwa kama injini ya database iliyo nyepesi na iliyo ingizwa inayofuata njia ya kuandika nyaraka (NoSQL). Imetengenezwa kuwa ya asili kwa iOS na macOS, inatoa uwezo wa kusawazisha data kwa urahisi.

Ili kutambua databases za Couchbase zilizopo kwenye kifaa, directory ifuatayo inapaswa kukaguliwa:

ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support/

Vidakuzi

iOS hifadhi vidakuzi vya programu katika Library/Cookies/cookies.binarycookies ndani ya folda ya kila programu. Hata hivyo, waendelezaji mara kwa mara huchagua kuziweka katika keychain kwa sababu faili ya kuki iliyotajwa inaweza kupatikana katika nakala rudufu.

Ili kukagua faili za vidakuzi unaweza kutumia script hii ya python au tumia ios cookies get ya objection. Pia unaweza kutumia objection kubadilisha faili hizi kuwa muundo wa JSON na kukagua data.

...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios cookies get --json
[
{
"domain": "highaltitudehacks.com",
"expiresDate": "2051-09-15 07:46:43 +0000",
"isHTTPOnly": "false",
"isSecure": "false",
"name": "username",
"path": "/",
"value": "admin123",
"version": "0"
}
]

Kache

Kwa chaguo-msingi, NSURLSession hifadhi data, kama vile maombi na majibu ya HTTP katika database ya Cache.db. Hii database inaweza kuwa na data nyeti, ikiwa vitufe, majina ya watumiaji au habari nyeti nyingine imehifadhiwa. Ili kupata habari iliyohifadhiwa fungua saraka ya data ya programu (/var/mobile/Containers/Data/Application/<UUID>) na nenda kwenye /Library/Caches/<Bundle Identifier>. Kache ya WebKit pia inahifadhiwa katika faili ya Cache.db. Objection inaweza kufungua na kuingiliana na database kwa amri sqlite connect Cache.db, kwani ni database ya SQLite ya kawaida.

Ni inashauriwa kulemaza Kache ya data hii, kwani inaweza kuwa na habari nyeti katika ombi au majibu. Orodha ifuatayo inaonyesha njia tofauti za kufanikisha hili:

  1. Inashauriwa kuondoa majibu yaliyohifadhiwa baada ya kujiondoa. Hii inaweza kufanywa na njia iliyotolewa na Apple inayoitwa removeAllCachedResponses Unaweza kuita njia hii kama ifuatavyo:

URLCache.shared.removeAllCachedResponses()

Njia hii itaondoa maombi yote yaliyohifadhiwa na majibu kutoka kwenye faili ya Cache.db. 2. Ikiwa hauitaji kutumia faida ya vidakuzi inashauriwa kutumia tu mali ya usanidi ya .ephemeral ya URLSession, ambayo italemaza kuokoa vidakuzi na Kache.

Hati ya Apple:

Kitu cha usanidi wa kikao cha muda mfupi ni sawa na usanidi wa kikao wa chaguo-msingi (angalia chaguo-msingi), isipokuwa kwamba kikao kinacholingana hakiweki kache, hifadhi za uthibitisho, au data yoyote inayohusiana na kikao kwenye diski. Badala yake, data inayohusiana na kikao inahifadhiwa kwenye RAM. Wakati pekee kikao cha muda mfupi kinapoandika data kwenye diski ni wakati unapomwambia aandike maudhui ya URL kwenye faili. 3. Kache inaweza pia kulemazwa kwa kuweka Sera ya Kache kuwa .notAllowed. Italemaza kuhifadhi Kache kwa njia yoyote, iwe kwenye kumbukumbu au kwenye diski.

Vipande vya Skrini

Kila unapobonyeza kitufe cha nyumbani, iOS inachukua kipande cha skrini ya sasa ili kuweza kufanya mpito kwenye programu kwa njia laini zaidi. Walakini, ikiwa data nyeti iko kwenye skrini ya sasa, itahifadhiwa kwenye picha (ambayo inaendelea hata baada ya kuzima). Hizi ni vipande vya skrini ambavyo unaweza pia kufikia kwa kubonyeza mara mbili skrini ya nyumbani ili kubadilisha programu.

Isipokuwa iPhone imefunguliwa, mshambuliaji anahitaji kuwa na upatikanaji wa kifaa bila kizuizi ili kuona picha hizi. Kwa chaguo-msingi kipande cha skrini cha mwisho kimehifadhiwa kwenye sanduku la programu katika Library/Caches/Snapshots/ au saraka ya Library/SplashBoard/Snapshots (kompyuta za kuaminika haziwezi kupata mfumo wa faili kutoka iOX 7.0).

Njia moja ya kuzuia tabia hii mbaya ni kuweka skrini tupu au kuondoa data nyeti kabla ya kuchukua kipande cha skrini kwa kutumia kazi ya ApplicationDidEnterBackground().

Hapa chini ni mfano wa njia ya kurekebisha ambayo itaweka picha ya skrini ya chaguo-msingi.

Swift:

private var backgroundImage: UIImageView?

func applicationDidEnterBackground(_ application: UIApplication) {
let myBanner = UIImageView(image: #imageLiteral(resourceName: "overlayImage"))
myBanner.frame = UIScreen.main.bounds
backgroundImage = myBanner
window?.addSubview(myBanner)
}

func applicationWillEnterForeground(_ application: UIApplication) {
backgroundImage?.removeFromSuperview()
}

Lengo-C:

@property (UIImageView *)backgroundImage;

- (void)applicationDidEnterBackground:(UIApplication *)application {
UIImageView *myBanner = [[UIImageView alloc] initWithImage:@"overlayImage.png"];
self.backgroundImage = myBanner;
self.backgroundImage.bounds = UIScreen.mainScreen.bounds;
[self.window addSubview:myBanner];
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
[self.backgroundImage removeFromSuperview];
}

Hii inaweka picha ya mandharinyuma kuwa overlayImage.png wakati programu inapokuwa nyuma. Inazuia uvujaji wa data nyeti kwa sababu overlayImage.png itachukua nafasi ya maoni ya sasa.

Keychain

Kwa kupata na kusimamia keychain ya iOS, zana kama Keychain-Dumper zinapatikana, zinazofaa kwa vifaa vilivyovunjwa. Kwa kuongezea, Objection hutoa amri ios keychain dump kwa madhumuni sawa.

Kuhifadhi Sifa

Darasa la NSURLCredential ni bora kwa kuhifadhi habari nyeti moja kwa moja kwenye keychain, ikipuuza haja ya NSUserDefaults au vifungashio vingine. Kuhifadhi sifa baada ya kuingia, nambari ifuatayo ya Swift hutumiwa:

NSURLCredential *credential;
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
[[NSURLCredentialStorage sharedCredentialStorage] setCredential:credential forProtectionSpace:self.loginProtectionSpace];

Vidakuzi vilivyohifadhiwa na Cache ya Kibodi ya Kibodi ya Kibodi

Kuanzia iOS 8.0 kuendelea, watumiaji wanaweza kusakinisha nyongeza za kibodi za kawaida, ambazo zinaweza kusimamiwa chini ya Vipimo > Jumla > Kibodi > Kibodi. Ingawa kibodi hizi zinatoa utendaji mpana, zinaweza kuleta hatari ya kurekodi tarakilishi na kutuma data kwa seva za nje, ingawa watumiaji huarifiwa kuhusu kibodi zinazohitaji ufikivu wa mtandao. Programu zinaweza, na zinapaswa, kuzuia matumizi ya kibodi za kawaida kwa kuingiza habari nyeti.

Mapendekezo ya Usalama:

  • Inashauriwa kulemaza kibodi za mtu wa tatu kwa usalama bora.

  • Kuwa makini na vipengele vya kurekebisha moja kwa moja na mapendekezo ya moja kwa moja ya kibodi ya msingi ya iOS, ambayo yanaweza kuhifadhi habari nyeti katika faili za cache zilizoko katika Library/Keyboard/{eneo}-dynamic-text.dat au /private/var/mobile/Library/Keyboard/dynamic-text.dat. Faili hizi za cache zinapaswa kuangaliwa mara kwa mara kwa data nyeti. Kuweka upya kamusi ya kibodi kupitia Vipimo > Jumla > Rudisha > Rudisha Kamusi ya Kibodi inapendekezwa kwa kusafisha data iliyohifadhiwa.

  • Kukamata trafiki ya mtandao kunaweza kufichua ikiwa kibodi ya kawaida inatuma tarakilishi kijijini.

Kuzuia Kuhifadhiwa kwa Uga wa Maandishi

Itifaki ya UITextInputTraits inatoa mali za kusimamia marekebisho ya moja kwa moja na kuingiza maandishi salama, muhimu kwa kuzuia kuhifadhiwa kwa habari nyeti. Kwa mfano, kulemaza marekebisho ya moja kwa moja na kuwezesha kuingiza maandishi salama kunaweza kufikiwa na:

textObject.autocorrectionType = UITextAutocorrectionTypeNo;
textObject.secureTextEntry = YES;

Kwa kuongezea, waendelezaji wanapaswa kuhakikisha kuwa maeneo ya maandishi, hasa yale ya kuingiza habari nyeti kama nywila na PIN, yanalemaza uwekaji wa cache kwa kuweka autocorrectionType kuwa UITextAutocorrectionTypeNo na secureTextEntry kuwa YES.

UITextField *textField = [[UITextField alloc] initWithFrame:frame];
textField.autocorrectionType = UITextAutocorrectionTypeNo;

Kumbukumbu

Kutatua hitilafu za nambari mara nyingi hujumuisha matumizi ya kumbukumbu. Kuna hatari kwani kumbukumbu zinaweza kuwa na habari nyeti. Awali, katika iOS 6 na toleo za awali, kumbukumbu zilikuwa zinapatikana kwa programu zote, ikileta hatari ya kuvuja kwa data nyeti. Sasa, programu zimeruhusiwa kufikia kumbukumbu zao pekee.

Licha ya vizuizi hivi, mshambuliaji mwenye ufikivu wa kimwili kwa kifaa kilichofunguliwa bado anaweza kutumia hili kwa kuunganisha kifaa kwenye kompyuta na kusoma kumbukumbu. Ni muhimu kutambua kwamba kumbukumbu zinabaki kwenye diski hata baada ya programu kuondolewa.

Ili kupunguza hatari, inashauriwa kuingiliana kikamilifu na programu, kuchunguza kwa undani kazi zake zote na matokeo yake ili kuhakikisha hakuna habari nyeti inalogwa kwa bahati mbaya.

Unapopitia nambari ya chanzo cha programu kwa kuvuja kwa uwezekano, tafuta maelezo ya kumbukumbu yaliyowekwa mapema na maelezo ya kumbukumbu ya desturi kwa kutumia maneno kama vile NSLog, NSAssert, NSCAssert, fprintf kwa kazi zilizojengwa, na maelezo yoyote ya Logging au Logfile kwa utekelezaji wa desturi.

Kufuatilia Kumbukumbu za Mfumo

Programu huloga vipande mbalimbali vya habari ambavyo vinaweza kuwa nyeti. Ili kufuatilia kumbukumbu hizi, zana na amri kama:

idevice_id --list   # To find the device ID
idevicesyslog -u <id> (| grep <app>)   # To capture the device logs

Ni muhimu. Kwa kuongezea, Xcode hutoa njia ya kukusanya magogo ya konsoli:

  1. Fungua Xcode.

  2. Unganisha kifaa cha iOS.

  3. Nenda kwa Window -> Vifaa na Vifaa vya Uigaji.

  4. Chagua kifaa chako.

  5. Chochote kisababishacho tatizo unalochunguza.

  6. Tumia kitufe cha Fungua Konsoli kuona magogo kwenye dirisha jipya.

Kwa kuingiza magogo kwa kiwango cha juu zaidi, kuunganisha kwa ganda la kifaa na kutumia socat inaweza kutoa ufuatiliaji wa magogo halisi kwa wakati halisi:

iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock

Kufuatia amri za kuchunguza shughuli za kuingia, ambazo zinaweza kuwa muhimu kwa kutambua matatizo au kutambua uwezekano wa uvujaji wa data katika magogo.

<