Libc Protections

Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Utekelezaji wa Ulinganisho wa Vipande

Malloc inagawa kumbukumbu katika vikundi vya herufi 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 kielekezi kutoka kwa bakuli.

Manufaa ya Usalama

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 kuingiza, 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 kielekezi cha kazi hii na kupata utekelezaji wa nambari. 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.

Kuchanganyika kwa Kielekezi kwenye fastbins na tcache

Kuchanganyika kwa Kielekezi ni kipengele cha usalama kinachotumiwa kulinda vielekezi 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 ya kumbukumbu au kubadilisha maeneo ya kumbukumbu moja kwa moja kulingana na nafasi zilizojulikana (kubadilisha kwa kiasi).

Msingi wa mbinu hii ni fomula ya kuficha:

New_Ptr = (L >> 12) XOR P

  • L ni Mahali ya Kuhifadhi la kielekezi.

  • P ni Kielekezi halisi cha Fd cha fastbin/tcache.

Sababu ya kubadilisha kidokezo cha mahali ya kuhifadhi (L) kwa bits 12 kulia kabla ya operesheni ya XOR ni muhimu. Ubadilishaji huu unashughulikia udhaifu ulio ndani ya bits 12 za kumbukumbu zinazojulikana, ambazo kawaida zinatabirika kutokana na vikwazo vya muundo wa mfumo. Kwa kubadilisha bits, sehemu inayoweza kutabirika inaondolewa kwenye hesabu, ikiboresha upangaji wa kielekezi kipya kilichochanganywa na hivyo kuhifadhi dhidi ya mbinu za udukuzi ambazo hutegemea kutabirika kwa bits hizi.

Kielekezi kilichochanganywa kinatumia kutabirika iliyopo tayari kutokana na Urambazaji wa Nafasi ya Anwani (ASLR), ambayo huchanganya anwani zinazotumiwa na programu ili kuifanya iwe ngumu kwa wadukuzi kutabiri muundo wa kumbukumbu ya mchakato.

Kuchanganua kielekezi ili kupata anwani ya awali kunahusisha kutumia operesheni sawa ya XOR. Hapa, kielekezi kilichochanganywa kinachukuliwa kama P katika fomula, na wakati inapochanganywa na mahali ya kuhifadhi isiyobadilika (L), inasababisha kielekezi cha awali kufunuliwa. Ulinganifu huu katika kuchanganya na kuchanganua kunahakikisha kuwa mfumo unaweza kuweka na kuchambua kielekezi bila mzigo mkubwa, wakati unaimarisha usalama dhidi ya mashambulizi yanayobadilisha vielekezi vya kumbukumbu.

Manufaa ya Usalama

Kuchanganyika kwa kielekezi inalenga kuzuia kubadilisha sehemu na kubadilisha kielekezi kwa kumbukumbu ya usimamizi wa kumbukumbu, kuboresha sana usalama. Kipengele hiki kinaathiri mbinu za udukuzi kwa njia kadhaa:

  1. Kuzuia Kubadilisha Kwa Kiasi cha Byte: Awali, wadukuzi wangeweza kubadilisha sehemu ya kielekezi ili kupeleka vipande vya kumbukumbu kwenye maeneo tofauti bila kujua anwani sahihi, mbinu inayoonekana katika udukuzi wa House of Roman bila kuvuja kwa kumbukumbu. Kwa kuchanganyika kwa kielekezi, kubadilisha kama hizi bila kuvuja kwa kumbukumbu sasa inahitaji kufanya nguvu, ikipunguza sana uwezekano wao wa mafanikio.

  2. Kuongezeka kwa Ugumu wa Mashambulio ya Tcache Bin/Fastbin: Mashambulizi ya kawaida yanayobadilisha vielekezi vya kazi (kama vile __malloc_hook) kwa kubadilisha vipande vya tcache au fastbin vinazuiliwa. Kwa mfano, shambulio linaweza kuhusisha kuvuja kwa anwani ya LibC, kuachilia kipande kwenye bakuli la tcache, na kisha kubadilisha kielekezi cha Fd ili kupeleka kwa __malloc_hook kwa utekelezaji wa nambari za aina yoyote. Kwa kuchanganyika kwa kielekezi, vielekezi hivi lazima vichanganywe kwa usahihi, kufanya kuvuja kwa kumbukumbu kuwa muhimu kwa ubadilishaji sahihi, hivyo kuinua kizuizi cha udukuzi.

  3. Mahitaji ya Kuvuja kwa Kumbukumbu za Kipande katika Maeneo Yasiyo ya Kumbukumbu: Kuunda kipande bandia katika maeneo yasiyo ya kumbukumbu (kama vile stakish, sehemu ya .bss, au PLT/GOT) sasa pia inahitaji kuvuja kwa kumbukumbu kutokana na mahitaji ya kuchanganyika kwa vielekezi. Hii inapanua ugumu wa kudukua maeneo haya, sawa na mahitaji ya kubadilisha anwani za LibC.

  4. Kuvuja kwa Anwani za Kumbukumbu Kunakuwa Changamoto Zaidi: Kuchanganyika kwa vielekezi kunazuia umuhimu wa vielekezi vya Fd katika bakuli za fastbin na tcache kama vyanzo vya kuvuja kwa anwani za kumbukumbu. Hata hivyo, vielekezi katika bakuli zisizopangwa, ndogo, na kubwa bado havijachanganywa, hivyo bado vinaweza kutumika kwa kuvuja kwa anwani. Hii inawalazimisha wadukuzi kuchunguza bakuli hizi kwa habari inayoweza kudukuliwa, ingawa baadhi ya mbinu zinaweza kuruhusu kuchanganua vielekezi kabla ya kuvuja, ingawa kwa vikwazo.

