Olivaire/sleep-duck-eye-Detect-SleepMask
GitHub: Olivaire/sleep-duck-eye-Detect-SleepMask
通过验证调用栈完整性和返回地址链真实性来检测 SleepMask、栈欺骗、ROP 等高级规避技术的安全工具。
Stars: 1 | Forks: 0
# 🧩 调用栈完整性校验
### 通用调用栈完整性检测方案(SleepMask / ROP / VEH / Stack Spoofing 检测)
本项目旨在提供一种**通用调用栈完整性验证方法**,用于检测各种高级规避技术,包括 SleepMask、调用栈欺骗、ROP 链构造和加密栈。
与传统的特征扫描不同,该方法基于**调用栈的真实性验证**,天生具有通用性并对变种具有鲁棒性。它能有效对抗诸如混淆栈等高级规避技术。
## 📌 背景
自 **DuckMemoryScan / BeaconEye** 等通过遍历栈来定位 Beacon 的工具出现以来,攻击者越来越多地采用各种栈混淆技术,例如:
ALL İMG

- SleepMask(休眠时调用栈伪造)
- ROP 构造虚假调用链
- 基于 VEH 的栈欺骗
- 随机化 / 加密栈
- 影子堆栈绕过
典型表现包括:
🔹 正常运行期间的栈(实际调用链)
```
Actual call stack -> Valid return address chain
```
🔹 Sleep + Mask:栈中的伪造返回地址链
```
faked call stack -> ROP frames -> junk frames
```
大多数基于栈的扫描检测工具在面对伪造栈时会完全失效。伪造的栈返回地址链。
## 🧭 现有检测方法的问题
✔ VirtualProtect 监控(infinityHook / VTI)
- **优点**:快速、准确
- **缺点**:资源消耗高,需要记录所有内存权限更改
✔ 特征扫描
- 例如扫描 `unbacked stack → Sleep` 或 SleepMask 特征
- **优点**:在特定场景下准确率高
- **缺点**:容易被修改后的代码绕过
✔ CET(控制流执行技术)
- **优点**:硬件级、准确、快速
- **缺点**:无硬件支持时不可用
🛠 通用方法:栈完整性校验
核心概念基于一个基本事实:
通过验证该链是否自然、连续且符合逻辑,可以判断栈是否已被伪造。
## 🔬 工作流程(核心逻辑)
### 1. 遍历栈
使用 `StackWalk64` 获取 64 位调用栈。
### 2. 异常栈的模式匹配
- SleepMask 通常会加密/混淆栈
- 通过读取栈内的代码来判断其是否为有效的指令区域
检查方法:
- 提取每个栈地址附近的 8 条指令
- 判断它们是否构成有效、连续的机器码
- 如果无效,则栈可能是伪造的
代码检查该区域是否包含有效指令。
3. 匹配 Call 指令并验证返回地址
匹配以下指令类型:
- `call imm`
- `call reg`
- `call mem`
然后验证:
```
call_next == return_address ?
```
如果不成立,则表明调用链完整性被破坏 → 极度可疑。
# 📈 检测效果
针对常见栈欺骗框架的测试:
| 技术 | 检测结果 |
|------|----------|
| 栈加密 / 垃圾栈帧 | ✔ |
| Ekko stack spoofer | ✔ |
| SlientMoonWalker | ✔ |
| Cronos | ✔ |
| 各种 SleepMask 变种 | ✔ |
理论上,所有基于栈操作的机制都可以被检测到。
🚀 未来扩展潜力
栈 + 指令匹配可进一步应用于:
- 未知 Shellcode 检测
- Shellcode 自动标记
- ROP 链识别
- 动态恶意行为检测
- 隐藏执行流预测
未来可能会披露更多细节。
# 📄 技术关键词
- 栈完整性验证
- SleepMask 检测
- ROP 调用链验证
- StackWalk64
- 调用模式匹配
- 反规避
- Windows 内部机制
- SleepMask(休眠时调用栈伪造)
- ROP 构造虚假调用链
- 基于 VEH 的栈欺骗
- 随机化 / 加密栈
- 影子堆栈绕过
典型表现包括:
🔹 正常运行期间的栈(实际调用链)
```
Actual call stack -> Valid return address chain
```
🔹 Sleep + Mask:栈中的伪造返回地址链
```
faked call stack -> ROP frames -> junk frames
```
大多数基于栈的扫描检测工具在面对伪造栈时会完全失效。伪造的栈返回地址链。
## 🧭 现有检测方法的问题
✔ VirtualProtect 监控(infinityHook / VTI)
- **优点**:快速、准确
- **缺点**:资源消耗高,需要记录所有内存权限更改
✔ 特征扫描
- 例如扫描 `unbacked stack → Sleep` 或 SleepMask 特征
- **优点**:在特定场景下准确率高
- **缺点**:容易被修改后的代码绕过
✔ CET(控制流执行技术)
- **优点**:硬件级、准确、快速
- **缺点**:无硬件支持时不可用
🛠 通用方法:栈完整性校验
核心概念基于一个基本事实:
通过验证该链是否自然、连续且符合逻辑,可以判断栈是否已被伪造。
## 🔬 工作流程(核心逻辑)
### 1. 遍历栈
使用 `StackWalk64` 获取 64 位调用栈。
### 2. 异常栈的模式匹配
- SleepMask 通常会加密/混淆栈
- 通过读取栈内的代码来判断其是否为有效的指令区域
检查方法:
- 提取每个栈地址附近的 8 条指令
- 判断它们是否构成有效、连续的机器码
- 如果无效,则栈可能是伪造的
代码检查该区域是否包含有效指令。
3. 匹配 Call 指令并验证返回地址
匹配以下指令类型:
- `call imm`
- `call reg`
- `call mem`
然后验证:
```
call_next == return_address ?
```
如果不成立,则表明调用链完整性被破坏 → 极度可疑。
# 📈 检测效果
针对常见栈欺骗框架的测试:
| 技术 | 检测结果 |
|------|----------|
| 栈加密 / 垃圾栈帧 | ✔ |
| Ekko stack spoofer | ✔ |
| SlientMoonWalker | ✔ |
| Cronos | ✔ |
| 各种 SleepMask 变种 | ✔ |
理论上,所有基于栈操作的机制都可以被检测到。
🚀 未来扩展潜力
栈 + 指令匹配可进一步应用于:
- 未知 Shellcode 检测
- Shellcode 自动标记
- ROP 链识别
- 动态恶意行为检测
- 隐藏执行流预测
未来可能会披露更多细节。
# 📄 技术关键词
- 栈完整性验证
- SleepMask 检测
- ROP 调用链验证
- StackWalk64
- 调用模式匹配
- 反规避
- Windows 内部机制标签:BeaconHunter, BOF, CobaltStrike检测, Conpot, DNS 反向解析, EDR, ROP检测, SleepMask检测, UML, Windows安全, 内存扫描, 反射式注入, 堆栈混淆, 安全攻防, 安全测试自动化, 应用层安全测试, 异常处理向量VEH, 文件系统模拟, 栈欺骗检测, 欺骗防御, 端点可见性, 脆弱性评估, 调用堆栈完整性