lionking16/VulnerabilityScanner
GitHub: lionking16/VulnerabilityScanner
基于 FastAPI 构建的源代码与依赖漏洞扫描服务,支持 CVSS 评分及多格式报告导出。
Stars: 0 | Forks: 0
# 漏洞扫描器
一个全面的 Python FastAPI 服务,用于扫描源代码和依赖项中的 CWE (Common Weakness Enumeration) 漏洞,并提供 CVSS (Common Vulnerability Scoring System) 评分。
## 功能特性
- **源代码分析**:检测代码中的 CWE 漏洞
- **依赖扫描**:检查依赖项是否存在已知漏洞
- **CVSS 评分**:自动计算 CVSS v3.1 分数
- **综合报告**:生成 JSON/HTML 格式的详细漏洞报告
- **风险评估**:自动化风险分析和修复建议
- **RESTful API**:易于与其他工具集成
- **后台处理**:支持实时状态更新的异步扫描处理
- **数据库持久化**:使用 PostgreSQL 存储扫描和漏洞数据
## 支持的漏洞 (CWE)
- **CWE-89**: SQL 注入
- **CWE-79**: 跨站脚本攻击 (XSS)
- **CWE-78**: 操作系统命令注入
- **CWE-306**: 关键功能缺失认证
- **CWE-434**: 无限制文件上传
- **CWE-502**: 不可信数据反序列化
- **CWE-611**: XML 外部实体注入 (XXE)
- **CWE-352**: 跨站请求伪造 (CSRF)
- **CWE-770**: 资源消耗不受控制
- 以及更多...
## 技术栈
- **框架**: FastAPI
- **服务器**: Uvicorn
- **数据库**: PostgreSQL 配合 SQLAlchemy ORM
- **CVSS**: 自定义 CVSS v3.1 计算器
- **扫描**: 基于模式的 CWE 检测
- **异步**: Celery 用于后台任务(可选)
- **测试**: Pytest
## 安装说明
### 前置条件
- Python 3.10+
- PostgreSQL 13+
- pip 或 pipenv
### 设置
1. **克隆仓库**
cd VulnerabilityScanner
2. **创建虚拟环境**
python -m venv venv
source venv/bin/activate # 在 Windows 上: venv\Scripts\activate
3. **安装依赖**
pip install -r requirements.txt
4. **配置数据库**
创建 `.env` 文件:
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/vulnerability_scanner
LOG_LEVEL=INFO
5. **初始化数据库**
python -c "from app.database.database import create_tables; create_tables()"
6. **运行服务**
python run.py
API 将在 `http://localhost:8000` 上可用
## API 文档
### 交互式 API 文档
- **Swagger UI**: [http://localhost:8000/docs](http://localhost:8000/docs)
- **ReDoc**: [http://localhost:8000/redoc](http://localhost:8000/redoc)
### API 端点
#### 扫描器端点
**POST** `/api/v1/scanner/scan-code`
- 扫描源代码中的 CWE 漏洞
- 请求体:
{
"name": "Django App Scan",
"scan_type": "code",
"file_path": "/path/to/source/code.py",
"include_dependencies": true
}
**POST** `/api/v1/scanner/scan-dependencies`
- 扫描依赖文件以查找易受攻击的包
- 请求体:
{
"name": "Requirements Scan",
"scan_type": "dependency",
"file_path": "/path/to/requirements.txt"
}
**GET** `/api/v1/scanner/scan/{scan_id}`
- 获取扫描状态和摘要
- 响应:
{
"id": "uuid",
"name": "Django App Scan",
"status": "completed",
"total_vulnerabilities": 5,
"critical_count": 1,
"high_count": 2,
"medium_count": 2,
"low_count": 0,
"overall_cvss_score": 7.8
}
**GET** `/api/v1/scanner/scan/{scan_id}/vulnerabilities`
- 获取某次扫描的所有漏洞
#### 报告端点
**POST** `/api/v1/reports/scan/{scan_id}/report`
- 生成综合漏洞报告
**GET** `/api/v1/reports/scan/{scan_id}/report/{report_id}?format=json|html`
- 检索生成的 JSON 或 HTML 格式报告
**GET** `/api/v1/reports/scan/{scan_id}/summary`
- 获取扫描结果的快速摘要
## 使用示例
### 使用 curl
1. **发起代码扫描**
curl -X POST http://localhost:8000/api/v1/scanner/scan-code \
-H "Content-Type: application/json" \
-d '{
"name": "My App Scan",
"scan_type": "code",
"file_path": "/path/to/app.py"
}'
2. **检查扫描状态**
curl http://localhost:8000/api/v1/scanner/scan/{scan_id}
3. **生成报告**
curl -X POST http://localhost:8000/api/v1/reports/scan/{scan_id}/report
4. **下载 HTML 报告**
curl http://localhost:8000/api/v1/reports/scan/{scan_id}/report/{report_id}?format=html > report.html
### 使用 Python
```
import requests
# 扫描代码
response = requests.post(
"http://localhost:8000/api/v1/scanner/scan-code",
json={
"name": "Python App Scan",
"scan_type": "code",
"file_path": "/path/to/app.py"
}
)
scan_id = response.json()["id"]
# 获取扫描状态
status = requests.get(
f"http://localhost:8000/api/v1/scanner/scan/{scan_id}"
).json()
print(f"Status: {status['status']}")
print(f"Vulnerabilities: {status['total_vulnerabilities']}")
```
## 项目结构
```
VulnerabilityScanner/
├── app/
│ ├── api/ # API endpoints
│ │ ├── scanner.py # Code/dependency scanning routes
│ │ └── reports.py # Report generation routes
│ ├── models/ # SQLAlchemy ORM models
│ │ └── models.py # Scan, Vulnerability, Report models
│ ├── scanners/ # Scanning engines
│ │ ├── cwe_detector.py # CWE pattern detection
│ │ ├── dependency_scanner.py # Dependency vulnerability checker
│ │ └── cvss_calculator.py # CVSS scoring engine
│ ├── database/
│ │ └── database.py # Database configuration
│ ├── main.py # FastAPI app initialization
│ └── schemas.py # Pydantic request/response models
├── tests/ # Test suite
├── run.py # Application entry point
├── requirements.txt # Python dependencies
├── .env # Environment configuration
└── README.md # This file
```
## 安全扫描
### 支持的代码分析
- **Python**: SQL 注入、XSS、命令注入、不安全的反序列化
- **JavaScript/TypeScript**: 基于 DOM 的 XSS、原型污染
- **Java**: 危险的反序列化、SQL 注入
- **PHP**: SQL 注入、命令注入、文件包含
- **SQL**: 注入模式
### 支持的依赖格式
- `requirements.txt` (Python)
- `package.json` + `package-lock.json` (Node.js)
- `Pipfile` (Python/Pipenv)
- `pom.xml` (Java/Maven)
- `build.gradle` (Java/Gradle)
## CVSS 评分
服务基于以下因素计算 CVSS v3.1 分数:
- **攻击矢量**: 网络、相邻、本地、物理
- **攻击复杂度**: 低、高
- **所需权限**: 无、低、高
- **用户交互**: 无、需要
- **范围**: 不变、改变
- **机密性影响**: 无、低、高
- **完整性影响**: 无、低、高
- **可用性影响**: 无、低、高
严重性等级:
- **严重**: 9.0 - 10.0
- **高危**: 7.0 - 8.9
- **中危**: 4.0 - 6.9
- **低危**: 0.1 - 3.9
- **无**: 0.0
## 开发
### 运行测试
```
pytest tests/ -v --cov=app
```
### 代码质量
```
black .
flake8 app/
```
### API 文档
自动生成的 Swagger 文档可在 `/docs` 获取
## 数据库
### 迁移
```
alembic init migrations
alembic revision --autogenerate -m "Initial schema"
alembic upgrade head
```
### 支持的数据库
- PostgreSQL (推荐)
- SQLite (开发)
- MySQL (使用 SQLAlchemy 方言)
## 性能
- 使用后台任务进行异步扫描处理
- 漏洞数据库缓存
- 索引数据库查询以实现快速查找
- 大结果集分页
## 路线图
- [ ] 与 OWASP Top 10 集成
- [ ] 基于机器学习的误报检测
- [ ] 针对组织特定 CWE 的自定义规则引擎
- [ ] SBOM (软件物料清单) 生成
- [ ] API 密钥和认证
- [ ] 扫描调度和报告
- [ ] 与 GitHub/GitLab 集成
- [ ] Docker 容器化
- [ ] Kubernetes 部署
## 许可证
MIT
## 支持
如有问题、疑问或贡献,请在 GitHub 上提出 issue。
## 参考资料
- [CWE 列表](https://cwe.mitre.org/)
- [CVSS 计算器](https://www.first.org/cvss/calculator/3.1)
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [FastAPI 文档](https://fastapi.tiangolo.com/)
标签:AV绕过, CISA项目, CVSS评分, CWE漏洞, FastAPI, OWASP Top 10, PostgreSQL, Python安全工具, RESTful API, SAST, SQL注入检测, XSS检测, 加密, 应用程序安全, 异步任务处理, 提示词优化, 测试用例, 漏洞扫描器, 盲注攻击, 逆向工具, 错误基检测, 静态代码分析