A2D-Ankit-Dangi/MongoDB-Security-Audit-Tool

GitHub: A2D-Ankit-Dangi/MongoDB-Security-Audit-Tool

一款基于 Node.js 的 MongoDB 安全审计命令行工具,通过十项自动化检测评估数据库配置风险并输出安全评分。

Stars: 0 | Forks: 0

# MongoDB 安全审计工具 🛡️ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Node.js Version](https://img.shields.io/badge/node-%3E%3D%2014.0.0-blue.svg)](https://nodejs.org) [![MongoDB](https://img.shields.io/badge/MongoDB-%3E%3D%204.0-green.svg)](https://www.mongodb.com) 一个轻量级、高性能的命令行界面 (CLI) 安全扫描器,旨在评估、审计和强化 MongoDB 数据库的安全性。通过分析连接字符串、测试 TLS 功能、探测服务器端网络暴露以及执行非破坏性的权限提升检查,该工具可帮助开发人员、DevOps 工程师和安全审计员实施**最小权限原则 (PoLP)** 并防止数据暴露。 ## 🎯 核心功能 **MongoDB 安全审计工具**执行全面的 10 项审计,以识别常见的配置错误、弱凭证和过度权限: 1. **连接字符串分析:** 解码协议(例如 `mongodb+srv`),检查默认端口 (27017),标记弱的 SCRAM 密码,并检查不安全的参数。 2. **网络与 DNS 暴露:** 解析目标主机名,检查 IP 地址是否可公开路由,并扫描 TCP 连通性。 3. **TLS/SSL 服务器探测:** 测试严格与宽松的证书验证,提取密码套件,并验证到期日期。 4. **驱动程序 TLS 兼容性:** 测试 4 种 TLS 配置变体下的 MongoDB 客户端驱动程序连通性。 5. **服务器信息与 EOL 检查:** 识别版本详细信息、目标操作系统,并标记过时/生命周期结束 (EOL) 的实例。 6. **用户与角色权限枚举:** 审计用户角色的管理能力(例如 `root`、`dbOwner`、`userAdminAnyDatabase`)。 7. **有效权限分析:** 对授予的操作(例如 `dropDatabase`、`createUser`)进行细粒度评估。 8. **跨数据库隔离(横向移动):** 探测对默认管理数据库(`admin`、`local`、`config`)的访问限制。 9. **写入与破坏性操作边界:** 安全地验证对临时集合的写入访问限制(`insert`、`update`、`delete`、`drop`)。 10. **权限提升验证:** 探测当前用户是否可以创建管理账户或定义自定义角色。 ## 🚀 安装说明 确保您已安装 [Node.js](https://nodejs.org)(v14.0.0 或更高版本)。 1. **克隆代码库:** git clone https://github.com/your-username/mongo-security-audit.git cd mongo-security-audit 2. **安装依赖项:** npm install ## 💻 用法 您可以通过将连接字符串作为命令行参数传递,或者通过设置环境变量来运行此审计工具,以避免凭证保留在您的 shell 历史记录中。 ### 方法 1:命令行参数 ``` node mongo-security-audit.js "mongodb://username:password@host:port/database?tls=true" ``` ### 方法 2:环境变量(出于安全原因推荐) ``` export MONGO_URI="mongodb://username:password@host:port/database?tls=true" node mongo-security-audit.js ``` ### 命令行输出预览 ``` ╔══════════════════════════════════════════════════════════════╗ ║ MongoDB Security Audit Tool v1.0.0 ║ ╚══════════════════════════════════════════════════════════════╝ Target: mongodb://alien_support:****@p61.a2d.host:2727/alien_support?tls=true Time: 2026-07-12T08:30:30.492Z ════════════════════════════════════════════════════════════════════════ 1. Connection String Analysis ════════════════════════════════════════════════════════════════════════ ℹ Protocol: mongodb ℹ Username: alien_support ℹ Port: 2727 (non-default) ✔ PASS Non-default port 2727 ... ``` ## 📊 安全评分引擎 审计结果将生成一个定制的**安全分数 (0-100)**,该分数使用基于风险的扣分算法计算得出: * **初始分数:** 100 * **严重发现:** `-25 分`(例如,无法连接、无密码、未加密 TLS 或具备直接的 root 创建能力) * **警告发现:** `-10 分`(例如,公共 IP 暴露、中等/弱密码、为应用程序分配了 `dbOwner` 角色或可能发生横向移动) * **通过 / 信息发现:** `0 分`(验证安全控制是否已正确配置) ## 🛠️ 修复与强化指南 如果此工具标记了您数据库中的漏洞,请按照以下步骤对其进行保护: ### 1. 网络与 IP 绑定 * **风险:** 公开路由的 IP 是自动暴力破解攻击和端口扫描程序的目标。 * **修复:** - 编辑 `mongod.conf` 并将 MongoDB 严格绑定到内部地址(例如 `127.0.0.1` 或您的私有 VPC 网络接口): net: bindIp: 127.0.0.1,10.0.0.5 - 利用防火墙规则(例如 `iptables`、AWS Security Groups)将您 MongoDB 端口(默认:27017)上的传入 TCP 访问限制为特定的白名单客户端 IP 地址。 ### 2. 实施 TLS/SSL 加密 * **风险:** 未加密的数据库流量会将敏感凭证和数据库内容暴露给数据包嗅探和中间人 (MITM) 攻击。 * **修复:** - 在您的服务器配置中强制使用 TLS: net: tls: mode: requireTLS certificateKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/ca.pem - 切勿在生产环境的连接字符串中允许诸如 `tlsAllowInvalidCertificates=true` 之类的不安全选项。 ### 3. 实施最小权限原则 (PoLP) * **风险:** 如果被攻破,使用 `dbOwner` 或 `root` 等高权限角色的应用服务可能会导致灾难性的数据丢失。 * **修复:** - 创建数据库范围的用户,其读/写访问权限严格限制在其指定的数据库内: db.createUser({ user: "app_service", pwd: passwordPrompt(), // 安全密码输入 roles: [{ role: "readWrite", db: "target_database" }] }); - 撤销应用程序账户的集群范围管理角色(例如 `userAdminAnyDatabase`、`readWriteAnyDatabase`)。 ## 📝 许可证 本项目基于 **MIT License** 授权 - 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。 ## ⚠️ 法律免责声明
标签:GNU通用公共许可证, MITM代理, MongoDB, Node.js, Web报告查看器, 关系图谱, 基线检查, 插件系统, 文档结构分析, 自定义脚本