NotebookNomad/autonomous-ctf-agent

GitHub: NotebookNomad/autonomous-ctf-agent

该项目是一个运行于 Apple Silicon 的自动化渗透测试环境,利用 LLM 驱动 Kali 容器中的安全工具集来完成 CTF 靶机与本地漏洞应用的攻防练习。

Stars: 0 | Forks: 0

# 适用于 Apple Silicon 的 autonomous-ctf-agent 一个用于练习靶机的自动化渗透测试环境 —— **Hack The Box**, **TryHackMe**,以及像 **OWASP Juice Shop** 这样的本地漏洞容器。 [Claude Code](https://claude.com/claude-code) 作为 agent,通过运行在 Kali 容器内的 MCP server 驱动 [HexStrike-AI](https://github.com/0x4m4/hexstrike-ai) 工具集(150+ 安全工具)。 ## 工作原理 ``` Claude Code ──(MCP over stdio / docker exec)──► Kali container ("agent") (the agent) └─ hexstrike MCP server (:8888) └─ nmap, nuclei, sqlmap, metasploit, … ``` 该容器是**工具后端**(一台服务器),而不是 agent。推理逻辑在 Claude Code 中进行,由 [`CLAUDE.md`](./CLAUDE.md) 和 `.mcp.json` 配置(后者负责将 Claude 连接到容器)。 该 agent 镜像通过 `./Dockerfile` 在本地构建,绝不会从 registry 拉取。 ## 环境要求 - **仅限 Apple Silicon (ARM64)。** 该镜像构建于 `--platform=linux/arm64` 并 为 arm64 编译 Go/Rust 工具。 - Docker Desktop - 对于远程靶场:HTB / TryHackMe 的 OpenVPN 配置文件 (`.ovpn`) ## 两种运行方式 该 agent 支持两种连接模式。 ### A) 远程 VPN 靶场 — HTB / TryHackMe 这些目标位于各平台专属的 OpenVPN 连接之后。将平台的 `.ovpn` 文件放入 `./vpn/`,然后使用指向该文件的 `VPN_CONFIG` 启动 agent —— 容器会自行建立隧道,并在隧道就绪后才启动服务: ``` docker compose build VPN_CONFIG=/vpn/htb.ovpn docker compose up -d # or thm.ovpn curl http://localhost:8888/health # "healthy" once ready ``` - 若要切换平台,只需将 `VPN_CONFIG` 指向另一个文件并重新运行 `up -d`。 - 如果你的 `.ovpn` 需要用户名/密码,请将其放入 `./vpn/` 下的文件中,并设置 `VPN_AUTH=/vpn/creds.txt`(第 1 行 = 用户名,第 2 行 = 密码)。 - 默认开启**默认拒绝的出站防火墙**(`EGRESS_FIREWALL=on`),因此容器 只能访问隧道、VPN server endpoint 以及本地的 `labnet` 子网 —— 绝不会访问公共互联网。此规则在 `tun0` 连接后、服务启动前应用。详见下文的 [网络隔离](#network-isolation)。 ### B) 本地漏洞容器 — Juice Shop 等 它们作为独立容器与 agent 运行在共享的 Docker 网络(`labnet`)上 —— **无需 VPN**。通过其 profile 启动其中一个;agent 会通过 service name 访问它: ``` docker compose --profile juiceshop up -d # starts the agent + Juice Shop # agent 现在通过 http://juiceshop:3000 到达目标 ``` (在此模式下请保持 `VPN_CONFIG` 未设置 —— 即本地模式。从你的 Mac 上访问 `http://localhost:3000` 同样有效。) ## 测试你自己的漏洞容器 任何容器镜像都可以作为本地靶机。有两种方式: **快捷、临时** —— 将一个现有的/其他容器附加到 agent 的网络中,并通过名称访问它: ``` docker run -d --name dvwa --network autonomous-ctf-agent_labnet vulnerables/web-dvwa # agent 通过 http://dvwa 到达目标(端口取决于镜像,例如 :80) ``` 该网络命名为 `_labnet`,其中 `` 是 `docker-compose.yml` 中的项目名称。默认情况下,它是 `autonomous-ctf-agent_labnet` (可通过 `docker network ls` 确认)。 **可复现** —— 将其作为 profile 添加到 `docker-compose.yml` 中(见下文),这样只需一条命令即可启动,并且对任何克隆你仓库的人来说都有据可查。 ## 创建你自己的靶机 profile 在 `docker-compose.yml` 中添加一个服务,将其置于 `labnet` 中,并为其添加 `profiles:` 标签,使其仅在需要时启动。示例 —— WebGoat: ``` webgoat: image: webgoat/webgoat container_name: webgoat profiles: ["webgoat", "targets"] # start with --profile webgoat ports: - "127.0.0.1:8080:8080" # optional: browse from the Mac restart: unless-stopped networks: - labnet ``` 然后: ``` docker compose --profile webgoat up -d # agent + WebGoat; reach it at http://webgoat:8080 ``` 提示: - 共享的 `targets` 标签允许你同时启动多个靶机:`docker compose --profile targets up -d`。 - agent 在 `labnet` 上通过 **service name** 找到靶机(利用 Docker 的 DNS),因此请使用镜像实际监听的端口 —— agent 访问它无需进行主机端口发布。 - 如果你发布了端口,请将本地靶机绑定到 `127.0.0.1`,以免它们暴露在你的局域网(LAN)上。 ## 网络隔离 默认情况下,该 agent 容器**无法访问公共互联网。** 在 hexstrike server 启动前会安装一个默认拒绝的出站防火墙(`EGRESS_FIREWALL=on`,由两种模式下的 `entrypoint.sh` 强制执行),它仅允许出站流量访问: - **loopback**(包括 Docker 位于 `127.0.0.11` 的内置 DNS), - **本地 `labnet` 子网** —— 你的本地靶机容器,以及 - 在 VPN 模式下,**`tun0` 隧道**以及维持其运行所需的 **VPN server endpoint(s)**。 其他所有流量 —— 互联网以及 Docker host 背后的局域网 —— 都会被丢弃(IPv4 和 IPv6)。 该防火墙是**故障关闭(fail-closed)**的:如果无法安装规则(例如缺少 `NET_ADMIN`),容器将拒绝启动,而不是在出站端口开放的状态下运行。这意味着该容器只能访问靶场靶机,以及在 VPN 模式下访问 VPN —— 互联网上的任何东西都无法访问。 - 如果需要,可以通过 `LOCAL_ALLOW_NETS="10.20.0.0/16 …"` 添加额外允许的 CIDR。 - `EGRESS_FIREWALL=off` 会禁用防火墙并开放完整的互联网出站访问 —— 仅用于有意进行的调试。请注意,该镜像在**构建**时(即 `docker build`,与运行时分开)仍会从互联网拉取工具;防火墙仅管控运行中的容器。 ## 范围与授权 本项目仅针对**经过授权的、故意设置漏洞的练习系统** —— 你被授权攻击的 HTB / TryHackMe 靶机,以及你自己运行的本地漏洞容器。 切勿将其指向你不拥有或未被明确允许测试的系统。`CLAUDE.md` 包含了完整的交战规则。
标签:AI智能体, CISA项目, DLL 劫持, Docker容器, StruQ, XXE攻击, 大语言模型, 插件系统, 攻击面发现, 版权保护, 网络调试, 自动化, 请求拦截