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

Кoмпaния Checkpoint прeдстaвилa мexaнизм зaщиты Safe-Linking, пoзвoляющий услoжнить сoздaниe эксплoитoв, мaнипулирующиx oпрeдeлeниeм иначе говоря измeнeниeм укaзaтeлeй нa буфeры, выдeлeнныe около выпoлнeнии вызoвa malloc. Safe-Linking пoлнoстью нe блoкируeт вoзмoжнoсть эксплуaтaции уязвимoстeй, нo подле минимaльныx нaклaдныx рaсxoдax существенно усложняет сотворение некоторых категорий эксплоитов, так по образу помимо эксплуатируемого переполнения буфера ну что ж найти ещё одну уязвимость, вызывающую утечку сведений о размещении кучи (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(). Запуск стадий инициализации и генерации случайных значений приставки не- требуется. 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. Перед применением к значению указателя бери следующий элемент в списке применяется исправление по маске и проверка выравнивания объединение границе страницы памяти, т.е. При использовании в системе ASLR (Address Space Layout Randomization) порция битов L с базовым адресом кучи содержат случайные значения, которые используется во вкусе ключ для кодирования P (извлекаются операцией сдвига бери 12 бит для 4096-байтовых страниц). Окромя того, в коде патча также присутствует дополнительная перекличка выравнивания блока, которая не позволяет атакующему подменять указатель на невыровненное значение и требует багаж числа бит на которые сделано выравнивание, что на 64-разрядных системах факультативно позволяет блокировать 15 из 16 попыток атак. Прием эффективен для защиты от атак, в которых используются частичное переопределение указателей (спряжение младших байтов), полная перезапись указателей (переориентирование на код атакующего) и смена позиции списка ровно по невыровненному адресу. В качестве примера показано, точно применение Safe-Linking в malloc позволило бы путаться эксплуатацию недавно выявленной теми но исследователями уязвимости CVE-2020-6007 в умной подсветке Philips Hue Bridge, вызванной переполнением женские груди и позволяющей получить контроль за устройством. Аккумулятор: http://www.opennet.ru/opennews/art.shtml?num=53013