Pika e kontrollit propozoi teknikën e mbrojtjes së lidhjes së sigurt, duke e bërë më të vështirë shfrytëzimin e dobësive

Kompania e pikave të kontrollit prezantuar Mekanizmi mbrojtës i lidhjes së sigurt, i cili e bën të vështirë krijimin e shfrytëzimeve që manipulojnë përkufizimin ose modifikimin e treguesve në buferët e alokuar gjatë ekzekutimit të një thirrjeje malloc. Safe-Linking nuk bllokon plotësisht mundësinë e shfrytëzimit të dobësive, por me shpenzime minimale komplikon ndjeshëm krijimin e disa kategorive të shfrytëzimeve, pasi përveç tejmbushjes së tamponit të shfrytëzuar, është e nevojshme të gjendet një dobësi tjetër që shkakton rrjedhje informacioni rreth vendosja e grumbullit në memorie.

Arnimet që zbatojnë Safe-Linking janë përgatitur për Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) dhe Google TCMalloc, dhe janë propozuar gjithashtu për përmirësimin e mbrojtjes në Chromium (në
Që nga viti 2012, Chromium ka ndërtuar tashmë teknikën e mbrojtjes MaskPtr që synon zgjidhjen e të njëjtit problem, por zgjidhja nga Checkpoint demonstron performancë më të lartë).
Arna të sugjeruara tashmë janë miratuar për dorëzim në versionin e gushtit Glibc 3.32 dhe Safe-Linking do të aktivizohet si parazgjedhje. uClibc-NG mbështet lidhjen e sigurt hyri përfshihet në versionin 1.0.33 dhe është aktivizuar si parazgjedhje. Ndryshimet në gperftools (tcmalloc i vjetër) pranuar, por do të ofrohet si opsion në një version të ardhshëm.

Zhvilluesit TCMalloc (tcmalloc i ri) refuzoi të pranonte Ndryshimi, duke përmendur degradimin e rëndë të performancës dhe nevojën për të shtuar teste të gjera për të kontrolluar rregullisht nëse gjithçka funksionon siç pritej. Testimi nga inxhinierët e Checkpoint tregoi se metoda e Lidhjes së Sigurt nuk çon në konsum shtesë të memories dhe performanca gjatë kryerjes së operacioneve të grumbullit zvogëlohet mesatarisht me vetëm 0.02%, dhe në skenarin më të keq me 1.5% (për krahasim, shpenzimet e përgjithshme në metoda e përdorur në Chromium vlerësohet si "më pak se 2%"). Përfshirja
Safe-Linking rezulton në 2-3 udhëzime shtesë të montimit që ekzekutohen sa herë që thirret free() dhe 3-4 instruksione sa herë që thirret malloc(). Nuk kërkohet ekzekutimi i fazave të inicializimit dhe gjenerimit të vlerave të rastësishme.

Pika e kontrollit propozoi teknikën e mbrojtjes së lidhjes së sigurt, duke e bërë më të vështirë shfrytëzimin e dobësive

Lidhja e sigurt mund të përdoret jo vetëm për të përmirësuar sigurinë e zbatimeve të ndryshme të grumbullit, por gjithashtu për të shtuar kontrolle të integritetit në çdo strukturë të dhënash që përdor lista të lidhura të vetme të treguesve të vendosur pranë vetë buferëve. Metoda është shumë e thjeshtë për t'u zbatuar dhe kërkon vetëm shtimin e një makro dhe aplikimin e saj te treguesit në bllokun tjetër në kod (për shembull, për Glibc ndryshimet vetëm disa rreshta kodi). Metoda zbret në ndryshimet e mëposhtme:

+#define PROTECT_PTR(pos, ptr) \
+ ((__lloji i (ptr)) (((madhësia_t) pos) >> 12) ^ ((madhësia_t) ptr)))

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

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

Thelbi i metodës është përdorimi i të dhënave të rastësishme nga mekanizmi i randomizimit të adresave ASLR (mmap_base) për të mbrojtur listat e lidhura veçmas si Fast-Bins dhe TCache. Përpara se vlera të aplikohet në një tregues në elementin tjetër në listë, ai kryen një konvertim të maskës dhe kontrollon për shtrirjen e faqeve. Treguesi zëvendësohet nga rezultati i operacionit "(L >> PAGE_SHIFT) XOR (P)", ku P është vlera e treguesit dhe L është vendndodhja e kujtesës ku ruhet treguesi.

Pika e kontrollit propozoi teknikën e mbrojtjes së lidhjes së sigurt, duke e bërë më të vështirë shfrytëzimin e dobësive

Kur përdoret në sistem ASLR (Address Space Layout Randomization) pjesa e biteve L me adresën bazë të grumbullit përmban vlera të rastësishme që përdoren si çelës për të koduar P (të nxjerra nga një operacion zhvendosjeje 12-bit për faqet 4096-byte). Ky manipulim zvogëlon rrezikun e rrëmbimit të treguesit në një shfrytëzim, pasi treguesi nuk ruhet në formën e tij origjinale dhe zëvendësimi i tij kërkon njohuri për alokimin e grumbullit. Për më tepër, kodi patch përmban gjithashtu një kontroll shtesë për shtrirjen e bllokut, i cili nuk lejon një sulmues të zëvendësojë një tregues me një vlerë të pabarabartë dhe kërkon njohuri për numrin e biteve që janë rreshtuar, gjë që në sistemet 64-bit gjithashtu lejon bllokimin. 15 nga 16 tentativa sulmi që nuk marrin parasysh shtrirjen.

Metoda është efektive për mbrojtjen nga sulmet që përdorin rishkrimin e pjesshëm të treguesit (ndryshimi i bajteve të ulëta), rishkrimi i plotë i treguesit (ridrejtimi te kodi i sulmuesit) dhe ndryshimi i pozicionit të listës në një adresë të palidhur. Si shembull, tregohet se përdorimi i Safe-Linking në malloc do të lejonte bllokimin e shfrytëzimit kohët e fundit identifikuar nga të njëjtët studiues të cenueshmërisë CVE-2020-6007 në dritën inteligjente Philips Hue Bridge, e shkaktuar nga një tejmbushje buferi dhe që ju lejon të merrni kontrollin e pajisjes.

Burimi: opennet.ru

Shto një koment