andupetcu/penclaw

GitHub: andupetcu/penclaw

PenClaw 是一款 AI 驱动的渗透测试 CLI,将静态分析、动态扫描与智能分类整合为一条命令,仅报告经主动验证确认可利用的真实漏洞。

Stars: 2 | Forks: 0

# 🦀 PenClaw **AI 驱动的渗透测试 CLI。** 一条命令 → 生成真实渗透测试报告,仅包含经证实且可利用的漏洞。 PenClaw 将静态分析、动态扫描和 AI 辅助的分类整合到一个工具中。将其指向源代码或在线 URL,即可获得具有可操作性的安全报告 —— 而不是一长串 CVE 编号。 ## 功能 ### 静态分析 - **Trivy** 文件系统扫描(CVE、配置错误) - **Semgrep** 安全规则集(代码模式) - **机密检测** — 正则表达式 + 基于熵的检测(API key、token、凭证) - **目标画像** — 自动检测语言、框架、包管理器 ### 动态扫描 - **Nuclei** 漏洞模板(5,600+ 项检查) - **Playwright** 浏览器自动化 — 爬取、表单发现、XSS 验证 - **API fuzzing** — SQLi、NoSQLi、命令注入、路径遍历、IDOR、身份验证绕过 - **OWASP Top 10** 检查 — 标头、CORS、CSRF、开放重定向、SSRF - **目录爆破** — 常见路径、管理后台、备份文件 - **JWT 攻击** — none/alg 混淆、弱密钥爆破、声明验证 ### AI 分类 - 多提供商:**Anthropic Claude**、**OpenAI GPT**、**Ollama**(本地模型) - AI 生成的**推理过程、概念验证和修复建议**(针对每个发现) - 静态 ↔ 动态漏洞关联 ### 报告 - **Markdown** — 易于阅读,非常适合用于 PR - **JSON** — 机器可解析,可通过管道传递给其他工具 - **SARIF** — 集成 GitHub 代码扫描 - **HTML** — 交互式暗色主题仪表盘,支持过滤和置信度条 ## 快速开始 ``` # 安装 git clone https://github.com/andupetcu/penclaw.git cd penclaw npm install npm run build # 扫描源代码(静态) npx penclaw scan ./my-project --output report.md # 扫描实时 URL(动态) npx penclaw scan https://example.com --dynamic --format html -o report.html # 完整扫描(静态 + 动态) npx penclaw scan ./my-project https://example.com --full -o report.html ``` ### 前置条件 | 工具 | 用途 | 安装 | |------|-------------|---------| | Node.js 20+ | 核心组件 | [nodejs.org](https://nodejs.org) | | Trivy | 静态 CVE 扫描 | `brew install trivy` | | Semgrep | 静态代码分析 | `pip install semgrep` | | Nuclei | 动态漏洞模板 | `brew install nuclei` | | Playwright | 浏览器爬取/XSS | 通过 npm 捆绑安装 | PenClaw 具备优雅降级功能 —— 如果缺少某个工具,它会跳过该扫描器并报告警告。 ## CLI 参考 ``` penclaw scan [options] Arguments: target Filesystem path(s) or URL(s) to scan Options: -o, --output Write report to file -f, --format Output format: markdown, json, sarif, html --dynamic Enable dynamic scanning (URL targets) --full Enable both static and dynamic scanning --ci CI mode with severity-based exit codes --fail-on Min severity to fail in CI (default: high) --provider AI provider: anthropic, openai, ollama --model AI model identifier --config Path to .penclaw.yml config file --insecure Disable TLS certificate verification during crawling (DANGEROUS) --allow-private Allow scanning private/internal/loopback hosts --auth-bearer Bearer token for authenticated dynamic scanning --auth-cookie Cookie header value for authenticated dynamic scanning --auth-bearer-b Second identity bearer token (enables two-identity IDOR confirmation) ``` ### 安全与身份验证标志 | 标志 | 描述 | |------|-------------| | `--insecure` | 在爬取过程中禁用 TLS 证书验证。**危险** — 可能会将凭证暴露给路径上的攻击者。默认情况下,证书验证为**开启**状态。注意:`--insecure` 目前仅影响基于浏览器的爬取;其他 HTTP 请求始终会验证 TLS。 | | `--allow-private` | 允许扫描私有 / 内部 / 回环主机。默认情况下 SSRF 防护为**开启**状态并会阻止这些主机。 | | `--auth-bearer ` | 用于经过身份验证的动态扫描的 Bearer token。 | | `--auth-cookie
` | 用于经过身份验证的动态扫描的 Cookie 标头值。 | | `--auth-bearer-b ` | 第二个身份的 Bearer token,用于启用双身份 IDOR 验证。 | ### 主动确认 PenClaw 不会仅凭怀疑就报告 JWT 和 IDOR 问题 —— 它会在将其报告为高/严重级别之前,**主动针对目标进行确认**: - **JWT `alg:none` / 过期 token** — 将伪造的 `alg:none` token 和任何过期的 token 重放到受保护的 endpoint。仅当服务器确实在拒绝了未经身份验证的请求的情况下,接受了伪造/过期的 token 时,该漏洞才会被提升级别(严重/高)。 - **IDOR** — 使用两个身份进行确认最为可靠:提供 `--auth-bearer` 和 `--auth-bearer-b`,当身份 B 可以读取身份 A 的资源时,PenClaw 即可确认 IDOR。如果只有一个身份,它只能标记可能的 IDOR,并建议您使用 `--auth-bearer-b` 重新运行。 无法确认的候选项将被标记为未确认,并在分类阶段予以抑制,而不会作为真实的漏洞报告。 ### CI 模式 ``` # 在发现高危及以上严重性结果时使构建失败 npx penclaw scan ./src --ci --fail-on high # Exit codes: # 0 = clean # 1 = 发现结果超过阈值 # 2 = critical findings ``` ## 配置 在您的项目根目录中创建 `.penclaw.yml`: ``` ai: provider: anthropic # anthropic | openai | ollama model: claude-sonnet-4-20250514 scan: static: true dynamic: false excludePaths: - node_modules/ - dist/ - "**/*.test.ts" skipDirectoryScan: false skipJwtTests: false maxConcurrentRequests: 10 requestDelayMs: 100 output: format: markdown path: ./report.md ``` AI 凭证将从环境变量中读取: - `ANTHROPIC_API_KEY` 用于 Claude - `OPENAI_API_KEY` 用于 GPT - Ollama 在本地运行(无需 key) ## 架构 ``` src/ ├── cli/ # Commander.js CLI entry point ├── config/ # cosmiconfig loader (.penclaw.yml) ├── profiler/ # Target profiling (filesystem + URL fingerprinting) ├── scanners/ # Static scanners (Trivy, Semgrep, secrets) ├── dynamic/ # Dynamic scanners (Nuclei, OWASP, directory, JWT) ├── crawl/ # Playwright browser crawler + API fuzzer ├── triage/ # AI-powered finding triage + PoC generation ├── reporters/ # Output formatters (MD, JSON, SARIF, HTML) ├── types/ # TypeScript interfaces └── utils/ # Shared utilities ``` ### 工作原理 1. **画像** — 检测目标类型(文件系统还是 URL),识别技术栈 2. **扫描** — 并行运行适用的扫描器 3. **分类** — AI 审查原始漏洞发现,生成 PoC,并提供修复建议 4. **关联** — 将静态漏洞发现与动态证据进行匹配 5. **报告** — 以选定格式输出可操作的报告 ## 示例 ### 扫描 Node.js 项目 ``` npx penclaw scan ./my-api --output security-report.md ``` ### 对在线应用进行全面渗透测试 ``` npx penclaw scan https://staging.myapp.com --full --format html -o pentest.html ``` ### CI pipeline(GitHub Actions) ``` - name: Security scan run: npx penclaw scan ./src --ci --fail-on high --format sarif -o results.sarif - name: Upload SARIF uses: github/codeql-action/upload-sarif@v3 with: sarif_file: results.sarif ``` ## 路线图 - [x] **阶段 1** — 静态分析 + AI 分类 MVP - [x] **阶段 2** — 动态测试(Nuclei、Playwright、API fuzzing、OWASP) - [x] **阶段 2.5** — 达到真实世界渗透测试同等水平(payload 包、盲注 SQLi、JWT 攻击、目录爆破) - [ ] **阶段 3** — GitHub Action (`uses: penclaw/scan@v1`) - [ ] **阶段 4** — 负日(0-day)依赖项监控 - [ ] **阶段 5** — SaaS 仪表盘 ## 许可证 MIT ## 贡献 欢迎提交 PR。提交前请运行 `npm test`。 ``` npm install npm run build npm test ``` 由 [Andrei Petcu](https://github.com/andupetcu) 和 [Kai](https://github.com/andupetcu/penclaw) 构建 ⚡
标签:AI风险缓解, CISA项目, MITM代理, StruQ, 人工智能, 代码生成, 动态扫描, 渗透测试工具, 特征检测, 用户模式Hook绕过, 聊天机器人, 自动化攻击, 错误基检测, 静态代码分析