Olivaire/sleep-duck-eye
GitHub: Olivaire/sleep-duck-eye
基于调用栈真实性验证的通用检测方案,能够有效识别 SleepMask、栈伪造、ROP 链等高级规避技术,弥补传统签名扫描在面对栈混淆变种时的不足。
Stars: 0 | Forks: 0
# 🧩 栈完整性检查
主题:security, infosec, reverse-engineering, stack-analysis, windows-internals, forensics, sleepmask-evasion-logic, volatile-memory-obfuscation-detector, beacon-sleep-forensics, automated-malware-unmasking, memory-artifact-sentinel, advanced-evasion-auditor, post-exploitation-stealth-inspector, endpoint-memory-telemetry, heuristic-sleep-analysis, malware-behavioral-orchestrator
### 通用调用栈完整性检测方案 (SleepMask / ROP / VEH / Stack Spoofing 检测)
本项目旨在提供一种**通用的调用栈完整性验证方法**,用于检测各种高级规避技术,包括 SleepMask、调用栈欺骗、ROP 链构建以及加密栈。
与传统的签名扫描不同,该方法基于**调用栈的真实性验证**,天生具有通用性并能有效对抗变种。它能有效抵御诸如混淆栈等高级规避技术。
## 📌 背景
自从出现了像 **DuckMemoryScan / BeaconEye** 这样通过遍历栈来定位 Beacon 的工具以来,攻击者越来越多地采用各种栈混淆技术,例如:
ALL İMG

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

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