Checkpoint ierosināja drošas saites aizsardzības paņēmienu, kas apgrūtināja ievainojamību izmantošanu

Uzņēmums Checkpoint uzrādīts Drošas saites aizsardzības mehānisms, kas apgrūtina ekspluatāciju izveidi, kas manipulē ar norādes uz buferiem, kas tiek piešķirti, izpildot malloc izsaukumu, definēšanu vai modifikāciju. Droša saistīšana pilnībā nebloķē ievainojamību izmantošanas iespēju, taču ar minimālu papildu slodzi ievērojami sarežģī noteiktu kategoriju izmantošanu, jo papildus izmantojamā bufera pārpildei ir jāatrod vēl viena ievainojamība, kas izraisa informācijas noplūdi par kaudzes novietojums atmiņā.

Ir sagatavoti ielāpi, kas ievieš drošo saiti operētājsistēmām Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) un Google TCMalloc, kā arī tiek piedāvāti aizsardzības jaunināšanai pārlūkprogrammā Chromium (in
Kopš 2012. gada Chromium jau ir iebūvēts MaskPtr aizsardzības paņēmiens, kura mērķis ir atrisināt to pašu problēmu, taču risinājums no Checkpoint demonstrē augstāku veiktspēju).
Ieteiktie ielāpi jau ir apstiprināti piegādei augusta laidienā Glibc 3.32 un Droša saistīšana tiks iespējota pēc noklusējuma. uClibc-NG atbalsta drošu saiti ievadīts iekļauts laidienā 1.0.33 un ir iespējots pēc noklusējuma. Izmaiņas gperftools (vecajā tcmalloc) pieņemts, bet tiks piedāvāta kā opcija nākamajā laidienā.

Izstrādātāji TCMalloc (jaunais tcmalloc) atteicās pieņemt mainīt, atsaucoties uz nopietnu veiktspējas pasliktināšanos un nepieciešamību pievienot plašus testus, lai regulāri pārbaudītu, vai viss darbojas, kā paredzēts. Checkpoint inženieru veiktā pārbaude parādīja, ka Safe-Linking metode nerada papildu atmiņas patēriņu, un veiktspēja, veicot kaudzes operācijas, tiek samazināta vidēji tikai par 0.02%, bet sliktākajā gadījumā par 1.5% (salīdzinājumam, pieskaitāmās izmaksas Chromium izmantotā metode tiek lēsta kā “mazāk nekā 2%”). Iekļaušana
Drošas saites rezultātā tiek izpildītas 2–3 papildu montāžas instrukcijas katru reizi, kad tiek izsaukta free(), un 3–4 instrukcijas katru reizi, kad tiek izsaukta malloc(). Inicializācijas un nejaušo vērtību ģenerēšanas posmu palaišana nav nepieciešama.

Checkpoint ierosināja drošas saites aizsardzības paņēmienu, kas apgrūtināja ievainojamību izmantošanu

Drošo saiti var izmantot ne tikai, lai uzlabotu dažādu kaudzes ieviešanu drošību, bet arī pievienotu integritātes vadīklas visām datu struktūrām, kas izmanto atsevišķi saistītus rādītāju sarakstus, kas novietoti blakus pašiem buferiem. Metode ir ļoti vienkārši īstenojama, un tai ir jāpievieno tikai viens makro un tas jāpiemēro rādītājiem uz nākamo koda bloku (piemēram, Glibc mainās tikai dažas koda rindiņas). Metode sastāv no šādām izmaiņām:

+#define PROTECT_PTR(poz, ptr) \
+ ((__veids (ptr)) (((((izmērs_t) poz.) >> 12) ^ ((izmērs_t) ptr)))

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

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

Metodes būtība ir izmantot nejaušus datus no ASLR adrešu nejaušināšanas mehānisma (mmap_base), lai aizsargātu atsevišķi saistītus sarakstus, piemēram, Fast-Bins un TCache. Pirms vērtība tiek lietota rādītājam uz nākamo saraksta elementu, tā veic maskas konvertēšanu un pārbauda lapas līdzinājumu. Rādītājs tiek aizstāts ar operācijas "(L >> PAGE_SHIFT) XOR (P)" rezultātu, kur P ir rādītāja vērtība un L ir atmiņas vieta, kur rādītājs tiek saglabāts.

Checkpoint ierosināja drošas saites aizsardzības paņēmienu, kas apgrūtināja ievainojamību izmantošanu

Lietojot sistēmā ASLR (Address Space Layout Randomization) daļa no L bitiem ar kaudzes bāzes adresi satur nejaušas vērtības, kas tiek izmantotas kā atslēga P kodēšanai (izņemtas ar 12 bitu maiņas darbību 4096 baitu lapām). Šī manipulācija samazina rādītāja nolaupīšanas risku ekspluatācijā, jo rādītājs netiek saglabāts tā sākotnējā formā un, lai to aizstātu, ir nepieciešamas zināšanas par kaudzes piešķiršanas informāciju. Turklāt ielāpa kods satur arī papildu pārbaudi bloku izlīdzināšanai, kas neļauj uzbrucējam aizstāt rādītāju ar nesaskaņotu vērtību un prasa zināšanas par līdzināto bitu skaitu, kas 64 bitu sistēmās papildus ļauj bloķēt. 15 no 16 uzbrukuma mēģinājumiem, kuros nav ņemta vērā izlīdzināšana.

Metode ir efektīva aizsardzībai pret uzbrukumiem, kuros tiek izmantota daļēja rādītāja pārrakstīšana (mazu baitu maiņa), pilnīga rādītāja pārrakstīšana (novirzīšana uz uzbrucēja kodu) un saraksta pozīcijas maiņa nesaskaņotā adresē. Piemēram, tiek parādīts, ka drošas saites izmantošana programmā malloc ļautu bloķēt ekspluatāciju nesen identificēts tie paši ievainojamības pētnieki CVE-2020-6007 Philips Hue Bridge viedajā apgaismojumā, ko izraisa bufera pārpilde un kas ļauj iegūt kontroli pār ierīci.

Avots: opennet.ru

Pievieno komentāru