доктор
Если вы получаете доступ с правами локального администратора к хосту с помощью решения EDR, вы потенциально можете использовать уязвимость, злоупотребляя драйвером мини-фильтра, например драйвером Sysmon, чтобы избежать обнаружения. Этот метод скрывает решение EDR, которое опирается на обратные вызовы ядра. Хотя требуется перезагрузка хоста, этот подход намного проще, чем поиск нового собственного уязвимого драйвера (BYOVD) или попытка использования неподписанного драйвера, что не всегда возможно.Введение
Решения Endpoint Detection and Response (EDR) изначально разработаны для постоянной и автономной работы, что затрудняет их отключение злоумышленниками даже при наличии доступа локального администратора или уровня системы к конечной точке. При переходе к настройкам безопасности Windows традиционный ползунок, используемый для отключения Защитника Windows, заменяется альтернативными настройками, такими как следующие.
Однако, несмотря на эти меры предосторожности, злоумышленники разработали методы «ослепления» систем EDR, в том числе:
- Злоупотреблять уязвимым драйвером режима ядра (BYOVD) для удаления обратных вызовов ядра для решений EDR.
- Загрузите неподписанный драйвер в тестовом режиме Windows, используя bcdedit /set testsigning onили bcdedit /set nointegritychecks offудалите обратные вызовы ядра EDR.
Достичь этих методов непросто. Известные уязвимые драйверы режима ядра, часто используемые в тактике уклонения, могут быть помечены и заблокированы решениями EDR. Кроме того, второй метод часто защищен механизмами безопасной загрузки. Отключение безопасной загрузки обычно требует доступа к настройкам прошивки UEFI во время загрузки, что требует физического или консольного доступа к устройству.
Злоупотребление высотой MiniFilter
Когда я писал свой предыдущий пост о Sysmon , я упомянул высоту мини-фильтра и то, как ее можно изменить в разделе параметров установки Sysmon, а именно: The value can also be updated from the registry. However, it should be approached with caution, as if you use the same value twice in the system, one of the services would not start.Работая над предыдущим постом, я снова надел свою красную командную шляпу и спросил себя: «Могу ли я установить значение высоты Sysmon так, чтобы оно соответствовало значению EDR, потенциально закрывая обратные вызовы ядра EDR?». Чтобы проверить эту гипотезу, я изменил значение высоты Sysmon с помощью редактора реестра:
Я получил следующее предупреждение от EDR (известного поставщика, имя которого я не буду называть), и редактор реестра был немедленно закрыт. Оказалось, что EDR строго отслеживает любые сервисы, пытающиеся использовать значение высоты.
Обход
После повторного рассмотрения этого сценария стало очевидно, что в системе EDR имеется правило статического обнаружения, настроенное для определенного значения в реестре. Запись реестра обычно состоит из трех компонентов: имени, типа и данных. В ходе расследования я обнаружил, что изменение атрибута Type может обойти правило статического обнаружения, реализованное EDR. Следующие шаги описывают этот метод обхода:- Сначала получите значение высоты для EDR.
- Переименуйте запись реестра высоты Sysmon в AltitudeOld . Затем создайте новую запись реестра с именем Altitude , указав тип REG_MULTI_SZ . Установите данные этой новой записи в соответствии со значением высоты EDR. Обратите внимание, что изменение принимается без завершения процесса. Примечание. REG_SZ — это строка с нулевым завершением, а REG_MULTI_SZ — последовательность строк с нулевым завершением.
- Перезагрузите хост.
- Запустите fltMC.exe, чтобы убедиться, что драйвер Sysmon теперь использует значение высоты EDR. Обратите внимание, что номер экземпляра теперь показывает «0», что означает, что он не зарегистрирован ни в каких обратных вызовах ядра, но служба EDR работает без проблем.
Полученные результаты
Это результат обхода. Служба EDR работает нормально, как показано ниже:
Более того, консоль управления EDR по-прежнему указывает, что конечная точка находится в сети, без каких-либо сопутствующих предупреждений. Кроме того, снова появилась традиционная панель управления Защитника Windows, позволяющая отключать защиту в реальном времени с правами локального администратора.
В качестве доказательства концепции Mimikatz был скопирован на хост и выполнил дамп учетных данных:
Защитник Microsoft для конечной точки (MDE)
Мы также применили ту же методологию к MDE. Сначала мы получили значение высоты от MDE с помощью команды fltMC.exe с правами администратора:
После копирования значения высоты и назначения его драйверу Sysmon было заметно, что никаких предупреждений обнаружено не было, в отличие от предыдущих случаев с другой системой EDR.
Мини-фильтр MDE MsSecFlt был перезаписан SysmonDrv, и службы MDE по-прежнему работают должным образом.
Однако возникла проблема: я перешел к настройке безопасности Windows и обнаружил, что этот параметр все еще находится под контролем MDE и его нельзя отключить:
Дальнейшее расследование показало, что WdFilter используется Microsoft Defender. Я решил его тоже отключить, но возник вопрос: какой драйвер можно использовать, чтобы перезаписать минифильтр? Изучив порядок загрузки минифильтра ( ссылка ), я остановил свой выбор на FileInfo по двум основным причинам. Во-первых, он обычно загружается первым из-за своего низкого значения (40500), а во-вторых, даже в случае неудачного запуска ОС все равно инициируется, как указано в этой статье . Я изменил значение высоты FileInfo и снова перезагрузил хост. Результат был таким, как показано ниже; оба драйвера минифильтра были перезаписаны:
С этого момента я мог отключить защиту в реальном времени Защитника Windows и запустить Mimikatz, чтобы сбросить учетные данные, как показано на скриншотах ниже. Во время этого процесса никаких предупреждений не наблюдалось.