Jitesh17/secscan

GitHub: Jitesh17/secscan

整合十余款主流安全工具的自动化 Web 安全扫描编排框架,支持多格式报告输出和 AI 增强的漏洞修复建议。

Stars: 0 | Forks: 0

# secscan [![PyPI version](https://img.shields.io/pypi/v/secscan-tool.svg)](https://pypi.org/project/secscan-tool/) [![Python versions](https://img.shields.io/pypi/pyversions/secscan-tool.svg)](https://pypi.org/project/secscan-tool/) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) 自动化 Web 安全扫描工具。针对目标运行可配置的一系列扫描,在运行存在风险的项目前会向您发出警告,并生成 HTML、Markdown 和 JSON 报告。 ![secscan 仪表板](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/00a89de51e041709.png) ## 快速开始 PyPI 包名为 `secscan-tool`;它安装的 CLI 命令是 `secscan`。 在 macOS 或任何 PEP-668 系统上,请使用 [pipx](https://pipx.pypa.io/) 安装,以便 CLI 是独立隔离的并且在 `PATH` 中: ``` brew install pipx pipx ensurepath pipx install secscan-tool ``` 在没有 pipx 的 Linux 系统上,用户级别的 `pip install` 也可以使用: ``` python3 -m pip install --user secscan-tool ``` 验证安装: ``` secscan --version secscan list-scanners ``` 运行一次安全扫描: ``` secscan scan https://example.com ``` 报告将以 HTML、Markdown 和 JSON 格式存放在 `./reports/-/` 目录中。 端口 8765 上的实时仪表板: ``` secscan serve # 打开 http://localhost:8765 ``` AI 定制的修复建议(可选)。在扫描前设置 `ANTHROPIC_API_KEY`: ``` export ANTHROPIC_API_KEY=sk-ant-... secscan scan https://example.com --repo . ``` ## 外部工具 大多数扫描器会调用外部二进制程序。上述 Python 安装仅为您提供 `headers` 和 `tls` 扫描。对于其他所有扫描,您需要安装该扫描器所使用的外部工具: ``` # macOS (Homebrew) brew install nuclei nmap subfinder httpx trivy gitleaks ffuf semgrep docker pull zaproxy/zap-stable # for zap-baseline / zap-full # Debian / Ubuntu sudo apt-get install -y nmap # 通过其官方发布版本安装 nuclei, subfinder, httpx, trivy, gitleaks sudo apt-get install -y python3-pip && pip install --user semgrep docker pull zaproxy/zap-stable ``` 或者完全跳过主机安装,直接使用 [Docker 镜像](#docker),该镜像捆绑了 `secscan` 以及 `nuclei`、`nmap`、`subfinder`、`httpx`、`trivy`、`semgrep` 和 `gitleaks`(不包含 ZAP 和 `ffuf`;如果需要 ZAP,请单独拉取 `zaproxy/zap-stable`)。 `secscan list-scanners` 会打印出每个扫描器、其风险级别以及它所依赖的外部工具。如果某个扫描器所需的工具不在 `PATH` 中,secscan 将跳过该扫描器并在报告中注明。 ## Docker 项目包含了一个 `Dockerfile` 和 `docker-compose.yml` 用于自行托管仪表板。该镜像捆绑了 `secscan` 以及 `nuclei`、`nmap`、`subfinder`、`httpx`、`trivy`、`semgrep` 和 `gitleaks`。不包含 ZAP 和 `ffuf`(它们会显著增加镜像体积);如果您需要这些扫描器,请在主机上安装它们。 使用 compose 的快速启动: ``` git clone https://github.com/Jitesh17/secscan.git cd secscan export ANTHROPIC_API_KEY=sk-ant-... # optional, for AI-tailored fixes docker compose up -d ``` 打开 `http://localhost:8765`。报告将写入主机的 `./reports/` 目录(挂载到容器内的 `/app/reports`)。使用 `docker compose down` 停止。 不使用 compose: ``` docker build -t secscan:latest . docker run -d --name secscan -p 8765:8765 \ -v "$PWD/reports:/app/reports" \ -e ANTHROPIC_API_KEY="$ANTHROPIC_API_KEY" \ secscan:latest ``` 注意事项: - 镜像在 `linux/arm64` 上大约为 1.5 GB。大部分体积来自 `nuclei` 以及 `semgrep` 嵌入的 Rust 二进制文件。 - 工具版本通过 Dockerfile 的 `ARG`(`NUCLEI_VERSION`、`SUBFINDER_VERSION`、`HTTPX_VERSION`、`TRIVY_VERSION`、`GITLEAKS_VERSION`)进行固定。可以在构建时使用 `--build-arg` 进行覆盖。 - 容器以 root 身份运行,以便 `nmap` 能够执行 SYN 扫描。不要将端口 8765 暴露给不受信任的网络。 - 在容器内部进行一次性扫描:`docker compose exec dashboard secscan scan https://example.com`。 ## 功能说明 | 扫描器 | 风险 | 使用的工具 | |---|---|---| | 安全请求头 | 安全 | requests | | TLS / SSL | 安全 | sslyze | | 子域名枚举 | 安全 | subfinder | | 存活主机探测 | 安全 | httpx | | 端口和服务扫描 | 安全 | nmap | | 激进端口扫描 | 中 | nmap | | 漏洞模板 | 低 | nuclei | | 爬虫 + 被动扫描 | 低 | OWASP ZAP baseline | | 主动 Web 攻击 | 中 | OWASP ZAP full scan | | 内容发现 | 中 | ffuf | | 代码漏洞扫描 | 安全 | semgrep | | 依赖项扫描 | 安全 | trivy | | 密钥扫描 | 安全 | gitleaks | 该工具拒绝在没有明确使用 `--i-accept-risk` 标志的情况下运行中等风险的扫描,并且会首先打印出可能造成的破坏估计。 ## 从源码安装(用于开发) 如果您想对 secscan 本身进行修改开发,请在克隆后以可编辑模式安装: ``` git clone https://github.com/Jitesh17/secscan.git cd secscan python3 -m venv .venv .venv/bin/pip install -e . .venv/bin/secscan --help ``` 内置的 `./install.sh` 脚本会检查外部工具,并针对缺失的工具打印安装提示。 ## 使用说明 ### CLI 列出可用的扫描器以及哪些可以在您的机器上运行: ``` secscan list-scanners ``` 快速安全扫描(默认运行所有评级为 `safe` 的扫描器): ``` secscan scan https://example.com ``` 按名称选择特定的扫描器: ``` secscan scan https://example.com --scans headers,tls,nuclei,zap-baseline ``` 通过指向本地代码库来包含源代码扫描(启用 `code-trivy`、`code-semgrep`、`code-gitleaks`): ``` secscan scan https://example.com --repo /path/to/repo ``` 使用配置文件(即命名的扫描器组合): ``` secscan scan https://example.com --profile safe # default secscan scan https://example.com --profile code --repo . secscan scan https://example.com --profile full --i-accept-risk ``` `safe`、`default`、`code` 和 `full` 是内置的配置文件。`--profile full` 包含中等风险的扫描,并且需要 `--i-accept-risk`。 其他有用的标志: - `--allow-ip` 允许扫描 IP 地址目标(默认关闭,以防您意外扫描到非自己所有的基础设施) - `--workers N` 指定并行运行的扫描器数量(默认为 4) - `--rate-limit N` 设定 nuclei 的每秒最大请求数限制 - `--severity LEVEL` nuclei 严重程度过滤器(`info`、`low`、`medium`、`high`、`critical`) - `-o, --output DIR` 将报告写入到 `./reports/` 以外的目录 - `--no-enrich` 完全跳过修复建议增强 - `--no-ai` 仅使用静态修复数据库;不调用 Claude - `--no-code` 将发现的漏洞元数据发送给 AI,但不发送代码/配置片段(更具隐私性) - `--max-ai-findings N` 限制发送给 Claude 的漏洞发现数量(默认为 50) `secscan scan --help` 列出了所有标志。 报告将以 `report.html`、`report.md` 和 `report.json` 的形式写入 `./reports/-/` 目录中。 ### Web 仪表板 ``` secscan serve # binds 127.0.0.1:8765 secscan serve --host 0.0.0.0 --port 8765 # bind on all interfaces (Docker/LAN) ``` 打开 `http://localhost:8765`,输入目标,选择扫描,点击运行。实时监控扫描进度并在完成后内嵌渲染报告。历史报告列在右侧面板中,可重新打开查看。 该仪表板没有身份验证且是单租户的。不要将其暴露给不受信任的网络;如果需要从 localhost 以外的地方访问,请将其置于反向代理或 VPN 之后。 ### 修复建议增强 每一条漏洞发现都会通过两个层级获得增强的修复建议: **层级 1:静态精选数据库(始终开启,免费)。** 一个针对常见发现的手写修复数据库。包括*操作步骤*、*重要性说明*以及代码/配置示例。涵盖 HSTS、CSP、缺失的请求头、已弃用的 TLS、暴露的服务、默认凭据、泄露的密钥等。 **层级 2:AI 定制的修复建议(可选)。** 当设置了 `ANTHROPIC_API_KEY` 时,secscan 会将每条发现发送给 Claude 并返回结合上下文的修复方案。对于代码扫描发现,它还会发送相关的代码片段,以便 AI 能为您提供精确的行级编辑建议。对于请求头相关的发现,它会发送您的 `_headers`/`vercel.json`/`astro.config.*` 文件,以便 AI 能准确告诉您该添加什么以及添加到哪里。 ``` export ANTHROPIC_API_KEY=sk-ant-... secscan scan https://example.com --repo . ``` 标志: - `--no-enrich` 完全禁用增强功能 - `--no-ai` 仅使用静态数据库(跳过 API 调用) - `--no-code` 仅将元数据发送给 AI,不发送代码或配置片段(更具隐私性,但建议不够具体) - `--max-ai-findings N` 限制发送给 AI 的漏洞发现数量(默认为 50,用于控制成本) 成本估算:使用 Sonnet 每发现一个漏洞大约花费 $0.002 到 $0.01,因此一次典型的扫描只需几美分。结果会根据漏洞哈希值进行缓存,因此重新扫描同一目标时会重用缓存的修复建议。 ### GitHub Actions 将 `.github/workflows/security-scan.yml` 复制到您的代码库中。将目标配置为代码库变量。该工作流每周及按需运行,将报告作为构件上传,并在出现新的高危或严重发现时以 Issue 的形式发布摘要。 ## 安全性 在没有明确确认的情况下,该工具不会运行任何中等风险或以上的操作。默认情况下: - 仅以温和的速率限制进行扫描 - 除非您传递 `--allow-ip`,否则拒绝扫描 IP 地址(强制您思考其是否为您所有) - 除非您选择退出,否则基于爬虫的扫描将遵循 `robots.txt` 在更改任何安全标志之前,请仔细阅读每个扫描器的风险说明。
标签:AI修复建议, CTI, Docker安全, FFUF, Gitleaks, Google, HTML报告, HTTP头检测, JSON报告, Markdown报告, MISP, MIT开源, Nmap, Nuclei, pipx, Python, Semgrep, TLS检查, Web安全扫描器, WordPress安全扫描, 安全合规, 实时仪表盘, 密码管理, 密钥泄露检测, 插件系统, 无后门, 网络代理, 网络安全, 虚拟驱动器, 请求拦截, 逆向工具, 隐私保护