I. Обзор

Сегодня мы продолжим исследование Bindlink API для вмешательства в работу антивирусных решений и EDR. На этот раз воспользуемся драйвером «bindflt.sys», чтобы предотвратить запуск службы антивируса/EDR при инициализации Windows.

Вы можете ознакомиться с предыдущими статьями тут:

В этой статье поэкспериментируем с Windows Defender и Windows 11 версии 25H2. Предложенный способ успешно отработал и на других коммерческих AV/EDR решениях, в моей тестовой среде. Из-за опасений нанести ущерб указанным продуктам я воздержусь от раскрытия их названий.

  • EDR: Endpoint Detection and Response (обнаружение угроз и реагирование на уровне конечных точек);

  • AV: Антивирус.

II. Основная часть

1. Немного сведений об AV и EDR службах

Службы антивирусных приложений и EDR функционируют аналогично стандартным сервисам Windows, однако имеют одну важную особенность — они защищены драйверами ядра. Отличительные характеристики AV/EDR сервиса:

  • Всегда работает в контексте высоких привилегий (SYSTEM).

  • Запускается автоматически вместе с системой (Auto Start).

  • Защищен Windows PPL (Protected Process Light).

  • Пользователи в режиме UserMode не могут изменять конфигурацию службы.

  • В процесс службы невозможно вмешаться из UserMode (за исключением метода EDR-Freeze).

Таким образом, после успешного старта AV/EDR сервиса возможности атакующего резко сокращаются, и приходится искать способы обойти защиту.

2. Идея использования Bindlink для предотвращения запуска AV/EDR

Первоначально я использовал Bindlink для перенаправления папок антивирусов/EDR в подконтрольный мне каталог:

Или подменял всю папку «Program Files»:

Однако эти действия происходят при уже работающем EDR, и существуют методы защиты.

Теперь же моя цель — каталог, используемый всеми процессами Windows: System32. Любой процесс в Windows зависит от библиотек в каталоге System32, и EDR не исключение.

Изменение оригинальных файлов в System32 может привести к повреждению системы Windows, но мы можем воспользоваться механизмом Bindlink, обеспечив безопасность и позволив EDR загрузить изменённую версию библиотеки.

Основные шаги:

  • Создать службу, которая запустится раньше, чем служба EDR.

  • Использовать Bindlink для подмены DLL, необходимой EDR, на «поврежденную» DLL.

  • Воспользоваться PPL защитой EDR-сервисов, вынуждая их самостоятельно завершиться.

  • После завершения EDR процесса, убрать перенаправление, восстановив нормальную функциональность остальных процессов.

Сперва нам нужно выяснить группу сервисов, к которой относится EDR, чтобы создать свою службу с более высоким приоритетом запуска. Этот приём описан мною в «Как обеспечить постоянное выполнение первым
Далее скопируем оригинальную DLL из каталога System32 в другое место и нарушим ее подпись. Мы преследуем две цели: помешать EDR загрузить DLL и обеспечить нормальную работу остальных приложений.
Третий пункт заключается в следующем: поскольку новая библиотека теперь неподписанная, защищённый PPL процесс откажется её загружать и завершится. Подробнее о механизме PPL читайте в статье:

Countering EDRs With The Backing Of Protected Process Light.

Четвёртый шаг прост: удалить перенаправление, чтобы избежать нежелательных последствий.

3. EDRStartupHinder: блокировка запуска EDR

Чтобы реализовать данную идею, я разработал инструмент под названием EDRStartupHinder. Вы можете скачать и попробовать его по следующей ссылке.

Он поддерживает следующие параметры:

EDRStartupHinder копирует библиотеку из каталога System32 (OriginalLib) в другое место под именем (FakeLib). Затем он изменяет один байт в PE заголовке DLL, делая подпись недействительной. Следующим этапом является регистрация службы с заданным именем (ServiceName) и группой (ServiceGroup). Этот сервис постоянно отслеживает активность EDR процесса (EDRProcess), выполняя операции перенаправления и отката изменений.

Стоит обратить внимание на некоторые важные моменты:

  • Необходимо подобрать такую библиотеку, отсутствие которой повлечёт завершение процесса EDR. Эта библиотека должна находиться вне списка известных DLL (KnownDLLs), чтобы гарантировать, что она не была предварительно загружена:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

   Для нахождения подходящей библиотеки рекомендуется воспользоваться инструментами Process Monitor и Process Explorer.

  • Вам потребуется определить группу, к которой принадлежит служба EDR, и зарегистрировать собственную службу с группой, имеющей больший приоритет:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder

   Самый простой путь — использовать Process Monitor с включённым журналом загрузки (BootLog), чтобы увидеть, какие службы стартуют перед EDR, и воспользоваться названием группы одной из этих служб.

4. Эксперимент с использованием EDRStartupHinder против Windows Defender

Проведя исследование на лабораторной машине, я выяснил, что Windows Defender при старте загружает библиотеку msvcp_win.dll. Помимо этого, одна из служб группы TDI гарантированно стартует перед началом работы Windows Defender. Процесс, который я хочу заблокировать, называются MsMpEng.exe.

Запустим EDRStartupHinder с такими параметрами:

После успешного выполнения будет создана новая служба с именем DusmSVC-01.

При перезагрузке компьютера EDRStartupHinder запустится раньше Windows Defender и перенаправит DLL в новое место.

Так как процесс MsMpEng.exe защищён механизмом PPL, он не сможет загрузить неподписанную библиотеку. Если эта библиотека критически важна, процесс завершит своё выполнение.

Демонстрация работы

III. Заключение

Службы антивирусов и EDR, несмотря на защиту на уровне ядра, являются обычными службами и процессами Windows. Вместо того чтобы атаковать эти службы напрямую, злоумышленники могут сосредоточиться на единственном компоненте, который используют все процессы Windows: System32.

EDRStartupHinder эксплуатирует механизм Windows Bindlink для перенаправления DLL из System32 в другое место, а также Protected Process Light (PPL), который позволяет загружать только подписанные библиотеки, для отключения EDR.

Для защиты от подобных атак системные администраторы должны внимательно отслеживать использование Bindlink механизма, следить за созданием подозрительных служб и применять стратегии многоуровневой защиты системы.