DeepakNarayananS/Automated-Python-Security-Audit
GitHub: DeepakNarayananS/Automated-Python-Security-Audit
一款企业级Python安全审计工具,整合漏洞扫描、依赖分析与SBOM生成,支持单环境和多项目批量扫描并生成可视化报告。
Stars: 0 | Forks: 0
# 🔒 Python 安全审计工具 - 企业版 v4.0
[](https://www.python.org/downloads/)
[](https://www.sonarqube.org/)
[](https://bandit.readthedocs.io/)
[](LICENSE)
[]()
一款全面的企业级 Python 安全审计工具,支持**双重扫描模式**:扫描单个环境或同时扫描文件夹中的所有 Python 项目。生成精美的 HTML 报告,非常适合向 CISO 进行汇报展示。
## ✨ 核心功能
### 🎯 双重扫描模式
- **单项目模式** - 扫描当前 Python 环境(全局环境或 venv)
- **多项目模式** - 同时扫描文件夹中的所有项目
- 自动项目发现(检测 venv、requirements.txt、Python 文件)
- 跨多个项目的合并报告
### 🛡️ 全面安全分析
- **漏洞检测** - 使用 `pip-audit` 进行全面的 CVE 检测
- **完整包分析** - 分析所有已安装的包(通常为 70-300+)
- **依赖树可视化** - 完整的依赖关系映射
- **生成 SBOM** - CycloneDX 格式的软件物料清单 (SBOM)
- **智能静态代码分析** - Bandit 安全扫描,具备智能严重性过滤功能
### 📈 精美报告
- **专业 HTML 报告** - 适合 CISO 汇报的展示格式
- **完整数据展示** - 通过可滚动的表格展示所有包、漏洞和过时的包
- **风险评估** - 自动计算风险等级(低/中/高/严重)
- **项目优先级排序** - 识别需要立即关注的高风险项目
- **丰富的控制台输出** - 带颜色且易于阅读的终端界面
### ⚡ 企业级就绪
- 执行速度快,具备超时保护
- 为自动化提供全面的 JSON 报告
- 符合 SonarQube 标准(0 个 bug,0 个代码异味)
- 兼容 Windows
- 完美适合 CI/CD 集成
## 🚀 快速入门(只需 2 分钟!)
### 第一步:安装依赖
```
cd Python_Security
pip install -r requirements.txt
```
### 第二步:运行你的第一次扫描
#### 选项 A:单项目模式(扫描当前环境)
```
python python_security.py
```
#### 选项 B:多项目模式(扫描所有项目)
```
python python_security.py --multi-project c:\path\to\projects
# 或简写形式
python python_security.py -m c:\path\to\projects
```
### 第三步:查看报告
1. 打开 `python_security_audit_output/` 文件夹
2. 找到 HTML 报告:
- 单项目模式:`security_audit_report_[timestamp].html`
- 多项目模式:`multi_project_security_audit_[timestamp].html`
3. 在浏览器中打开它
4. 向你的 CISO 汇报!🎉
## 📦 安装说明
### 前置条件
- Python 3.8 或更高版本
- pip (Python 包管理器)
- 互联网连接(用于查询漏洞数据库)
### 依赖项(5 个包)
```
pip install -r requirements.txt
```
**安装内容说明:**
1. **rich** (v13.9.4) - 精美的终端输出
2. **pip-audit** (v2.10.0) - PyPA 官方漏洞扫描器
3. **pipdeptree** (v2.35.3) - 依赖树分析
4. **bandit** (v1.9.4) - 具备智能严重性过滤的静态安全分析
5. **cyclonedx-bom** (v7.3.0) - SBOM 生成
所有依赖项均锁定到特定版本,以确保可重复性和安全性。
## 📖 使用指南
### 命令参考
```
# 显示帮助
python python_security.py --help
# 显示版本
python python_security.py --version
# Single mode(默认)- 扫描当前环境
python python_security.py
# Multi-project mode - 扫描文件夹中的所有项目
python python_security.py --multi-project
python python_security.py -m
```
### 单项目模式 - 详细说明
**适用场景**:审计你当前的 Python 环境或特定项目
```
# 扫描全局 Python 环境
python python_security.py
# 扫描特定项目(先激活 venv)
cd c:\projects\my-app
venv\Scripts\activate
python c:\path\to\python_security.py
```
**执行操作**:
1. 扫描当前环境中的所有 Python 包
2. 使用 pip-audit 检查漏洞
3. 识别过时的包
4. 分析依赖树
5. 生成 SBOM
6. 运行 Bandit 静态分析
7. 创建精美的 HTML 报告
**输出**:`security_audit_report_[timestamp].html`
### 多项目模式 - 详细说明
**适用场景**:审计项目组合中的多个 Python 项目
```
python python_security.py -m c:\Users\DEEPAK\Documents\automation
```
**执行操作**:
1. **发现阶段**:查找文件夹中的所有 Python 项目
- 包含虚拟环境 (venv, .venv, env 等) 的项目
- 包含 requirements.txt 的项目
- 包含 Python 文件的项目
2. **扫描阶段**:分别扫描每个项目
- 如果可用,使用项目自身的 venv
- 如果没有 venv,则回退到全局 Python 环境
- 收集包、漏洞、过时的包
3. **报告阶段**:生成合并报告
- 跨所有项目的整体指标
- 每个项目的详细分解及完整包列表
- 每个项目的风险评估
- 合并的漏洞列表
- 按优先级排序的建议
**输出**:`multi_project_security_audit_[timestamp].html`
**示例文件夹结构**:
```
automation/ ← Root folder (pass this path)
├── web-scraper/
│ ├── venv/ ← Has venv ✓
│ ├── requirements.txt ← Has requirements ✓
│ └── scraper.py
├── api-client/
│ ├── .venv/ ← Has venv ✓
│ └── client.py
├── data-processor/
│ ├── requirements.txt ← Has requirements ✓
│ └── processor.py
└── utils/
└── helpers.py ← Has Python files ✓
```
所有 4 个项目都将被发现并扫描!
## 📊 报告功能
### 单项目模式报告包含:
- ✅ 完整的包清单(可滚动表格)
- ✅ 系统信息(平台、Python 版本、架构)
- ✅ 所有带有 CVE ID 和修复版本的漏洞
- ✅ 所有显示当前版本与最新版本对比的过时包
- ✅ 带有状态指示器的 Bandit 静态分析
- ✅ 依赖树可视化
- ✅ CycloneDX 格式的 SBOM
- ✅ 风险评估(低/中/高/严重)
- ✅ 具有可操作性的建议
### 多项目模式报告包含:
- ✅ **包含上述所有内容,另外还有:**
- ✅ 跨所有项目的整体指标
- ✅ **每个项目的详细分解**,包括:
- 完整的包列表(可滚动)
- 所有带有 CVE ID 的漏洞
- 所有过时的包
- 单独的风险评估
- ✅ 按风险等级划分的项目优先级排序
- ✅ 整个项目组合的建议
- ✅ 合并的漏洞跟踪
### 视觉特性:
- **可滚动表格** - 查看所有数据而不会使页面混乱
- **粘性表头** - 滚动时表头保持可见
- **颜色编码** - 红色(高风险),黄色(中风险),绿色(低风险)
- **悬停效果** - 交互式行高亮显示
- **响应式设计** - 适用于所有屏幕尺寸
- **专业布局** - 适合 CISO 查阅的展示形式
## 📁 输出结构
### 单项目模式输出:
```
python_security_audit_output/
├── security_audit_report_[timestamp].html ← Main HTML report
├── system_information.json
├── installed_packages.json
├── pip_audit_vulnerabilities.json
├── outdated_packages.json
├── dependency_tree.json
├── bandit_results.json
├── sbom.json
├── requirements_snapshot.txt
└── dependency_conflicts.txt
```
### 多项目模式输出:
```
python_security_audit_output/
├── multi_project_security_audit_[timestamp].html ← Consolidated HTML report
├── installed_packages_project1.json
├── installed_packages_project2.json
├── installed_packages_project3.json
└── ... (per-project data files)
```
## 🎯 使用场景
### 适用于 CISO 和安全团队
- **高管汇报** - 用于董事会展示的专业 HTML 报告
- **多项目概览** - 一次性扫描整个 Python 项目组合
- **风险评估** - 自动计算每个项目和总体的风险等级
- **合规性** - 为满足监管要求生成 SBOM
- **审计追踪** - 用于安全审计的完整 JSON 数据
- **优先级排序** - 识别需要立即关注的高风险项目
### 适用于开发团队
- **部署前检查** - 在生产环境发布前进行扫描
- **多项目管理** - 同时审计工作区中的所有项目
- **依赖管理** - 了解包之间的依赖关系
- **安全监控** - 定期进行漏洞扫描
- **技术债务** - 跟踪各个项目中过时的包
### 适用于 DevOps/CI-CD
- **自动化扫描** - 集成到构建流水线中
- **质量门禁** - 阻止存在严重漏洞的部署
- **持续监控** - 安排定期审计
- **合规性自动化** - 自动生成 SBOM
## 💡 最佳实践
### 单项目模式:
1. **在 venv 中运行**:运行前激活项目的 venv,以进行针对特定项目的审计
2. **定期扫描**:每周或在每次部署前运行一次
3. **查看 HTML**:在浏览器中打开 HTML 报告以获得最佳体验
4. **与团队共享**:HTML 报告非常适合团队评审
### 多项目模式:
1. **组织项目**:将所有 Python 项目保存在同一个根文件夹中
2. **使用 venv**:每个项目应有自己的 venv 以确保扫描准确
3. **优先级排序**:首先关注高/严重风险的项目
4. **标准化**:使用报告来识别项目间的版本不一致问题
5. **安排审计**:每月运行一次多项目审计以便进行项目组合管理
### 应对发现的问题:
| 风险等级 | 所需操作 | 时间表 |
|------------|----------------|----------|
| 🔴 严重 | 立即更新 | 24 小时 |
| 🟠 高 | 规划紧急更新 | 1 周 |
| 🟡 中 | 安排更新 | 2-4 周 |
| 🟢 低 | 包含在下一个周期中 | 下一个 sprint |
## 🔧 依赖项详解
### 1. **rich** (v13.9.4)
**用途**:带有颜色、表格和进度指示器的精美终端输出
**原因**:提供专业、易于阅读的控制台界面
**安全性**:被广泛使用,积极维护,无已知漏洞
### 2. **pip-audit** (v2.10.0)
**用途**:扫描 Python 包以查找已知的安全漏洞
**原因**:由 PyPA (Python 打包权威机构) 提供的官方工具
**安全性**:针对 OSV (开源漏洞) 数据库进行检查
**覆盖范围**:全面的 CVE 检测并提供修复建议
### 3. **pipdeptree** (v2.35.3)
**用途**:显示包依赖树
**原因**:帮助理解包之间的依赖关系和传递依赖
**安全性**:识别隐藏的易受攻击依赖项
**特性**:JSON 输出,循环依赖检测
### 4. **bandit** (v1.9.4)
**用途**:针对 Python 代码的静态安全分析
**原因**:用于查找常见安全问题的行业标准工具
**安全性**:检测 OWASP Top 10 漏洞
**覆盖范围**:SQL 注入、硬编码密码、不安全的函数
**智能特性**:
- 首先扫描中/高严重性问题
- 如果未发现,则自动扫描低严重性问题
- 包含状态列:✓ 安全使用,⚠ 需审查,⚠ 建议修复,❌ 必须修复
- HTML 报告中采用颜色编码的严重性级别
### 5. **cyclonedx-bom** (v7.3.0)
**用途**:生成软件物料清单 (SBOM)
**原因**:创建 CycloneDX 格式的行业标准 SBOM
**安全性**:对于合规性和供应链安全至关重要
**覆盖范围**:包含元数据的完整包清单
## 🛠️ 故障排除
### 遇到 "Module not found" 错误?
```
pip install -r requirements.txt
```
### 在多项目模式下遇到 "No projects found"?
- 确保文件夹中包含 Python 项目
- 项目需要包含 venv、requirements.txt 或 .py 文件
### "pip-audit failed"?
- 确保网络连接正常(需要查询漏洞数据库)
### 扫描耗时太长?
- 正常现象!每个项目需要 1-3 分钟
- 该工具具有超时保护机制
- 对于 10 个项目,预计需要 10-30 分钟
### 某些项目扫描失败?
- 检查项目的 venv 是否配置正确
- 失败的项目将在报告中标记
- 查看控制台输出以获取具体的错误信息
### 想要扫描特定项目?
```
cd c:\path\to\your\project
python c:\path\to\python_security.py
```
## 📈 本工具的特色之处
### 双重扫描模式
- ✅ **单项目模式** - 扫描当前的 Python 环境(全局环境或 venv)
- ✅ **多项目模式** - 同时扫描文件夹中的所有项目
- ✅ 自动项目发现(检测 venv、requirements.txt、Python 文件)
- ✅ 跨多个项目的合并报告
### 全面覆盖
- ✅ 扫描**所有**包(无限制,无截断)
- ✅ 高效处理每个环境中的 70-300+ 个包
- ✅ 使用 pip-audit 进行全面的漏洞扫描
- ✅ 完整的依赖分析
- ✅ 在可滚动的 HTML 表格中显示**所有**漏洞和过时的包
### 企业级特性
- ✅ **精美的 HTML 报告**,包含完整数据,适合高管展示
- ✅ **多项目合并报告**,展示整个项目组合的安全态势
- ✅ 适合 C 审查的专业设计
- ✅ 每个项目和总体的自动化风险评估
- ✅ 带有准确时间戳的可操作建议
- ✅ 带有状态指示器的智能 Bandit 分析
- ✅ 基于风险等级的项目优先级排序
### 代码质量
- ✅ **符合 SonarQube 标准** - 零 bug,零代码异味
- ✅ 安全的实现 - 无 shell 注入风险
- ✅ 全面使用类型提示
- ✅ 全面的错误处理机制
### 性能
- ✅ 高效算法带来极速的执行体验
- ✅ 超时保护确保可靠性
- ✅ 能够处理海量包数据
- ✅ 简洁、优化的代码
## 🔒 安全特性
### 设计安全
✅ **无 shell 注入** - 从不使用 `shell=True`
✅ **防止命令注入** - 命令以列表形式传递
✅ **输入验证** - 所有输入均经过验证
✅ **超时保护** - 防止操作挂起
✅ **错误处理** - 优雅的失败处理及详细的日志记录
### 漏洞检测
✅ **全面扫描** - 使用 pip-audit 进行彻底的 CVE 检测
✅ **CVE 数据库** - 针对 OSV (开源漏洞) 数据库进行检查
✅ **修复建议** - 建议升级到特定版本
✅ **传递依赖** - 检测子依赖项中的漏洞
✅ **完整结果** - 在可滚动的 HTML 表格中显示所有漏洞
## 🆚 对比
| 特性 | 本工具 | 手动检查 | 其他工具 |
|---------|-----------|---------------|-------------|
| 单环境扫描 | ✅ 是 | ❌ 否 | ✅ 是 |
| 多项目扫描 | ✅ 是 | ❌ 否 | ❌ 否 |
| 完整数据展示 | ✅ 全部(可滚动) | ❌ 否 | ⚠️ 截断显示 |
| 合并报告 | ✅ 是 | ❌ 否 | ❌ 否 |
| HTML 报告 | ✅ 是 | ❌ 否 | ⚠️ 基础 |
| 智能 Bandit 分析 | ✅ 是(带状态) | ❌ 否 | ⚠️ 基础 |
| 项目优先级排序 | ✅ 是 | ❌ 否 | ❌ 否 |
| CISO 就绪 | ✅ 是 | ❌ 否 | ⚠️ 部分 |
| 速度 | ⚡ 快速 | 🐌 缓慢 | ⚡ 快速 |
| 易用性 | 😊 简单 | 😓 复杂 | 😐 一般 |
| Windows 支持 | ✅ 是 | ⚠️ 视情况而定 | ⚠️ 视情况而定 |
## 📚 常见问题解答 (FAQ)
**问:扫描一次需要多长时间?**
答:对于包含 70-300+ 个包的单项目模式,需要 2-5 分钟。对于多项目模式,每个项目需要 1-3 分钟。
**问:它会扫描虚拟环境吗?**
答:在单项目模式下,它会扫描当前活动的环境。在多项目模式下,如果可用,它会扫描每个项目的 venv。
**问:如何同时扫描多个项目?**
答:使用多项目模式:`python python_security.py --multi-project c:\path\to\projects`。该工具将发现该文件夹中的所有 Python 项目并生成合并报告。
**问:在多项目模式下,什么算作一个“项目”?**
答:任何包含虚拟环境 (venv, .venv 等)、requirements.txt 文件或 Python (.py) 文件的文件夹。
**问:我可以扫描具有不同 Python 版本的项目吗?**
答:可以!如果可用,每个项目都会使用其自身虚拟环境的 Python 解释器进行扫描,否则使用全局 Python。
**问:HTML 报告会显示我所有的包和漏洞吗?**
答:是的!HTML 报告包含完整的可滚动表格,列出所有已安装的包、所有漏洞和所有过时的包——无限制或截断。
**问:HTML 报告可以安全分享吗?**
答:是的,但在向外部分享之前,请检查是否包含敏感信息(主机名、路径)。
**问:我应该多久运行一次?**
答:对于活跃项目每周一次,对于稳定系统每月一次。
**问:如果我发现严重漏洞怎么办?**
答:立即更新受影响的包:`pip install --upgrade package_name`
**问:我可以将其集成到 CI/CD 中吗?**
答:可以!在您的流水线中运行该脚本并检查退出码。该工具专为自动化而设计。
## 📝 真实场景示例
### 示例 1:部署前检查
```
# 在部署前扫描当前项目
cd c:\projects\my-app
python c:\path\to\python_security.py
```
### 示例 2:项目组合审计
```
# 扫描贵公司的所有 Python 项目
python python_security.py -m c:\company\python-projects
```
### 示例 3:每周安全审查
```
# 在 Task Scheduler (Windows) 中进行调度
python python_security.py -m c:\projects > audit_log.txt
```
### 示例 4:CI/CD 集成
```
# 添加到您的 build pipeline
python python_security.py
if %ERRORLEVEL% NEQ 0 (
echo Security audit failed
exit /b 1
)
```
## 🎓 版本历史
### 版本 4.0.0(当前版本) - 多项目支持
- ✅ 多项目扫描模式
- ✅ 自动项目发现
- ✅ 合并的 HTML 报告
- ✅ 针对每个项目的风险评估
- ✅ 使用 argparse 的命令行界面
- ✅ 增强了报告功能,包含详细的单项目部分
- ✅ 每个项目的完整包列表
- ✅ 显示所有漏洞和过时的包
### 版本 3.0.0 - 符合 SonarQube 标准
- ✅ 单环境扫描
- ✅ 移除了 Safety(与 pip-audit 重复)
- ✅ 修复了 HTML 时间戳显示问题
- ✅ 修复了所有数据的可滚动表格
- ✅ 智能 Bandit 严重性过滤
- ✅ 符合 SonarQube 标准(0 个 bug,0 个代码异味)
## ✅ 质量保证
该工具已经过全面测试和验证:
- ✅ **SonarQube**:零 bug,零漏洞,零代码异味
- ✅ **Bandit**:通过安全分析
- ✅ **类型检查**:完全覆盖类型提示
- ✅ **PEP 8**:符合代码风格规范
- ✅ **错误处理**:全面的异常处理
- ✅ **文档**:完全有文档记录的代码库
- ✅ **真实场景测试**:在包含 70-300+ 个包的环境中进行了测试
- ✅ **Windows 兼容**:修复了 Windows 系统的 Unicode 编码问题
- ✅ **多项目测试**:已通过多个项目组合验证
**状态**:生产环境就绪 | 企业级 | 安全已验证
## 📄 许可证
MIT 许可证 - 可根据需要自由使用和修改。
## 🎉 立即开始!
### 单项目模式(扫描当前环境)
```
# 1. 安装依赖
pip install -r requirements.txt
# 2. 运行您的首次 audit
python python_security.py
# 3. 打开 HTML 报告
# 检查 python_security_audit_output/ 目录
# 在浏览器中打开 security_audit_report_[timestamp].html
```
### 多项目模式(扫描所有项目)
```
# 1. 安装依赖(若尚未完成)
pip install -r requirements.txt
# 2. 运行 multi-project audit
python python_security.py --multi-project c:\path\to\your\projects
# 3. 打开合并后的 HTML 报告
# 检查 python_security_audit_output/ 目录
# 在浏览器中打开 multi_project_security_audit_[timestamp].html
```
**大功告成!** 您现在已经拥有了一份包含精美 HTML 报告的综合安全审计结果,随时可以提交给您的 CISO。
**为 ❤️ 企业级 Python 安全而生**
*更智能地扫描,更好地展示,更迅速地保障安全。现已支持多项目!*
**版本 4.0.0** | 企业级 | 符合 SonarQube 标准 | 多项目就绪
标签:SBOM生成, 企业合规, 后端开发, 域名收集, 安全专业人员, 安全扫描, 时序注入, 逆向工具, 错误基检测, 静态代码分析