Checkpoint предложил технику защиты Safe-Linking, усложняющую эксплуатацию уязвимостей
23 мая 2020 года
Компания 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(). Запуск стадий инициализации и генерации случайных значений не требуется.
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 - местоположение в памяти, где хранится этот указатель.
При использовании в системе ASLR (Address Space Layout Randomization) часть битов L с базовым адресом кучи содержат случайные значения, которые используется как ключ для кодирования P (извлекаются операцией сдвига на 12 бит для 4096-байтовых страниц). Подобная манипуляция снижает риск захвата указателя в эксплоите, так как указатель не хранится в исходном виде и для его замены требуется знать сведения о размещении кучи. Кроме того, в коде патча также присутствует дополнительная проверка выравнивания блока, которая не позволяет атакующему заменить указатель на невыровненное значение и требует знания числа бит, на которые произведено выравнивание, что на 64-разрядных системах дополнительно позволяет блокировать 15 из 16 попыток атак, не учитывающих выравнивание.
Метод эффективен для защиты от атак, в которых используются частичное переопределение указателей (изменение младших байтов), полная перезапись указателей (перенаправление на код атакующего) и смена позиции списка по невыровненному адресу. В качестве примера показано, что применение Safe-Linking в malloc позволило бы блокировать эксплуатацию недавно выявленной теми же исследователями уязвимости CVE-2020-6007 в умной подсветке Philips Hue Bridge, вызванной переполнением буфера и позволяющей получить контроль над устройством.
Источники править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.