
BYOVD: Используйте драйвер 360WFP для блокировки сетевого соединения EDR/XDR.
Доказательство концепции (PoC), демонстрирующее потенциальное злоупотребление интерфейсом драйвера 360 Security WFP (360netmon_x64_wfp.sys) с целью проверки риска того, что интерфейсы IOCTL без аутентификации вызывающего абонента могут быть использованы сторонними программами.
Этот проект предназначен только для исследований в области безопасности и анализа уязвимостей. Его нельзя использовать в незаконных целях.
В ходе реверс-инжиниринга сетевого мониторингового драйвера 360 Security 360netmon_x64_wfp.sys были обнаружены следующие особенности:
Драйвер предоставляет два объекта устройства для пользовательского режима:
\\.\360TdiFilter\\.\360TdiSpeedЭти объекты устройств доступны любому процессу с правами администратора через DeviceIoControl
Обработчик IrpMjDeviceControl не выполняет проверку личности или подписи вызывающего абонента
Некоторые функции IOCTL могут быть напрямую использованы для:
Этот репозиторий предоставляет минимальный PoC для демонстрации:
Как процесс, работающий в системе с установленной 360 Security, может заблокировать сетевой доступ любого указанного процесса, используя легитимные интерфейсы драйвера.
В точке входа в процедуру IrpMjDeviceControl драйвера проверяется только объект устройства:
cmp rdi, g_pDeviceObject_TdiFilter
jz ...
Никакой проверки привилегий вызывающего абонента или аутентификации источника не выполняется вообще.
В результате любой процесс с правами администратора может:
0x220804 для настройки ограничения или блокировки сетевого трафика процесса0x220444 для динамического изменения правил фильтрации WFPДанный PoC реализует следующие операции:
\\.\360TdiFilter0x220804 для перевода целевого процесса в режим «полная блокировка сети»Результат:
Откройте проект в Visual Studio и соберите:
x64 Release
360WFP_Exploit.exe "C:\Windows\System32\notepad.exe"
После выполнения целевой процесс немедленно потеряет все сетевые подключения.
.
├── src/
│ ├── main.c // Основная логика PoC
│ ├── driver_io.c // Обёртка вызова IOCTL
│ └── utils.c // Вспомогательные функции (например, преобразование путей)
├── README.md
└── LICENSE
Основная структура данных, ожидаемая драйвером:
typedef struct _PACK {
WCHAR szNtPath[MAX_PATH + 40];
WCHAR szPath[MAX_PATH];
BOOL bCancelFlag;
LONGLONG qwBlockCnnt;
LONGLONG nLimitSend;
LONGLONG nLimitRecv;
DWORD dwZeroCheck;
} PACK, *PPACK;
Когда:
qwBlockCnnt = LLONG_MAX
драйвер в WFP Callout возвращает:
FWP_ACTION_BLOCK
что приводит к полной блокировке сети для целевого процесса.