glorybnat/aegis-pentest

GitHub: glorybnat/aegis-pentest

一款基于 AI 编排的自主 Web 渗透测试 agent,通过 PTES 方法论和 80+ 工具自动完成从侦察到报告的完整测试流程。

Stars: 6 | Forks: 0

# aegis · v0.12.0 **自适应交互与通用检查扫描器** 一个自主的、由 AI 编排的 Web 渗透测试 agent。Aegis 负责处理侦察、指纹识别、漏洞发现、验证和报告,从而让人类渗透测试者专注于真正需要人工判断的工作。 ## 它是什么 Aegis 针对目标 Web 运行结构化的、方法论驱动的测试任务。它会分析主机环境,对目标技术栈进行指纹识别,从 PTES + OWASP WSTG v4.2 剧本中选择相关的工具和测试,并发执行它们,最后生成带有修复指导且经过验证的漏洞报告。 它不是 Burp Suite 的替代品。它是为人类渗透测试者提供信息的自主侦察和漏洞发现层,可消除约 70% 的日常繁杂工作。 **内置在运行时的严格约束:** - 每次测试任务在进行任何网络出口流量之前,都需要一个已签署的 `scope.yaml`。 - 在 socket 打开之前,每个外部请求都会与范围内和范围外的规则进行匹配。 - 范围违规会中止当前任务,并将其写入审计日志。 - 破坏性工具(`sqlmap`、`wpscan`、`commix`、`kerbrute`、`crackmapexec` 等)未经操作员批准拒绝运行,除非 `scope.yaml` 明确启用它们。 - 没有任何可以绕过范围的 `--force` 标志。 ## 安装说明 ### 选项 A — Docker(推荐,所有工具已预装) ``` # 拉取预构建镜像(约 4 GB)或在本地构建(约 15-30 分钟) aegis docker pull # from GitHub Container Registry # 或者 aegis docker build # build locally from Dockerfile # 运行一个 engagement export ANTHROPIC_API_KEY=sk-ant-... aegis docker run engagements/2026-acme # 带有 PATH 上所有工具的交互式 shell aegis docker shell # 检查镜像状态和工具清单 aegis docker status ``` Docker 镜像基于 **Kali rolling**,并包含了目录中的每一个工具。 ### 选项 B — PyPI ``` pip install aegis-pentest # 或 pipx install aegis-pentest ``` ### 选项 C — Arch (AUR) ``` yay -S aegis-pentest # 或 paru -S aegis-pentest ``` 可选依赖覆盖了完整的工具面;只需安装你需要的即可。 ### 选项 D — 原生安装脚本(一行命令) ``` # 自动检测 Arch、Kali、Ubuntu/Debian、Fedora、macOS curl -fsSL https://raw.githubusercontent.com/glorybnat/aegis-pentest/main/scripts/install.sh | bash # 或者从 repo 开始 bash scripts/install.sh # 改为构建 Docker 镜像 bash scripts/install.sh --docker ``` ### 选项 E — 从源码安装 ``` git clone https://github.com/glorybnat/aegis-pentest.git cd aegis-pentest pip install -e . cd tui && npm install && npm run build ``` 安装 AEGIS 后,检测主机上已有的工具并补齐其余工具: ``` aegis init # detect what's installed aegis env tools --missing # show what's missing + install commands aegis env install --missing # install everything (no-sudo tools) aegis env install --missing --dry-run # preview first ``` **要求:** - Python 3.12+ - 环境中包含 `ANTHROPIC_API_KEY` - Docker(选项 A)或渗透测试工具链(选项 B–E) ## 快速开始 ``` # Docker 快速开始(零主机配置) export ANTHROPIC_API_KEY=sk-ant-... aegis docker build # or: aegis docker pull aegis docker run engagements/2026-acme # 原生快速开始 # 首次运行:分析主机环境,列出缺失的工具 aegis init # 同步知识库(NVD、GHSA、nuclei-templates、CISA KEV、FIRST EPSS) aegis kb sync # 创建新的 engagement aegis engagement new --client "Acme Corp" --domain "acme.com" # 填写授权详情 vim engagements/2026-05-acme/scope.yaml # 可选:从现有的 API spec 或 proxy trace 中提取 endpoints aegis ingest openapi engagements/2026-05-acme/spec.yaml --engagement engagements/2026-05-acme aegis ingest postman engagements/2026-05-acme/collection.json --engagement engagements/2026-05-acme aegis ingest har engagements/2026-05-acme/burp.har --engagement engagements/2026-05-acme # 运行 aegis run engagements/2026-05-acme # 在崩溃或按下 Ctrl+C 后从最后完成的阶段恢复 aegis run engagements/2026-05-acme # picks up state.json automatically # 生成报告 — md/html/json/sarif/h1/bugcrowd,或 "all" aegis report engagements/2026-05-acme --format html aegis report engagements/2026-05-acme --format sarif # GitHub/GitLab code scanning aegis report engagements/2026-05-acme --format h1 # HackerOne JSON, one per finding aegis report engagements/2026-05-acme --format bugcrowd # Bugcrowd VRT bundle ``` ## scope.yaml 如果没有此文件,Aegis 拒绝运行。绝无例外。 ``` engagement_id: "BL-2026-007" client: "Acme Corp" operator: "Majd Bnat " authorization: document_ref: "SOW-2026-007.pdf" signed_date: "2026-05-12" expiry: "2026-06-12" in_scope: domains: - "*.acme.com" - "api-staging.acme.io" ips: - "203.0.113.0/24" out_of_scope: - "admin.acme.com" - "*.internal.acme.com" rules_of_engagement: rate_limit_rps: 10 business_hours_only: false destructive_tests: false no_credential_stuffing: true no_dos_tests: true confirm_before: # per-engagement gate for destructive tools - sqlmap - hydra - commix ``` ## 架构 ``` aegis CLI | Engagement Manager (scope validation, lifecycle, audit log) | +-----------------+-----------------+ | | | Environment Target Methodology Profiler Profiler Engine (host info) (fingerprint) (PTES phases) | | | +--------+--------+--------+--------+ | LLM Orchestrator (Haiku / Sonnet / Opus) | +----------+---------+----------+----------+ | | | | | Tool Knowledge Findings PTT PoC Registry Base DB Graph Generator (173 tools) (NVD/GHSA (SQLite) (aiosqlite) (14 types) +KEV/EPSS) | | Tool Executor Hallucination Guard (async, sandboxed, (output verification) destructive-gated) | Reporter (md/html/json/sarif/h1/bugcrowd) ``` 编排器在每个阶段运行一个有界循环: ``` plan(phase_context) -> execute(action) -> observe(result) -> update(state) ^ | +---------------------------------------------------------------+ until phase complete OR budget exceeded ``` 三个独立的预算限制着每个阶段:token 预算、自然时间(wall-clock time)和操作次数。无论哪个先触发,都会结束该阶段并进入定稿模式。 状态会在每次阶段推进后,通过原子操作 `tmp + os.replace` 持久化到 `/state.json`。对同一目录重新运行 `aegis run` 将从上次保存的阶段恢复。 ## 推理引擎 v0.12 将 AEGIS 从“工具调度器”重新定位为“聪明的漏洞狩猎伙伴”。agent 会阅读观察结果,提出结构化的理论,调度探针进行测试,并在推进之前写下自我批评。OOHA 循环是其核心支柱: | 步骤 | 含义 | |---|---| | **OBSERVE** | 阅读新的观察结果、开放假设区块和建议下一步区块。有什么是真正新出现的? | | **ORIENT** | 我现在处于攻击链(kill chain)的哪个位置?在可达范围内,影响最大的原语(primitive)是什么? | | **HYPOTHESISE** | 在调度工具之前,使用 `propose_hypothesis` 附带一段理由说明。如果匹配到已有的开放假设,则使用新证据调用 `update_hypothesis`。 | | **ACT** | 以**批次**方式调度 `run_tool` / `aegis_verify` — 独立的调用会并行运行。 | | **CRITIQUE** | 每个阶段一次,调用 `self_critique` — 我正在做出但尚未测试的假设是什么?哪些开放假设是死胡同? | 四个推理动词会进入 `PLAN_TOOLS` 并绕过按阶段划分的枚举过滤器(agent 在每个阶段都会进行推理,而不仅仅是 `VULN_ANALYSIS` 阶段): | 动词 | 用途 | |---|---| | `propose_hypothesis(target, vuln_class, rationale)` | 在调度工具之前提出一个结构化理论。基于 `(target, vuln_class)` 去重,因此重复调用会返回现有行。 | | `update_hypothesis(id, status, evidence_for, evidence_against)` | 追加证据;状态转换为 `CONFIRMED` 时会自动写入一个 `Finding`(严重性由 `vuln_class` 推断得出),以便立即触发攻击链检测。 | | `mark_dead_end(id, reason)` | 永久废弃一个理论 — 防止建议器再次将其提出。其理由会作为 `evidence_against` 记录在该行中。 | | `self_critique(reflection)` | 自由格式推理,作为 `reasoning_trace` 审计事件持久化保存。被认可的“草稿本” — 除了日志外对数据库没有其他副作用。 | 假设的生命周期为 `PROPOSED → TESTING → CONFIRMED | REFUTED | DEAD_END`。开放假设会在每个回合被注入回观察摘要中,以便 agent 在多回合间能看到自己的工作理论。 **并行调度。** 单个回合中的非控制类工具调用现在通过 `asyncio.gather` 并发运行,由每个运行器的 semaphore 限制(默认值为 `executor.max_parallel_tools`,回退到 4)。控制动词 — `advance_phase`、`change_phase`、`abort` — 保持串行,以便编排器可以进行短路处理。单个崩溃的调度永远不会扼杀批次中的其他任务。 **结构化失败信号。** `_recent_calls` 原本是 `dict[(tool, target), int]`,携带“失败 N 次”的信息。现在变成了 `dict[(tool, target), FailureSignal]`,包含 8 种类型的分类器(`TIMEOUT`、`RATE_LIMITED`、`PERMISSION_DENIED`、`AUTH_REQUIRED`、`OUT_OF_SCOPE`、`BINARY_MISSING`、`ZERO_RESULTS`、`EXCEPTION`)以及针对每种类型的带有攻击者视角的转换提示: - `rate_limited` → 在进程中使用 `aegis_verify`;它不受速率限制 - `auth_required` → 通过 `aegis ingest har --replay` 摄取带有 cookie 的捕获到的 Burp/ZAP HAR 文件 - `binary_missing` → 执行 `aegis env install --missing`,或使用 `aegis_tool_list_help ` 寻找替代品 观察摘要中的 `STUCK SIGNALS` 区块会渲染类型 + 计数 + 转换提示,优先显示最近的记录,最多显示 5 条。 ## 攻击链检测 漏洞发现包含结构化标签。攻击链检测器基于标签集进行匹配,而不是标题子字符串。自带 25 个开箱即用的攻击链 — 7 个传统 Web 攻击链,10 个现代 Web/API 攻击链,5 个 Active Directory 攻击链,以及 3 个 v0.12 高 ROI 盲点(Host Header、Web 缓存欺骗、参数污染): | 攻击链 | 严重性 | 谓词(标签组) | |---|---|---| | 通过 CORS + JWT 实现的账户接管 | critical | `cors_wildcard` + jwt-family | | 存储型 XSS + CSRF = 会话劫持 | critical | `xss_stored` + `csrf` | | SQL injection + 弱加密 | critical | `sqli` + `weak_crypto` | | SSRF + 内部服务暴露 | high | `ssrf` + cloud/internal | | SSRF + 云元数据 v1 | critical | `ssrf` + `cloud_metadata_v1` | | Mass assignment + admin endpoint | critical | `mass_assignment` + `admin_endpoint` | | 开放的存储桶 + 可达的 Lambda | high | `bucket_open` + `lambda_invoke` | | Request smuggling → 认证头绕过 | critical | `request_smuggling` + `auth_header` | | 缓存中毒 → 认证绕过 | critical | `cache_poisoning` + `auth_cookie` | | Prototype pollution → RCE sink | critical | `prototype_pollution` + `dangerous_sink` | | JWT alg-confusion → 权限提升 | critical | `jwt_alg_confusion` + `privileged_endpoint` | | 暴露的 `.git` → 源代码泄露 | high | `git_exposure` | | 开放注册 + IDOR | high | `open_registration` + `idor` | | 竞态条件 → 认证绕过 | high | `race_condition` + auth | | Kerberoasting → 服务账户沦陷 | high | `ad_kerberoast` + `ad_spn` + weak/service | | AS-REP roasting | high | `ad_no_preauth` + weak/user | | DCSync → 整个域沦陷 | critical | `ad_dcsync` + any AD creds | | AdminSDHolder ACL 后门 | critical | `ad_adminsdholder` + any AD creds | | 非约束委派 → 票据伪造 | critical | `ad_unconstrained` + any AD creds | | Host Header Injection → 缓存中毒 | critical | `host_header_injection` + `cache_poisoning`/`redirect_open` | | Web 缓存欺骗 → 认证 Token 泄漏 | high | `web_cache_deception` + `auth_cookie`/`auth_header` | | HTTP 参数污染 → 认证绕过 | high | `http_parameter_pollution` + `auth_bypass`/`idor`/`mass_assignment` | 对于在标签功能推出之前进行的测试任务,子字符串回退机制仍会针对漏洞标题触发传统的 7 条规则。 ## 引导式狩猎 攻击链属于事后检测 — 它们会在漏洞发现已存入数据库时触发。Playbook 是与之对应的主动手段:位于 `src/aegis/analysis/vuln_playbooks.py` 中的 28 个条目指明了“当你怀疑 X 时,运行这些探针;当你确认 X 时,接下来狩猎 Y”。 | 字段 | 含义 | |---|---| | `vuln_class` | `chains.py` 中的 `TAG_*` 常量之一 | | `severity_floor` | `critical` / `high` / `medium` / `low` / `info` | | `preconditions` | 状态谓词(`has_params`、`has_login`、`has_jwt` 等) | | `probes` | 具体的 `(tool_name, args_template, rationale)` 元组 | | `confirm_chain` | 该 playbook 最终馈送的 `ChainRule.name`(如果有) | | `follow_ups` | 当此漏洞触发时,接下来要狩猎的其他漏洞类别 | 初始集合(每个攻击链标签对应一个 playbook): `sqli`、`nosqli`、`cmdi`、`ssti`、`xxe`、`xss_stored`、`xss_reflected`、`ssrf`、`lfi`、`cloud_metadata_v1`、`bucket_open`、`request_smuggling`、`cache_poisoning`、`prototype_pollution`、`jwt_alg_confusion`、`jwt_weak_secret`、`csrf`、`idor`、`race_condition`、`mass_assignment`、`git_exposure`、`cors_wildcard`、`ad_kerberoast`、`ad_no_preauth`、`ad_dcsync`、`host_header_injection`、`web_cache_deception`、`http_parameter_pollution`。 在每次阶段推进后,`EngagementRunner._suggested_next` 会根据已确认的漏洞(标签 + endpoint + 技术栈)构建一个升级状态,并运行 `adaptive.escalate`。排名前三的操作将作为 `Suggested next probes` 区块注入到下一次的观察摘要中;模型可以选择执行或忽略它们。无论哪种方式,建议都会记录在 `audit_event` 中(`event_type='escalation_suggested'`),以便 `aegis stats` 能够回答“模型采纳建议的频率有多高?”。 标签推断(`src/aegis/analysis/tag_inference.py`)会在 `FindingsDB.add_finding` 内部的持久化边界处运行。漏洞会从工具基础映射(例如 `impatch_get_userspns` → `[ad_kerberoast, ad_spn]`)中获取标签,并通过针对标题 + 证据文本的 31 条子字符串匹配规则进行标记(区分 `jwt_alg_confusion` 和 `jwt_weak_secret`,区分 `xss_stored` 和 `xss_reflected`,以及区分 payload 中的 IMDSv1 标记为 `cloud_metadata_v1`)。来自调用者的显式标签将被保留。 **横向枢纽(Lateral pivots)(v0.12)。** `src/a/reasoning/lateral.py` 编码了每个聪明的漏洞猎手在确认后都会问的问题:“有了原语 X,它能解锁哪些新类别?” 10 个手工挑选的行覆盖了最高杠杆率的攻击链 — SSRF → IMDS → IAM → S3 → 凭据转换;SQLi → 通过 INTO OUTFILE 读取文件 → 日志投毒 → RCE;.git 泄露 → 源码审查 → JWT 密钥提取 → 伪造任意 token。每确认一个原语,都会为每个解锁的类别自动生成一个假设(`proposed_by="lateral:"`),以便 agent 看到具体的后续探针,并将其直接构建为“鉴于 X,狩猎 Y,因为……”的形式。 **部分攻击链启动器(v0.12)。** 大多数攻击链需要 2-3 个必需的标签组。当一个组匹配但至少缺少一个组时,`chains.partial_matches()` 会返回这种“擦肩而过”的结果;编排器会将它们作为 `PARTIAL CHAINS (one probe away)` 呈现在观察摘要中,包含我们已有的内容和缺失的内容 — agent 可以直接看到距离一步之遥的具体机会,而无需进行 LLM 规划调用。 ## Token 模型 Aegis 旨在以低于 2 美元的 LLM token 成本完成一次中等规模的全面测试任务。这是通过几种分层策略来实现的: | 策略 | 影响 | |---|---| | 分层模型路由(Haiku 处理约 70% 的调用) | 成本 -60% | | 对系统提示词 + 任务上下文进行 prompt caching | 输入 token 减少 40% | | 解析工具输出,绝不向 LLM 发送原始 stdout | 工具密集型阶段减少 80% | | 结构化的工具调用 schema,无需冗长文本规划 | 输出 token 减少 30% | | 方法论驱动的操作空间修剪 | 无效调用减少 50% | | 跨阶段重用经过 SQLite 缓存的侦察数据 | 视情况而定 | | 在 LLM 查看结果之前进行漏洞去重 | -10-30% | 模型层级: | 层级 | 模型 | 用于 | |---|---|---| | NANO | claude-haiku-4-5 | 解析、分类、总结 | | MAIN | claude-sonnet-4-6 | 规划、假设生成、验证探针 | | DEEP | claude-opus-4-7 | 攻击链分析、深度推理 | | LOCAL | ollama (可选) | 离线预分类 | 实时成本计量器会在每个阶段的整个过程中在终端运行: ``` Phase: VULN_ANALYSIS [>>>>>>>>--] 80% Budget: $0.74 / $5.00 Tokens: 41.2k / 200k Time: 12m / 60m Tier breakdown: NANO 24% . MAIN 71% . DEEP 5% Cache hit: 82% ``` ## 工具目录 Aegis 暴露了 **173 个 MCP 工具**,封装了 **105 个外部二进制文件**以及编排原语。原始输出永远不会传递给 LLM — 每个工具都有一个类型化的解析器,可生成结构化的 `Finding` 或 `Observation` 模型。一次返回 47 个开放端口的 nmap 扫描会变成 47 个每个约 80 字节的 `OpenPort` 观察,而不是 200 KB 的 XML。 所有工具都能优雅降级:如果未安装二进制文件,该工具会返回一个结构化错误,并附带确切的安装命令。 | 类别 | 工具 | |---|---| | **API 摄取** | `aegis ingest openapi`、`aegis ingest postman`、`aegis ingest har`(写入 Endpoint 观察结果 + paths.txt/params.txt 字典) | | **子域名枚举** | subfinder, amass, assetfinder, findomain, dnsx, alterx, massdns, shuffledns, puredns, dnstwist, subdomain\_brute\_massive | | **DNS 侦察** | dnsrecon, dnsx, massdns, fierce, crt.sh (cert transparency) | | **OSINT / 被动** | uncover (Shodan/Fofa/Censys/ZoomEye), shodan CLI, censys CLI, asnmap, passive\_intel, github\_discover, pwndb\_search, theharvester, spiderfoot, recon\_ng, google\_dorks | | **存活主机检测** | httpx, httpx\_batch, httprobe, naabu | | **端口扫描** | nmap, naabu, masscan, rustscan | | **Web 爬取** | katana, gospider, hakrawler, getjs | | **URL / 历史记录侦察** | gau, waybackurls, wayback\_recon, meg, unfurl, qsreplace | | **内容发现** | ffuf, feroxbuster, gobuster, dirsearch, wfuzz, content\_discovery, kiterunner | | **Vhost 模糊测试** | ffuf\_vhost | | **技术指纹识别** | whatweb, httpx -tech-detect, cdncheck, tlsx | | **WAF 检测** | wafw00f, whatwaf | | **TLS 审计** | sslscan, sslyze, tlsx | | **参数发现** | arjun, paramspider, gf (pattern filtering) | | **XSS** | dalfox, kxss, crlfuzz, xsstrike, nuclei, aegis\_verify (xss probe) | | **SQLi** | sqlmap*, nosqlmap*, nuclei, aegis\_verify (sqli / timing\_sqli probes) | | **SSTI** | sstimap*, aegis\_verify (ssti probe) | | **命令注入** | commix*, aegis\_verify (cmdi\_oob probe) | | **HTTP 走私** | smuggler* (CL/TE, TE/CL), h2csmuggler (HTTP/2 cleartext) | | **CORS** | corsy | | **SSRF / OOB** | oob\_init + oob\_poll (interactsh), aegis\_verify (ssrf\_oob / xxe probes) | | **竞态条件** | race\_condition\_scan, aegis\_verify (race probe) | | **OAuth** | oauth\_audit (open redirect, state bypass, PKCE) | | **JWT 攻击** | jwt\_audit (alg:none, RS256→HS256, weak secret) | | **GraphQL** | graphql\_audit (schema walk, batch DoS, deep nesting, per-query auth probe, rate-limit burst), graphql\_cop | | **WebSocket** | websocket\_test (injection, origin validation, auth) | | **API 发现** | api\_discover, kiterunner, openapi\_audit | | **IDOR** | idor\_check (cross-user object access) | | **JS 分析** | js\_recon, linkfinder, secretfinder | | **Header 注入** | header\_injection\_scan (Host header, cache poisoning) | | **403 绕过** | bypass\_403 (path tricks + header overrides) | | **Prototype pollution** | aegis\_verify (prototype\_pollution probe) | | **机密信息 / SAST** | trufflehog, semgrep, bandit, safety, npm\_audit, retire\_js, secret\_scan | | **漏洞扫描** | nuclei, nuclei\_fuzz, nuclei\_ai\_generate, wapiti, nikto | | **CMS 扫描** | wpscan*, cmseek, joomscan, droopescan | | **网络 / SMB** | enum4linux, smbmap, snmpcheck | | **Active Directory** | impacket (`GetUserSPNs.py`, `GetNPUsers.py`, secretsdump.py), kerbrute*, bloodhound-python, ldapdomaindump, crackmapexec*, certipy | | **云配置审计** | scoutsuite (AWS/Azure/GCP/Aliyun/OCI), cloudsplaining, pmapper, iamspy, azurehound, roadtools, gcp-iam-collector, gcp-scanner | | **云存储** | cloud\_enum, s3scanner, bucket\_finder, gitdumper, cloudfox | | **Kubernetes** | kube\_bench, kube\_hunter, kdigger, kubectl-who-can | | **容器 / SBOM** | trivy, grype, syft | | **认证 / 暴力破解** | hydra* | | **子域名接管** | subjack, subzy, subdomain\_takeover\_scan | | **侦察编排** | bbot (multi-module OSINT), interlace (parallel execution) | | **报告** | aegis\_report (md / html / json / sarif / h1 / bugcrowd) | | **方法论** | wstg\_check (OWASP WSTG v4.2, 80+ checks) | | **攻击图 (PTT)** | ptt\_add\_node, ptt\_update\_node, ptt\_get\_graph, ptt\_next\_targets, ptt\_spawn\_tasks, ptt\_summary | | **编排** | aegis\_hotlist (asset risk scoring), aegis\_compress\_context (context compression), aegis\_engagement\_status | | **PoC 生成** | generate\_poc (14 vuln classes: XSS, SQLi, SSRF, LFI, RCE, IDOR, open redirect, JWT, CORS, CSRF, HTTP smuggling, SSTI, XXE, prototype pollution) | | **输出验证** | verify\_tool\_output (hallucination guard — validates tool output before Claude acts on it) | | **现代 JS 攻击面** | nextjs\_data\_probe, astro\_endpoint\_probe, source\_map\_extract, spa\_route\_discover | | **综合 nuclei 模板** | nuclei\_synth\_from\_probe, nuclei\_synth\_list | | **移动端 + API 扩展** | mobsf\_static\_scan, dredd\_run, postman\_runner | | **工具文档** | aegis\_tool\_help, aegis\_tool\_list\_help | `*` 标记的工具在每次运行前都需要操作员批准(破坏性操作受限)。 ## 工具 Playbook 165 个针对特定工具的 markdown playbook 随 wheel 打包在 `aegis/_docs/tools/` 下。agent 会按需获取它们,而不是在每一个回合的 system prompt 中都携带完整的参数说明。 | MCP 工具 | 返回结果 | |---|---| | `aegis_tool_help(name)` | 完整的 markdown 正文 — 用途、参数、常用标志、陷阱、何时使用、示例 — 当名称不匹配时,还会提供拼写错误的 `suggestions` | | `aegis_tool_list_help(category)` | 跨所有文档的一行索引;支持按类别(`network`、`vuln`、`ad`、`cloud`、`k8s` 等)过滤 | 每份文档都遵循固定的 schema,因此模型可以依赖其固定的章节排序: ``` # tool_name **Purpose:** one-sentence summary. ## Args - arg (type): meaning ## 值得了解的通用 flags - -X short note ## 注意事项 - short bullet ## 何时使用 - which phase, what precondition triggers it ## 示例 `tool_name(target="…", flags="…")` ``` 11 个高频路径工具有手工挑选的 playbook;其余的则是由 `scripts/gen_tool_docs.py` 根据现有的 docstring + `ToolSpec.install` 提示生成的脚手架。你可以覆盖或手动编辑 `docs/tools//.md` 下的任何内容 — 在可编辑安装期间,磁盘上的源码布局优先于打包副本中的内容。 ## 验证探针 43 个进程内探针(`aegis.verify.probes`)无需重新调用外部二进制文件即可确认漏洞发现。每个探针都针对特定的类别,并发出结构化的 `ProbeResult`。探针默认仅支持 HTTP,并针对每个范围进行速率限制。 ``` blind_cmdi, blind_cmdi_oob, blind_sqli, cache, cache_poisoning, cmdi_oob, cors, cors_misconfig, csrf, csrf_missing, exposure, file_exposure, headers, http_smuggling, jwt, jwt_alg_confusion, lfi, misconfig, oauth, oauth_redirect, open_redirect, pp, prototype_pollution, race, race_condition, redirect, request_smuggling, smuggling, sqli, sqli_error, ssrf, ssrf_oob, ssti, subdomain_takeover, takeover, template_injection, timing_cmdi, timing_sqli, toctou, xml_injection, xss, xss_reflected, xxe ``` 探针在 v0.12 中采用了三项可靠性升级: - `aegis.verify.baseline` — 差异化的请求/响应差异对比(状态、body hash、超过 200 字节阈值的内容长度、重定向 Location)。消除了全盘返回 200 的误报(即服务器对每个 URL 都返回相同 HTML 的情况)。 - `aegis.verify.oob_waiter.confirm_oob` — 轮询 OOB 会话,直到回调与 nonce 匹配(子字符串或正则表达式)或达到截止时间。v0.11 发送 payload 后立即返回;这才是针对 Blind SSRF / CMDi / XXE 真正的确认环节。 - `aegis.verify.mutations` — 当 payload 遇到 403/406/419 时,针对每种探针类型进行 WAF 绕过重试。`sqli`(双重 URL 编码、反引号替换、`/**/` 注入注释)、`xss`(全角 unicode、大小写混合)、`lfi`(null 字节 + `.png`/`.jpg` 后缀),以及 `ssrf`、`ssti`、`cmdi`、`header_injection`。 ## 报告与 Webhook 六种输出格式,均由相同的 `Reporter` 上下文驱动: | 格式 | 用途 | |---|---| | `md` / `html` | 供人类阅读 | | `json` | 结构稳定,供机器的 schema | | `sarif` | GitHub Code Scanning、GitLab Security、Azure DevOps | | `h1` | HackerOne 提交 — `reports/h1/` 下每个发现对应一个 JSON 文件 | | `bugcrowd` | Bugcrowd VRT 映射的 JSON 包 | 通过 `[reporting] redact_pii = true` 可选择性开启 PII 脱敏。会扫描并清除电子邮件、JWT、AWS 密钥、GitHub PAT、Slack token、美国社会安全号码(SSN)、信用卡形式的数字以及电话号码。IP 脱敏是一个单独的开关。审计日志只记录数量 — 绝不记录内容。范围元数据(`engagement_id`、`client`)会被特意保留。 通过 `aegis watch` 实现实时漏洞 Webhook: ``` aegis watch engagements/2026-acme \ --webhook https://hooks.slack.com/services/... \ --webhook-format slack \ --webhook-min-severity high ``` 支持的平台:`slack` (Block Kit)、`discord`(按严重性着色的嵌入内容)、`linear`(工单标题/描述/优先级)、`json`(适用于 n8n / Zapier 的稳定 schema)。 ## 环境分析 首次运行时,`aegis init` 会对主机进行性能分析,并派生出自动调整的并发设置: ``` Host: arch-workstation OS Arch Linux (rolling, kernel 6.9.3-arch1-1) CPU AMD Ryzen 7 5800X . 8 cores / 16 threads . 4.7 GHz Memory 32 GB total . 24 GB available Repos core, extra, multilib, blackarch Pentest toolchain: 28/35 detected nmap 7.95 nuclei 3.2.9 httpx 1.6.6 ffuf 2.1.0 subfinder 2.6.6 katana 1.1.0 sqlmap 1.8.5 wpscan 3.8.27 nikto 2.5.0 gobuster 3.6.0 amass 4.2.0 gowitness 3.0.3 Missing: testssl.sh feroxbuster dnsrecon arjun paramspider trufflehog -> Run: aegis env install --missing Auto-tuned concurrency: nmap_parallelism=16 nuclei_concurrency=32 ffuf_threads=64 httpx_concurrency=80 max_parallel_tools=4 ``` ## CLI 参考 ``` aegis init First-run setup and env profile aegis env show Display host profile aegis env tools Tool inventory aegis env install --missing Generate install commands for missing tools aegis env refresh Re-detect host profile aegis kb sync [--source nvd|ghsa|nuclei|kev|epss] Sync knowledge base aegis kb stats Knowledge base summary aegis kb query --product nginx --min-cvss 7 Query CVEs aegis engagement new --client X --domain Y Scaffold engagement dir and scope.yaml aegis engagement list List engagements aegis ingest openapi --engagement Seed endpoints from OpenAPI / Swagger aegis ingest postman --engagement Seed endpoints from Postman v2.x aegis ingest har --engagement [--replay] Seed endpoints from a browser HAR; --replay re-issues each request and diffs the response aegis run [--phase PHASE] Run engagement (resumes from state.json) aegis run --dry-run Preview planned actions aegis run --budget-usd 2.00 Cap spend aegis watch --webhook Live findings webhook --webhook-format slack|discord|linear|json --webhook-min-severity critical|high|medium|low|info aegis report [--format md|html|json|sarif|h1|bugcrowd|all] Generate report aegis findings list [--severity high] List findings aegis findings suppress --reason "..." aegis cost Detailed cost breakdown aegis audit Full audit log aegis stats [] [--json] Cross-engagement metrics aegis shells Tool execution history (last scan) aegis shells --all [--tool X] [--engagement Y] Cross-engagement shell history (SQLite) aegis docker build|run|shell|pull|status Docker sub-app ``` 所有命令都支持用于脚本化处理的 `--json`,用于控制详细程度的 `-v/-vv/-vvv`,以及用于 CI 的 `--quiet`。 ## 配置 全局配置位于 `~/.config/aegis/config.toml`。在 `engagement_dir/config.toml` 中可以按测试任务覆盖任何键值。 ``` [api] anthropic_api_key_env = "ANTHROPIC_API_KEY" [models] nano = "claude-haiku-4-5-20251001" main = "claude-sonnet-4-6" deep = "claude-opus-4-7" [models.local] enabled = false endpoint = "http://localhost:11434" model = "qwen2.5:7b" [budgets] tokens_per_phase = 30000 tokens_per_engagement = 200000 usd_per_engagement = 5.00 wall_time_per_phase_sec = 1800 [caching] prompt_cache = true kb_cache_dir = "~/.cache/aegis/kb" fingerprint_cache_ttl_hours = 168 [tooling] docker_isolate = false default_rate_limit_rps = 10 respect_robots_txt = false [reporting] default_format = "html" include_audit_log = true redact_pii = false redact_ips = false ``` ## 技术栈 | 层级 | 选择 | |---|---| | 语言 | Python 3.12+ | | CLI | Typer + Rich | | TUI | React + Ink (TypeScript) | | 异步 | asyncio + anyio | | HTTP | httpx (async, HTTP/2) | | 模型 | Pydantic v2 | | 存储 | SQLite + SQLModel + Alembic | | MCP | FastMCP | | LLM | Anthropic SDK (Claude) | | 模板 | Jinja2 | | 日志 | structlog + rich | | 打包 | uv (开发), hatch (构建) | | 测试 | pytest + pytest-asyncio + respx (494 个测试) | ## 许可证 MIT。请负责任地使用,且仅限于对你获得授权的系统进行测试。 由 [Majd Bnat](https://majdb.com) 构建
标签:AI代理, CISA项目, MITM代理, Python, Web安全, 实时处理, 密码管理, 无后门, 自动化渗透测试, 蓝队分析, 请求拦截, 逆向工具