Kuchanganua Vielekezi kwa Kuvuja kwa Kumbukumbu

Kwa maelezo bora ya mchakato angalia chapisho la asili kutoka hapa.

Muhtasari wa Algorithm

Fomula inayotumiwa kwa kuchanganyika na kuchanganua vielekezi ni:

New_Ptr = (L >> 12) XOR P

Ambapo L ni mahali pa kuhifadhi na P ni kielekezi cha Fd. Wakati L inapobadilishwa 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:

  1. Kuvuja Kwa Bits Muhimu Zaidi: Kwa kuchanganya XOR ya L iliyobadilishwa na P, unapata bits za juu 12 za P kwa sababu sehemu iliyobadilishwa ya L itakuwa sifuri, ikiiacha sehemu inayolingana na P bila kubadilika.

  2. Kurejesha Bits za Kielekezi: Kwa kuwa XOR inaweza kurejeshwa, kujua matokeo na moja ya vipengee hukuruhusu kuhesabu kipengee kingine. Mali hii hutumiwa kudokeza seti nzima ya bits kwa P kwa kuchanganya kwa mfululizo seti za bits zinazojulikana na sehemu za kielekezi kilichochanganywa.

  3. Kuchanganua kwa Mfululizo: Mchakato unarudiwa, kila wakati ukichukua bits mpya za P kutoka hatua ya awali ili kufafanua sehemu inayofuata ya kielekezi kilichochanganywa, hadi bits zote zinarejeshwa.

  4. Kushughulikia Bits za Kudhibiti: Bits za mwisho 12 za L zinapotea kutokana na kubadilisha, lakini ni za kutabirika na zinaweza kujengwa upya baada ya mchakato.

Unaweza kupata utekelezaji wa algorithm hii hapa: https://github.com/mdulin2/mangle

Mlinzi wa Pointer

Mlinzi wa pointer ni mbinu ya kuzuia shambulio inayotumika katika glibc kulinda pointer za kazi zilizohifadhiwa, hasa zile zilizosajiliwa na wito wa maktaba kama vile atexit(). Ulinzi huu unahusisha kuchanganya pointers kwa kuzi XOR na siri iliyohifadhiwa katika data ya mnyororo (fs:0x30) na kutumia mzunguko wa bitwise. Mfumo huu unalenga kuzuia wachomaji kutoka kuchukua udhibiti wa mwendeleo kwa kuandika juu ya pointers za kazi.

Kupitisha Mlinzi wa Pointer kwa kutumia uvujaji

  1. Kuelewa Operesheni za Mlinzi wa Pointer: Kuchanganya (kuchanganya) ya pointers hufanywa kwa kutumia PTR_MANGLE macro ambayo ina XOR pointer na siri ya 64-bit na kisha kufanya mzunguko wa kushoto wa bits 0x11. Operesheni ya kurudisha nyuma ili kupata pointer halisi inashughulikiwa na PTR_DEMANGLE.

  2. Stratejia ya Shambulio: Shambulio linategemea njia ya maandishi inayojulikana, ambapo mchomaji anahitaji kujua toleo la awali na lililochanganywa la pointer ili kudokeza siri iliyotumiwa kwa kuchanganya.

  3. Kutumia Maandishi Yaliyojulikana:

  • Kutambua Pointa za Kazi Zilizofungwa: Kwa kuangalia msimbo wa chanzo wa glibc au meza za pointers za kazi zilizoanzishwa (kama __libc_pthread_functions), mchomaji anaweza kupata pointers za kazi zinazoweza kutabirika.

  • Kuhesabu Siri: Kwa kutumia pointer ya kazi inayojulikana kama __pthread_attr_destroy na toleo lake lililochanganywa kutoka kwenye meza ya pointer ya kazi, siri inaweza kuhesabiwa kwa kurejesha mzunguko (mzunguko wa kulia) wa pointer lililochanganywa na kisha kuzi XOR na anwani ya kazi.

  1. Maandishi Mbadala: Mchomaji pia anaweza kujaribu kuchanganya pointers 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.

  2. Matumizi ya Vitendo: Baada ya kuhesabu siri, mchomaji anaweza kubadilisha pointers 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.

Marejeo

Last updated