节点安全
扫描节点执行外部扫描脚本和容器,为防止恶意任务入侵主机或作为内网跳板,节点内置了多层安全防护。
一、 核心安全防御机制
1.1 二进制白名单(默认强制)
当任务类型为 PROCESS 或 SHELL 时,只允许执行白名单中的可执行文件。
- 默认白名单:内置 90 个常用安全工具和系统命令(如
nmap、nuclei、httpx、curl、python3等)。 - 拦截:非白名单命令会被直接拦截,任务标记为
FAILED。
NOTE
二进制白名单是客户端本机的执行层沙箱。平台侧另有「节点工具白名单」(调度层),用于限制节点从服务端拉取哪些工具的任务,两者互补,配置方式见 节点管理 → 节点工具白名单。
1.2 环境变量屏蔽
节点执行命令前会自动屏蔽敏感环境变量,包括系统变量、动态链接劫持变量、云商凭证及容器管理套接字等,防止凭证泄露或共享库劫持。
1.3 容器卷挂载限制
Docker 执行器挂载宿主机目录时有严格限制:
- 允许路径:仅允许
/tmp/、/private/tmp/、/var/tmp/和/opt/testnet/。 - 拦截路径:
/etc/、/var/run/docker.sock、/root/等敏感路径会被阻断。
1.4 SSRF 内网防护(默认放行,需显式加固)
节点默认允许对内网网段发起 HTTP/DNS/TCP 探测(allow_ssrf 默认 true),以满足内网隔离网段的扫描需求。若节点部署在不受控网络,务必显式开启防护:
- 将
allow_ssrf设为false后,所有私有网段(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16等)、本地回环和链路本地地址都会被拦截,防止扫描内网服务。 - 开启防护后,对域名探测会进行双重校验(解析前与解析后各校验一次),防止 DNS 重绑定绕过。
1.5 容器特权防护(默认放行,需显式加固)
节点默认允许容器以特权模式运行(allow_privileged 默认 true)。将 allow_privileged 设为 false 后,所有 Docker 扫描任务中声明 --privileged 特权模式的请求会被直接拦截,防止容器逃逸。
WARNING
allow_ssrf 与 allow_privileged 的出厂默认值均为 true(放行)。面向不可信目标或部署在办公网/生产网的节点,必须通过配置文件或环境变量显式设为 false,详见下节。
二、 节点安全加固配置
通过客户端的 config.yaml(或 TESTNET_ 前缀环境变量)可自定义安全参数:
yaml
# testnet-client config.yaml
server:
url: "https://your-server:3100"
secret: "your-node-secret"
node:
name: "hardened-node-01"
security:
# 是否允许 SSRF 探测内网网段(默认 true)
# 生产/办公网环境务必设为 false,开启内网探测拦截
allow_ssrf: false
# 是否允许容器特权执行(默认 true)
# 生产环境务必设为 false,阻断特权容器
allow_privileged: false
# 自定义允许挂载的物理目录(整体覆盖内置默认清单
# /tmp/、/private/tmp/、/var/tmp/、/opt/testnet/,而非追加)
allowed_volume_paths:
- "/tmp/"
- "/opt/testnet/"等价的环境变量写法:
bash
export TESTNET_ALLOW_SSRF="false"
export TESTNET_ALLOW_PRIVILEGED="false"
export TESTNET_ALLOWED_VOLUME_PATHS="/tmp/,/opt/testnet/"三、 工具校验
部署新工具 DSL 前,可使用客户端的 validate 命令进行本地格式校验:
bash
# 校验 spec 的格式规范(必填字段、类型、超时与文件字段等)
./testnet-client validate --spec my-tool-spec.yamlNOTE
validate 只做静态格式校验;挂载路径、SSRF、特权等安全拦截发生在节点实际执行任务时,由安全沙箱强制执行。