Главная > Цiкавi дослiди > Бесплатное повышение уровня безопасности приложений, такое бесплатное

Бесплатное повышение уровня безопасности приложений, такое бесплатное


Недавно наткнутлся на статью про EMET(Enhanced Mitigation Experience Toolkit). Тулза, которая повышает безопасность небезопасных приложений. Статья меня впечатлила и мне стало интересно как реализована вся эта система.

Для начала о том, каким образом оно улучшает работу приложения. EMET регистрирует свои DLL в Application Compatibility Interface aka shim, что позволяет грузить эти dll в процесс на этапе обработки импорта. Дальше, когда DLL подгружена в процесс, она смотрит какие настройки нужно применить для процесса в котором она загрузилась. Настройки лежат в реестре.

Итак технологии.
DEP
Если у приложения отключен DEP, EMET может его софтварно включить. Через SetProcessDEPPolicy(). То есть малварь при желании тоже может вызвать SetProcessDEPPolicy, и вернуть все как было.

ASLR
Во-первых эта фича работает только начиная с висты, что уже наводит на мысли. Во-вторых ASLR возможен только для образов с флагом IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE в OptionalHeader.DllCharacteristics. То есть форсить особенно не выйдет изначально. Что тогда оно делает? Оно смотрит какие модули в процессе имеют IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE. Размапливает такие модули (NtUnmapViewOfSection), выделяет блок памяти на котором раньше находился модуль, и снова мапит. То есть старый адрес уже занят, и системе приходится ремапить модуль на другие адреса.

SEHOP
Здесь ничего особенного, дописывают всем потокам, которые запущенны на момент срабатывания EMET, свое исключение в Teb.ExceptionList. Так что бы при раскрутке исключения проверить осталось ли оно на месте, или нет. Для того, чтобы сделать проверку вешают свой VEH обработчик. Все хорошо, только новые потоки не контролируются. А на момент срабатывания EMET, создан только главный поток.

EAF
По описанию, создается впечатление, что оно каким-то образом отслеживает попытки доступа к элементам EAT. Но на самом деле все проще. EMET берет указатель на поле IMAGE_DATA_DIRECTORY.VirtualAddress у kernel32.dll и у ntdll.dll и ставит на эти адреса хардварный брейкпоинт (т.е. через отладочные регистры). А чтобы ловить исключения он еще ставит свой VEH обработчик, где собственно принимает решение убивать или не надо. Кроме того, для того чтобы его брейкпоинты не сняли, он с перодичностью 100 мс, переустанавливает брейкпоинты. Вот так чудо защита… Шелкоду нужно очистить отладочные регистры, а потом просто уложиться в 100 мс :)

HSA
Защита от Heap Spraying. Метод состоит в том, чтобы забить под себя стандартные адреса куда выпрыгивает эксплоит. То есть те блоки, где при Heap Spraying будет лежать шелкод, уже будут заняты, и шелкод выполняться не сможет. Для этого имеется список таких адресов:
0x0a040a04
0x0a0a0a0a
0x0b0b0b0b
0x0c0c0c0c
0x0d0d0d0d
0x0e0e0e0e
0x04040404
0x05050505
0x06060606
0x07070707
0x08080808
0x09090909
0x14141414

Обход со стороны малвареписателей простой: использовать другие адреса :) .

NPA
Защита от попытки выделить память по адресу 1, т.е. нулевая страница. Защита сводится к тому, что EMET сам вызывает NtAllocateVirtualMemory по этому адресу. Снова метод “первонаха”. Ничто не мешает освободить эту память и выделить под себя снова.

BUR

Суть проста – к базовым адресам выделяемых сегментов (кучи, стека, и прочих) прибавляется случайное число размером в 8 бит

Это неправда. Они просто выделяют рандомное количество(от 0 до 255, отсюда и бред про 8 бит) блоков памяти размером 0×10000 для того, чтобы heap имел псевдорандомный адрес. Опять же, за счет того, что стандартные адреса уже заняты, heap выделят в другом месте. Но он все равно будет выравнен под размер страницы.

Вывод
Нефиговые такие memory leak’и делает этот EMET. А чего вы хотели за такие деньги? Бесплатная халтура.

Рубрики:Цiкавi дослiди Метки:

Добавить комментарий

Fill in your details below or click an icon to log in:

Логотип WordPress.com

You are commenting using your WordPress.com account. Log Out / Изменить )

Фотография Twitter

You are commenting using your Twitter account. Log Out / Изменить )

Фотография Facebook

You are commenting using your Facebook account. Log Out / Изменить )

Connecting to %s

Follow

Get every new post delivered to your Inbox.