iOS Pentesting
Last updated
Last updated
Tumia Trickest kujenga na kujiendesha kwa urahisi kazi zinazotumiwa na zana za jamii za kisasa zaidi duniani. Pata Ufikiaji Leo:
Katika ukurasa huu unaweza kupata habari kuhusu simulator ya iOS, emulators na jailbreaking:
Wakati wa kupima operesheni kadhaa zitapendekezwa (unganisho na kifaa, kusoma/kandika/kuweka/upakuaji wa faili, tumia zana kadhaa...). Hivyo basi, ikiwa hujui jinsi ya kufanya mojawapo ya hatua hizi tafadhali, anza kusoma ukurasa:
Kwa hatua zinazofuata programu inapaswa kuwa imewekwa kwenye kifaa na inapaswa kuwa tayari imepata faili ya IPA ya programu. Soma ukurasa wa Basic iOS Testing Operations kujifunza jinsi ya kufanya hivyo.
Inapendekezwa kutumia zana MobSF kufanya Uchambuzi wa Kawaida wa moja kwa moja kwa faili ya IPA.
Utambuzi wa ulinzi ulio katika binary:
PIE (Position Independent Executable): Wakati umewezeshwa, programu inaloadi kwenye anwani ya kumbukumbu ya nasibu kila wakati inapoanzishwa, na kufanya iwe vigumu kutabiri anwani yake ya awali ya kumbukumbu.
Stack Canaries: Ili kuthibitisha uadilifu wa stack, thamani ya ‘canary’ inawekwa kwenye stack kabla ya kuita kazi na inathibitishwa tena mara kazi inapoisha.
ARC (Automatic Reference Counting): Ili kuzuia kasoro za kawaida za uharibifu wa kumbukumbu
Encrypted Binary: Binary inapaswa kuwa imefichwa
Utambuzi wa Kazi Nyeti/Zisizo Salama
Weak Hashing Algorithms
Insecure Random Functions
Insecure ‘Malloc’ Function
Insecure and Vulnerable Functions
Angalia uchambuzi wa dynamic ambao MobSF unafanya. Utahitaji kuzunguka kupitia maoni tofauti na kuingiliana nayo lakini itakuwa ikihooki madarasa kadhaa wakati wa kufanya mambo mengine na itatayarisha ripoti mara utakapokamilisha.
Tumia amri frida-ps -Uai
kubaini kitambulisho cha bundle cha programu zilizowekwa:
Jifunze jinsi ya kuhesabu vipengele vya programu na jinsi ya kuunganisha mbinu na madarasa kwa kutumia objection:
Muundo wa faili ya IPA kimsingi ni sawa na kifurushi kilichozungushwa. Kwa kubadilisha kiendelezi chake kuwa .zip
, inaweza kufunguliwa ili kuonyesha yaliyomo. Ndani ya muundo huu, Bundle inawakilisha programu iliyopakiwa kikamilifu tayari kwa usakinishaji. Ndani, utaona directory inayoitwa <NAME>.app
, ambayo inajumuisha rasilimali za programu.
Info.plist
: Faili hii ina maelezo maalum ya usanidi wa programu.
_CodeSignature/
: Hii ni directory inayojumuisha faili ya plist ambayo ina saini, kuhakikisha uadilifu wa faili zote ndani ya bundle.
Assets.car
: Archive iliyoshinikizwa inayohifadhi faili za mali kama ikoni.
Frameworks/
: Folda hii ina maktaba asilia za programu, ambazo zinaweza kuwa katika mfumo wa faili za .dylib
au .framework
.
PlugIns/
: Hii inaweza kujumuisha nyongeza kwa programu, inayojulikana kama faili za .appex
, ingawa hazipo kila wakati. * Core Data
: Inatumika kuhifadhi data ya kudumu ya programu yako kwa matumizi ya mtandaoni, kuhifadhi data ya muda, na kuongeza uwezo wa kufuta kwenye programu yako kwenye kifaa kimoja. Ili kusawazisha data kati ya vifaa vingi katika akaunti moja ya iCloud, Core Data inakidhi kiotomatiki muundo wako kwenye kontena la CloudKit.
PkgInfo
: Faili ya PkgInfo
ni njia mbadala ya kubainisha aina na nambari za muundaji wa programu yako au bundle.
en.lproj, fr.proj, Base.lproj: Ni pakiti za lugha ambazo zina rasilimali za lugha hizo maalum, na rasilimali ya chaguo-msingi endapo lugha haipatikani.
Security: Directory ya _CodeSignature/
ina jukumu muhimu katika usalama wa programu kwa kuthibitisha uadilifu wa faili zote zilizopakiwa kupitia saini za kidijitali.
Asset Management: Faili ya Assets.car
inatumia shinikizo kusimamia kwa ufanisi mali za picha, muhimu kwa kuboresha utendaji wa programu na kupunguza ukubwa wake kwa ujumla.
Frameworks and PlugIns: Hizi directory zinaonyesha uundaji wa programu za iOS, zikiwaruhusu waendelezaji kujumuisha maktaba za msimbo zinazoweza kutumika tena (Frameworks/
) na kupanua kazi za programu (PlugIns/
).
Localization: Muundo huu unasaidia lugha nyingi, ukirahisisha kufikia kimataifa kwa programu kwa kujumuisha rasilimali za pakiti za lugha maalum.
Info.plist
Info.plist inatumika kama msingi wa programu za iOS, ikijumuisha data muhimu za usanidi katika mfumo wa funguo-thamani. Faili hii ni lazima si tu kwa programu bali pia kwa nyongeza za programu na maktaba zilizopakiwa ndani. Imeundwa kwa muundo wa XML au muundo wa binary na ina taarifa muhimu kuanzia ruhusa za programu hadi usanidi wa usalama. Kwa uchambuzi wa kina wa funguo zinazopatikana, mtu anaweza kurejelea Apple Developer Documentation.
Kwa wale wanaotaka kufanya kazi na faili hii katika muundo rahisi zaidi, ubadilishaji wa XML unaweza kufanywa kwa urahisi kupitia matumizi ya plutil
kwenye macOS (inapatikana kiasili kwenye toleo 10.2 na baadaye) au plistutil
kwenye Linux. Amri za kubadilisha ni kama ifuatavyo:
Kwa macOS:
Kwa Linux:
Kati ya maelezo mengi ambayo faili ya Info.plist inaweza kufichua, entries muhimu ni pamoja na nyuzi za ruhusa za programu (UsageDescription
), mipango ya URL ya kawaida (CFBundleURLTypes
), na mipangilio ya Usalama wa Usafiri wa Programu (NSAppTransportSecurity
). Entries hizi, pamoja na nyingine kama aina za hati zilizotolewa/zilizopokelewa za kawaida (UTExportedTypeDeclarations
/ UTImportedTypeDeclarations
), zinaweza kupatikana kwa urahisi kwa kukagua faili au kutumia amri rahisi ya grep
:
Data Paths
Katika mazingira ya iOS, directories zimewekwa maalum kwa ajili ya system applications na user-installed applications. System applications zinapatikana katika directory ya /Applications
, wakati apps zilizowekwa na mtumiaji zinawekwa chini ya /var/mobile/containers/Data/Application/
. Programu hizi zinapewa kitambulisho cha kipekee kinachojulikana kama 128-bit UUID, na kufanya kazi ya kutafuta folda ya programu kwa mikono kuwa ngumu kutokana na uhodari wa majina ya directories.
Kwa kuwa programu katika iOS lazima ziwe sandboxed, kila app pia itakuwa na folda ndani ya $HOME/Library/Containers
yenye CFBundleIdentifier
ya app kama jina la folda.
Hata hivyo, folda zote mbili (folda za data & folda za container) zina faili .com.apple.mobile_container_manager.metadata.plist
inayounganisha faili hizo mbili katika ufunguo MCMetadataIdentifier
).
Ili kuwezesha kugundua folda ya usakinishaji ya app iliyowekwa na mtumiaji, objection tool inatoa amri muhimu, env
. Amri hii inaonyesha taarifa za kina za directory kwa app husika. Hapa kuna mfano wa jinsi ya kutumia amri hii:
Mbadala, jina la programu linaweza kutafutwa ndani ya /private/var/containers
kwa kutumia amri ya find
:
Amri kama ps
na lsof
zinaweza pia kutumika kubaini mchakato wa programu na orodha ya faili zilizo wazi, mtawalia, zikitoa maarifa kuhusu njia za saraka za programu zinazofanya kazi:
Bundle directory:
AppName.app
Hii ni Application Bundle kama ilivyoonekana hapo awali katika IPA, ina data muhimu ya programu, maudhui ya kudumu pamoja na binary iliyokusanywa ya programu.
Hii directory inaonekana kwa watumiaji, lakini watumiaji hawawezi kuandika ndani yake.
Maudhui katika hii directory hayahifadhiwi.
Maudhui ya folda hii yanatumika kuhakiki saini ya msimbo.
Data directory:
Documents/
Inashikilia data yote iliyoundwa na mtumiaji. Mtumiaji wa mwisho wa programu anaanzisha uundaji wa data hii.
Inaonekana kwa watumiaji na watumiaji wanaweza kuandika ndani yake.
Maudhui katika hii directory yanahifadhiwa.
Programu inaweza kuzima njia kwa kuweka NSURLIsExcludedFromBackupKey
.
Library/
Inashikilia faili ambazo si maalum kwa mtumiaji, kama vile caches, preferences, cookies, na faili za usanidi wa orodha ya mali (plist).
Programu za iOS kwa kawaida hutumia Application Support
na Caches
subdirectories, lakini programu inaweza kuunda subdirectories za kawaida.
Library/Caches/
Inashikilia faili za cache zisizodumu.
Haionekani kwa watumiaji na watumiaji hawawezi kuandika ndani yake.
Maudhui katika hii directory hayahifadhiwi.
OS inaweza kufuta faili za directory hii kiotomatiki wakati programu haiko inafanya kazi na nafasi ya kuhifadhi inakosekana.
Library/Application Support/
Inashikilia faili za kudumu muhimu kwa kuendesha programu.
Haionekani kwa watumiaji na watumiaji hawawezi kuandika ndani yake.
Maudhui katika hii directory yanahifadhiwa.
Programu inaweza kuzima njia kwa kuweka NSURLIsExcludedFromBackupKey
.
Library/Preferences/
Inatumika kuhifadhi mali ambazo zinaweza kudumu hata baada ya programu kuanzishwa upya.
Taarifa huhifadhiwa, bila usimbuaji, ndani ya sandbox ya programu katika faili ya plist inayoitwa [BUNDLE_ID].plist.
Mifano yote ya funguo/thamani iliyohifadhiwa kwa kutumia NSUserDefaults
inaweza kupatikana katika faili hii.
tmp/
Tumia hii directory kuandika faili za muda ambazo hazihitaji kudumu kati ya uzinduzi wa programu.
Inashikilia faili za cache zisizodumu.
Haionekani kwa watumiaji.
Maudhui katika hii directory hayahifadhiwi.
OS inaweza kufuta faili za directory hii kiotomatiki wakati programu haiko inafanya kazi na nafasi ya kuhifadhi inakosekana.
Hebu tuangalie kwa karibu Application Bundle ya iGoat-Swift (.app) directory ndani ya Bundle directory (/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app
):
Ndani ya folda ya <application-name>.app
utaona faili la binary linaloitwa <application-name>
. Huu ndio faili utakaokuwa ukitekelezwa. Unaweza kufanya ukaguzi wa msingi wa binary kwa kutumia chombo otool
:
Angalia kama programu imefungwa
Tazama kama kuna matokeo yoyote kwa:
Kufanya disassembly ya binary
Fanya disassembly ya sehemu ya maandiko:
Ili kuchapisha sehemu ya Objective-C ya programu ya mfano mtu anaweza kutumia:
Ili kupata msimbo wa Objective-C wenye ukubwa mdogo zaidi unaweza kutumia class-dump:
However, the best options to disassemble the binary are: Hopper and IDA.
Tumia Trickest kujenga na kujiendesha kiotomatiki kazi zinazotolewa na zana za jamii zilizoendelea zaidi duniani. Pata Ufikiaji Leo:
Ili kujifunza jinsi iOS inavyohifadhi data kwenye kifaa, soma ukurasa huu:
Miji ifuatayo ya kuhifadhi taarifa inapaswa kukaguliwa mara tu baada ya kufunga programu, baada ya kukagua kazi zote za programu na hata baada ya kutoka kwenye mtumiaji mmoja na kuingia kwenye mwingine. Lengo ni kupata taarifa nyeti zisizo na ulinzi za programu (nywila, tokeni), za mtumiaji wa sasa na za watumiaji waliowahi kuingia.
faili za plist ni faili za XML zilizopangwa ambazo zinafungamanisha funguo na thamani. Ni njia ya kuhifadhi data ya kudumu, hivyo wakati mwingine unaweza kupata taarifa nyeti katika faili hizi. Inapendekezwa kukagua faili hizi baada ya kufunga programu na baada ya kuitumia kwa nguvu ili kuona kama data mpya imeandikwa.
Njia ya kawaida ya kudumisha data katika faili za plist ni kupitia matumizi ya NSUserDefaults. Faili hii ya plist huhifadhiwa ndani ya sandbox ya programu katika Library/Preferences/<appBundleID>.plist
Darasa la NSUserDefaults
linatoa kiolesura cha programu kwa ajili ya kuingiliana na mfumo wa default. Mfumo wa default unaruhusu programu kubadilisha tabia yake kulingana na mapendeleo ya mtumiaji. Data iliyohifadhiwa na NSUserDefaults
inaweza kuonekana katika kifurushi cha programu. Darasa hili huhifadhi data katika faili ya plist, lakini inapaswa kutumika na kiasi kidogo cha data.
Data hii haiwezi kufikiwa moja kwa moja kupitia kompyuta iliyoaminika, lakini inaweza kufikiwa kwa kufanya backup.
Unaweza dump taarifa zilizohifadhiwa kwa kutumia NSUserDefaults
kwa kutumia objection's ios nsuserdefaults get
Ili kupata plist zote zinazotumiwa na programu, unaweza kufikia /private/var/mobile/Containers/Data/Application/{APPID}
na kukimbia:
Ili kubadilisha faili kutoka XML au binary (bplist) format hadi XML, mbinu mbalimbali kulingana na mfumo wako wa uendeshaji zinapatikana:
Kwa Watumiaji wa macOS: Tumia amri ya plutil
. Ni chombo kilichojengwa ndani katika macOS (10.2+), kilichoundwa kwa ajili ya kusudi hili:
Kwa Watumiaji wa Linux: Sakinisha libplist-utils
kwanza, kisha tumia plistutil
kubadilisha faili yako:
Ndani ya Kikao cha Objection: Kwa kuchambua programu za simu, amri maalum inaruhusu kubadilisha faili za plist moja kwa moja:
Core Data
ni mfumo wa kusimamia tabaka la mfano wa vitu katika programu yako. Core Data inaweza kutumia SQLite kama duka lake la kudumu, lakini mfumo wenyewe si database.
CoreData haiwezi kupeleka data zake kwa usimbuaji kwa chaguo-msingi. Hata hivyo, safu ya ziada ya usimbuaji inaweza kuongezwa kwa CoreData. Tazama GitHub Repo kwa maelezo zaidi.
Unaweza kupata taarifa za SQLite Core Data za programu katika njia /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support
Ikiwa unaweza kufungua SQLite na kufikia taarifa nyeti, basi umepata makosa ya usanidi.
YapDatabase ni duka la funguo/thamani lililojengwa juu ya SQLite. Kwa kuwa hifadhidata za Yap ni hifadhidata za sqlite unaweza kuziona kwa kutumia amri iliyopendekezwa katika sehemu iliyopita.
Ni kawaida kwa programu kuunda hifadhidata zao za sqlite. Wanaweza kuwa wanahifadhi data nyeti ndani yao na kuziacha bila usimbaji. Kwa hivyo, kila wakati ni muhimu kuangalia kila hifadhidata ndani ya saraka ya programu. Kwa hivyo nenda kwenye saraka ya programu ambapo data imehifadhiwa (/private/var/mobile/Containers/Data/Application/{APPID}
)
Wakuu wa programu wanawezeshwa kuhifadhi na kusawazisha data ndani ya hifadhi ya data ya NoSQL iliyo kwenye wingu kupitia Firebase Real-Time Databases. Iliyohifadhiwa katika muundo wa JSON, data inasawazishwa kwa wateja wote waliounganishwa kwa wakati halisi.
Unaweza kupata jinsi ya kuangalia hifadhi za Firebase zilizopangwa vibaya hapa:
Realm Objective-C na Realm Swift hutoa mbadala wenye nguvu wa uhifadhi wa data, ambao haupatikani kutoka Apple. Kwa kawaida, wana hifadhi data bila usimbaji, huku usimbaji ukiwa unapatikana kupitia usanidi maalum.
Hifadhi za data ziko katika: /private/var/mobile/Containers/Data/Application/{APPID}
. Ili kuchunguza faili hizi, mtu anaweza kutumia amri kama:
Ili kuona faili hizi za database, chombo cha Realm Studio kinapendekezwa.
Ili kutekeleza usimbaji ndani ya database ya Realm, kipande cha msimbo kifuatacho kinaweza kutumika:
Couchbase Lite inafafanuliwa kama nyepesi na imejumuishwa injini ya hifadhidata inayofuata mbinu ya mwelekeo wa hati (NoSQL). Imeundwa kuwa asili kwa iOS na macOS, inatoa uwezo wa kusawazisha data bila mshono.
Ili kubaini hifadhidata za Couchbase zinazoweza kuwa kwenye kifaa, directory ifuatayo inapaswa kukaguliwa:
iOS huhifadhi vidakuzi vya programu katika Library/Cookies/cookies.binarycookies
ndani ya folda ya kila programu. Hata hivyo, waendelezaji wakati mwingine huamua kuviweka katika keychain kwani faili ya cookie inaweza kufikiwa katika nakala za akiba.
Ili kukagua faili ya vidakuzi unaweza kutumia hii python script au tumia objection's ios cookies get
.
Unaweza pia kutumia objection kubadilisha faili hizi kuwa muundo wa JSON na kukagua data.
Kwa default NSURLSession inahifadhi data, kama HTTP requests and responses katika Cache.db database. Hii database inaweza kuwa na data nyeti, ikiwa tokens, majina ya watumiaji au taarifa nyingine nyeti zimehifadhiwa. Ili kupata taarifa zilizohifadhiwa fungua directory ya data ya app (/var/mobile/Containers/Data/Application/<UUID>
) na nenda kwenye /Library/Caches/<Bundle Identifier>
. WebKit cache pia inahifadhiwa katika faili ya Cache.db. Objection inaweza kufungua na kuingiliana na database kwa amri sqlite connect Cache.db
, kwani ni normal SQLite database.
Inapendekezwa kuondoa Caching data hii, kwani inaweza kuwa na taarifa nyeti katika ombi au jibu. Orodha ifuatayo inaonyesha njia tofauti za kufanikisha hili:
Inapendekezwa kuondoa majibu yaliyohifadhiwa baada ya kutoka. Hii inaweza kufanywa kwa njia iliyotolewa na Apple inayoitwa removeAllCachedResponses
Unaweza kuita njia hii kama ifuatavyo:
URLCache.shared.removeAllCachedResponses()
Njia hii itafuta maombi na majibu yote yaliyohifadhiwa kutoka faili ya Cache.db. 2. Ikiwa huhitaji kutumia faida ya cookies, itakuwa bora kutumia mali ya usanidi ya .ephemeral ya URLSession, ambayo itazima kuhifadhi cookies na Caches.
An ephemeral session configuration object is similar to a default session configuration (see default), except that the corresponding session object doesn’t store caches, credential stores, or any session-related data to disk. Instead, session-related data is stored in RAM. The only time an ephemeral session writes data to disk is when you tell it to write the contents of a URL to a file.
3. Cache inaweza pia kuzuiwa kwa kuweka Sera ya Cache kuwa .notAllowed. Itazima kuhifadhi Cache kwa njia yoyote, ama katika kumbukumbu au kwenye diski.
Kila wakati unapobonyeza kitufe cha nyumbani, iOS huchukua picha ya skrini ya sasa ili iweze kufanya mpito kwa programu kwa njia laini zaidi. Hata hivyo, ikiwa data nyeti ipo katika skrini ya sasa, itahifadhiwa katika picha (ambayo inasalia katika reboots). Hizi ni picha ambazo unaweza pia kufikia kwa kubonyeza mara mbili skrini ya nyumbani ili kubadilisha kati ya programu.
Ipasavyo, ikiwa iPhone haijavunjwa, mshambuliaji anahitaji kuwa na ufikiaji wa kifaa kilichozuiwa ili kuona picha hizi. Kwa default picha ya mwisho huhifadhiwa katika sandbox ya programu katika folda Library/Caches/Snapshots/
au Library/SplashBoard/Snapshots
(kompyuta zinazotambulika haziwezi kufikia filesystem kutoka iOX 7.0).
Njia moja ya kuzuia tabia hii mbaya ni kuweka skrini tupu au kuondoa data nyeti kabla ya kuchukua picha kwa kutumia kazi ya ApplicationDidEnterBackground()
.
Ifuatayo ni mfano wa njia ya kurekebisha ambayo itapanga picha ya skrini ya default.
Swift:
Lengo-C:
Hii inafanya picha ya nyuma kuwa overlayImage.png
kila wakati programu inapokuwa kwenye background. Inazuia uvujaji wa data nyeti kwa sababu overlayImage.png
daima itachukua nafasi ya mtazamo wa sasa.
Kwa kupata na kusimamia iOS keychain, zana kama Keychain-Dumper zinapatikana, zinazofaa kwa vifaa vilivyovunjwa. Zaidi ya hayo, Objection inatoa amri ios keychain dump
kwa madhumuni sawa.
Darasa la NSURLCredential ni bora kwa kuhifadhi taarifa nyeti moja kwa moja kwenye keychain, ikiepuka hitaji la NSUserDefaults au vifungashio vingine. Ili kuhifadhi akikazi baada ya kuingia, msimbo ufuatao wa Swift unatumika:
To extract these stored credentials, Objection's command ios nsurlcredentialstorage dump
is utilized.
With iOS 8.0 onwards, users can install custom keyboard extensions, which are manageable under Settings > General > Keyboard > Keyboards. While these keyboards offer extended functionality, they pose a risk of keystroke logging and transmitting data to external servers, though users are notified about keyboards requiring network access. Apps can, and should, restrict the use of custom keyboards for sensitive information entry.
Security Recommendations:
It's advised to disable third-party keyboards for enhanced security.
Be aware of the autocorrect and auto-suggestions features of the default iOS keyboard, which could store sensitive information in cache files located in Library/Keyboard/{locale}-dynamic-text.dat
or /private/var/mobile/Library/Keyboard/dynamic-text.dat
. These cache files should be regularly checked for sensitive data. Resetting the keyboard dictionary via Settings > General > Reset > Reset Keyboard Dictionary is recommended for clearing cached data.
Intercepting network traffic can reveal whether a custom keyboard is transmitting keystrokes remotely.
The UITextInputTraits protocol offers properties to manage autocorrection and secure text entry, essential for preventing sensitive information caching. For example, disabling autocorrection and enabling secure text entry can be achieved with:
Additionally, developers should ensure that text fields, especially those for entering sensitive information like passwords and PINs, disable caching by setting autocorrectionType
to UITextAutocorrectionTypeNo
and secureTextEntry
to YES
.
Zaidi ya hayo, waendelezaji wanapaswa kuhakikisha kwamba maeneo ya maandiko, hasa yale ya kuingiza taarifa nyeti kama nywila na PIN, yanazima caching kwa kuweka autocorrectionType
kuwa UITextAutocorrectionTypeNo
na secureTextEntry
kuwa YES
.
Kusafisha msimbo mara nyingi kunahusisha matumizi ya logging. Kuna hatari inayohusiana kwani logs zinaweza kuwa na taarifa nyeti. Awali, katika iOS 6 na toleo la awali, logs zilikuwa zinapatikana kwa programu zote, na kuleta hatari ya kuvuja kwa data nyeti. Sasa, programu zimepangwa kufikia tu logs zao.
Licha ya vizuizi hivi, mshambuliaji mwenye ufikiaji wa kimwili kwa kifaa kisichofungwa bado anaweza kutumia hii kwa kuunganisha kifaa kwenye kompyuta na kusoma logs. Ni muhimu kutambua kwamba logs zinabaki kwenye diski hata baada ya kufutwa kwa programu.
Ili kupunguza hatari, inashauriwa kuingiliana kwa kina na programu, kuchunguza kazi zake zote na pembejeo kuhakikisha hakuna taarifa nyeti inayorekodiwa bila kukusudia.
Wakati wa kupitia msimbo wa chanzo wa programu kwa ajili ya kuvuja kwa uwezekano, angalia maelekezo ya logging yaliyowekwa na ya kawaida kwa kutumia maneno muhimu kama NSLog
, NSAssert
, NSCAssert
, fprintf
kwa kazi za ndani, na yoyote ya marejeleo ya Logging
au Logfile
kwa utekelezaji wa kawaida.
Programu zinaandika vipande mbalimbali vya taarifa ambavyo vinaweza kuwa nyeti. Ili kufuatilia logs hizi, zana na amri kama:
ni muhimu. Zaidi ya hayo, Xcode inatoa njia ya kukusanya kumbukumbu za console:
Fungua Xcode.
Unganisha kifaa cha iOS.
Tembelea Window -> Devices and Simulators.
Chagua kifaa chako.
Chochea tatizo unalochunguza.
Tumia kitufe cha Open Console kuona kumbukumbu katika dirisha jipya.
Kwa kumbukumbu za hali ya juu, kuunganisha kwenye shell ya kifaa na kutumia socat kunaweza kutoa ufuatiliaji wa kumbukumbu kwa wakati halisi:
Followed by commands to observe log activities, which can be invaluable for diagnosing issues or identifying potential data leakage in logs.
Use Trickest to easily build and automate workflows powered by the world's most advanced community tools. Get Access Today:
Vipengele vya auto-backup vimejumuishwa katika iOS, vinavyorahisisha uundaji wa nakala za data za kifaa kupitia iTunes (hadi macOS Catalina), Finder (kuanzia macOS Catalina kuendelea), au iCloud. Nakala hizi zinajumuisha karibu data zote za kifaa, isipokuwa vipengele vya nyeti sana kama maelezo ya Apple Pay na mipangilio ya Touch ID.
Kuongezwa kwa programu zilizowekwa na data zao katika nakala za backup kunaleta suala la kuvuja kwa data na hatari kwamba mabadiliko ya nakala za backup yanaweza kubadilisha utendaji wa programu. Inashauriwa kutoifadhi taarifa nyeti katika maandiko ya wazi ndani ya saraka yoyote ya programu au saraka zake ndogo ili kupunguza hatari hizi.
Faili katika Documents/
na Library/Application Support/
zinahifadhiwa kwa default. Wataalamu wa programu wanaweza kuondoa faili au saraka maalum kutoka kwa nakala za backup kwa kutumia NSURL setResourceValue:forKey:error:
na NSURLIsExcludedFromBackupKey
. Praktiki hii ni muhimu kwa kulinda data nyeti isijumuishwe katika nakala za backup.
Ili kutathmini usalama wa nakala za backup za programu, anza kwa kuunda nakala ya backup kwa kutumia Finder, kisha ipate kwa kufuata mwongozo kutoka nyaraka rasmi za Apple. Changanua nakala ya backup kwa data nyeti au mipangilio ambayo inaweza kubadilishwa ili kuathiri tabia ya programu.
Taarifa nyeti zinaweza kutafutwa kwa kutumia zana za mistari ya amri au programu kama iMazing. Kwa nakala za backup zilizofichwa, uwepo wa usimbaji unaweza kuthibitishwa kwa kuangalia ufunguo wa "IsEncrypted" katika faili ya "Manifest.plist" kwenye mzizi wa nakala ya backup.
Kwa kushughulikia nakala zilizofichwa, skripti za Python zinazopatikana katika repo ya GitHub ya DinoSec, kama backup_tool.py na backup_passwd.py, zinaweza kuwa na manufaa, ingawa huenda zikahitaji marekebisho ili kuendana na toleo jipya la iTunes/Finder. Zana ya iOSbackup ni chaguo jingine la kupata faili ndani ya nakala zilizolindwa kwa nenosiri.
Mfano wa kubadilisha tabia ya programu kupitia marekebisho ya nakala umeonyeshwa katika programu ya pochi ya bitcoin ya Bither, ambapo PIN ya kufunga UI inahifadhiwa ndani ya net.bither.plist
chini ya ufunguo wa pin_code. Kuondoa ufunguo huu kutoka kwa plist na kurejesha nakala kunafuta hitaji la PIN, na kutoa ufikiaji usio na kikomo.
Wakati wa kushughulikia taarifa nyeti zilizohifadhiwa katika kumbukumbu ya programu, ni muhimu kupunguza muda wa kufichua data hii. Kuna mbinu mbili kuu za kuchunguza maudhui ya kumbukumbu: kuunda dump ya kumbukumbu na kuchambua kumbukumbu kwa wakati halisi. Mbinu zote zina changamoto zao, ikiwa ni pamoja na uwezekano wa kukosa data muhimu wakati wa mchakato wa dump au uchambuzi.
Kwa vifaa vyote vilivyovunjwa na visivyovunjwa, zana kama objection na Fridump zinaruhusu dumping ya kumbukumbu ya mchakato wa programu. Mara baada ya dumping, kuchambua data hii kunahitaji zana mbalimbali, kulingana na asili ya taarifa unayotafuta.
Ili kutoa nyuzi kutoka kwa dump ya kumbukumbu, amri kama strings
au rabin2 -zz
zinaweza kutumika:
Kwa uchambuzi wa kina zaidi, ikiwa ni pamoja na kutafuta aina maalum za data au mifumo, radare2 inatoa uwezo mpana wa kutafuta:
r2frida inatoa mbadala wenye nguvu wa kukagua kumbukumbu ya programu kwa wakati halisi, bila kuhitaji dump ya kumbukumbu. Chombo hiki kinaruhusu utekelezaji wa amri za kutafuta moja kwa moja kwenye kumbukumbu ya programu inayotembea:
Wakati mwingine waendelezaji huhifadhi data nyeti katika hifadhi ya ndani na kuificha kwa kutumia funguo zilizowekwa kwa nguvu/kutabirika katika msimbo. Hii haipaswi kufanywa kwani baadhi ya kurudi nyuma kunaweza kuruhusu washambuliaji kutoa taarifa za siri.
Waendelezaji hawapaswi kutumia algorithms za deprecated kufanya checks za uthibitishaji, hifadhi au tuma data. Baadhi ya hizi ni: RC4, MD4, MD5, SHA1... Ikiwa hashes zinatumika kuhifadhi nywila kwa mfano, hashes zinazopinga brute-force zinapaswa kutumika pamoja na chumvi.
Majaribio makuu ya kufanya ni kutafuta ikiwa unaweza kupata hardcoded nywila/siri katika msimbo, au ikiwa hizo ni predictable, na ikiwa msimbo unatumia aina fulani ya weak cryptography algorithms.
Ni ya kuvutia kujua kwamba unaweza monitor baadhi ya crypto libraries kiotomatiki ukitumia objection na:
Kwa maelezo zaidi kuhusu iOS cryptographic APIs na maktaba, tembelea https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography
Uthibitishaji wa mitaa una jukumu muhimu, hasa linapokuja suala la kulinda ufikiaji katika eneo la mbali kupitia mbinu za kijasusi. Kiini hapa ni kwamba bila utekelezaji sahihi, mitambo ya uthibitishaji wa mitaa inaweza kupuuziliwa mbali.
Msingi wa Uthibitishaji wa Mitaa wa Apple na keychain zinatoa APIs thabiti kwa waendelezaji kuwezesha mazungumzo ya uthibitishaji wa mtumiaji na kushughulikia data za siri kwa usalama, mtawalia. Secure Enclave inalinda fingerprint ID kwa Touch ID, wakati Face ID inategemea utambuzi wa uso bila kuathiri data za kibaiolojia.
Ili kuunganisha Touch ID/Face ID, waendelezaji wana chaguo mbili za API:
LocalAuthentication.framework
kwa uthibitishaji wa mtumiaji wa kiwango cha juu bila ufikiaji wa data za kibaiolojia.
Security.framework
kwa ufikiaji wa huduma za keychain za kiwango cha chini, ikilinda data za siri kwa uthibitishaji wa kibaiolojia. Wrappers mbalimbali za wazi zinafanya ufikiaji wa keychain kuwa rahisi.
Hata hivyo, LocalAuthentication.framework
na Security.framework
zinaonyesha udhaifu, kwani kimsingi hurudisha thamani za boolean bila kuhamasisha data kwa michakato ya uthibitishaji, na kuifanya kuwa rahisi kupuuziliwa mbali (tazama Usiguse hivyo, na David Lindner et al).
Ili kuwahamasisha watumiaji kwa uthibitishaji, waendelezaji wanapaswa kutumia evaluatePolicy
njia ndani ya LAContext
darasa, wakichagua kati ya:
deviceOwnerAuthentication
: Inahamasisha kwa Touch ID au nambari ya kifaa, ikishindwa ikiwa zote mbili hazijawashwa.
deviceOwnerAuthenticationWithBiometrics
: Inahamasisha pekee kwa Touch ID.
Uthibitishaji uliofanikiwa unadhihirishwa na thamani ya boolean inayorejeshwa kutoka evaluatePolicy
, ikionyesha kasoro inayoweza kutokea ya usalama.
Kutekeleza uthibitishaji wa mitaa katika programu za iOS kunahusisha matumizi ya keychain APIs kuhifadhi kwa usalama data za siri kama vile token za uthibitishaji. Mchakato huu unahakikisha kwamba data inaweza kufikiwa tu na mtumiaji, akitumia nambari ya kifaa chake au uthibitishaji wa kibaiolojia kama Touch ID.
Keychain inatoa uwezo wa kuweka vitu na sifa ya SecAccessControl
, ambayo inazuia ufikiaji wa kipengee hadi mtumiaji athibitishwe kwa mafanikio kupitia Touch ID au nambari ya kifaa. Kipengele hiki ni muhimu kwa kuboresha usalama.
Hapa chini kuna mifano ya msimbo katika Swift na Objective-C inayoonyesha jinsi ya kuhifadhi na kupata string kutoka kwa keychain, ikitumia vipengele hivi vya usalama. Mifano inaonyesha hasa jinsi ya kuanzisha udhibiti wa ufikiaji ili kuhitaji uthibitishaji wa Touch ID na kuhakikisha data inapatikana tu kwenye kifaa ambacho ilianzishwa, chini ya hali kwamba nambari ya kifaa imewekwa.
Sasa tunaweza kuomba kipengee kilichohifadhiwa kutoka kwa keychain. Huduma za keychain zitaonyesha kidirisha cha uthibitishaji kwa mtumiaji na kurudisha data au nil kulingana na ikiwa alitoa alama sahihi ya vidole au la.
Matumizi ya mifumo katika programu yanaweza pia kugunduliwa kwa kuchambua orodha ya maktaba za kawaida za dinamik katika binary ya programu. Hii inaweza kufanywa kwa kutumia otool
:
Ikiwa LocalAuthentication.framework
inatumika katika programu, matokeo yatakuwa na mistari ifuatayo (kumbuka kwamba LocalAuthentication.framework
inatumia Security.framework
chini ya uso):
If Security.framework
inatumika, ni ya pili pekee itakuwa inayoonyeshwa.
Kupitia Objection Biometrics Bypass, iliyoko kwenye hii GitHub page, mbinu inapatikana ya kushinda mekanizma ya LocalAuthentication. Msingi wa njia hii unahusisha kutumia Frida kubadilisha kazi ya evaluatePolicy
, kuhakikisha inatoa matokeo ya True
kila wakati, bila kujali mafanikio halisi ya uthibitishaji. Hii ni muhimu sana kwa kukwepa michakato ya uthibitishaji wa biometriki yenye kasoro.
Ili kuanzisha hii bypass, amri ifuatayo inatumika:
Hii amri inanzisha mfululizo ambapo Objection inarekodi kazi ambayo kwa ufanisi inabadilisha matokeo ya ukaguzi wa evaluatePolicy
kuwa True
.
Mfano wa matumizi ya evaluatePolicy
kutoka DVIA-v2 application:
Ili kufanikisha bypass ya Uthibitishaji wa Mitaa, skripti ya Frida imeandikwa. Skripti hii inalenga ukaguzi wa evaluatePolicy, ikikamata callback yake ili kuhakikisha inarudisha success=1. Kwa kubadilisha tabia ya callback, ukaguzi wa uthibitishaji unakwepa kwa ufanisi.
Skripti iliyo hapa chini inachomwa ili kubadilisha matokeo ya njia ya evaluatePolicy. Inabadilisha matokeo ya callback kuonyesha kila wakati mafanikio.
Ili kuingiza script ya Frida na kupita uthibitisho wa kibayometriki, amri ifuatayo inatumika:
Ni muhimu kuangalia kwamba hakuna mawasiliano yanayotokea bila usimbuaji na pia kwamba programu inathibitisha kwa usahihi cheti cha TLS cha seva. Ili kuangalia masuala haya unaweza kutumia proxy kama Burp:
Tatizo moja la kawaida katika kuthibitisha cheti cha TLS ni kuangalia kwamba cheti kimeandikwa na CA iliyoaminika, lakini sio kuangalia kama jina la mwenyeji la cheti ndilo jina la mwenyeji linalofikiwa. Ili kuangalia tatizo hili kwa kutumia Burp, baada ya kuamini Burp CA kwenye iPhone, unaweza kuunda cheti kipya na Burp kwa jina la mwenyeji tofauti na kukitumia. Ikiwa programu bado inafanya kazi, basi, kitu fulani kiko hatarini.
Ikiwa programu inatumia SSL Pinning kwa usahihi, basi programu itafanya kazi tu ikiwa cheti ni kile kinachotarajiwa. Wakati wa kujaribu programu hii inaweza kuwa tatizo kwani Burp itatoa cheti yake mwenyewe. Ili kupita ulinzi huu ndani ya kifaa kilichovunjwa, unaweza kufunga programu SSL Kill Switch au kufunga Burp Mobile Assistant
Unaweza pia kutumia objection's ios sslpinning disable
Katika /System/Library
unaweza kupata mifumo iliyosakinishwa kwenye simu inayotumiwa na programu za mfumo
Programu zilizowekwa na mtumiaji kutoka Duka la Programu ziko ndani ya /User/Applications
Na /User/Library
ina data iliyohifadhiwa na programu za kiwango cha mtumiaji
Unaweza kufikia /User/Library/Notes/notes.sqlite
kusoma noti zilizohifadhiwa ndani ya programu.
Ndani ya folda ya programu iliyosakinishwa (/User/Applications/<APP ID>/
) unaweza kupata faili za kuvutia:
iTunesArtwork
: Ikoni inayotumiwa na programu
iTunesMetadata.plist
: Taarifa ya programu inayotumiwa katika Duka la Programu
/Library/*
: Inashikilia mapendeleo na cache. Katika /Library/Cache/Snapshots/*
unaweza kupata picha iliyofanywa kwa programu kabla ya kuituma kwenye nyuma.
Wakuu wa programu wanaweza kwa mbali kurekebisha usakinishaji wote wa programu yao mara moja bila ya kuwasilisha tena programu hiyo kwenye Duka la Programu na kusubiri hadi idhini ipatikane. Kwa kusudi hili mara nyingi hutumia JSPatch. Lakini kuna chaguzi nyingine pia kama Siren na react-native-appstore-version-checker. Huu ni mfumo hatari ambao unaweza kutumiwa vibaya na SDK za wahusika wengine, kwa hivyo inashauriwa kuangalia ni njia gani inatumika kwa sasisho za kiotomatiki (ikiwa zipo) na kujaribu. Unaweza kujaribu kupakua toleo la awali la programu kwa kusudi hili.
Changamoto kubwa na SDK za wahusika wengine ni ukosefu wa udhibiti wa kina juu ya kazi zao. Wakuu wa programu wanakabiliwa na chaguo: ama kuunganisha SDK na kukubali vipengele vyake vyote, ikiwa ni pamoja na hatari za usalama na wasiwasi wa faragha, au kuacha faida zake kabisa. Mara nyingi, wakuu wa programu hawawezi kurekebisha hatari ndani ya SDK hizi wenyewe. Zaidi ya hayo, kadri SDK zinavyopata uaminifu ndani ya jamii, baadhi zinaweza kuanza kuwa na malware.
Huduma zinazotolewa na SDK za wahusika wengine zinaweza kujumuisha ufuatiliaji wa tabia za mtumiaji, kuonyesha matangazo, au kuboresha uzoefu wa mtumiaji. Hata hivyo, hii inaleta hatari kwani wakuu wa programu wanaweza kutokuwa na ufahamu kamili wa msimbo unaotekelezwa na maktaba hizi, na kusababisha hatari za faragha na usalama. Ni muhimu kupunguza taarifa zinazoshirikiwa na huduma za wahusika wengine kwa kile kinachohitajika na kuhakikisha kwamba hakuna data nyeti inayofichuliwa.
Utekelezaji wa huduma za wahusika wengine kawaida huja katika aina mbili: maktaba huru au SDK kamili. Ili kulinda faragha ya mtumiaji, data yoyote inayoshirikiwa na huduma hizi inapaswa kuwa isiyojulikana ili kuzuia kufichuliwa kwa Taarifa za Kibinafsi (PII).
Ili kubaini maktaba ambazo programu inatumia, amri ya otool
inaweza kutumika. Chombo hiki kinapaswa kukimbizwa dhidi ya programu na kila maktaba iliyoshirikiwa inayotumiwa ili kugundua maktaba za ziada.
OWASP iGoat https://github.com/OWASP/igoat <<< Toleo la Objective-C https://github.com/OWASP/iGoat-Swift <<< Toleo la Swift
Tumia Trickest kujenga na kujiendesha kiotomatiki kazi zinazotolewa na zana za jamii za kisasa zaidi duniani. Pata Ufikiaji Leo:
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)
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)