Checkpoint föreslog Safe-Linking-skyddsteknik, vilket gör det svårare att utnyttja sårbarheter

Checkpoint Company представила Säker länkningsskyddsmekanism, som gör det svårt att skapa exploateringar som manipulerar definitionen eller modifieringen av pekare till buffertar som allokeras när ett malloc-anrop körs. Safe-Linking blockerar inte helt möjligheten att utnyttja sårbarheter, men med minimal overhead komplicerar det avsevärt skapandet av vissa kategorier av utnyttjanden, eftersom det utöver det exploaterbara buffertspillet är nödvändigt att hitta en annan sårbarhet som orsakar läckage av information om placeringen av högen i minnet.

Patchar som implementerar Safe-Linking har förberetts för Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) och Google TCMalloc och föreslås även för att uppgradera skyddet i Chromium (i
Sedan 2012 har Chromium redan byggt in skyddstekniken MaskPtr som syftar till att lösa samma problem, men lösningen från Checkpoint visar högre prestanda).
Föreslagna patchar har redan godkänts för leverans i augustiversionen Glibc 3.32 och Säker länkning kommer att vara aktiverat som standard. uClibc-NG stöder Safe-Linking gick in i ingår i version 1.0.33 och är aktiverad som standard. Ändringar i gperftools (gamla tcmalloc) accepterad, men kommer att erbjudas som ett alternativ i en framtida version.

Utvecklare TCMalloc (ny tcmalloc) vägrade acceptera ändra, med hänvisning till allvarlig prestandaförsämring och behovet av att lägga till omfattande tester för att regelbundet kontrollera att allt fungerar som förväntat. Testning av Checkpoints ingenjörer visade att Safe-Linking-metoden inte leder till ytterligare minnesförbrukning, och prestandan vid utförande av heap-operationer minskar i genomsnitt med endast 0.02 % och i värsta fall med 1.5 % (som jämförelse kan nämnas att overheaden i metoden som används i Chromium uppskattas till "mindre än 2 %)). Inkludering
Säker länkning resulterar i att 2-3 ytterligare monteringsinstruktioner exekveras varje gång free() anropas, och 3-4 instruktioner varje gång malloc() anropas. Att köra stegen för initiering och generering av slumpmässiga värden krävs inte.

Checkpoint föreslog Safe-Linking-skyddsteknik, vilket gör det svårare att utnyttja sårbarheter

Safe-Linking kan användas inte bara för att förbättra säkerheten för olika heap-implementeringar, utan också för att lägga till integritetskontroller till alla datastrukturer som använder enstaka länkade listor med pekare placerade bredvid själva buffertarna. Metoden är mycket enkel att implementera och kräver bara att man lägger till ett makro och applicerar det på pekare till nästa block i koden (till exempel för Glibc ändringar bara några rader kod). Metoden kokar ner till följande förändringar:

+#define PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) ((((size_t) pos) >> 12) ^ ((size_t) ptr)))

+#define REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr)

- nextp = p->fd;
+ nextp = REVEAL_PTR (p->fd);
.

Kärnan i metoden är att använda slumpmässiga data från ASLR-adressrandomiseringsmekanismen (mmap_base) för att skydda enkellänkade listor som Fast-Bins och TCache. Innan värdet appliceras på en pekare till nästa element i listan, utför den en maskkonvertering och kontrollerar sidjustering. Pekaren ersätts av resultatet av operationen "(L >> PAGE_SHIFT) XOR (P)", där P är värdet på pekaren och L är minnesplatsen där pekaren är lagrad.

Checkpoint föreslog Safe-Linking-skyddsteknik, vilket gör det svårare att utnyttja sårbarheter

När den används i systemet ASLR (Address Space Layout Randomization) en del av L-bitarna med heapbasadressen innehåller slumpmässiga värden som används som en nyckel för att koda P (extraheras av en 12-bitars skiftoperation för 4096-byte sidor). Denna manipulation minskar risken för pekarekapning i en exploatering, eftersom pekaren inte lagras i sin ursprungliga form och att ersätta den kräver kunskap om heap-allokeringen. Dessutom innehåller patchkoden också en extra kontroll för blockjustering, som inte tillåter en angripare att ersätta en pekare med ett ojusterat värde och kräver kunskap om antalet bitar som är justerade, vilket på 64-bitarssystem dessutom tillåter blockering 15 av 16 attackförsök som inte tar hänsyn till anpassning.

Metoden är effektiv för att skydda mot attacker som använder partiell pekareomskrivning (ändring av låga byte), fullständig pekareomskrivning (omdirigering till angriparens kod) och ändring av listpositionen på en ojusterad adress. Som ett exempel är det visat att användningen av Safe-Linking i malloc skulle tillåta blockering av exploatering nyligen identifieras av samma sårbarhetsforskare CVE-2020-6007 i Philips Hue Bridge smarta ljus, orsakat av ett buffertspill och låter dig få kontroll över enheten.

Källa: opennet.ru

Lägg en kommentar