KillianM00/hostcheck
GitHub: KillianM00/hostcheck
跨平台本地 PC 安全审计工具,对系统加固、网络暴露、漏洞等 82 项配置进行只读检查,并为每项发现提供可复制执行的修复命令。
Stars: 0 | Forks: 0
# hostcheck
一款跨平台的本地 PC 安全审计工具。针对您计算机的实际状态执行 **82 项只读检查**(55 项 Windows · 15 项 Linux · 12 项 macOS),每项发现都会通过查找表映射到简明的英文标题以及确切的修复命令。
[](LICENSE)
[](https://www.python.org/downloads/)
[](https://github.com/KillianM00/hostcheck/releases)
[](tests/)
[](https://github.com/KillianM00/hostcheck/releases)
Windows 默认配置偏向宽松。Linux 发行版也将许多旋钮保持在“兼容”而非“强化”状态。macOS 的十几个隐私/安全开关分散在五个设置面板中。`hostcheck` 会在 30 到 60 秒内为您检查所有这些项目,并告诉您开启所需项的确切命令。
## 您将获得什么
```
═══ hostcheck report ═══
[PASS ] Defender real-time protection [HARD-001-PASS] Windows Defender real-time protection is ON.
[PASS ] Windows Firewall (Public profile) [HARD-003-PASS] Windows Firewall is enabled for the Public profile.
[FAIL ] Legacy TLS (1.0 / 1.1) [HARD-007] Legacy TLS (1.0 / 1.1) is still enabled.
why it matters: Older TLS protocols have known weaknesses (BEAST, POODLE, etc.) ...
what to do: Open PowerShell as Administrator and run:
foreach ($v in '1.0','1.1') { ... }
Reboot.
· TLS1.0.Server.Enabled: absent
· TLS1.0.Client.Enabled: absent
[FAIL ] LLMNR / NetBIOS over TCP/IP [NET-003] LLMNR and/or NetBIOS name resolution is enabled.
why it matters: LLMNR (UDP 5355) and NBT-NS (UDP 137) are legacy name-resolution
protocols ... they let an attacker run a tool called Responder that
captures your Windows login hashes ...
what to do: Open PowerShell as Administrator and run:
New-Item -Path 'HKLM:\SOFTWARE\Policies\...
[WARN ] System Restore [BACK-001] System Restore is disabled.
✗ 9 issue(s), 11 advisor(ies), 0 errored, 29/55 pass, 6 skipped
```
每个结果都带有一个简短的错误代码,该代码映射到一个清晰的纯英文标题、一段说明*为什么重要*的文字,以及一个可以直接复制粘贴的修复命令(Windows 上使用 PowerShell,Linux/macOS 上使用 shell)。高级用户可以在每项发现下查看原始的观测值。
## 跨平台检查清单
`hostcheck` 在启动时会自动检测主机操作系统,并运行相应的检查集。
| OS | Checks | 覆盖范围 |
|---|---|---|
| **Windows** | 55 | Defender、防火墙、UAC、BitLocker、SMBv1、TLS、SmartScreen、安全启动、TPM、Autorun、PowerShell v2、AutoLogon、LSA Protection、管理员组、重启时间、VBS、HVCI、内核 DMA、驱动程序签名强制;监听服务、RDP、LLMNR/NetBIOS、高风险服务、Print Spooler、WPAD、SMB 签名、RestrictAnonymous、NULL session 管道、弱密码套件;待处理更新、旧版插件、待处理重启、Defender 排除项、浏览器版本、Office 宏、.NET 3.5;hosts 文件、AppInit_DLLs、WMI 订阅、未签名驱动程序、可疑的自动运行项;密码策略、空密码、缓存的登录、Wi-Fi 配置文件;遥测、Recall、活动历史记录、广告 ID;ExecutionPolicy、脚本块日志记录、事件日志保留期;系统还原、卷影副本 |
| **Linux** | 15 | UFW/firewalld/nftables、SSH 密码认证、SSH root 登录、unattended-upgrades / dnf-automatic、ASLR、SELinux/AppArmor 强制模式、LUKS 磁盘加密、fail2ban、上次重启时间、auditd;在 `0.0.0.0` 上监听的服务、SSH 公网暴露;apt/dnf 可升级软件包、待处理重启;空密码本地账户 |
| **macOS** | 12 | SIP、Gatekeeper、FileVault、应用程序防火墙 + 隐身模式、自动安全更新;远程登录 (SSH)、屏幕共享、文件共享;待处理 macOS 更新;自动登录;Time Machine |
每个平台都使用原生工具:Windows 上使用 PowerShell 和标准的 `Get-*` cmdlet,Linux 上使用 `ufw`/`sshd -T`/`sysctl`/`ss`/`apt`/`dnf`/`getenforce`/`aa-status`/`lsblk`,macOS 上使用 `csrutil`/`spctl`/`fdesetup`/`socketfilterfw`/`launchctl`/`defaults`/`tmutil`。没有外部 Python 依赖,没有代理程序,没有遥测。
## 安装
### Windows 用户(推荐)
从 [Releases 页面](https://github.com/KillianM00/hostcheck/releases)下载 `hostcheck-setup-X.Y.Z.exe` 并运行。Inno Setup 安装程序将会:
- 安装到 `%ProgramFiles%\hostcheck\`
- 添加“开始”菜单快捷方式(始终添加)和桌面快捷方式(可选)
- 可选:将安装目录前置到系统 PATH 中,以便在任何终端中运行 `hostcheck-gui`
- 在“应用和功能”中提供干净的卸载程序
- 安装向导期间显示 MIT 许可证
- **无需安装 Python** —— 该 .exe 打包了运行时和 CustomTkinter
### Linux / macOS —— CLI + 可选 GUI
```
pip install hostcheck # CLI only
pip install hostcheck[gui] # CLI + desktop GUI (hostcheck-gui)
```
然后:
```
hostcheck # run all checks against the current host
hostcheck --json # machine-readable output for CI / automation
hostcheck --check uac,smbv1 # subset
hostcheck --skip pending_updates # skip the slow ones
hostcheck-gui # launch the CustomTkinter desktop app
```
退出代码:`0` 表示一切正常,`1` 表示至少一个 FAIL,`2` 表示至少一个不确定 (ERROR) 但没有 FAIL。
## 错误代码参考
每项发现都映射到一个代码。这些代码在各个版本中保持稳定,可建立索引,且对运维手册友好。
### Windows
| 前缀 | 类别 | 示例 |
|---|---|---|
| `HARD-*` | 操作系统强化状况 (20 项检查) | HARD-001 Defender RT 已关闭 · HARD-007 TLS 1.0/1.1 已开启 · HARD-013 存在密码的自动登录 · HARD-017 VBS 未运行 |
| `NET-*` | 网络暴露 (10) | NET-002 RDP 可访问 · NET-003 LLMNR 已启用 · NET-006 WPAD 已启用 · NET-007 未要求 SMB 签名 |
| `VULN-*` | 软件漏洞 (7) | VULN-001 待处理的 Windows 更新 · VULN-002 旧版插件 · VULN-004 Defender 排除项审计 · VULN-005 浏览器版本时效性 |
| `PERS-*` | 持久化 / 恶意软件迹象 (5) | PERS-002 已配置 AppInit_DLLs · PERS-005 在 `%TEMP%` 中发现可疑的自动运行二进制文件 |
| `CRED-*` | 凭据 (4) | CRED-001 弱密码策略 · CRED-004 保存了开放的 Wi-Fi 配置文件 |
| `PRIV-*` | 隐私 (4) | PRIV-001 高级别遥测 · PRIV-002 已启用 Windows Recall |
| `PSH-*` | PowerShell 卫生状况 (3) | PSH-001 ExecutionPolicy 过于宽松 · PSH-002 脚本块日志记录已关闭 |
| `BACK-*` | 备份状态 (2) | BACK-001 系统还原已禁用 |
### Linux
| 前缀 | 类别 | 示例 |
|---|---|---|
| `LH-*` | 强化 (10) | LH-001 无防火墙 · LH-002 SSH 密码认证已开启 · LH-006 SELinux/AppArmor 未强制执行 · LH-007 无 LUKS · LH-008 无 fail2ban |
| `LN-*` | 网络 (2) | LN-001 在 0.0.0.0 上的服务 · LN-002 SSH 公网暴露 |
| `LV-*` | 漏洞 (2) | LV-001 apt/dnf 升级待处理 · LV-002 重启待处理 |
| `LC-*` | 凭据 (1) | LC-001 在 `/etc/shadow` 中存在空密码账户 |
### macOS
| 前缀 | 类别 | 示例 |
|---|---|---|
| `MH-*` | 强化 (6) | MH-001 SIP 已禁用 · MH-002 Gatekeeper 已禁用 · MH-003 FileVault 已关闭 · MH-004 应用程序防火墙已关闭 |
| `MN-*` | 网络 (3) | MN-001 远程登录已开启 · MN-002 屏幕共享已开启 · MN-003 文件共享已开启 |
| `MV-*` | 漏洞 (1) | MV-001 待处理 macOS 更新 |
| `MC-*` | 凭据 (1) | MC-001 自动登录已启用 |
| `MB-*` | 备份 (1) | MB-001 没有最近的 Time Machine 备份 |
包含“为什么重要”和“该怎么做”说明的完整查找表位于 [`src/hostcheck/codes.py`](src/hostcheck/codes.py)。
## 应用 / 还原辅助脚本 (Windows)
对于 Windows 用户,[`scripts/`](scripts/) 目录中有两个可选加入的 PowerShell 脚本,只需一键即可处理四项影响最大且风险最低的修复:
| | |
|---|---|
| [`scripts/apply-safe-fixes.ps1`](scripts/apply-safe-fixes.ps1) | 禁用 WPAD (NET-006)、阻止匿名 SMB 枚举 (NET-008)、禁用 LLMNR (NET-003)、禁用所有驱动器类型的 Autorun (HARD-011)。通过 UAC 自动提权。在个人 PC 上普遍安全。 |
| [`scripts/revert.ps1`](scripts/revert.ps1) | 还原 `apply-safe-fixes.ps1` 所做的每一项更改,恢复为 Windows 默认设置。如果任何更改导致了问题,请使用此脚本。 |
这两个脚本都:
- 在非管理员上下文下启动时,会通过 UAC 自动提升权限
- 通过 `Start-Transcript` 将每个步骤记录到 `scripts/.log`
- 结束时暂停,以便提升权限后的窗口保持可见
- 完全幂等(可安全重复运行)
## 架构
```
┌──────────────────────────────────────┐
│ hostcheck CLI / GUI │
│ picks check set based on OS │
└────────────────┬─────────────────────┘
│
┌────────────────────────────────────┼────────────────────────────────────┐
▼ ▼ ▼
┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ Windows │ │ Linux │ │ macOS │
│ 55 checks │ │ 15 checks │ │ 12 checks │
├─────────────┤ ├──────────────┤ ├──────────────┤
│ PowerShell │ │ subprocess + │ │ subprocess + │
│ + Get-* │ │ ufw, sshd, │ │ csrutil, │
│ cmdlets via │ │ sysctl, ss, │ │ spctl, │
│ ps_runner │ │ apt/dnf, │ │ fdesetup, │
│ │ │ aa-status, │ │ launchctl, │
│ │ │ etc. │ │ defaults, │
│ │ │ │ │ tmutil │
└──────┬──────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
└──────────────┬───────────────────┴──────────────┬──────────────────┘
▼ ▼
┌───────────────┐ ┌───────────────────┐
│ codes.py │ │ report.py │
│ lookup table │ ──────────────► │ terminal / JSON │
│ (140+ codes) │ │ with code, head- │
│ headline + │ │ line, fix, raw │
│ meaning + │ │ observed values │
│ fix command │ └───────────────────┘
└───────────────┘
```
每一项检查都是一个纯函数。每个检查都返回一个包含 `status`(PASS/FAIL/WARN/SKIP/ERROR)、`code`、`summary`、结构化的 `details` 以及 `duration_s` 的 `CheckResult`。涉及网络/操作系统交互的代码总是将探测过程包装在优雅的失败路径中——异常永远不会逃逸到顶层。
## 准确性原则
- **仅使用标准 API。** 使用 PowerShell 的 `Get-MpComputerStatus`,而不是靠猜测注册表。使用 `ufw status`,而不是解析 `iptables -L` 并假装它是完整的。使用 `csrutil status`,而不是解析 `nvram` 输出。
- **每个结果都包含原始观测值**,以便您可以自行验证结论。
- **宁可跳过,也不要瞎猜。** Windows Home 版上的 BitLocker → SKIP,而不是 FAIL。没有 TPM 硬件 → SKIP。传统 BIOS → SKIP。未安装 Office → SKIP。Defender 排除项需要管理员权限 → SKIP。误报会摧毁信任。
- **不对合法但看似可疑的事物进行启发式标记**(例如已知位置的自动运行项、DNS 设置、浏览器扩展)。在 v0.2 版本中已将这些排除在外,因为误报风险很高。
## 测试
```
pytest tests/test_smoke.py # 83 deterministic tests, mocked PowerShell/shell, <1s
pytest tests/test_live_stress.py # 61 live tests against real Windows, ~7 min, manual only
pytest tests/test_live_linux.py # 17 live tests against real Linux, ~30s, manual only
```
冒烟测试套件永远不会调用实时的 PowerShell 或 shell——它使用合成的响应来修补 `run_ps` / `run`,以便确定性地测试解析器逻辑。在每次发布前,存在实时压力测试套件以针对真实的操作系统状态进行验证。
## 从源代码构建 Windows 安装程序
```
pip install -e ".[gui,build]"
python build_exe.py # → dist\hostcheck-gui.exe (~29 MB)
iscc installer\hostcheck.iss # → installer\output\hostcheck-setup-X.Y.Z.exe
```
需要从 https://jrsoftware.org/isdl.php 安装 Inno Setup 6+ 才能运行安装向导。
## 它不能做什么
- **不是杀毒软件。** 它只检查您的杀毒软件是否在运行以及特征库是否最新;它本身不扫描文件。
- **不是 EDR。** 它是一次性的快照,而不是持续的行为监控。请结合使用 Defender / CrowdStrike 等。
- **不是数据包捕获 / 网络嗅探器。** 检测逻辑不需要 root 权限。
- **不是魔法。** 许多安全漏洞与用户行为有关(点击钓鱼链接、密码卫生),这是任何静态扫描器都无法检测到的。由威胁情报驱动的指标超出了范围。
## 路线图
- **v0.3** — 每个代码的 CIS Benchmark Level 1 映射(约 120 项控制),合规性报告
- **v0.4** — Windows 上的易受攻击驱动程序 / 已知恶意驱动程序检测(Microsoft 阻止列表匹配)
- **v0.5** — macOS 实时验证 + 额外检查(Keychain 审计、登录项、持久化)
- **v0.6** — 持续模式:按计划重新运行,在出现回退时发出警报(与上次良好状态的差异对比)
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
## 联系方式
Killian Miller — [killianmiller6@gmail.com](mailto:killianmiller6@gmail.com) — [github.com/KillianM00](https://github.com/KillianM00)
标签:AI合规, Conpot, macOS安全, Python, URL发现, Windows安全, 图形界面, 基线扫描, 安全合规, 安全基线, 安全检测, 安全规则引擎, 安全配置核查, 开源安全工具, 指令遵循, 教学环境, 数据包嗅探, 无后门, 无线安全, 本地安全检查, 权限管理, 模型越狱, 流量嗅探, 系统加固, 网络代理, 网络安全, 网络安全, 逆向工具, 逆向工程平台, 隐私保护, 隐私保护