Kompania Checkpoint mekanizmi i mbrojtjes Safe-Linking, që e pamundëson rritjen e mundësive për krijimin e eksploiteve që manipulojnë përcaktimin ose ndryshimin e treguesve në buffers, të alokuar gjatë thirrjes malloc. Safe-Linking nuk e bllokon plotsisht mundësinë e eksploatimit të dobësive, por me shpenzime minimale, e komplikon ndjeshëm krijimin e disa kategorive të eksploiteve, pasi përveç mbushjes së shfrytëzueshme të buffer-it, është e nevojshme të gjendet edhe një dobësi tjetër që shkakton rrjedhjen e informacionit mbi vendndodhjen e heap-it në memorie.
Patch-ët me realizimin e Safe-Linking janë përgatitur për Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) dhe Google TCMalloc, dhe gjithashtu janë ofruar për modernizimin e mbrojtjes në Chromium (në
Chromium që nga viti 2012 është integruar një teknikë mbrojtjeje MaskPtr, e fokusuar në zgjidhjen e të njëjtës problem, por zgjidhja nga Checkpoint tregon performancë më të lartë).
Patch-ët e propozuar tashmë janë miratuar për shpërndarje në lëshimin e gushtit dhe përdorimi i Safe-Linking do të përfshihet si parazgjedhje. Në uClibc-NG, mbështetje për Safe-Linking do të përfshihet në lëshimin 1.0.33 dhe është aktivizuar si parazgjedhje. Në gperftools (tcmalloc i vjetër) ndryshime , por do të ofrohen në një nga lëshimet e ardhshme si një opsion.
Zhvilluesit (tcmalloc i ri) refuzuan ta pranojnë , duke cituar një rënie të madhe të performancës dhe nevojën për t'u shtuar teste të avancuara për kontrollin e rregullt që gjithçka funksionon siç duhet. Testimi i inxhinierëve të Checkpoint tregon se metoda Safe-Linking nuk sjell kosto shtesë të memories, dhe performanca gjatë operacioneve me heap në mesatare bie vetëm me 0.02%, ndërsa në rastet më të këqija me 1.5% (për krahasim, shpenzimet në metodën e përdorur në Chromium vlerësohen si "më pak se 2%"). Aktivizimi
i Safe-Linking sjell ekzekutimin e 2-3 instrukcioneve të assemblerit për çdo thirrje free() dhe 3-4 instrukcioneve për thirrjen malloc(). Nuk nevojitet startimi i fazave të inicializimit dhe gjenerimit të vlerave të rastit.
Safe-Linking mund të përdoret jo vetëm për të rritur sigurinë e implementimeve të ndryshme të heap-it, por gjithashtu për të shtuar mjete për kontrollin e integritetit në çdo strukturë të dhënash ku përdoren lista të njëpasnjëshme treguesish, të vendosur pranë bufereve të vetë. Metodoja është shumë e thjeshtë për t'u implementuar dhe kërkon vetëm shtimin e një makrosi dhe përdorimin e tij në treguesit e bllokut të ardhshëm në kod (për shembull, për Glibc vetëm disa rreshta në kod). Metoda përfshin ndryshimet e mëposhtme:
#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);
…
The essence of the method lies in using random data from the ASLR (Randomizimi i Dispositivit të Hapësirës Address) mechanism (mmap_base) for the protection of lists të njëpasnjëshme, si Fast-Bins dhe TCache. Para se t'i aplikohet vlera e treguesit për elementin e ardhshëm në listë, një transformim përmes një maske dhe një verifikim i rregullimit sipas kufirit të faqes së memories kryhet. Treguesi zëvendësohet me rezultatin e operacionit «(L >> PAGE_SHIFT) XOR (P)», ku P është vlera e treguesit dhe L është vendndodhja në memory ku ruhen ky tregues.
Kur përdoret në sistem (Randomizimi i Dispositivit të Hapësirës Address) disa bita L me adresën bazë të heap-it përmbajnë vlera të rastësishme, të cilat përdoren si çelës për kodimin e P (shkëputen nga një operacion i zhvendosjes 12-bit për faqe 4096-byte). Një manipulim i tillë zvogëlon rrezikun e kapjes së treguesit në një sulm, pasi treguesi nuk ruhet në formën e tij origjinale dhe për ta zëvendësuar, nevojitet të dihet informacioni mbi vendndodhjen e heap-it. Për më tepër, në kodin e patch-it gjithashtu ka një kontroll shtesë për rregullimin e bllokut, i cili nuk e lejon sulmuesin të zëvendësojë treguesin me një vlerë të paekuilibruar dhe kërkon njohjen e numrit të bitëve me të cilët është bërë rregullimi, që në sisteme 64-bitave gjithashtu lejon bllokimin e 15 nga 16 përpjekjeve të sulmit që nuk marrin parasysh rregullimin.
Metoda është efektive për mbrojtjen nga sulmet që përdorin ri-shkrimin e pjesshëm të treguesve (ndryshimi i bajtëve më të rinj), ri-shkrimin e plotë të treguesve (ridrejtime në kodin e sulmuesit) dhe ndryshimin e pozicionit të listës në një adresë të paekuilibruar. Si shembull, është treguar se përdorimi i Safe-Linking në malloc do të mundësonte bllokimin e shfrytëzimit të fundit. nga të njëjtët hulumtues të dobësive në ndriçimin inteligjent Philips Hue Bridge, e shkaktuar nga mbushja e tamponit dhe e cila lejon marrjen e kontrollit mbi pajisjen.
Burimi: opennet.ru
