Rodrigo-Tripa/linux-security-audit-tool

GitHub: Rodrigo-Tripa/linux-security-audit-tool

基于 Bash 的轻量级 Linux 安全审计工具,用于检测系统错误配置、提权向量与加固缺陷并生成带完整性校验的结构化报告。

Stars: 0 | Forks: 0

# Linux 安全审计工具 ![版本](https://img.shields.io/badge/version-0.4.5.2--alpha-orange) ![许可证](https://img.shields.io/badge/license-MIT-blue) ![Bash](https://img.shields.io/badge/bash-4%2B-green) 用于 Linux 系统安全审计的 Shell 脚本。可识别错误配置、提权向量以及加固失败情况。 ## 目标 用于在 Linux 系统上进行快速安全审计的轻量级离线工具,主要关注: - 检测可疑的特权账户 - 具有危险权限的文件 - 不安全的 SSH 配置 - 高风险的开放端口 - SUID/SGID 二进制文件 - Sudoers 配置 - 孤立文件 - 防火墙和更新状态 ## 功能特性 ### 1. **UID 0 账户** 检测 UID 为 0(完全特权)的非 root 账户。 ``` awk -F: '$3 == 0 { print $1 }' /etc/passwd | awk '!/root/' ``` **风险:** 后门账户,系统被攻陷后的持久化。 ### 2. **全局可写文件** 搜索系统中任何用户均可写的文件。 ``` find / -xdev -type f -perm -0002 ``` 排除:`/proc`、`/sys`、`/dev`、`/run`、`/tmp`、`/var/tmp` **风险:** 代码注入,修改二进制文件或关键配置。 ### 3. **SSH 审计** 使用 `sshd -T` 验证关键的 OpenSSH 配置: | 指令 | 安全值 | |-------------------------|------------------------| | `PermitRootLogin` | `no` / `prohibit-password` | | `PasswordAuthentication`| `no` | | `MaxAuthTries` | ≤ 4 | | `X11Forwarding` | `no` | 同时检测: - `sshd` 守护进程的存在 - 服务状态(`systemctl`) - 支持 `ssh` 和 `sshd` 作为单元名称 **风险:** 暴力破解、未经授权的远程访问、横向移动。 ### 4. **开放端口** 使用 `ss -tulpn` 枚举 TCP/UDP 端口。 **风险分类:** | 级别 | 端口 | |--------|------------------------------------------------------------------------| | 高 | 21, 22, 23, 139, 445, 3389, 5900, 3306, 5432, 6379, 27017, 11211 | | 中 | 25, 53, 8080 | **风险:** 增加攻击面,不必要暴露的服务。 ### 5. **防火墙状态** 检查活跃的防火墙: - `ufw` - `firewalld` - `nftables` - `iptables` **逻辑:** - 未安装防火墙 → `CRITICAL` - 已安装防火墙但未启用 → `CRITICAL` **风险:** 未过滤的流量,服务直接暴露。 ### 6. **SUID/SGID 二进制文件** 搜索设置了 SUID/SGID 位的二进制文件: ``` find / -xdev -type f -perm /6000 ``` **分析:** - 与已知二进制文件的白名单进行比对 - 标记位于 `/tmp` 或 `/var/tmp` 中的二进制文件 - 检测非 root 所属的文件 **输出格式:** | 字段 | 描述 | |--------|----------------------| | PATH | 二进制文件路径 | | TYPE | SUID / SGID | | OWNER | 文件所有者 | | STATUS | OK / WARNING | **风险:** 通过本地漏洞利用进行提权。 ### 7. **操作系统检测** 解析 `/etc/os-release` 以识别系统家族: - `debian` → Debian, Ubuntu - `rhel` → RHEL, CentOS, Rocky, AlmaLinux, Fedora - `unknown` → 其他发行版 ### 8. **安全更新** 检查待处理的更新: | 操作系统家族 | 命令 | |-----------|-------------------| | Debian | `apt update` | | RHEL | `dnf check-update`| **局限性:** 输出解析可能不稳定。 **风险:** 已知漏洞未修补。 ### 9. **无密码用户** 检测 `/etc/shadow` 中密码字段为空的账户: ``` awk -F: '$2 == "" { print $1 }' /etc/shadow ``` **风险:** 未经身份验证即可登录,控制措施被绕过。 ### 10. **孤立文件** 在以下目录中搜索没有有效用户或组所有者的文件: - `/etc`, `/home`, `/root`, `/var` - `/usr/local`, `/opt`, `/srv` - `/tmp`, `/var/tmp` **按类型分类:** - `-nouser`(无所有者) - `-nogroup`(无所属组) **风险:** 已删除账户的残留文件,潜在的 payload 持久化。 ### 11. **Sudoers 审计** 分析 `/etc/sudoers` 和 `/etc/sudoers.d/` 中的文件,查找危险配置。 **检查项:** - `NOPASSWD`:无需密码即可作为 root 执行命令的用户。 - 宽泛的 `ALL` 权限:拥有 `ALL=(ALL:ALL) ALL` 权限的用户或组(root 除外)。 **风险:** 提权,未经授权的管理操作。 ### 12. **报告生成** **终端:** - 彩色输出(OK、WARNING、CRITICAL、INFO) - 层次化结构 **文件:** 目录:`./reports/` 生成的文件: - `result_YYYY-MM-DD_HH-MM-SS.txt`(纯文本输出) - `hash_result_YYYY-MM-DD_HH-MM-SS.txt`(SHA256) **安全性:** - `chmod 700 reports/` - 报告文件权限设置为 `chmod 600` - SHA256 哈希校验完整性 ## 安装 ``` git clone https://github.com/rodrigo-tripa/linux-security-audit-tool.git cd linux-security-audit-tool chmod +x audit.sh ``` ## 使用方法 ### 静默模式 仅生成报告文件: ``` sudo ./audit.sh ``` ### 详细模式 终端输出 + 文件: ``` sudo ./audit.sh -v ``` **报告保存在:** `./reports/result_.txt` ## 系统要求 | 组件 | 是否必需? | 备注 | |----------------|-----------|--------------------------------| | Linux | ✅ | 基于 Debian/Ubuntu 或 RHEL | | Bash | ✅ | 版本 4+ | | Root | ✅ | 建议使用以获取完整可见性| | `systemctl` | ✅ | 用于服务检查 | | `ss` | ✅ | 依赖 `iproute2` 软件包 | | `find`, `stat` | ✅ | Coreutils | | `sha256sum` | ✅ | Coreutils | | `sshd` | ⚠️ | 可选(如未安装则跳过)| ## 已知局限性 ### 权限 - 无 root 权限扫描时可见性会降低 - 部分检查可能会失败(`/etc/shadow` 等) ### 性能 - 在大型系统上 SUID/SGID 扫描可能较慢 - 全局可写文件扫描使用 `-xdev` 参数(不跨挂载点) ### 解析 - `apt update` 和 `dnf check-update` 的输出可能不稳定 - 依赖于特定的文本格式 ### 防火墙 - 假定使用 systemd 进行状态验证 - 可能无法检测到自定义防火墙 ### 端口 - 风险分类是静态的 - `ss -tulpn` 需要 root 权限才能查看 PID - 回退使用 `ss -tuln` 会丢失进程映射 ## 路线图 - [ ] 支持内核日志 (dmesg) - [ ] 审计可疑的 cron 任务 - [ ] 验证已加载的内核模块 - [ ] SELinux/AppArmor 状态检查 - [ ] 扫描已知后门 - [ ] JSON/CSV 报告输出以便解析 - [ ] Diff 模式(比较两份报告) ## 工具安全性 ### 报告 - 受保护的目录(`700`) - 文件权限为 `600`(仅限所有者) - SHA256 哈希验证完整性 ### 建议 - 在共享报告前,请对主机名/IP 进行脱敏处理 - 删除旧报告(`./reports/`) - 在受控环境中运行测试 ## 贡献 欢迎提交 Pull requests。对于重大更改: 1. 请先开一个 issue 进行讨论 2. 如果可能,请在 Debian 和基于 RHEL 的系统上进行测试 3. 保持代码注释为英文 4. 遵循现有的输出风格 ## 许可证 MIT 许可证 - 详见 [LICENSE](LICENSE) ## 免责声明 本工具仅用于审计您拥有授权的**合法**系统。我对滥用行为不承担责任。 ## 联系方式 **GitHub:** [Rodrigo-Tripa](https://github.com/rodrigo-tripa) **Repo:** [linux-security-audit-tool](https://github.com/rodrigo-tripa/linux-security-audit-tool)
标签:Debian, IT运维安全, Linux安全审计, RHEL, SSH安全审计, Sudoers配置检查, SUID/SGID检测, UID 0账户检测, Webshell防御, Web报告查看器, 关系图谱, 反取证, 基线检查, 子域名枚举, 安全评估, 应用安全, 开放端口扫描, 弱权限检测, 特权提升检测, 离线安全检测, 系统加固, 系统合规性, 系统安全