Real-Fruit-Snacks/Aquifer
GitHub: Real-Fruit-Snacks/Aquifer
基于 Linux 内核命名空间隔离的后渗透框架,提供多通道 C2 通信和 36 个隐蔽模块以实现高隐匿性的红队行动。
Stars: 0 | Forks: 0
**利用内核命名空间隔离的 Linux 后渗透框架**
[](https://go.dev)
[](https://kernel.org)
[](.)
内核命名空间隔离让操作系统的防御机制反噬自身。多通道 C2 配合多态信标使流量隐形。36 个隐蔽模块负责处理其余工作。
## 目录
- [亮点](#highlights)
- [快速开始](#quick-start)
- [执行流程](#execution-flow)
- [C2 传输](#c2-transport)
- [C2 服务器](#c2-server)
- [隐蔽模块](#stealth-modules)
- [规避](#evasion)
- [OPSEC](#opsec)
- [高级持久化](#advanced-persistence)
- [通信协议](#wire-protocol)
- [架构](#architecture)
- [配置](#configuration)
- [测试](#testing)
## 亮点
|
### 命名空间隔离
PID、Mount、Network、UTS 和 Cgroup 命名空间隔离,配合 veth pair 路由和 NAT 伪装。Implant 在其内核强制执行的沙箱中运行,通过 DNAT 环回路由连接主机。
|
### 多通道 C2
以支持域前置的 HTTPS 为主。通过 TXT 记录的 DNS 隧道作为备选。DNS-over-HTTPS 用于受限网络。在 netfilter/iptables 之下的原始二层以太网帧用于其他所有方法都失败的环境。
|
|
### 多态信标
每个周期轮换 18 个路径、8 个 content-type、13 个 user-agent 和随机化头部。每个会话进行 JA3 指纹随机化。流量整形配合加密抖动模拟合法的浏览行为。
|
### 内存保护
`ProtectedConfig` 使用异或重密钥加密静态的 C2 URL 和会话密钥。带有确定性擦除的 `[]byte` API。`DisableKeepAlives` + `FlushConnections()` + `runtime.GC()` 清除瞬态。
|
|
### 进程伪装
内核级 argv 和 `/proc/[pid]/comm` 重写,伪装成 `accounts-daemon`。直接对 `/proc/self/mem` 的 environ 区域清零以对抗 `cat /proc/PID/environ`。`GOMAXPROCS(1)` 减少可见的 OS 线程。
|
### 36 个隐蔽模块
eBPF 隐身技术在 BPF map 中隐藏 PID。`memfd_create` + `execveat` 实现无文件执行。内核密钥环存储对用户态取证不可见的秘密。反转储区域阻止 LiME/AVML。`io_uring` 共享环形缓冲区绕过系统调用监控。
|
|
### 目标密钥
主机名、CIDR 范围、MAC 地址、机器 ID、金丝雀文件和终止日期护栏防止实验室逃逸。如果任何护栏失败,Implant 会自动终止并清理。不会在目标环境之外意外触发。
|
### 高级持久化
Systemd generators 在启动时早于所有单元运行。NSS 模块在任何 DNS 或用户查询时触发。Logrotate、DHCP、APT 和 audit dispatcher 钩子在常规系统事件中触发。`binfmt_misc` 和 modprobe 钩子覆盖其余情况。
|
## 快速开始
### 前置条件
| 需求 | 版本 | 备注 |
|-------------|---------|-------|
| Go | 1.21+ | 1.25+ 用于 garble 混淆 |
| Platform | Linux | 需要 Kernel namespace 支持 |
| garble | latest | 可选,用于混淆构建 |
| UPX | latest | 可选,用于发布版压缩 |
| Python | 3.9+ | 用于 C2 服务器 |
### 构建
```
# 开发构建 (stripped, static)
make build
# ARM64 交叉编译
make build-arm64
# 混淆构建 (需要 garble)
make build-garble
# 生产发布 (garble + UPX + 签名修补)
make build-release
# 完整 CI 检查 (vet + fmt + build)
make check
```
输出的二进制文件放在 `build/` 中。
### 验证
```
# 检查 Go 元数据泄露
make strings-check
# 对比常规构建与 garble 构建
make gobuild-check
# 在发布二进制文件上运行 OPSEC 验证套件
make opsec-check
```
OPSEC 检查验证:二进制字符串中没有 Go 模块路径,没有明文 C2 URL,没有 Go 运行时符号引用,UPX 签名完全清除(通过 `scripts/patch_upx.py`),没有 Go section headers (gosymtab, gopclntab, go.buildinfo),以及确认压缩/加密的高二进制熵。
## 执行流程
### 1. 父进程阶段
在隔离前运行预命名空间检查:
- 目标密钥护栏(主机名、IP 范围、机器 ID、金丝雀文件、终止日期)
- 环境指纹识别(VM/沙箱/调试器检测)
- EDR 检测和行为调整
- OPSEC 加固(禁用核心转储、反 ptrace、进程伪装)
### 2. 命名空间引导
重新执行进入隔离的 PID + Mount + Network + UTS + Cgroup 命名空间,带有 veth pair、NAT 伪装和用于主机连接的 DNAT 环回路由。父进程设置主机端 veth pair,然后等待子进程。
父进程处理 SIGTERM/SIGINT:杀死子进程,清理主机端网络产物(veth、iptables、sysctl),移除 cgroup 目录,然后退出。正常的子进程退出也会在父进程终止前触发完整的主机端清理。
### 3. 子进程阶段
命名空间内的操作循环:
- 进程隐藏和内存保护
- 与 C2 服务器进行 ECDH 密钥交换
- 带有抖动睡眠和指数退避的信标循环
- 任务执行与加密结果交付
- 信号驱动的优雅关闭与完整清理(网络产物、cgroups、工作区、持久化)
## C2 传输
| 通道 | 描述 | 用例 |
|---------|-------------|----------|
| HTTPS | 支持域前置的主通道 | 标准出口 |
| DNS | TXT 记录渗出 | 防火墙绕过 |
| DoH | DNS-over-HTTPS | 受限网络 |
| Raw L2 | netfilter/iptables 之下的 AF_PACKET 原始以太网帧 | 防火墙检测之下 |
### 传输特性
| 特性 | 描述 |
|---------|-------------|
| JA3 随机化 | 每个会话唯一的 TLS 指纹 |
| 流量整形 | 模拟合法的浏览行为 |
| 多态间隔 | 信标时序上的加密抖动 |
| 服务端覆盖 | 通过 `BeaconResponse` 调整睡眠和抖动 |
| 自动故障转移 | 级联传输通道回退 |
| 确定性路由 | `X-Request-ID` 头用于 O(1) 会话解析 |
## C2 服务器
用于管理 implant 的 Python 操作员控制台。使用 cmd2 + Rich 构建,采用 Catppuccin Mocha 主题。
```
# 安装依赖
pip install -r c2server/requirements.txt
# 启动操作员控制台
python3 -m c2server --db c2.db --keys server_keys.pem
```
### 组件
| 组件 | 描述 |
|-----------|-------------|
| ECDH P-256 | 持久化的服务器密钥交换,与 Go implant 协议完全匹配 |
| AES-256-GCM | 加密的信标流量与流量整形 |
| HTTPS listener | Starlette + uvicorn,TLS 1.2+ 加固,通过 X-Request-ID 实现 O(1) 会话查找 |
| DNS listener | TXT 记录 C2,base32 编码和响应截断 |
| 多态路由 | 18 个轮换信标路径 + 默认路径 |
| SQLite backend | 会话、任务、结果、战利品、监听器(WAL 模式,每线程连接) |
| Rich CLI | Catppuccin Mocha 主题的表格、面板和状态显示 |
| 上下文切换 | 主上下文(会话/监听器/战利品)和 implant 上下文(shell/upload/persist/等) |
### 操作员命令
**主上下文:** `sessions`, `interact`, `listeners`, `loot`, `generate`
**Implant 上下文:** `shell`, `upload`, `download`, `ls`, `ps`, `netstat`, `ifconfig`, `whoami`, `sysinfo`, `persist`, `cleanup`, `sleep`, `kill`, `info`, `tasks`, `results`, `back`
## 隐蔽模块
36 个用于深度主机级融合的模块 (`pkg/stealth/`):
| 模块 | 文件 | 描述 |
|--------|------|-------------|
| Argv masquerade | `process_blend.go` | 完整的 `/proc/[pid]` 配置文件模拟(FDs、CWD、OOM score) |
| Process genealogy | `genealogy.go` | 双重 fork 重定父进程到 PID 1 |
| PID manipulation | `pid_manip.go` | 在 PID 命名空间内消耗 PID 以避免 PID 1 |
| PID recycling defense | `pid_recycle.go` | 落在与系统服务匹配的密集 PID 区域 |
| eBPF cloaking | `ebpf_cloak.go` | 基于 BPF map 的 PID 隐藏列表(存根过滤器,map 功能正常) |
| Environment cloning | `env_clone.go` | 从活动目标进程克隆环境变量 |
| Network blending | `network_blend.go` | 伪造连接和服务旗标响应器 |
| Decoy processes | `decoy.go` | 生成和管理诱饵服务进程 |
| History obfuscation | `history.go` | Shell 历史记录操作和 RC 文件注入 |
| Cgroup camouflage | `cgroup_camo.go` | 模仿 systemd 服务 cgroup 层级 |
| Namespace hiding | `ns_hide.go` | 容器 ID 欺骗和命名空间混淆 |
| Nested namespaces | `ns_layers.go` | 外部诱饵 + 内部操作命名空间 |
| Group blending | `group_blend.go` | 匹配目标服务的补充组 |
| Capability management | `capabilities.go` | Ambient capability 提权 |
| Syscall proxying | `syscall_proxy.go` | 基于 Ptrace 的系统调用注入到目标进程 |
| Memory spoofing | `mem_spoof.go` | 通过 PR_SET_VMA 进行 `/proc/[pid]/maps` 区域名称欺骗 |
| TCP/IP fingerprinting | `tcpip_spoof.go` | 内核 TCP 协议栈参数欺骗 |
| D-Bus blending | `dbus_blend.go` | 注册为合法的 D-Bus 服务 |
| lsof misdirection | `lsof_spoof.go` | 通过绑定挂载进行 FD 欺骗 |
| Benign strings | `benign_strings.go` | 向二进制文件注入看起来合法的字符串 |
| Seccomp awareness | `seccomp_aware.go` | 检测 seccomp 过滤器并调整系统调用行为 |
| Socket inheritance | `socket_inherit.go` | 从目标服务继承 socket 以进行融合 |
| Timestamp freezing | `ts_freeze.go` | tmpfs 时间戳操作以对抗取证 |
| Polymorphic engine | `polymorphic.go` | 检测到分析时对数据区域进行异或加密 |
| Exe link spoofing | `exe_spoof.go` | 通过 PR_SET_MM_EXE_FILE 进行 `/proc/self/exe` 操作 |
| Seccomp forensic block | `seccomp_notif.go` | BPF 过滤器阻止 ptrace/perf_event/process_vm_readv |
| Kernel keyring storage | `keyring_store.go` | 在内核内存中存储秘密(对内存取证不可见) |
| io_uring covert I/O | `iouring.go` | 绕过系统调用级监控的共享环形缓冲区 I/O |
| Anti-dump regions | `antidump.go` | MADV_DONTDUMP 和 MADV_WIPEONFORK 内存保护 |
| Cross-process injection | `vmwrite_inject.go` | 无需 ptrace 的 process_vm_writev shellcode 注入 |
| Userfaultfd decoy | `uffd_decoy.go` | 通过页面错误处理器向取证工具提供虚假内存页 |
| Kernel tunable manipulation | `ktune.go` | 通过 /proc/sys 和 /sys/kernel 禁用 kprobes、ftrace、perf |
| Abstract unix sockets | `abstract_sock.go` | 通过抽象命名空间 socket 实现无文件系统 IPC |
| Fileless execution | `memfd_exec.go` | memfd_create + execveat 用于无磁盘 ELF 执行 |
| eBPF program pinning | `bpf_pin.go` | 通过 bpffs 实现进程死亡后仍存活的持久内核钩子 |
| Landlock self-sandboxing | `landlock_cage.go` | 用于伪装的非特权 Landlock LSM 配置文件 |
## 规避
- VM/沙箱检测(hypervisor、时序、MAC OUI、BIOS 字符串)
- EDR 产品检测与行为适应
- Auditd 规则解析和系统调用规避
- 命名入侵检测(nsenter 监控)
- 文件系统监控检测(inotify/fanotify/audit)
- `/proc` 条目隐藏和自解除链接
- eBPF 程序检测和枚举
## OPSEC
- **Guardrails** -- 目标密钥防止实验室逃逸(主机名、CIDR、机器 ID、金丝雀、终止日期)
- **Kill switch** -- 检测到取证工具或用户登录时自动清理
- **内存加密** -- 会话密钥静态时进行异或加密,解密到短生命周期缓冲区
- **核心转储防止** -- RLIMIT_CORE=0 和 PR_SET_DUMPABLE=0
- **Anti-ptrace** -- 阻止调试器附加
- **进程伪装** -- 内核级 argv 重写,伪装成 `accounts-daemon`
- **环境擦除** -- `os.Clearenv()` + 直接对 `/proc/self/mem` 的 environ 区域清零
- **线程数减少** -- `GOMAXPROCS(1)` 最小化 `/proc/PID/status` 中可见的 OS 线程
- **I/O 噪声注入** -- 信标周期之间的随机 procfs 读取破坏 `/proc/PID/io` 关联性
- **Heap 保护** -- `ProtectedConfig` 静态加密 C2 URL/密钥,每个周期异或重密钥;`GetC2ServersBytes()` 返回调用者在使用后擦除的 `[]byte` 切片;传输和配置 blob 在关闭时销毁
- **多态信标** -- 每个周期 18 个轮换路径、8 个 content-type、13 个 user-agent、随机化头部(应用于信标循环和初始注册)
- **Crypto 卫生** -- 注册后销毁 ECDH 客户端公钥;消除会话密钥栈残留;重密钥失败跟踪,熵耗尽后优雅关闭;通过拒绝采样实现无偏差的 `CryptoRandIntn`
- **内存映射加载器** -- 无磁盘产物内存中 ELF 执行
- **反取证** -- Timestomping、二进制自删除、退出时完整清理
- **Kernel keyring** -- 秘密存储在内核内存中,对用户态取证不可见
- **Anti-dump** -- MADV_DONTDUMP/WIPEONFORK 防止 LiME/AVML 进行内存捕获
- **NSS 安全防护** -- 如果 NSS .so 在磁盘上不存在,拒绝修改 nsswitch.conf(防止破坏主机 DNS)
- **主机端清理** -- 退出时移除 veth 接口、iptables 规则、sysctl 覆盖和 cgroup 目录
- **父进程信号处理器** -- 父进程捕获 SIGTERM/SIGINT 以确保即使父进程被直接杀死也能清理主机产物
- **Sysctl 恢复** -- 移除 sysctl.d 持久化恢复运行时内核参数(ptrace_scope、kptr_restrict、ftrace、BPF、perf)而无需重启
## 高级持久化
除标准持久化(cron、systemd、init.d、bashrc)外,该框架包含高级机制:
| 方法 | 描述 |
|--------|-------------|
| Systemd generators | `/etc/systemd/system-generators/` -- 启动时在所有单元之前运行 |
| NSS modules | `/etc/nsswitch.conf` 注入 -- 由任何 DNS/用户查询触发 |
| Logrotate hooks | `/etc/logrotate.d/` post-rotate 脚本 -- 定期执行 |
| DHCP client hooks | `/etc/dhcp/dhclient-exit-hooks.d/` -- 网络事件时运行 |
| APT hooks | `/etc/apt/apt.conf.d/` -- 包操作时执行 |
| Audit dispatcher | `/etc/audit/plugins.d/` -- 审计事件时运行 |
| binfmt_misc | `/etc/binfmt.d/` -- 特定文件执行时触发 |
| Modprobe hooks | `/etc/modprobe.d/` install 命令 -- 模块加载时运行 |
| NM dispatcher | `/etc/NetworkManager/dispatcher.d/` -- 网络状态变化时运行 |
| Sysctl.d | `/etc/sysctl.d/` -- 启动时应用的内核可调参数(禁用追踪/调试) |
## 通信协议
Go implant 和 Python C2 服务器通过 JSON 编码、AES-256-GCM 加密的负载进行通信。
| 字段 | Go JSON Tag | Python Key | 备注 |
|-------|-------------|------------|-------|
| Sleep override | `json:"sleep"` | `"sleep"` | 秒数 (int) |
| Jitter override | `json:"jitter"` | `"jitter"` | 0.0-1.0 (float64) |
| Task result ID | `json:"id"` | `"id"` | UUID 字符串 |
| Task result output | `json:"output"` | `"output"` | Go `[]byte` -> JSON 中的 base64,Python base64 解码 |
| Shutdown flag | `json:"shutdown"` | `"shutdown"` | 布尔值 |
CLI 任务参数序列化为 `map[string]string` -- 线上所有值必须是字符串。
## 架构
```
.
├── cmd/
│ ├── implant/main.go Entry point (parent -> namespace child)
│ └── test-implant/main.go Integration test implant (no namespaces)
├── pkg/
│ ├── c2/ C2 transports
│ │ ├── dns.go DNS TXT record transport
│ │ ├── doh.go DNS-over-HTTPS transport
│ │ ├── fronting.go Domain fronting
│ │ ├── https.go Primary HTTPS transport
│ │ ├── ja3.go JA3 fingerprint randomization
│ │ ├── polymorphic_beacon.go Polymorphic beacon encoding
│ │ ├── protocol.go Beacon encode/decode
│ │ ├── rawl2.go Raw Layer 2 Ethernet transport
│ │ ├── traffic_shape.go Traffic pattern shaping
│ │ └── transport.go Transport manager with failover
│ ├── config/config.go Compile-time configuration
│ ├── evasion/ Detection and evasion
│ ├── namespace/ Linux namespace management
│ ├── opsec/ Operational security
│ ├── stealth/ 36 stealth modules
│ ├── tasking/ Task handler framework
│ └── version/ Build version metadata
├── internal/
│ └── shared/ Internal shared utilities
├── scripts/
│ ├── integration_test.sh End-to-end C2 + implant test
│ └── patch_upx.py UPX signature scrubber
├── c2server/ Python C2 operator console
│ ├── __main__.py Entry point
│ ├── crypto/ ECDH, AES-GCM, traffic shaping
│ ├── protocol/ Beacon encode/decode, polymorphic paths
│ ├── models/ SQLite models (sessions, tasks, loot)
│ ├── listeners/ HTTPS + DNS listeners
│ ├── cli/ cmd2 app, Rich theme, commands
│ └── requirements.txt Python dependencies
├── docs/ Planning docs and landing page
│ └── index.html Project landing page
├── Makefile Build targets
├── Dockerfile Container build
├── go.mod
└── go.sum
```
### 关键模式
| 模式 | 实现 |
|---------|----------------|
| 两阶段执行 | 父进程运行检查,重新执行进入命名空间子进程 |
| 编译时配置 | 所有设置通过 `-ldflags` 嵌入,无运行时配置文件 |
| 传输故障转移 | HTTPS -> DNS -> DoH -> Raw L2 级联 |
| 内存优先 | `ProtectedConfig`、`[]byte` API、确定性擦除 |
| 内核级隐藏 | 命名空间隔离 + eBPF 隐身 + procfs 操作 |
## 配置
所有配置通过 `pkg/config/config.go` 在编译时进行。在构建时使用 `-ldflags` 覆盖默认值:
| 字段 | 默认值 | 描述 |
|-------|---------|-------------|
| `C2Servers` | `https://127.0.0.1:8443/api/v1/beacon` | 主 HTTPS 端点 |
| `DNSDomains` | `ns1.example.com` | DNS 回退域名 |
| `CallbackInterval` | 30s | 信标间隔 |
| `Jitter` | 0.2 | 睡眠抖动 (0.0-1.0) |
| `MasqueradeName` | `accounts-daemon` | 进程名伪装 |
| `KillDate` | +30 days | 自动过期日期 |
| `SandboxEvasion` | true | VM/沙箱检测 |
| `EDRAwareness` | true | EDR 行为适应 |
## 测试
### 集成测试
完整端到端测试:C2 服务器 + 在 localhost 上运行信标循环的测试 implant。
```
./scripts/integration_test.sh
```
测试:
1. 构建一个禁用沙箱规避的测试 implant (`cmd/test-implant/`)
2. 在 `127.0.0.1:8443` 上启动 C2 HTTPS 监听器
3. 启动执行 ECDH 密钥交换并注册会话的 implant
4. 验证 C2 数据库中记录了一个会话
5. 确认至少发送并接收了一个信标
测试 implant 在没有命名空间隔离或规避检查的情况下运行,使其适用于实验室/VM 环境。使用 `-tags testbuild` 构建。
## 法律声明
本软件仅用于授权渗透测试、红队操作和安全研究。作者对滥用不承担任何责任。用户对在任何系统上部署此工具前确保拥有适当授权负全责。
**Aquifer** -- 隐藏的基础设施,深藏于地表之下。
标签:DNS隧道, Docker镜像, DOH, EVTX分析, EVTX分析, Go语言, HTTPS, IP 地址批量处理, Layer 2, Rootkit, Zeek, 伦理授权, 内核命名空间, 反向代理, 后渗透框架, 命令控制, 嗅探欺骗, 域名前置, 多态信标, 安全渗透, 攻击模拟, 数据采集, 日志审计, 权限维持, 沙箱逃逸, 流量伪装, 知识库安全, 程序破解, 网络安全, 进程隔离, 逃避检测, 逆向工具, 隐匿通信, 隐私保护, 驱动签名利用