垂直安全Agent搭建,自动化漏洞扫描
垂直安全Agent是一类针对特定业务场景定制的自动化安全检测程序,它能把漏洞扫描、风险分析和告警处置串成一条流水线;
而Prompt安全沙箱则用来隔离大模型处理外部输入的运行环境,防止恶意提示词突破系统边界。
本文站在零基础视角,带你在 Linux 服务器上从零搭建一个可用的垂直安全Agent,接入自动化漏洞扫描,并配置Prompt安全沙箱,最终能看到真实扫描结果和沙箱拦截日志。
一、先把环境准备到可执行状态
建议准备一台 2核4G 以上的 Linux 服务器,系统选用 Ubuntu 22.04 或 Debian 12,同时确保可以访问外网。
下面命令会安装 Python3、pip、Docker 和常用扫描工具:
sudo apt update
sudo apt install -y python3 python3-pip docker.io git curl nmap
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
执行后退出当前 SSH 会话重新登录,让 docker 组权限生效。
接着安装 Python 依赖:
pip3 install flask requests tenacity
这里把 Flask 用于提供 Agent 的 HTTP 接口,requests 负责调用扫描工具和模型 API,tenacity 用于重试失败的请求。
完成以上步骤后,运行 docker --version 和 python3 --version,能看到版本号就说明环境就绪。
二、编写垂直安全Agent主体
垂直安全Agent的核心是一个调度程序:接收扫描任务,调用漏洞扫描器,再通过大模型对结果做语义分析,最后输出高置信度报告。
先建一个项目目录:
mkdir ~/sec-agent && cd ~/sec-agent
创建 agent.py,写入以下简化逻辑:
from flask import Flask, request, jsonify
import subprocess, requests, json
app = Flask(__name__)
MODEL_API_URL = "http://your-llm-api:8000/v1/chat/completions"
# 这里替换成你自己的大模型API地址
def run_scanner(target):
# 调用Nuclei或Nmap的示例,实际请按需调整
result = subprocess.run(
["nmap", "-sV", "-T4", target],
capture_output=True, text=True, timeout=300
)
return result.stdout
def analyze_with_llm(scan_data):
payload = {
"messages": [
{"role": "system", "content": "你是安全分析专家,请从扫描结果中提取真实漏洞并给出修复建议"},
{"role": "user", "content": scan_data[:4000]}
]
}
resp = requests.post(MODEL_API_URL, json=payload, timeout=120)
return resp.json().get("choices", [{}])[0].get("message", {}).get("content", "")
@app.route("/scan", methods=["POST"])
def scan():
data = request.get_json()
target = data.get("target")
if not target:
return jsonify({"error": "缺少 target 参数"}), 400
raw = run_scanner(target)
analysis = analyze_with_llm(raw)
return jsonify({"target": target, "analysis": analysis})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
启动服务:
python3 agent.py
这样最基本的垂直安全Agent就跑起来了,它接受外部传入的扫描目标,执行 nmap 扫描,并调用大模型生成解读。
实际落地时可以替换为更专业的扫描器,例如 Nuclei、OpenVAS 或 Nessus。
三、接入自动化漏洞扫描并定时执行
Agent只提供单个接口还不够,自动化漏洞扫描需要定时触发、结果入库。
使用 cron 即可满足多数场景。
先新建扫描脚本 scheduled_scan.py:
import requests, time
targets = ["https://example.com", "http://test-server.local"]
for t in targets:
try:
resp = requests.post("http://127.0.0.1:5000/scan", json={"target": t}, timeout=360)
print(resp.json())
except Exception as e:
print(f"扫描失败 {t}: {e}")
然后添加 crontab 任务,比如每天凌晨2点执行:
crontab -e
加入这一行:
0 2 * * * cd /root/sec-agent && python3 scheduled_scan.py >> scan.log 2>&1
这样漏洞扫描就按计划自动运行,日志写入 scan.log。
检查定时任务是否生效:
crontab -l
如果要更复杂的调度(重试、并发、结果回传),建议把扫描任务放进 Redis 队列,再用 Celery 做 Worker,但零基础起步先跑通 cron 更简单。
四、把Prompt安全沙箱真正落地
大模型处理外部输入时,Prompt 可能包含恶意指令。
安全沙箱要做的是把模型调用和外部环境隔离,即使 Prompt 触发模型输出异常命令,也无法影响宿主机。
最轻量的方案是让 Agent 在一个受限 Docker 容器中运行,只暴露必要网络。
创建沙箱配置 sandbox/docker-compose.yml:
services:
agent-sandbox:
image: python:3.11-slim
container_name: sec-agent-box
network_mode: bridge
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
read_only: true
tmpfs:
- /tmp
volumes:
- ./agent-code:/app:ro
working_dir: /app
command: python agent.py
这个配置做了几件关键事:删除所有 Linux capabilities、禁止提升权限、文件系统只读,这样即使沙箱被攻破,攻击者也无法写文件或提权。
启动沙箱:
cd sandbox && docker compose up -d
如果不想用 Docker Compose,也可以直接运行容器:
docker run -d --name sec-agent-box --cap-drop ALL --security-opt no-new-privileges --read-only --tmpfs /tmp -v ./agent-code:/app:ro python:3.11-slim python /app/agent.py
注意,沙箱里的 Agent 要访问大模型 API,需要在容器里配置网络白名单,或用 --network host 并做好防火墙限制。
生产环境建议把大模型 API 放在内网,只允许沙箱容器通过内网地址访问。
五、常见坑和验证结果的方法
扫描结果误报率高:垂直安全Agent依赖大模型做分析,模型可能把低危信息当成漏洞。
建议在提示词里要求模型输出置信度,并设置阈值过滤,例如只保留 severity 为 high 或 critical 的项。
沙箱内请求超时:容器默认 DNS 可能失效,运行 docker exec sec-agent-box cat /etc/resolv.conf 确认 DNS;
如果使用宿主机网络,用 --dns 8.8.8.8 重新指定。
cron 任务不执行:注意 crontab 里的环境变量和 PATH,Python3 路径写绝对路径更稳妥,例如 /usr/bin/python3。
检查日志 scan.log,确认没有权限或路径报错。
验证整个链路是否通,用一条命令发起测试扫描:
curl -X POST http://127.0.0.1:5000/scan -H "Content-Type: application/json" -d '{"target":"127.0.0.1"}'
能看到返回带大模型分析结果的 JSON 说明 Agent 正常;
再查看沙箱容器 docker logs sec-agent-box,里面会出现对应请求记录。
另外可以故意构造一个恶意 Prompt 发送给 Agent,观察沙箱是否只返回模型输出而不会影响宿主机文件,这是验证隔离效果最简单的手段。
如果你正在处理垂直安全Agent搭建、自动化漏洞扫描与Prompt安全沙箱实践,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
后续也可以把扫描结果接入告警平台,例如飞书机器人或企业微信,让 Agent 真正发挥自动化价值。