
BYOVD: 360 WFPドライバーを使用してEDR/XDRのネットワーク接続をブロックします。
360 Security WFP ドライバー(360netmon_x64_wfp.sys) のインターフェースが悪用される可能性を示す概念実証(PoC)です。呼び出し元の認証がない IOCTL インターフェースがサードパーティープログラムによって悪用されるリスクを検証することを目的としています。
このプロジェクトはセキュリティ研究と脆弱性分析の目的のみで利用されることを意図しています。いかなる違法目的でも使用してはなりません。
360 Security のネットワーク監視ドライバー 360netmon_x64_wfp.sys のリバースエンジニアリング中に、以下の動作が発見されました。
ドライバーはユーザーモードに 2 つのデバイスオブジェクトを公開しています。
\\.\360TdiFilter\\.\360TdiSpeedこれらのデバイスオブジェクトは、管理者権限を持つ任意のプロセスから DeviceIoControl を介してアクセス可能です。
IrpMjDeviceControl ハンドラーは、呼び出し元の識別情報や署名の検証を一切行いません。
特定の IOCTL 機能は、以下の目的に直接利用される可能性があります。
このリポジトリは、以下のことを示す最小限の PoC を提供します。
360 Security がインストールされたシステム上で動作するプロセスが、正当なドライバーインターフェースを使用して、指定された任意のプロセスのネットワークアクセスをブロックする方法。
ドライバーの IrpMjDeviceControl ルーチンのエントリーポイントでは、デバイスオブジェクトのみが検証されます。
cmp rdi, g_pDeviceObject_TdiFilter
jz ...
呼び出し元の権限検証やソース認証はまったく行われていません。
その結果、管理者権限を持つプロセスは、以下のことが可能になります。
0x220804 を呼び出して、プロセスネットワークの帯域制御またはブロックを構成する0x220444 を呼び出して、WFP フィルタリングルールを動的に変更するこの PoC は以下の操作を実装しています。
\\.\360TdiFilter を開く0x220804 を使用して、対象プロセスを「完全ネットワークブロック」モードに設定する結果:
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 コールアウトで以下を返します。
FWP_ACTION_BLOCK
その結果、対象プロセスのネットワークが完全にブロックされます。