Checkpoint предложи техника за защита Safe-Linking, усложняваща експлоатацията на уязвимости

Компания Checkpoint представи механизм за защита Safe-Linking, който усложнява създаването на експлоити, манипулиращи определението или промяната на указателите към буфери, заделени при извикването на malloc. Safe-Linking не блокира напълно възможността за експлоатация на уязвимости, но значително усложнява създаването на някои категории експлоити с минимални разходи, тъй като освен експлоатираното препълване на буфера е необходимо да се намери още една уязвимост, която да предизвика изтичане на информация за разположението на купчината (heap) в паметта.

Патчовете с реализация на Safe-Linking са подготвени за Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) и Google TCMalloc, както и са предложени за модернизация на защитата в Chromium (в
Chromium от 2012 година е вградена техника за защита MaskPtr, насочена към решение на същия проблем, но решението от Checkpoint демонстрира по-висока производителност).
Предложените патчи вече са одобрени за пускане в августовското издание Glibc 3.32 и прилагането на Safe-Linking ще бъде включено по подразбиране. В uClibc-NG поддръжката на Safe-Linking влезе влиза в състава на издание 1.0.33 и е включена по подразбиране. В gperftools (старият tcmalloc) измененията приети, но ще бъдат предложени в едно от бъдещите издания като опция.

Разработчици TCMalloc (новият tcmalloc) отказаха да приемат промяна, позовавайки се на значително намаление на производителността и необходимостта от добавяне на разширени тестове за редовна проверка на това, че всичко работи правилно. Тестовете, обаче, провеждани от инженерите на Checkpoint, показаха, че методът Safe-Linking не води до допълнителни разходи за памет, а производителността при извършване на операции с купчината средно намалява само с 0.02%, а при най-лоши условия - с 1.5% (за сравнение, разходите при прилагания в Chromium метод се оценяват на „по-малко от 2%“). Включването
на Safe-Linking води до изпълнението на 2-3 допълнителни асемблерни инструкции при всеки вик на free() и 3-4 инструкции при извикване на malloc(). Не е необходимо да се стартират етапи на инициализация и генериране на случайни стойности.

Checkpoint предложи техника за защита Safe-Linking, усложняваща експлоатацията на уязвимости

Safe-Linking може да се използва не само за повишаване на безопасността на различни реализации на купове (heap), но и за добавяне на средства за контрол на целостта в произволни структури от данни, в които се използват свързани списъци с указатели, разположени до самите буфери. Методът е много прост за реализиране и изисква само добавянето на един макрос и неговото приложение към указателите на следващия блок в кода (например, за Glibc се променя всички няколко реда в кода). Методът се свежда до следните изменения:

+#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);

Същността на метода е в приложението на случайни данни от механизма за рандомизация на адресите ASLR (mmap_base) за защита на свързани списъци, като Fast-Bins и TCache. Преди да се приложи към стойността на указателя към следващия елемент в списъка, се извършва преобразуване по маска и проверка на подравняването по границата на страницата в паметта. Указателят се заменя със резултата от операцията "(L >> PAGE_SHIFT) XOR (P)", където P е стойността на указателя, а L е местоположението в паметта, където се съхранява този указател.

Checkpoint предложи техника за защита Safe-Linking, усложняваща експлоатацията на уязвимости

При използване в системата ASLR (Address Space Layout Randomization) част от битовете L с основния адрес на купа съдържат случайни стойности, които се използват като ключ за кодиране на P (извличат се с операция на преместване с 12 бита за 4096-байтови страници). Подобна манипулация намалява риска от захващане на указателя в експлоит, тъй като указателят не се съхранява в оригиналната си форма и за неговата замяна е необходимо да се знаят сведения за разположението на купа. Освен това, в кода на патча също присъства допълнителна проверка за подравняване на блока, която не позволява на атакуващия да замени указателя с невърна стойност и изисква знание за броя на битовете, на които е извършено подравняването, което на 64-битови системи допълнително позволява да бъдат блокирани 15 от 16 опити за атака, които не отчитат подравняването.

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

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster