Специалисты компании FireEye обнаружили серьезную недоработку безопасности в инструменте EMET [1,2,3,4,5,6,7], которая позволяет достаточно просто отключить его механизмы защиты процессов с использованием его же встроенных функций. Уязвимость присутствует в предыдущих версиях EMET, т. е. в версиях до актуальной 5.5. Пользователям этих версий рекомендуется обновить EMET до последней версии.
Сам EMET поддерживает внутренний механизм снятия перехватов с API-функций системных библиотек в защищаемых процессах. Эта функция применяется в том случае, когда нужно оперативно отключить защиту процесса, за реализацию которой отвечает динамическая библиотека emet.dll. Полное отключение защиты реализуется обработчиком DllMain с кодом выгрузки DLL_PROCESS_DETACH. В силу того, что emet.dll не перехватывает функцию kernel32!GetModuleHandleW и не контролирует ее поведение, шелл-коду достаточно вызвать GetModuleHandleW для получения адреса загрузки DLL в памяти и вызвать DllMain, передав функции это значение и константу выгрузки.
По сути, для эксплуатации уязвимости достаточно следующего вызова.
BOOL WINAPI DllMain (GetModuleHandleW(«EMET.dll»), DLL_PROCESS_DETACH, NULL);
Функция DllMain является точкой входа в библиотеку и как любая точка входа DLL обрабатывает различные события при загрузке ее в процесс и выгрузке из нее. Первым аргументом ей передается базовый адрес загрузки библиотеки, второй представляет из себя событие, а третий не используется.
В качестве демонстрации уязвимости, специалисты FireEye взяли устаревший RCE-эксплойт для уязвимости CVE-2012-1876 и добавили в него шелл-код для отключения защиты процесса с использованием вышеупомянутого вызова. Для обхода DEP эксплойт использует приемы ROP. После отключения EMET, эксплойт может спокойно исполнять свои функции.
www.us-cert.gov/ncas/current-activity/2016/02/23/Microsoft-Releases-Update-EMET
Сам EMET поддерживает внутренний механизм снятия перехватов с API-функций системных библиотек в защищаемых процессах. Эта функция применяется в том случае, когда нужно оперативно отключить защиту процесса, за реализацию которой отвечает динамическая библиотека emet.dll. Полное отключение защиты реализуется обработчиком DllMain с кодом выгрузки DLL_PROCESS_DETACH. В силу того, что emet.dll не перехватывает функцию kernel32!GetModuleHandleW и не контролирует ее поведение, шелл-коду достаточно вызвать GetModuleHandleW для получения адреса загрузки DLL в памяти и вызвать DllMain, передав функции это значение и константу выгрузки.
По сути, для эксплуатации уязвимости достаточно следующего вызова.
BOOL WINAPI DllMain (GetModuleHandleW(«EMET.dll»), DLL_PROCESS_DETACH, NULL);
Функция DllMain является точкой входа в библиотеку и как любая точка входа DLL обрабатывает различные события при загрузке ее в процесс и выгрузке из нее. Первым аргументом ей передается базовый адрес загрузки библиотеки, второй представляет из себя событие, а третий не используется.
В качестве демонстрации уязвимости, специалисты FireEye взяли устаревший RCE-эксплойт для уязвимости CVE-2012-1876 и добавили в него шелл-код для отключения защиты процесса с использованием вышеупомянутого вызова. Для обхода DEP эксплойт использует приемы ROP. После отключения EMET, эксплойт может спокойно исполнять свои функции.
US-CERT is aware of a vulnerability in Microsoft Enhanced Mitigation Experience Toolkit (EMET) versions prior to 5.5. Exploitation of this vulnerability may allow a remote attacker to bypass or disable EMET to take control of an affected system.
US-CERT recommends users and administrators visit the Microsoft Security TechCenter (link is external) and upgrade to EMET version 5.5. For additional information, please review the FireEye threat research blog (link is external)
www.us-cert.gov/ncas/current-activity/2016/02/23/Microsoft-Releases-Update-EMET
IRainman
По теме 5.5, это важно ибо я не понимаю только у меня возникает с ним проблема или нет, а проблема серьёзная и тянет на узвимость.
Проблема довольно серьёзная ибо обещанный "человеческий" импорт экспорт через реестр если и работает то как то странно, т. е. в списке правила есть, но к приложениям они не применяются, при этом после импорта в реестр перестают применяться вообще любые правила емета!
Проблема исправляется только если вручную передобавить приложения или также вручную импортировать xml. В общем фича именно импорта из реестра не работает совсем (экспортируется из раздела всё более чем корректно), но опасная иллюзия её работоспособности создаётся. Возможно проблема в том, что у меня нет домена, но тогда абсолютно не понятно какого лешего все правила видно, но они не применяются.
Самое странное в ситуации (важное замечание: содержимое по параметрам у рег файла и хмл-ки у меня одинаковое). Так вот: записи в реестре не изменяются после импорта из xml (т. е. они точно эквивалентны) однако правила начинают применяться.
Ответьте пожалуйста, может у меня локальный глюк (правда повторяемый на всех машинах и с 7 и 10, других ОС нет). Мне пока лень разбираться куда им о баге писать.
yosemity
Попробуйте импортировать правила через "EMET_Conf.exe". Для его работы достаточно файлов SdbHelper.dll, PKIPinningSubsystem.DLL, MitigationInterface.DLL, HelperLib.DLL из каталога установки + сами xml`ки с правилами.
IRainman
Благодарю, вы мне очень помогли! Теперь EMET у меня, наконец то, полностью автоматизирован!
yosemity
Not bad. Но полностью автоматизировать лучше средствами развертки приложений через WSUS, домен для этого не нужен, требуется 1 раз настроить машины на свой ВСУС-сервер. А кастомные правила и прочие настройки ПО, допустим, применять так, как это вы делаете сейчас. Видно у кого что стоит, у кого не поставилось и пр. Обновлять удобно.
IRainman
Для меня WSUS без домена это время на ветер ибо всё равно приходиться много возиться с разными штуками. Ещё одна проблема с WSUS в том, что у меня уже стоит вебсервер на сервере и это Apache, так что для WSUS вторым IIS туда не вкорячить, ну либо я просто не знаю как, а в лоб у меня не вышло.
P.S. к тому же иногда требуется помочь и сделать не для себя, так что скрипты рулят, на самом деле, они универсальнее. Фактически мне даже лень это в msi упаковывать, не то что с WSUS возиться.
yosemity
Я так же думал :) У меня было много велосипедов разных марок: батники, WSH (JS и немного VBS), Powershell, AutoIT (на нем щас все и пишу), GPO. Пришел ко WSUS. Скрипты — это хорошо, без ни никуда, но лучше пусть каждый занимается своим делом.
IRainman
Ну вот если мне поднимать WSUS, то надо делать именно домен :) иначе смысла нет, да и технически сейчас WSUS поднять не реально из-за Apacha-a.