内容
# 应用安全哨兵
一体化应用安全工具:SAST、SCA、机密检测、SBOM、代码质量、AI 代码修复、Claude Desktop MCP 集成(具备 POC 利用能力)、攻击链分析、CLI/Web/CICD 模式、报告
> 📖 **开源** - 在 MIT 许可下许可。免费用于个人和商业用途。
## 功能
- **多扫描器引擎** - Semgrep(SAST)、Gitleaks(机密检测)、Trivy(依赖项)+ 代码质量检查工具
- **代码质量扫描** - ESLint、Pylint、Checkstyle、golangci-lint、RuboCop,附带捆绑配置(无需项目设置)
- **自动修复** - 使用 OpenAI/Claude/Bedrock(可选)创建带有 LLM 生成的代码修复的 GitHub PR
- **跨文件分析** - 跨多个文件和语言跟踪攻击链
- **灵活的 AI 提供商** - OpenAI(默认)、Claude 或 AWS Bedrock
- **10+ 语言** - JavaScript、TypeScript、Python、Java、Go、Ruby、Rust、C#、PHP、Swift、Kotlin
- **3 种部署模式** - Web UI、CLI 和 GitHub Actions CI/CD
- **MCP 服务器** - 用于 Claude Desktop 的 Model Context Protocol 集成
- **合规性** - 自动 SBOM 生成(CycloneDX & SPDX)
## 快速入门
有关超级快速设置指南,请参阅 [QUICKSTART.md](QUICKSTART.md)。
### 开箱即用
**安全扫描**:
- Semgrep(SAST)- 通过 pip 包含
- Gitleaks(机密检测)- 需要安装(参见 QUICKSTART)
- Trivy(依赖项)- 需要安装(参见 QUICKSTART)
**代码质量扫描是可选的** - 安装您需要的:
- ESLint(JavaScript/TypeScript)- `npm install -g eslint`
- Pylint(Python)- 如果丢失,则自动安装
- Checkstyle、golangci-lint、RuboCop、Clippy、PHPStan - 根据需要安装
> 💡 **跳过代码质量?** 只需忽略“⚠️ 未安装”的警告 - 安全扫描仍然完美运行!
### 先决条件
在 `.env` 中配置 LLM 提供商(仅适用于自动修复功能):
- **OpenAI**:`OPENAI_API_KEY`、`AI_PROVIDER=openai`、`AI_MODEL=gpt-4o-mini`
- **Claude**:`CLAUDE_API_KEY`、`AI_PROVIDER=claude`、`AI_MODEL=claude-sonnet-4-20250514`
- **Gemini**:`GEMINI_API_KEY`、`AI_PROVIDER=gemini`、`AI_MODEL=gemini-1.5-flash`
- **AWS Bedrock**:`AWS_ACCESS_KEY_ID`、`AWS_SECRET_ACCESS_KEY`、`AWS_REGION`、`INFERENCE_PROFILE_ID`、`AI_PROVIDER=aws_bedrock`(参见 env.example 获取所有选项)
### Web 界面
```bash
./start_web.sh
# → 打开 http://localhost:8000
```
**功能**:
- 通过复选框选择工具(Semgrep、Trivy、Gitleaks、代码质量、SBOM)
- 具有高层总结的视觉报告
- 下载 SBOM 文件(CycloneDX & SPDX)
<img width="1088" height="674" alt="Screenshot 2025-11-05 at 10 06 36 AM" src="https://github.com/user-attachments/assets/60c9c173-4df9-4573-b7db-bbb8745d8968" />
### CLI 模式
```bash
./start_cli.sh
# → 带有工具选择、严重性级别和自动修复选项的交互式菜单
```
**功能**:
- 选择要运行的工具(SAST、机密检测、依赖项、代码质量、SBOM)
- 选择扫描级别(关键-高或全部)
- 配置自动修复模式
<img width="821" height="264" alt="Screenshot 2025-11-05 at 10 08 44 AM" src="https://github.com/user-attachments/assets/24533bc6-fe76-4064-a00f-9be0411345e4" />
### CI/CD 集成
```bash
# 复制工作流模板
cp projects/security-scan.yml .github/workflows/
# 添加 GitHub 机密:
# - OPENAI_API_KEY(或 CLAUDE_API_KEY,或 AWS 凭证)
git add .github/workflows/security-scan.yml
git commit -m "添加 AppSec-Sentinel 安全扫描"
git push
```
## 工作原理
1. **扫描** - 并行运行 3 个扫描器(SAST、机密检测、依赖项)
2. **分析** - 跨文件 AST 分析使用图遍历识别跨文件的攻击链
3. **修复** - LLM 生成修复并为代码和依赖项创建单独的 PR(需要 API 密钥)
4. **报告** - HTML 报告 + SBOM 文件(CycloneDX & SPDX)
<img width="252" height="119" alt="Screenshot 2025-11-05 at 10 16 50 AM" src="https://github.com/user-attachments/assets/0ca6a638-b6a1-49dc-8402-52b8642c1650" />
### MCP 集成
将 Claude Desktop 变成对话式安全专家 - 通过自然语言扫描、分析和自动修复。
**设置:** 添加到 Claude Desktop 配置:
- macOS:`~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows:`%APPDATA%/Claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"appsec-sentinel": {
"command": "/path/to/appsec-sentinel/.venv/bin/python",
"args": ["/path/to/appsec-sentinel/mcp/appsec_mcp_server.py"],
"cwd": "/path/to/appsec-sentinel",
"env": {
"PATH": "/usr/local/bin:/usr/bin:/bin:/opt/homebrew/bin",
"PYTHONPATH": "/path/to/appsec-sentinel/src"
}
}
}
}
```
> 💡 `mcp/mcp_env` 中的凭证
**14 个 MCP 工具可用:**
- **核心:** `scan_repository` • `auto_remediate` • `get_report` • `view_report_html` • `health_check`
- **分析:** `cross_file_analysis` • `assess_business_impact` • `generate_sbom`
- **API 工具:** `get_scan_findings` • `get_semgrep_findings` • `get_trivy_findings` • `get_gitleaks_findings` • `get_code_quality_findings` • `get_sbom_data`
**用法:** “扫描 <插入仓库名称> 以查找漏洞” → 带有文件路径、行号、修复的详细发现
[完整的 MCP 设置指南 →](mcp/README.md)
<img width="748" height="356" alt="Screenshot 2025-11-05 at 10 13 04 AM" src="https://github.com/user-attachments/assets/5521fc39-08a1-4a6b-a674-f63df50668ad" />
## 自动修复模式
- **模式 1**:SAST + 机密检测(1 个 PR)
- **模式 2**:仅依赖项(1 个 PR)
- **模式 3**:两者(2 个单独的 PR)- 推荐
- **模式 4**:仅扫描(无 PR)
<img width="827" height="162" alt="Screenshot 2025-11-05 at 10 12 13 AM" src="https://github.com/user-attachments/assets/f8754320-5342-46fc-8492-8c8789417bc0" />
## 跨文件分析
跟踪多个文件和语言的攻击路径:
- **多语言 AST** - 真正的代码理解(不是正则表达式)
- **数据流跟踪** - 入口点 → 攻击路径 → 敏感汇聚点
- **框架感知** - Express、Spring、Django、Rails、Laravel、ASP.NET
<img width="1064" height="234" alt="Screenshot 2025-11-05 at 10 19 58 AM" src="https://github.com/user-attachments/assets/3bec2886-8000-49ad-a805-b9e27d3cbfb0" />
参见 [架构图 →](ARCHITECTURE.md)
## 代码质量扫描
AppSec-Sentinel 包含的代码质量扫描适用于任何仓库,无需配置。
**支持的语言:**
- ✅ **JavaScript/TypeScript** - ESLint(自动检测 v8 与 v9,使用捆绑配置)
- ✅ **Python** - Pylint(自动安装到虚拟环境)
- ✅ **Java** - Checkstyle(所有模式下完全集成)
- ✅ **Go** - golangci-lint(所有模式下完全集成)
- ✅ **Ruby** - RuboCop(所有模式下完全集成)
- ✅ **Rust** - Clippy(官方 Rust 检测工具,600+ 检查)
- ✅ **PHP** - PHPStan(无需运行代码的静态分析)
- 🔜 **C#** - 即将推出(Roslyn 分析工具)
- 🔜 **Swift** - 即将推出(用于 iOS/macOS 的 SwiftLint)
- 🔜 **Kotlin** - 即将推出(用于 Android/JVM 的 ktlint/detekt)
**工作原理:**
1. 通过扫描文件扩展名自动检测语言
2. 检查仓库配置(.eslintrc.json 等)
3. 如果仓库没有配置,则使用捆绑配置
4. 与安全扫描器并行运行(无性能损失)
**示例:**
```bash
📊 检测到的语言:javascript, python
🔍 开始扫描(3 个安全扫描器 + 2 个代码质量扫描器)...
📋 仓库中没有 ESLint 配置 - 使用默认配置
✅ ESLint(代码质量):106 个代码质量问题
✅ Pylint(代码质量):23 个代码质量问题
🎯 扫描完成:119 个安全问题 + 129 个代码质量问题
```
<img width="1117" height="350" alt="Screenshot 2025-11-05 at 10 21 13 AM" src="https://github.com/user-attachments/assets/30ebc957-59d0-4332-84eb-6d8f1388d34a" />
---
## 可选:安装代码质量检测工具
**想要代码质量扫描?** 为您的语言安装检测工具:
```bash
# JavaScript/TypeScript
npm install -g eslint
# Python(如果缺少则自动安装)
pip install pylint
# Java
brew install checkstyle # macOS
# 或从 https://checkstyle.org/ 下载
# Go
brew install golangci-lint # macOS
# 或:curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh
# Ruby
gem install rubocop
# Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # 包括 clippy
# PHP
composer global require phpstan/phpstan
```
---
## 配置
编辑 `.env` 文件:
```bash
# 工具选择(仅 CLI/Web - CI/CD 始终运行所有工具)
APPSEC_TOOLS=all # 'all' 或逗号分隔:semgrep,trivy,gitleaks,code_quality,sbom
# 示例:
# all - 运行所有工具(默认)
# semgrep,gitleaks - 仅 SAST + 机密检测
# trivy - 仅依赖项扫描
# 代码质量扫描(默认启用,如果未安装检测工具则优雅跳过)
APPSEC_CODE_QUALITY=true
# 扫描级别(仅影响安全发现)
APPSEC_SCAN_LEVEL=critical-high # 或 'all'
# AI 确定性
APPSEC_AI_TEMPERATURE=0.0
# 自动修复设置
APPSEC_AUTO_FIX=true
APPSEC_AUTO_FIX_MODE=3 # 1=SAST, 2=依赖项, 3=两者, 4=仅扫描
```
**捆绑配置**:
- `configs/eslint.config.js` / `eslintrc.v8.json` - JavaScript/TypeScript
- `configs/checkstyle.xml` - Java
- `configs/golangci.yml` - Go
- `configs/rubocop.yml` - Ruby
- `configs/clippy.toml` - Rust
- `configs/phpstan.neon` - PHP
- `configs/.gitleaks.toml` - 机密检测
## 文档
- **[MCP 设置](mcp/README.md)** - Model Context Protocol 集成
- **[架构](ARCHITECTURE.md)** - 系统架构和设计模式
## 常见问题
**问:LLM 生成的代码是否安全合并?**
答:所有修复都需要通过 PR 手动审查。我们使用确定性 LLM 设置(temperature=0.0),并且只修复已证明的模式(SQL 注入、XSS、硬编码机密)。您现有的测试验证更改。代码和依赖项的单独 PR 将风险降至最低。约 80% 的修复在快速审查后即可投入生产。
**问:哪些数据会发送到 LLM 提供商?**
答:仅限漏洞元数据(文件路径、行号、漏洞类型、代码片段)。**绝不会** 发送您的完整代码库。机密会在本地标记并 **绝不会** 发送到 LLM。您可以控制哪些发现触发 LLM 分析。注意:扫描和跨文件分析 **100% 在本地运行**,无需任何 API 调用。
**问:我应该使用哪种模式?**
- **GitHub Actions** - CI/CD 中的自动化安全(每次扫描每个 PR)
- **Web UI** - 团队和管理层的视觉报告
- **CLI** - 安全顾问的深入分析
- **MCP** - 与 Claude Desktop 的对话式安全
所有模式都使用相同的扫描引擎。根据您的工作流选择。
**问:我需要为代码质量安装检测工具吗?**
答:不需要 - 安全扫描无需任何检测工具即可工作。代码质量是**可选的**,如果未安装检测工具,则会优雅跳过。安装检测工具(ESLint、Pylint 等)仅当您想要代码气味检测时。设置 `APPSEC_CODE_QUALITY=false` 以完全禁用。
**问:这与其他安全扫描器有何不同?**
答:**跨文件攻击链检测** - 我们使用 AST 分析和图遍历跟踪多个文件和语言的漏洞,而不仅仅是单个文件的模式匹配。加上可选的 LLM 生成的修复和零配置 SBOM 生成。
**问:外部依赖是否锁定以确保稳定性?**
答:是的。所有外部依赖都使用锁定版本和 SRI 完整性哈希来防止破坏性更改:
- **Python 包**:在 `requirements.txt` 中固定
- **备用 CDN**:多个来源以确保弹性
- **版本检测**:自动适应不同主要版本之间的 API 更改
参见 [DEPENDENCIES.md](DEPENDENCIES.md) 获取升级程序和适用于隔离部署的取货选项。
## 开发
```bash
# 运行测试
pytest tests/test_appsec.py -v
```
## 故障排除
```bash
# 权限问题
chmod +x start_web.sh start_cli.sh
# 依赖冲突
rm -rf .venv && python -m venv .venv
source .venv/bin/activate && pip install -r requirements.txt
# 启用调试日志记录
export APPSEC_DEBUG=true
export APPSEC_LOG_LEVEL=DEBUG
```
## 贡献
欢迎贡献!请随时提交拉取请求。
## 许可证
该项目在 MIT 许可证下获得许可 - 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。