Libc Protections
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
Malloc allokeer geheue in 8-byte (32-bit) of 16-byte (64-bit) groepe. Dit beteken dat die einde van stukke in 32-bit stelsels met 0x8 moet ooreenstem, en in 64-bit stelsels met 0x0. Die sekuriteitskenmerk kontroleer dat elke stuk korrek geallineer is op hierdie spesifieke plekke voordat 'n wysiger van 'n bin gebruik word.
Die afdwinging van stuk aligneering in 64-bit stelsels verbeter Malloc se sekuriteit aansienlik deur die plasing van vals stukke te beperk tot slegs 1 uit elke 16 adresse. Dit bemoeilik uitbuitpogings, veral in scenario's waar die gebruiker beperkte beheer oor invoerwaardes het, wat aanvalle meer kompleks en moeiliker maak om suksesvol uit te voer.
Fastbin Aanval op __malloc_hook
Die nuwe aligneerreëls in Malloc keer ook 'n klassieke aanval wat die __malloc_hook
betrek. Voorheen kon aanvallers stuk groottes manipuleer om hierdie funksiewysiger te oorskry en kode-uitvoering te verkry. Nou verseker die streng aligneervereiste dat sulke manipulasies nie meer lewensvatbaar is nie, wat 'n algemene uitbuitroete sluit en die algehele sekuriteit verbeter.
Wysiger Verminking is 'n sekuriteitsverbetering wat gebruik word om fastbin en tcache Fd wysigers in geheuebestuur operasies te beskerm. Hierdie tegniek help om sekere tipes geheue-uitbuit taktieke te voorkom, spesifiek dié wat nie gelekte geheue-inligting vereis nie of wat geheue plekke direk manipuleer relatief tot bekende posisies (relatiewe oorskrywings).
Die kern van hierdie tegniek is 'n obfuskeringsformule:
New_Ptr = (L >> 12) XOR P
L is die Berging Plek van die wysiger.
P is die werklike fastbin/tcache Fd Wysiger.
Die rede vir die bitgewys verskuiwing van die berging plek (L) met 12 bits na regs voor die XOR operasie is krities. Hierdie manipulasie spreek 'n kwesbaarheid aan wat inherent is aan die deterministiese aard van die minste betekenisvolle 12 bits van geheue adresse, wat tipies voorspelbaar is weens stelsels argitektuur beperkings. Deur die bits te verskuif, word die voorspelbare gedeelte uit die vergelyking verwyder, wat die ewekansigheid van die nuwe, verminkte wysiger verbeter en sodoende beskerming bied teen uitbuit wat op die voorspelbaarheid van hierdie bits staatmaak.
Hierdie verminkte wysiger benut die bestaande ewekansigheid wat deur Address Space Layout Randomization (ASLR) verskaf word, wat adresse wat deur programme gebruik word, ewekansig maak om dit moeilik te maak vir aanvallers om die geheue uitleg van 'n proses te voorspel.
Demangling van die wysiger om die oorspronklike adres te herwin, behels die gebruik van dieselfde XOR operasie. Hier word die verminkte wysiger as P in die formule behandel, en wanneer dit met die onveranderde berging plek (L) XOR word, lei dit tot die oorspronklike wysiger wat onthul word. Hierdie simmetrie in verminking en demangling verseker dat die stelsel effektief wysigers kan kodeer en dekodeer sonder beduidende oorhoofse koste, terwyl dit aansienlik die sekuriteit teen aanvalle wat geheue wysigers manipuleer, verhoog.
Wysiger verminking poog om gedeeltelike en volle wysiger oorskrywings in heap bestuur te voorkom, 'n beduidende verbetering in sekuriteit. Hierdie kenmerk beïnvloed uitbuit tegnieke op verskeie maniere:
Voorkoming van Bye Byte Relatiewe Oorskrywings: Voorheen kon aanvallers 'n deel van 'n wysiger verander om heap stukke na verskillende plekke te herlei sonder om presiese adresse te ken, 'n tegniek wat in die leakless House of Roman uitbuit sigbaar is. Met wysiger verminking, vereis sulke relatiewe oorskrywings sonder 'n heap leak nou brute forcing, wat hul waarskynlikheid van sukses drasties verminder.
Verhoogde Moeilikheid van Tcache Bin/Fastbin Aanvalle: Algemene aanvalle wat funksiewysigers oorskryf (soos __malloc_hook
) deur fastbin of tcache inskrywings te manipuleer, word belemmer. Byvoorbeeld, 'n aanval kan behels om 'n LibC adres te lek, 'n stuk in die tcache bin vry te stel, en dan die Fd wysiger te oorskryf om dit na __malloc_hook
te herlei vir arbitrêre kode-uitvoering. Met wysiger verminking, moet hierdie wysigers korrek vermink wees, wat 'n heap leak vir akkurate manipulasie vereis, wat die uitbuit hindernis verhoog.
Vereiste vir Heap Leaks in Nie-Heap Plekke: Om 'n vals stuk in nie-heap areas (soos die stapel, .bss afdeling, of PLT/GOT) te skep, vereis nou ook 'n heap leak weens die behoefte aan wysiger verminking. Dit verleng die kompleksiteit van die uitbuit van hierdie areas, soortgelyk aan die vereiste om LibC adresse te manipuleer.
Lek van Heap Adresse Word Meer Uitdagend: Wysiger verminking beperk die nuttigheid van Fd wysigers in fastbin en tcache bins as bronne vir heap adres lek. Tog bly wysigers in onsorteerde, klein, en groot bins onvervormd, en bly dus steeds bruikbaar vir die lek van adresse. Hierdie skuif dwing aanvallers om hierdie bins te verken vir uitbuitbare inligting, alhoewel sommige tegnieke steeds toelaat dat wysigers gedemangeld word voor 'n lek, hoewel met beperkings.
Vir 'n beter verduideliking van die proses kyk die oorspronklike pos hier.
Die formule wat gebruik word vir verminking en demangling van wysigers is:
New_Ptr = (L >> 12) XOR P
Waar L die berging plek is en P die Fd wysiger is. Wanneer L met 12 bits na regs verskuif word, blootstel dit die mees betekenisvolle bits van P, weens die aard van XOR, wat 0 uitset wanneer bits met hulself XOR word.
Sleutelstappe in die Algoritme:
Begin Leak van die Mees Betekenisvolle Bits: Deur die verskoven L met P te XOR, kry jy effektief die boonste 12 bits van P omdat die verskoven gedeelte van L nul sal wees, wat P's ooreenstemmende bits onveranderd laat.
Herwinning van Wysiger Bits: Aangesien XOR omkeerbaar is, laat die kennis van die resultaat en een van die operandi jou toe om die ander operand te bereken. Hierdie eienskap word gebruik om die hele stel bits vir P af te lei deur bekendgestelde stelle bits met dele van die verminkte wysiger suksesvol te XOR.
Iteratiewe Demangling: Die proses word herhaal, elke keer die nuut ontdekte bits van P van die vorige stap gebruik om die volgende segment van die verminkte wysiger te dekodeer, totdat alle bits herwin is.
Hantering van Deterministiese Bits: Die finale 12 bits van L gaan verlore weens die verskuiwing, maar hulle is deterministies en kan na die proses weer opgebou word.
Jy kan 'n implementering van hierdie algoritme hier vind: https://github.com/mdulin2/mangle
Wysiger wag is 'n uitbuit mitigering tegniek wat in glibc gebruik word om gestoor funksiewysigers te beskerm, veral dié wat deur biblioteek oproepe soos atexit()
geregistreer is. Hierdie beskerming behels die verhaspeling van die wysigers deur hulle met 'n geheim wat in die draad data (fs:0x30
) gestoor is, te XOR en 'n bitgewys rotasie toe te pas. Hierdie meganisme poog om te voorkom dat aanvallers die kontrole vloei oorneem deur funksiewysigers te oorskryf.
Begrip van Wysiger Wag Operasies: Die verhaspeling (verminking) van wysigers word gedoen met die PTR_MANGLE
makro wat die wysiger met 'n 64-bit geheim XOR en dan 'n linker rotasie van 0x11 bits uitvoer. Die omgekeerde operasie om die oorspronklike wysiger te herwin, word hanteer deur PTR_DEMANGLE
.
Aanvalstrategie: Die aanval is gebaseer op 'n bekende-plakstrategie, waar die aanvaller beide die oorspronklike en die verminkte weergawes van 'n wysiger moet ken om die geheim wat vir verminking gebruik is, af te lei.
Uitbuiting van Bekende Plaktekste:
Identifisering van Vaste Funksiewysigers: Deur die glibc bronkode of geïnitialiseerde funksiewysiger tabelles (soos __libc_pthread_functions
) te ondersoek, kan 'n aanvaller voorspelbare funksiewysigers vind.
Berekening van die Geheim: Deur 'n bekende funksiewysiger soos __pthread_attr_destroy
en sy verminkte weergawe uit die funksiewysiger tabel te gebruik, kan die geheim bereken word deur die verminkte wysiger om te draai (regsrotasie) en dit dan met die adres van die funksie te XOR.
Alternatiewe Plaktekste: Die aanvaller kan ook eksperimenteer met die verminking van wysigers met bekende waardes soos 0 of -1 om te sien of hierdie identifiseerbare patrone in geheue produseer, wat moontlik die geheim onthul wanneer hierdie patrone in geheue dumps gevind word.
Praktiese Toepassing: Nadat die geheim bereken is, kan 'n aanvaller wysigers op 'n beheerde manier manipuleer, wat in wese die Wysiger Wag beskerming in 'n multithreaded toepassing omseil met kennis van die libc basis adres en 'n vermoë om arbitrêre geheue plekke te lees.
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)