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 механизма, следить за созданием подозрительных служб и применять стратегии многоуровневой защиты системы.