Специалисты компании 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, эксплойт может спокойно исполнять свои функции.

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

Комментарии (7)


  1. IRainman
    24.02.2016 07:32

    По теме 5.5, это важно ибо я не понимаю только у меня возникает с ним проблема или нет, а проблема серьёзная и тянет на узвимость.

    Проблема довольно серьёзная ибо обещанный "человеческий" импорт экспорт через реестр если и работает то как то странно, т. е. в списке правила есть, но к приложениям они не применяются, при этом после импорта в реестр перестают применяться вообще любые правила емета!

    Проблема исправляется только если вручную передобавить приложения или также вручную импортировать xml. В общем фича именно импорта из реестра не работает совсем (экспортируется из раздела всё более чем корректно), но опасная иллюзия её работоспособности создаётся. Возможно проблема в том, что у меня нет домена, но тогда абсолютно не понятно какого лешего все правила видно, но они не применяются.

    Самое странное в ситуации (важное замечание: содержимое по параметрам у рег файла и хмл-ки у меня одинаковое). Так вот: записи в реестре не изменяются после импорта из xml (т. е. они точно эквивалентны) однако правила начинают применяться.

    Ответьте пожалуйста, может у меня локальный глюк (правда повторяемый на всех машинах и с 7 и 10, других ОС нет). Мне пока лень разбираться куда им о баге писать.


    1. yosemity
      25.02.2016 02:02
      +1

      Попробуйте импортировать правила через "EMET_Conf.exe". Для его работы достаточно файлов SdbHelper.dll, PKIPinningSubsystem.DLL, MitigationInterface.DLL, HelperLib.DLL из каталога установки + сами xml`ки с правилами.


      1. IRainman
        25.02.2016 08:54
        +1

        Благодарю, вы мне очень помогли! Теперь EMET у меня, наконец то, полностью автоматизирован!

        cmd файл
        @echo off
        
        echo EMET installation begin...
        
        set EMET_MAIN_VERSION=5
        
        set EMET_SECOND_VERSION=5
        
        set EMET_VERSION=%EMET_MAIN_VERSION%.%EMET_SECOND_VERSION%
        
        set EMET_CONF_PARAM= --import STUDIA2000.xml
        
        "%EMET_MAIN_VERSION%\EMET %EMET_VERSION% Setup.msi" /passive /norestart
        
        echo importing configuration...
        
        if %PROCESSOR_ARCHITECTURE% == AMD64 (
            "%PROGRAMFILES(x86)%\EMET %EMET_VERSION%\EMET_Conf.exe" %EMET_CONF_PARAM%
        ) else (
            "%PROGRAMFILES%\EMET %EMET_VERSION%\EMET_Conf.exe" %EMET_CONF_PARAM%
        )
        
        echo EMET installation end.


        1. yosemity
          25.02.2016 17:55

          Not bad. Но полностью автоматизировать лучше средствами развертки приложений через WSUS, домен для этого не нужен, требуется 1 раз настроить машины на свой ВСУС-сервер. А кастомные правила и прочие настройки ПО, допустим, применять так, как это вы делаете сейчас. Видно у кого что стоит, у кого не поставилось и пр. Обновлять удобно.


          1. IRainman
            26.02.2016 06:06

            Для меня WSUS без домена это время на ветер ибо всё равно приходиться много возиться с разными штуками. Ещё одна проблема с WSUS в том, что у меня уже стоит вебсервер на сервере и это Apache, так что для WSUS вторым IIS туда не вкорячить, ну либо я просто не знаю как, а в лоб у меня не вышло.

            P.S. к тому же иногда требуется помочь и сделать не для себя, так что скрипты рулят, на самом деле, они универсальнее. Фактически мне даже лень это в msi упаковывать, не то что с WSUS возиться.


            1. yosemity
              26.02.2016 11:48

              Я так же думал :) У меня было много велосипедов разных марок: батники, WSH (JS и немного VBS), Powershell, AutoIT (на нем щас все и пишу), GPO. Пришел ко WSUS. Скрипты — это хорошо, без ни никуда, но лучше пусть каждый занимается своим делом.


              1. IRainman
                27.02.2016 11:54

                Ну вот если мне поднимать WSUS, то надо делать именно домен :) иначе смысла нет, да и технически сейчас WSUS поднять не реально из-за Apacha-a.