X-3306/Project-Onyx

GitHub: X-3306/Project-Onyx

「Project Onyx」是一个红队PoC流水线,通过AI遥测伪装、环境锁定和WASM内存沙盒执行来演示现代EDR绕过技术。

Stars: 92 | Forks: 11

![Banner](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/080a3c756d202129.png) # Project Onyx 通过 AI 遥测欺骗和 WASM 沙盒实现的高级 EDR 绕过。Project Onyx 是一个 PoC 红队流水线,旨在演示针对现代 EDR 系统的高级绕过技术。它从传统的基于签名的混淆转向行为伪装和严格的环境锁定。 研究视角:Project Onyx 的目标并非声称能够有效绕过生产环境中的 EDR 系统,而是探索一种非传统的、多层流水线在进一步深化各概念后可能呈现的形态。各个组件(AI 遥测伪装、环境锁定、内存内 WASM 执行)已作为链条实现并具备功能,但每个层面都需要更深入的研究才能对现实防御产生有意义的影响。本项目最好被理解为一个架构草图以及此类探索的起点。 ## 核心概念 1. **AI 诱饵(行为伪装):** 现代 EDR 监控 API 调用和执行流程。Project Onyx 嵌入了一个合法且功能完整的 ONNX 神经网络(小型 MLP)。在执行任何恶意逻辑之前,宿主机使用 Microsoft 的 `onnxruntime` 运行一次真实的张量推理工作负载。这会生成合法的 AI 执行遥测,掩盖进程的真实意图。 2. **环境锁定:** 没有精确的目标机器,攻击者无法在沙盒中分析负载,也无法由逆向工程师分析。解密密钥通过 SHA-256 哈希动态生成,哈希值基于目标的 `MachineGuid`、`Volume Serial` 和 `Current User SID`。 3. **WASM 沙盒化:** 实际负载被编译为 WebAssembly(WASM),并使用 `wasm3` 解释器完全在内存中执行。宿主机 C++ 应用程序仅充当加载器和 API 桥接器,向 WASM 沙盒暴露安全的主机函数。 4. **加密保险库:** 解密 WASM 负载所需的 AES-256 密钥不存储在二进制文件中。它被锁定在 ONNX 模型的元数据内,通过 PBKDF2-HMAC-SHA256 和 HKDF-SHA256 密钥派生保护,并通过恒定时间的 HMAC 检查进行验证。 ![Project Onyx 链路](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/260695fee8202148.png) 参见 `docs/architecture.md` 获取完整的端到端技术草图。 ## ⚠️ 法律免责声明 本项目仅为教育目的、安全研究和授权的红队行动而创建。 本仓库中演示的技术(Project Onyx)旨在帮助安全专业人员理解高级绕过方法,并改进端点防御(EDR/XDR)。 **请勿在任何你不拥有或未经明确书面许可进行测试的系统或网络上使用此软件。** 本项目的作者(X-3306)不承担任何责任,对于因使用本软件而导致的任何滥用、损害或非法行为概不负责。通过下载、编译或使用此代码,您同意对自己的行为承担全部责任。 ## 仓库结构 - `DiagnosticsTool.cpp` - C++ Windows 宿主机以及与 Wasm3/ONNX 的集成。 - `DiagnosticsTool.rc` / `resource.h` - 生成资源的资源绑定。 - `build.py` - 用于指纹采集、ONNX 诱饵/保险库生成以及 WASM 加密的辅助脚本。 - `wasm_license_module/` - WebAssembly 心跳模块的 Rust 源代码。 - `wasm3/source/` - CMake 构建所需的最小化 Wasm3 源码。 - `assets/README.md` - 生成的资源格式说明。 - `docs/architecture.md` - 完整运行时链路和架构说明。 - `docs/technical-writeup.md` - PoC 的简短描述。 ## 前置条件 构建前在 Windows 上安装以下软件: - Visual Studio 2022(包含“使用 C++ 的桌面开发”工作负载)。 - CMake 3.25 更新版本。 - Python 3.10 或更新版本。 - Rustup 和 Cargo。 - Git。 Python 依赖: ``` py -m pip install onnx numpy cryptography ``` Rust 目标: ``` rustup target add wasm32-unknown-unknown ``` ## ONNX Runtime 静态构建 CMake 文件期望 ONNX Runtime 源码/构建树位于 `./onnxruntime`,并链接来自以下路径的静态组件库: - `onnxruntime/build/Windows/Release/Release` - `onnxruntime/build/Windows/Release/vcpkg_installed/x64-windows-static-md/lib` 从 VS 2022 的开发者 PowerShell 中按如下方式构建 ONNX Runtime: ``` git clone --recursive https://github.com/microsoft/onnxruntime.git onnxruntime .\onnxruntime\build.bat --config Release --parallel --compile_no_warning_as_error --skip_tests --build_shared_lib --use_vcpkg --cmake_extra_defines VCPKG_TARGET_TRIPLET=x64-windows-static-md onnxruntime_BUILD_UNIT_TESTS=OFF ``` 生成的 `onnxruntime.dll` 不会随 Project Onyx 一起分发。Project Onyx 链接静态组件 `.lib` 文件,最终可执行文件不应在 `dumpbin /DEPENDENTS` 中列出 `onnxruntime.dll`。 ## 生成资源 获取当前 Windows 设备的指纹哈希: ``` python build.py fingerprint --show-components ``` 使用输出的第二行作为 `--trigger` 参数值。 构建 Rust WebAssembly 模块: ``` cargo build --manifest-path wasm_license_module/Cargo.toml --target wasm32-unknown-unknown --release ``` 生成 `assets/model.onnx` 和 `assets/license_module.wasm.aes`: ``` python build.py build ` --trigger "<64-char lowercase fingerprint hash>" ` --secret "" ` --model-output assets/model.onnx ` --wasm-input wasm_license_module/target/wasm32-unknown-unknown/release/wasm_license_module.wasm ` --wasm-output assets/license_module.wasm.aes ``` 验证 ONNX 元数据保险库: ``` python build.py verify --trigger "<64-char lowercase fingerprint hash>" --model assets/model.onnx ``` ## 最终构建 配置并构建发布版可执行文件: ``` cmake -S . -B build -G "Visual Studio 17 2022" -A x64 cmake --build build --config Release ``` 最终可执行文件位于: ``` build\Release\ProjectOnyx.exe ``` 可选依赖检查: ``` & "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\Hostx64\x64\dumpbin.exe" /DEPENDENTS build\Release\ProjectOnyx.exe ``` 预期结果:不依赖 `onnxruntime.dll`。 ## Webhook 配置 本项目未嵌入真实的 webhook URL。对于授权的实验环境运行,请设置: ``` $env:PROJECT_ONYX_SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/..." .\build\Release\ProjectOnyx.exe ``` (也可以使用 Teams) 该变量必须对启动 `ProjectOnyx.exe` 的进程可见。如果双击可执行文件,则先将其设置为用户或系统环境变量,然后打开新的终端或重启资源管理器。 ## 范围 该演示不包含持久化、权限提升、凭据访问、横向移动、命令执行、破坏性行为或捆绑的私有 webhook 令牌。WebAssembly 模块仅限于格式化和返回一个心跳 JSON,作为简单的 PoC。
标签:AES-256, AI欺骗, Apex, Bash脚本, C++, DNS 反向解析, ONNX, Raspberry Pi, SHA-256, WASM, wasm3, WebAssembly, 内存执行, 加密载荷, 可视化界面, 多阶段加载, 安全测试, 客户端加密, 攻击性安全, 数据展示, 数据擦除, 机器学习, 概念验证, 漏洞评估, 环境密钥, 红队, 行为伪装, 逆向工具, 遥测欺骗