# syntax=docker/dockerfile:1 # # ARTEX 腾讯 TSec Benchmark 测评镜像(自包含单容器)。 # - 基于 kalilinux/kali-rolling,自带 PostgreSQL、渗透/逆向/pwn 工具、python/node/chromium # - 二进制从【当前工作树】编译(含 platform_tools.go / orchestration.go / submit_flag 等 benchmark 代码), # 不内嵌前端(-tags 不带 embedui,纯 API),零 Go 改动 # - 启动后 entrypoint 起库 + 起 artex + 通过 REST API 一键 seed 全部配置(提示词/自定义工具/ # 自定义 agent/触发器/LLM),密钥全部从运行时环境变量注入 # # 构建: docker build -f Dockerfile.bench -t artex-bench:latest . # 导出: docker save artex-bench:latest | gzip > agent.tar.gz # ≤3GB # 本地跑: docker run --rm -p 8787:8787 \ # -e BENCHMARK_BASE_URL=... -e BENCHMARK_TOKEN=... \ # -e LLM_BASE_URL=... -e LLM_API_KEY=... artex-bench:latest # ---------- 1) 构建前端静态导出(Next.js) ---------- FROM node:20-bookworm AS frontend WORKDIR /web COPY web/package.json web/package-lock.json ./ RUN npm ci COPY web/ ./ RUN npm run build:static # 产出 /web/out # ---------- 2) 编译 artex(内嵌前端,从当前工作树) ---------- FROM golang:1.26-bookworm AS build WORKDIR /src # nuclei(最新版,静态编译;@latest 与本模块无关,先装以便缓存) RUN CGO_ENABLED=0 go install github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest # chisel(TCP/UDP over HTTP 隧道,用于内网转发/pivoting;最新版静态编译) RUN CGO_ENABLED=0 go install github.com/jpillora/chisel@latest COPY go.mod go.sum ./ RUN go mod download COPY . . # 前端静态产物放到 embed 目录,-tags embedui 才会内嵌 UI(本地可看界面) COPY --from=frontend /web/out ./server/webui/dist RUN CGO_ENABLED=0 go build -trimpath -tags embedui -o /artex ./cmd/artex # ---------- 2) Kali 运行时 ---------- FROM kalilinux/kali-rolling ENV DEBIAN_FRONTEND=noninteractive # Web / 渗透 / recon + 运行时 + DB # 去掉 metasploit-framework(~1.5-2GB) 与 seclists(~1GB+);改用 dirb 的小字典 RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates curl wget vim unzip jq ripgrep procps sudo \ postgresql postgresql-contrib \ python3 python3-pip python3-zombie-telnetlib nodejs npm \ nmap masscan ffuf sqlmap nikto hydra john \ ncat socat netcat-traditional inetutils-telnet dirb dnsutils proxychains4 \ python3-impacket impacket-scripts netexec evil-winrm \ && apt-get clean && rm -rf /var/lib/apt/lists/* # 逆向 / pwn / 二进制 / 内存(radare2 已够,去掉冗余的 rizin) RUN apt-get update && apt-get install -y --no-install-recommends \ gdb radare2 binutils file bsdmainutils binwalk \ ltrace strace patchelf upx-ucl checksec qemu-user-static ruby \ && apt-get clean && rm -rf /var/lib/apt/lists/* # gef(gdb 增强,单文件,不需要 git) RUN curl -fsSL https://gef.blah.cat/sh -o /tmp/gef.sh && bash /tmp/gef.sh && rm -f /tmp/gef.sh || true # pwn / 逆向 python 生态 + one_gadget RUN pip3 install --break-system-packages --no-cache-dir \ pwntools ROPgadget ropper capstone unicorn keystone-engine z3-solver \ && gem install --no-document one_gadget || true # nuclei(最新版二进制)+ 官方 POC 库(离线预置到 /opt/nuclei-templates;运行时用 -duc 禁联网更新) COPY --from=build /go/bin/nuclei /usr/local/bin/nuclei COPY --from=build /go/bin/chisel /usr/local/bin/chisel RUN curl -sSL https://github.com/projectdiscovery/nuclei-templates/archive/refs/heads/main.tar.gz \ | tar xz -C /opt \ && mv /opt/nuclei-templates-main /opt/nuclei-templates \ && mkdir -p /root/.config/nuclei \ && printf 'disable-update-check: true\n' > /root/.config/nuclei/config.yaml \ && ln -sf /opt/nuclei-templates /root/nuclei-templates \ && nuclei -version 2>/dev/null || true # Awesome-POC 漏洞知识库(Threekiii,markdown POC/利用 writeup 集,离线参考,用 rg/grep 查阅) RUN (curl -fsSL https://github.com/Threekiii/Awesome-POC/archive/refs/heads/master.tar.gz) \ | tar xz -C /opt \ && mv /opt/Awesome-POC-* /opt/awesome-poc # 另一离线 POC 仓库(eeeeeeeeee-code/POC,大量 CVE/组件 POC 脚本,离线参考) RUN (curl -fsSL https://github.com/eeeeeeeeee-code/POC/archive/refs/heads/main.tar.gz \ || curl -fsSL https://github.com/eeeeeeeeee-code/POC/archive/refs/heads/master.tar.gz) \ | tar xz -C /opt \ && mv /opt/POC-* /opt/eee-poc WORKDIR /app COPY --from=build /artex /app/artex COPY skills/ /app/skills/ COPY bench/ /app/bench/ RUN chmod +x /app/artex /app/bench/entrypoint.sh /app/bench/seed.sh # data/(jwt.key 等)持久化点;8787=API,8788=流量代理 VOLUME ["/app/data"] EXPOSE 8787 8788 ENTRYPOINT ["/app/bench/entrypoint.sh"]