knowbe4/frieren-dast-ai

GitHub: knowbe4/frieren-dast-ai

面向安全工程师的 AI 驱动 DAST 工具,结合 MITM 代理、多 agent 扫描器和实时仪表盘,自动发现并验证 Web 应用漏洞。

Stars: 22 | Forks: 0

Frieren DAST-AI # Frieren DAST-AI 面向安全工程师的 AI 驱动的动态应用安全测试(DAST)工具。
将 HTTPS MITM 代理与多 agent 扫描器及实时 Web dashboard 相结合。将任何浏览器或工具通过代理路由——发现的结果将自动显示。 ## 维护 由 KnowBe4 InfoSec 团队维护并保持更新。欢迎贡献——随意 fork、修改或扩展它。如果你 fork 或重新分发此项目,请注明官方仓库:https://github.com/knowbe4/frieren-dast-ai ## 工作原理 ``` Browser / tool (configured to use proxy :8080) | v [HTTPS MITM Proxy] Intercepts all HTTP/HTTPS, TLS termination per host | v [Session Store] Every request/response stored in memory | +---> [Passive Scanner] Zero-request checks fire on every response | (YAML rule engine) 47 rules: headers, cookies, CORS, secrets, | error pages, LLM endpoints, OWASP Top 10 | +---> [Scan Queue] In-scope entries queued for active scanning | v [Coordinator] LLM planner → agents → LLM validator | v [VulnAgents] 10 agents run in parallel per endpoint: | xss, sqli, ssrf, file_read, auth_bypass, | secrets, discovery, llm_injection, | business_logic, blazor v [Findings] Real-time push to dashboard via WebSocket ``` ## 快速开始 ``` # 1. 安装 deps、Playwright,并从模板创建 .env make setup # 2. 仅首次:创建 AWS SSO profile(参见下方的“AWS 设置”部分) make sso-configure # 3. 认证(每次会话/token 过期时必需) make sso # 4. 启动 proxy + dashboard make proxy # 5. 配置你的浏览器:HTTP proxy → 127.0.0.1:8080 # 6. 安装 CA cert:http://127.0.0.1:8088/ca.crt(一次性) # 7. Dashboard:http://127.0.0.1:8088 ``` ## 桌面应用 (Electron) 相比于终端 + 独立浏览器,更喜欢一个独立窗口?在 `desktop/` 目录下提供了一个原生的 Electron 启动器。它**仅仅是一个启动器**——它会将 `uv run dast-ai proxy` 作为子进程启动,等待 dashboard 端口就绪,然后在带有托盘图标的原生窗口中渲染现有的 dashboard。所有的代理 / MITM / 扫描 / AI 行为与从终端运行后端完全一致。 ``` # 仅首次运行 — 安装 Electron deps(~200MB) make desktop-install # 启动原生应用(自动启动 backend) make desktop # 端口覆盖传递给 backend make desktop PROXY_PORT=9090 DASHBOARD_PORT=9099 ``` 需要 Node.js + npm。AWS 凭证(`AWS_PROFILE` / `AWS_ACCESS_KEY_ID`)从你的 shell 中继承,与 `make proxy` 相同。 ### 构建可分发包 `electron-builder` 生成可双击运行的程序包(便携版 `.exe` / `.AppImage` 无需安装)。**第一阶段注意事项:**打包后的应用在运行时仍然假设存在 `uv` 和已检出的 repo——它打包的是启动器,而不是 Python 后端。 ``` make desktop-dist-mac # macOS .dmg + .zip make desktop-dist-win # Windows portable .exe + NSIS installer make desktop-dist-linux # Linux AppImage ``` 有关 Electron 安装故障排除和第二阶段(独立二进制文件)的说明,请参阅 [`desktop/README.md`](desktop/README.md)。 ## Dashboard 标签页 | 标签页 | 描述 | |-----|-------------| | **Dashboard** | 概览:请求数量、按严重程度划分的发现数量、agent 状态、扫描引擎指标 | | **Proxy** | HTTP 历史记录、请求 Intercept、Site map、Issues(所有发现)以及 Settings(scope 规则、CA 证书 / Setup) | | **Discovery** | Manual Browse(通过代理路由的 headless 浏览器)、Crawl(SPA 爬虫)、Content Discovery(强制浏览)、Param Mining(隐藏参数发现) | | **AI** | Suggestions(供审查的 AI 发现/侦查结果)和 Settings(提供商、模型层级、扫描引擎、应用上下文、威胁模型、活动日志、服务图谱、payload 清单) | | **Scan** | 实时扫描队列 —— pending / running / completed、暂停/取消、重放 | | **Plugins** | 启用/禁用被动扫描器和其他插件 | | **GraphQL** | Schema Explorer + Query Builder(introspection、操作选择器、query/variables 编辑器)和 Fuzzer(变量提取 + payload 交叉组合) | | **Repeater** | 手动编辑和重发捕获的请求,每个请求一个标签页,支持 follow-redirects 开关 | | **Intruder** | 针对请求的 payload 位置 fuzzing | | **Logs** | 滚动显示 500 条事件的系统日志 —— agent、插件、浏览器和爬虫事件 | | **Extras** | H1 Validator、Code(源码感知审查)、FedRAMP、Interactions(OOB/interactsh)、Decoder/Encoder、JWT 编辑器 | ## Proxy > 设置 - **Scope 规则** —— 按协议、主机、端口、路径(glob 或 regex)包含/排除 - **Bypass 域名** —— 按原样转发,不进行拦截或记录 - **隐藏扩展名** —— 从 HTTP 历史记录中过滤掉(`.js`、`.css` 等) - **保存 / 加载** —— 保存命名的设置快照;保存的路径显示在通知中 - **Setup** —— CA 证书下载和安装说明、AI 引擎状态 扫描引擎设置(workers、probe 并发数、被动/主动开关、LLM planner/validator 开关)位于 **AI > Settings** 子标签页中,可在 runtime 应用而无需重启。 ## Agent 每个 agent 针对一类漏洞。所有 agent 在每个 endpoint 并行运行,由 LLM planner 根据 endpoint 的特征进行选择。 | Agent | 检查项 | Payload 文件 | |-------|--------|-------------| | `xss_agent` | 反射型/存储型 XSS、DOM XSS、bypass 变体;Playwright 浏览器确认 | `xss.yaml` | | `sqli_agent` | 基于错误、布尔盲注、基于时间盲注的 SQLi(最长 5 秒) | `sqli.yaml` | | `ssrf_agent` | OOB HTTP 回调、内部探测、云元数据、同级主机探测 | `ssrf.yaml` | | `file_read_agent` | 路径遍历、LFI、PHP wrappers、空字节注入 | `lfi.yaml` | | `auth_agent` | Auth header 剥离、每个 endpoint 9 种基于 header 的 bypass 组合 | — | | `secrets_agent` | AWS 密钥、GitHub/Slack token、私钥、JWTs、信用卡 | — | | `discovery_agent` | SSTI、开放重定向、CRLF 注入、HTTP 方法篡改 | `ssti.yaml` | | `llm_injection_agent` | 提示词注入、越狱、系统提示词泄露 | `llm_injection.yaml` | | `business_logic_agent` | 数字边界滥用、提权、工作流绕过、批量赋值 | — | | `blazor_agent` | Blazor WASM assembly 枚举、SignalR hub 枚举、未认证 negotiate、circuit 耗尽、暴露的调试工件 | `blazor.yaml` | ## 被动扫描器规则 规则以 YAML 文件的形式存在于 `dast/passive_rules/` 中。添加新的检查只需要一个新的 YAML 文件——无需修改代码。启动时加载了 62 条规则。 ``` dast/passive_rules/ ├── headers/ │ ├── security_headers.yaml HSTS, CSP, X-Frame-Options, Referrer-Policy, ... │ ├── info_disclosure.yaml Server version, debug mode, X-Powered-By │ └── cache_control.yaml Cacheable authenticated responses ├── cookies/ │ └── cookie_flags.yaml HttpOnly, Secure, SameSite, session cookie severity ├── cors/ │ └── cors.yaml Wildcard, reflected origin, null origin ├── secrets/ │ └── sensitive_data.yaml AWS/GitHub/Slack/Stripe keys, JWTs, credit cards ├── injection/ │ └── error_pages.yaml Stack traces, SQL errors, PHP/ASP.NET error pages ├── ai/ │ └── llm_endpoints.yaml LLM endpoint detection, injection marker, prompt leak ├── frameworks/ │ └── blazor.yaml Blazor-specific checks (WASM boot, SignalR, circuit management) ├── http2/ │ └── continuation_flood.yaml HTTP/2 CONTINUATION flood probe └── discovery/ ├── directory_listing.yaml ├── open_redirect.yaml └── clickjacking.yaml ``` ## Payload 文件 初始 payload 位于 `dast/payloads/*.yaml` 中。无需修改代码即可编辑。当 probe 被阻止时,LLM mutator 会自适应地生成 WAF bypass 变体。 | 文件 | 覆盖范围 | |------|----------| | `xss.yaml` | 基础、DOM、混淆、bypass、blind | | `sqli.yaml` | 基于错误、布尔盲注、基于时间、混淆、堆叠查询 | | `ssrf.yaml` | OOB HTTP、IP 混淆、内部探测(云元数据、file://) | | `lfi.yaml` | Unix/Windows 遍历、空字节、PHP wrappers | | `ssti.yaml` | Jinja2、Twig、Mako、FreeMarker、Pebble 的检测 + 混淆 | | `llm_injection.yaml` | 直接/间接注入、越狱、系统提示词泄露 | | `cmdi.yaml` | Unix/Windows 基础、基于时间的盲注、bypass/混淆 | | `xxe.yaml` | 文件读取、OOB DTD、通过 XXE 的 SSRF、参数实体、CDATA | | `jwt.yaml` | alg:none、弱密钥、kid 注入、jku/jwks header 注入 | | `nosql.yaml` | MongoDB 操作符、JS 注入、Elasticsearch、Redis CRLF | | `prototype_pollution.yaml` | Query string、JSON body、header、检测 payload | | `blazor.yaml` | Blazor WASM boot 端点、SignalR negotiate、调试工件 | ## 服务图谱 通过共享的 JWTs、公共父域名、相关 header(`X-Trace-ID`、`traceparent`)以及共享的 session cookie 名称+值,自动检测多个主机是否属于同一个微服务应用。agent 会自动接收同级主机上下文:SSRF probe 针对已知的内部服务;auth agent 跨主机共享 token。 可以在 AI 标签页和通过 API 进行手动合并/拆分。 ## 会话 随时将当前的 HTTP 历史记录 + 代理设置保存到磁盘。保存通知会显示确切的文件路径。可以从 Sessions 面板加载、导出为 JSON 或删除会话。 ``` ~/.dast-ai/sessions/ Session JSON files ~/.dast-ai/ca.crt CA certificate (install once in browser/OS trust store) ~/.dast-ai/ca.key CA private key ``` ## AI 提供商设置 Frieren DAST-AI 需要一个 LLM 后端,用于协调器、agent 和 red-team validator。通过 `.env` 中的 `AI_PROVIDER` 选择三个提供商之一: ### 选项 1 — AWS Bedrock(默认) ``` # 1. 创建 SSO profile — 每台机器一次性操作 make sso-configure # 出现提示时,输入你的组织 SSO 起始 URL、区域、账户 ID 和角色。 # 2. 将 .env.example 复制到 .env(make setup 会自动执行此操作),然后设置 # AWS_PROFILE 和三个 ANTHROPIC_DEFAULT_*_MODEL ARN 为你自己的 # Bedrock application-inference-profile ID。 # 3. 认证 — 在每次 token 过期时重复(通常每天一次) make sso ``` ### 选项 2 — 直接使用 Anthropic API ``` AI_PROVIDER=anthropic ANTHROPIC_API_KEY=sk-ant-... AI_MODEL_ID=claude-opus-4-8 # or claude-sonnet-5, claude-haiku-4-5, etc. ``` ### 选项 3 — OpenAI / 兼容 OpenAI 的平台(ChatGPT、Codex、本地网关等) ``` AI_PROVIDER=openai OPENAI_API_KEY=sk-... OPENAI_BASE_URL=https://api.openai.com/v1 # point at any OpenAI-compatible endpoint AI_MODEL_ID=gpt-4o ``` 这三种方式也可以随时在 dashboard 的 AI 标签页中进行切换(`POST /api/scan-config`)。 ### 故障排除 | 错误 | 原因 | 修复方法 | |-------|-------|-----| | `config profile (X) could not be found` | 尚未创建 Bedrock profile | 运行 `make sso-configure` | | `AWS_PROFILE is not set` | 缺少 `.env` 或 `AWS_PROFILE=` 为空 | 运行 `make setup`,然后编辑 `.env` | | `ExpiredTokenException` | Bedrock token 过期 | 再次运行 `make sso` | | `Could not connect to Bedrock` | 模型 ARN 错误 | 使用你自己的 ARN,而不是 `us.anthropic.*` 跨区域 ID | ## 环境变量 ``` # AI provider — 其中之一:bedrock(默认)、anthropic、openai AI_PROVIDER=bedrock # 当 AI_PROVIDER=bedrock 时必需 AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_REGION=us-east-1 AWS_PROFILE= # SSO profile — credentials auto-refresh on expiry # 当 AI_PROVIDER=anthropic 时必需 ANTHROPIC_API_KEY= # 当 AI_PROVIDER=openai 时必需 OPENAI_API_KEY= OPENAI_BASE_URL= # default https://api.openai.com/v1 # 可选 — 活动模型(默认为下方的 Sonnet 层级) AI_MODEL_ID= # 端口(也可以通过 CLI flags 设置) PROXY_PORT=8080 DASHBOARD_PORT=8088 PARALLEL_WORKERS=4 ``` ## 常见任务 ``` # 安装所有内容(deps + Playwright + .env) make setup # AWS SSO 登录 make sso # 启动 proxy + dashboard make proxy # 启动原生桌面应用(Electron 启动器) make desktop-install # first run only make desktop # 使用预认证会话启动 uv run dast-ai proxy \ --auth-url https://app.example.com/login \ --username admin@example.com \ --password secret # 运行单元测试 make test # 运行集成测试(proxy 必须正在运行) make test-integration # 运行 LLM 决策质量评估(opt-in — 使用 Bedrock,消耗 tokens) make evals # planner + red-team suites make evals SUITE=planner # one suite make evals MIN_ACCURACY=0.9 # non-zero exit if below threshold # 验证被动规则数量和 payload 数量 make check # JS + Python lint make lint ``` ## 已知问题 **Playwright 未安装** ``` uv run playwright install chromium ``` **CA 证书不受信任** —— 从 `http://127.0.0.1:8088/ca.crt` 下载并添加到你的浏览器或操作系统信任库中。 **AWS token 过期** —— 设置 `AWS_PROFILE`;凭证在出现 `ExpiredTokenException` 时会自动刷新。
标签:AI代理, HTTPS代理, MITM代理, Web安全, 代码生成, 动态应用安全测试, 渗透测试工具, 特征检测, 自动化漏洞扫描, 蓝队分析, 逆向工具