Checkpoint предложи техника за заштита на безбедно поврзување, што го отежнува искористувањето на пропустите

Компанија за контролни точки презентирани Заштитен механизам за безбедно поврзување, што го отежнува создавањето експлоатирања што манипулираат со дефиницијата или модификацијата на покажувачите на баферите доделени при извршување на malloc повик. Безбедно поврзување не ја блокира целосно можноста за искористување на ранливости, но со минимални трошоци значително го отежнува создавањето на одредени категории експлоатирања, бидејќи покрај прелевањето на баферот што може да се искористи, неопходно е да се најде друга ранливост што предизвикува истекување на информации за поставувањето на купот во меморијата.

Закрпи кои имплементираат безбедно поврзување се подготвени за Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) и Google TCMalloc, а исто така се предложени за надградба на заштитата во Chromium (во
Од 2012 година, Chromium веќе има вградено техника за заштита MaskPtr насочена кон решавање на истиот проблем, но решението од Checkpoint покажува повисоки перформанси).
Предложените закрпи веќе се одобрени за испорака во изданието во август Глибц 3.32 и Безбедно поврзување ќе биде стандардно овозможено. uClibc-NG поддржува безбедно поврзување влезе вклучено во издание 1.0.33 и е стандардно овозможено. Промени во gperftools (стариот tcmalloc) прифатени, но ќе биде понудена како опција во идното издание.

Програмери TCMalloc (нов tcmalloc) одби да прифати промена, наведувајќи ја сериозното влошување на перформансите и потребата да се додадат обемни тестови за редовно да се проверува дали сè работи како што се очекуваше. Тестирањето од страна на инженерите на Checkpoint покажа дека методот Safe-Linking не води до дополнителна потрошувачка на меморија, а перформансите при извршување на операции на куп се намалуваат во просек за само 0.02%, а во најлошото сценарио за 1.5% (за споредба, режиските трошоци во методот што се користи во Chromium се проценети како „помалку од 2%“). Вклучување
Безбедно поврзување резултира со извршување на 2-3 дополнителни инструкции за склопување при секое повикување на free() и 3-4 инструкции при секое повикување malloc(). Не е потребно извршување на фазите за иницијализација и генерирање случајни вредности.

Checkpoint предложи техника за заштита на безбедно поврзување, што го отежнува искористувањето на пропустите

Безбедно поврзување може да се користи не само за подобрување на безбедноста на различни имплементации на куп, туку и за додавање контроли за интегритет на сите структури на податоци што користат единечно поврзани списоци на покажувачи поставени веднаш до самите бафери. Методот е многу едноставен за имплементација и бара само додавање на едно макро и нејзино применување на покажувачите до следниот блок во кодот (на пример, за Glibc промени само неколку линии код). Методот се сведува на следните промени:

+#define PROTECT_PTR(pos, ptr) \
+ ((__тип на (ptr)) (((((големина_t) pos) >> 12) ^ ((големина_t) ptr)))

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

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

Суштината на методот е да се користат случајни податоци од механизмот за рандомизација на адреси ASLR (mmap_base) за заштита на единечно поврзани списоци како Fast-Bins и TCache. Пред да се примени вредноста на покажувачот до следниот елемент во листата, тој врши конверзија на маска и проверува за усогласување на страниците. Покажувачот се заменува со резултатот од операцијата „(L >> PAGE_SHIFT) XOR (P)“, каде што P е вредноста на покажувачот и L е мемориската локација каде што е зачуван покажувачот.

Checkpoint предложи техника за заштита на безбедно поврзување, што го отежнува искористувањето на пропустите

Кога се користи во системот ASLR (Случајно распоредување на просторот за адреси) дел од L-битовите со базната адреса на грамада содржи случајни вредности кои се користат како клуч за кодирање P (извлечена со операција за поместување од 12 бити за страници од 4096 бајти). Оваа манипулација го намалува ризикот од киднапирање на покажувачот во експлоат, бидејќи покажувачот не е зачуван во неговата оригинална форма и за негова замена е потребно познавање на распределбата на купот. Дополнително, кодот за закрпи содржи и дополнителна проверка за усогласување блокови, што не дозволува напаѓачот да замени покажувач со неусогласена вредност и бара познавање на бројот на битови што се порамнети, што на 64-битни системи дополнително овозможува блокирање 15 од 16 обиди за напад кои не го земаат предвид усогласувањето.

Методот е ефикасен за заштита од напади кои користат делумно препишување на покажувачот (менување на ниски бајти), целосно препишување на покажувачот (пренасочување кон кодот на напаѓачот) и менување на позицијата на списокот на неусогласена адреса. Како пример, се покажува дека употребата на Safe-Linking во malloc би овозможила блокирање на експлоатацијата неодамна идентификувани од истите истражувачи на ранливост CVE-2020-6007 во паметното светло на Philips Hue Bridge, предизвикано од прелевање на баферот и ви овозможува да стекнете контрола над уредот.

Извор: opennet.ru

Додадете коментар