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检测, 加密, 应用程序安全, 异步任务处理, 提示词优化, 测试用例, 漏洞扫描器, 盲注攻击, 逆向工具, 错误基检测, 静态代码分析