itsnold/Nagomio-C2
GitHub: itsnold/Nagomio-C2
一个用 Rust 后端、C++17 植入体和 Tauri 前端构建的跨平台命令与控制框架,旨在帮助学习系统编程的同时提供完整的红队后渗透操作能力。
Stars: 2 | Forks: 0
Nagomio-C2
A cross-platform Command and Control (C2) framework.
这个项目本质上是一种真正*学习*系统编程的方式,让我能获得更多 Rust 的实际操作经验,同时弄懂正确的 C++ 内存管理,并大致了解从零开始编写一个 C2 到底有多难🤩 显然,这确实很难。光是跨操作系统交叉编译所花的时间就超出了我愿意承认的范围。但这真的很有趣,最终的成果是一个后端独立于 UI 运行的 C2……所以你可以关闭应用,等回来时,你的 agent 依然在执行它们的任务。 ## 组织结构 我尽量保持模块化,这样未来的我就不会讨厌现在的我: - **`teamserver/`**:后端 API。使用 Rust + `tokio` + `axum`。这是操作者交互的对象,负责跟踪 agent 并构建 payload。在 WAL 模式下使用 SQLite,带有只追加的持久化 worker,外加一个 SOCKS5 中继和审计日志。 - **`tauri-client/`**:操作者 UI。使用 React 18 + TypeScript,封装在 Tauri v2 中。列出各个模块,允许你在构建 payload 时选择 callback profile 和 SNI 覆盖。比 Electron 应用轻量得多,我很欣赏这一点。 - **`agent/`**:实际的植入体。使用 C++17 和 `cpp-httplib` 编写。基于 profile 的传输、ChaCha20-Poly1305 通信封装、后渗透模块注册表。可交叉编译到 Linux 和 Windows(通过 MinGW)。 - **`shared/`**:一个微型的 Rust crate,仅使用 `serde` 定义 API 类型,确保前端和后端在 JSON 的结构上始终保持一致。 - **`scripts/`**:我用于本地测试和构建的 bash 脚本,这样我就不用一直重复输入相同的命令了。 ## Agent 的功能 它的目标是轻量级且依然实用。它通过 HTTP/HTTPS 通信,拉取 JSON 任务,并返回任务输出的内容。 ### 传输与 opsec - **HMAC 认证** - 每个请求都通过 agent_id 携带 `x-nagomio-ts` + `x-nagomio-nonce` + `x-nagomio-mac`,使用基于方向的 PSK。具备重放缓存、常量时间比较以及 60 秒的时钟偏差窗口。 - **通信加密** - 启用后,`/beacon` 和 `/response` 的主体将使用通过 HKDF-SHA256 从 PSK 派生密钥的 ChaCha20-Poly1305 进行加密。 - **可插拔的 callback profile** - `default`、`cdn_metrics`、`analytics`、`dead_drop`。每一个都会重写路径、User-Agent 和主体模板以融入正常流量。 - **SNI 覆盖** - 仅限 Windows,通过 `WinHttpSetOption` 实现,适用于域前置类型的部署。 - **长轮询 beacon** - teamserver 会保持 beacon 开启,直到任务进入队列,无需频繁轮询。 - **AMSI / ETW 补丁** - 在 Windows 上受 `NAGOMIO_STEALTH` 控制。在启动时修补 `AmsiScanBuffer` 和 `EtwEventWrite`。 - **Dead-drop 任务下发** - `dead_drop` profile 会让 agent 执行 `GET` 而不是 `POST`,因此它可以在仅拉取的 CDN URL 后面工作。 - **SOCKS5 枢纽** - teamserver 启动一个 SOCKS5 监听器,并通过 agent 的 `socks` 模块转发数据字节。可以通过 `proxychains` 代理进入目标网络。 ### 规避技术(可选,编译时) 我想了解 AV/EDR 工具实际上是如何分析软件的,所以我添加了一些可配置的规避技术,你可以在构建时开启它们: - **反调试**:在 Linux 上检查 `/proc/self/status` 或在 Windows 上使用 `IsDebuggerPresent()`,以便在分析环境中直接退出。 - **反虚拟机**:寻找明显的虚拟机特征(核心数少于 2 个,内存小于 2GB,已知的 VM 进程/MAC)。 - **反沙箱**:检查系统正常运行时间,因为沙箱通常启动后很快就会销毁。 - **守护进程化**:在 Windows 上使用 `FreeConsole()` 或在 Linux 上使用 `daemon()` 转入后台运行。 - **XOR 配置**:使用编译时的 XOR 替换明文 callback URL/token,这样基础的 `strings` 就无法立即暴露你的服务器。 - **随机化 UA** - 在启动时从一组常见的 User-Agent 中随机选择一个。 - **睡眠混淆** - 将睡眠切分为带有抖动的亚秒级时间窗口,而不是单一的 `sleep()`。 - **销毁日期** - 超过该 Unix 时间戳后 agent 将会自毁。在构建时进行验证。 ### 后渗透模块 完整用法请参见 [docs/commands.md](docs/commands.md)。 | 模块 | 功能描述 | |--------|---------------| | `whoami` | 将用户名、组、完整性、权限提升状态以 JSON 格式输出 | | `mem_exec` | `VirtualAlloc` / `mmap` + `CreateThread` shellcode 运行器 | | `portscan` | 带有端口列表/范围的 TCP connect 扫描 | | `persist` | `registry` / `schtasks` (Win) 或 `crontab` / `systemd-user` / `shell-profile` (Linux) | | `uninstall` | 立即或在下次重启时自毁 | | `inject` | `CreateRemoteThread` (Win) 注入到目标 PID 中 | | `screenshot` | 将主显示器截图为 base64 BMP (Win) | | `clipboard` | 当前的剪贴板文本 (Win) | | `keylog` | `WH_KEYBOARD_LL` 钩子 (Win),支持启动/刷新 | | `lsass` | 对 lsass.exe 执行 `MiniDumpWriteDump` (Win) | | `socks` | 为 teamserver 的中继提供 SOCKS5 字节泵 | ### Shell 风格命令 - `shell
免责声明:本项目纯粹是为了学习和理解这些东西的底层工作原理。请仅在你拥有或获得明确测试许可的机器上运行它,好的,拜拜
标签:Bash脚本, C++, IP 地址批量处理, Rust, Tauri, 可视化界面, 命令与控制(C2), 数据擦除, 红队框架, 网络信息收集, 网络流量审计