Libc Protections
Last updated
Last updated
Jifunze na zoezi la AWS Hacking:Mafunzo ya HackTricks ya Mtaalam wa Timu Nyekundu ya AWS (ARTE) Jifunze na zoezi la GCP Hacking: Mafunzo ya HackTricks ya Mtaalam wa Timu Nyekundu ya GCP (GRTE)
Malloc inagawa kumbukumbu katika vikundi vya byte 8 (32-bit) au 16 (64-bit). Hii inamaanisha mwisho wa vipande katika mifumo ya 32-bit inapaswa kulingana na 0x8, na katika mifumo ya 64-bit na 0x0. Kipengele cha usalama huchunguza kwamba kila kipande kinalingana kwa usahihi katika maeneo maalum haya kabla ya kutumia kidude kutoka kwa bakuli.
Utekelezaji wa ulinganisho wa vipande katika mifumo ya 64-bit unaimarisha sana usalama wa Malloc kwa kupunguza mahali pa vipande bandia hadi 1 kati ya anwani 16. Hii inachanganya juhudi za udukuzi, hasa katika hali ambapo mtumiaji ana udhibiti mdogo juu ya thamani za pembejeo, ikifanya mashambulizi kuwa magumu zaidi na ngumu kutekelezwa kwa mafanikio.
Shambulio la Fastbin kwenye __malloc_hook
Sheria mpya za ulinganisho katika Malloc pia zinazuia shambulio la kawaida linalohusisha __malloc_hook
. Awali, wadukuzi wangeweza kubadilisha saizi za vipande ili kusajili kidude hiki cha kazi na kupata utekelezaji wa kanuni. Sasa, mahitaji makali ya ulinganisho yanahakikisha kuwa mabadiliko kama hayo sio tena yanayoweza kufanyika, kufunga njia ya kawaida ya udukuzi na kuimarisha usalama kwa ujumla.
Kuchanganyisha Kidude ni uboreshaji wa usalama unaotumiwa kulinda vitambulisho vya Fd vya fastbin na tcache katika shughuli za usimamizi wa kumbukumbu. Mbinu hii husaidia kuzuia aina fulani za mbinu za udukuzi wa kumbukumbu, hasa zile ambazo hazihitaji habari iliyovuja au kubadilisha moja kwa moja maeneo ya kumbukumbu kwa kuzingatia nafasi zilizojulikana (kubadilisha sehemu).
Msingi wa mbinu hii ni fomula ya kuchanganya:
New_Ptr = (L >> 12) XOR P
L ni Mahali ya Kuhifadhi ya kidude.
P ni Kidude halisi cha Fd cha fastbin/tcache.
Sababu ya kubadilisha kidude cha mahali ya kuhifadhi (L) kwa bits 12 kuelekea kulia kabla ya operesheni ya XOR ni muhimu. Ubadilishaji huu unashughulikia udhaifu ulio ndani ya bits 12 za chini kabisa za anwani za kumbukumbu, ambazo kawaida zinatabirika kutokana na vikwazo vya muundo wa mfumo. Kwa kusonga bits, sehemu inayoweza kutabirika inaondolewa kwenye hesabu, kuimarisha upangaji wa kidude kipya kilichochanganywa na hivyo kujilinda dhidi ya mashambulizi yanayotegemea utabirika wa bits hizi.
Kidude kilichochanganywa kinatumia utabiri uliopo uliotolewa na Urambazaji wa Nafasi ya Anwani (ASLR), ambayo inachanganya anwani zinazotumiwa na programu ili kuifanya iwe ngumu kwa wadukuzi kutabiri muundo wa kumbukumbu ya mchakato.
Kuchanganua kidude ili kupata anwani ya awali kunahusisha kutumia operesheni sawa ya XOR. Hapa, kidude kilichochanganywa kinachukuliwa kama P katika fomula, na wakati inapochanganywa na mahali ya kuhifadhi isiyobadilika (L), inasababisha kidude cha awali kufunuliwa. Ulinganifu huu katika kuchanganya na kuchanganua kunahakikisha kuwa mfumo unaweza kuweka na kufuta kidude bila mzigo mkubwa, wakati unaimarisha usalama dhidi ya mashambulizi yanayobadilisha vitambulisho vya kumbukumbu.
Kuchanganya kidude kunalenga kuzuia kubadilisha sehemu na sehemu kamili za kidude katika usimamizi wa kumbukumbu ya kifurushi, uboreshaji mkubwa katika usalama. Kipengele hiki kinaathiri mbinu za udukuzi kwa njia kadhaa:
Kuzuia Kubadilisha Sehemu ya Byte: Awali, wadukuzi wangeweza kubadilisha sehemu ya kidude ili kupeleka vipande vya kifurushi cha kumbukumbu kwenye maeneo tofauti bila kujua anwani sahihi, mbinu inayoonekana katika udukuzi wa House of Roman bila kuvuja kwa kumbukumbu. Kwa kuchanganya kidude, kubadilisha sehemu kwa njia ya kulinganisha bila kuvuja kwa kumbukumbu sasa kunahitaji kufanya nguvu, ikipunguza sana uwezekano wa mafanikio.
Kuongezeka kwa Ugumu wa Mashambulio ya Tcache Bin/Fastbin: Mashambulizi ya kawaida yanayobadilisha vitambulisho vya kazi (kama vile __malloc_hook
) kwa kubadilisha kuingia kwa haraka au tcache yanazuiliwa. Kwa mfano, shambulio linaweza kuhusisha kuvuja kwa anwani ya LibC, kuachilia kipande kwenye tcache bin, na kisha kubadilisha kidude cha Fd ili kupeleka kwa __malloc_hook
kwa utekelezaji wa kanuni za aina yoyote. Kwa kuchanganya kidude, vitambulisho hivi lazima vichanganywe kwa usahihi, kufanya kuvuja kwa kumbukumbu kuwa muhimu kwa kubadilisha kwa usahihi, hivyo kuinua kizuizi cha udukuzi.
Mahitaji ya Kuvuja kwa Kumbukumbu za Kifurushi katika Maeneo Yasiyo ya Kifurushi: Kuunda kipande bandia katika maeneo yasiyo ya kifurushi (kama vile stakish, sehemu ya .bss, au PLT/GOT) sasa pia kunahitaji kuvuja kwa kumbukumbu kutokana na ulazima wa kuchanganya kidude. Hii inapanua ugumu wa kudukua maeneo haya, sawa na ulazima wa kubadilisha anwani za LibC.
Kuvuja kwa Anwani za Kifurushi Kunakuwa Changamoto Zaidi: Kuchanganya kidude kunazuia umuhimu wa vitambulisho vya Fd katika fastbin na tcache bins kama vyanzo vya kuvuja kwa anwani za kifurushi. Hata hivyo, vitambulisho katika bins zisizopangwa, ndogo, na kubwa bado havijachanganywa, hivyo bado vinaweza kutumika kwa kuvuja kwa anwani. Hii inawalazimisha wadukuzi kuchunguza bins hizi kwa habari inayoweza kudukuliwa, ingawa baadhi ya mbinu zinaweza kuruhusu kuchanganua kidude kabla ya kuvuja, ingawa kwa vikwazo.
Kwa maelezo bora ya mchakato angalia chapisho la asili kutoka hapa.
Fomula inayotumiwa kwa kuchanganya na kuchanganua kidude ni:
New_Ptr = (L >> 12) XOR P
Ambapo L ni mahali pa kuhifadhi na P ni kidude cha Fd. Wakati L inaposukumwa kulia kwa bits 12, inafunua bits muhimu zaidi za P, kutokana na asili ya XOR, ambayo hutoa 0 wakati bits zinachanganywa na wenyewe.
Hatua muhimu katika Algorithm:
Kuvuja Kwanza kwa Bits Muhimu Zaidi: Kwa kuchanganya L iliyosukumwa na P, unapata kwa ufanisi bits za juu 12 za P kwa sababu sehemu iliyosukumwa ya L itakuwa sifuri, ikiiacha sehemu inayolingana ya P bila kubadilika.
Kurejesha Bits za Kidude: Kwa kuwa XOR inarejeshwa, kujua matokeo na moja ya vipande vinavyohusika kunakuwezesha kuhesabu kipande kingine. Mali hii hutumiwa kudokeza seti nzima ya bits kwa P kwa kuchanganya vipande vilivyofahamika vya bits na sehemu za kidude kilichochanganywa.
Kuchanganua kwa Kurudia: Mchakato unarudiwa, kila wakati ukitumia bits mpya zilizogunduliwa za P kutoka hatua iliyopita kufafanua sehemu inayofuata ya kidude kilichochanganywa, hadi bits zote zinapopatikana.
Kushughulikia Bits za Kudhibiti: Bits za mwisho 12 za L zinapotea kutokana na kusonga, lakini ni za kudhibiti na zinaweza kujengwa upya baada ya mchakato.
Unaweza kupata utekelezaji wa algorithmu hii hapa: https://github.com/mdulin2/mangle
Mlinzi wa pointer ni mbinu ya kuzuia shambulio inayotumiwa katika glibc kulinda pointa za kazi zilizohifadhiwa, hasa zile zilizosajiliwa na wito wa maktaba kama vile atexit()
. Ulinzi huu unahusisha kuchanganya pointa kwa kuzi XOR na siri iliyohifadhiwa katika data ya mnyororo (fs:0x30
) na kutumia mzunguko wa bitwise. Mfumo huu unalenga kuzuia wachomaji kuchukua udhibiti wa mzunguko kwa kuandika upya pointa za kazi.
Kuelewa Operesheni za Mlinzi wa Pointer: Kuchanganya (kuchanganya) ya pointa hufanywa kwa kutumia PTR_MANGLE
macro ambayo ina XOR pointa na siri ya biti 64 na kisha kufanya mzunguko wa kushoto wa biti 0x11. Operesheni ya kurudisha pointa halisi inashughulikiwa na PTR_DEMANGLE
.
Stratejia ya Shambulio: Shambulio linategemea njia ya maandishi yanayojulikana, ambapo mchomaji anahitaji kujua toleo la awali na lililochanganywa la pointa ili kudokeza siri iliyotumiwa kwa kuchanganya.
Kutumia Maandishi Yaliyojulikana:
Kutambua Pointa za Kazi Zilizofungwa: Kwa kuangalia msimbo wa chanzo wa glibc au meza za pointa za kazi zilizoanzishwa (kama __libc_pthread_functions
), mchomaji anaweza kupata pointa za kazi zinazoweza kutabirika.
Kuhesabu Siri: Kwa kutumia pointa ya kazi inayojulikana kama vile __pthread_attr_destroy
na toleo lake lililochanganywa kutoka kwenye meza ya pointa za kazi, siri inaweza kuhesabiwa kwa kuzungusha nyuma (mzunguko wa kulia) pointa iliyochanganywa na kisha kui XOR na anwani ya kazi.
Maandishi Mbadala: Mchomaji pia anaweza kujaribu kuchanganya pointa na thamani zilizojulikana kama 0 au -1 kuona kama hizi zinazalisha mifano inayoweza kutambulika katika kumbukumbu, hivyo kufunua siri wakati mifano hizi zinapopatikana katika dumushi za kumbukumbu.
Matumizi ya Vitendo: Baada ya kuhesabu siri, mchomaji anaweza kubadilisha pointa kwa njia iliyodhibitiwa, kimsingi kupitisha ulinzi wa Pointer Guard katika programu yenye nyuzi nyingi ikiwa na maarifa ya anwani ya msingi ya libc na uwezo wa kusoma maeneo ya kumbukumbu kwa hiari.