kapla0011/InsomniacUnwindingCrossProcess

GitHub: kapla0011/InsomniacUnwindingCrossProcess

跨进程休眠掩码 PoC,通过精准保留 UNWIND_INFO 结构实现无需调用栈伪装的内存加密休眠。

Stars: 56 | Forks: 3

# InsomniacUnwinding - 跨进程 无需 call stack spoofing 即可在外休眠掩码中精准保留 `UNWIND_INFO`。 **博客文章:** [Unwind Data Can't Sleep - Introducing InsomniacUnwinding](https://lorenzomeacci.com/unwind-data-cant-sleep-introducing-insomniacunwinding) ## 概述 传统的休眠掩码会对整个 payload 镜像进行加密,从而破坏 stack unwinding。 这个跨进程 POC 采用了不同的方法: - 通过 named pipe 请求休眠掩码 - 精准提取仅保留 stack walking 所需的 `UNWIND_INFO` 结构(对比约 6KB 的完整 `.rdata`,仅需约 250 字节) - 当 beacon 和 sleepmask 都位于 backed memory 中时,无需进行 call stack spoofing ## 架构 ``` Connects to named pipe SLEEP_REQUEST {PID, ImageBase, ImageSize, SleepTimeMs} InsomniacUnwinding.exe <───────────────────────────────────────────── Beacon-Sample.exe │ │ │ 1. OpenProcess(PID) │ │ 2. ReadProcessMemory(ImageBase, ImageSize) │ │ 3. Save regions: PE Headers + .pdata + UNWIND_INFO (~250 bytes) │ │ 4. VirtualProtectEx → PAGE_READWRITE │ │ 5. SystemFunction032 (encrypt entire image) │ │ 6. Patch back preserved regions │ │ │ │ WriteProcessMemory │ ├─────────────────────────────────────────────> [ENCRYPTED] │ │ │ │ 7. Sleep(SleepTimeMs) [Blocked on ReadFile] │ [Stack intact] │ 8. SystemFunction032 (decrypt) [YARA = 0 hits] │ 9. Patch back preserved regions │ │ │ │ WriteProcessMemory │ ├─────────────────────────────────────────────> [DECRYPTED] │ │ │ │ 10. VirtualProtectEx → PAGE_EXECUTE_READ │ │ │ │ SLEEP_RESPONSE {Success, ErrorCode} │ └─────────────────────────────────────────────> │ [Continues execution] ``` ## 用法 1. 在 Visual Studio 中构建这两个项目(x64 Release) 2. 启动 sleepmask 服务: ``` .\InsomniacUnwinding.exe ``` 3. 在另一个终端中,运行 beacon: ``` .\Beacon-Sample.exe ``` 4. Beacon 将连接到 named pipe 并进入休眠周期。在休眠期间检查 call stack,以验证它是否能通过 `BaseThreadInitThunk` 和 `RtlUserThreadStart` 正确解析。 ## YARA 测试 包含了一个测试 YARA 规则,用于验证签名在休眠期间是否已加密: ``` .\yara64.exe BeaconSignature.yar ``` 预期结果: - **唤醒状态:** 2 次命中(位于 `.rdata` 和 `.data` 中的 `DEADBEEF`) - **休眠状态:** 0 次命中(签名已加密) ## 核心见解 Call stack spoofing 是 unbacked sleepmask memory 带来的架构性后果,而非基本要求。当 sleepmask 从 backed memory 中执行时,spoofing 就变得不再必要。
标签:OpenAI, SSH蜜罐, UML, 免杀技术, 内存规避, 客户端加密, 暴力破解检测, 端点可见性, 进程注入