核心是“一次建基、多次比对、自动响应”,Windows用PowerShell/certutil、Linux用sha256sum/cron实现基准可信、比对可靠、响应及时,需排除动态目录、保护基准文件、记录带ISO时间戳日志并分级告警。

核心是“一次建基、多次比对、自动响应”。不依赖第三方工具,用系统自带命令就能实现——Windows 用 PowerShell 或 certutil,Linux 用 sha256sum 或原生包管理器校验机制。关键在于基准可信、比对可靠、响应及时。
Windows:PowerShell 批量建基 + 定时比对
适合监控 System32 下大量 DLL、EXE 等关键库文件。
- 首次生成基准清单(管理员运行):
Get-ChildItem "C:\Windows\System32\*.dll","C:\Windows\System32\*.exe" -Force | ForEach-Object { $h = Get-FileHash $_.FullName -Algorithm SHA256; [PSCustomObject]@{Path=$_.FullName; SHA256=$h.Hash; LastWriteTime=$_.LastWriteTime} } | Export-Csv baseline.csv -NoTypeInformation - 后续校验脚本(verify.ps1)读取 baseline.csv,逐个重算 SHA256 并比对;不一致时写入 alerts.log,并插入时间戳:
Get-Date -Format "yyyy-MM-dd HH:mm:ss" - 把 verify.ps1 加入任务计划程序,设为每天凌晨以管理员身份静默运行
- 务必排除 WinSxS 目录——它存放多版本组件,文件频繁更新,不应纳入校验范围
- baseline.csv 文件本身设为只读,或移至受保护路径(如 C:\Secure\),防止被覆盖篡改
Windows:certutil 轻量盯控关键进程文件
适合快速部署,只盯 lsass.exe、net.exe、cmd.exe 等少数高危文件。
- 在干净系统中提取 SHA256 值,硬编码进批处理(如 set EXPECTED_LSASS=9a8b7c6d…)
- 用 certutil -hashfile 提取当前值,字符串比对;不一致就追加带时间戳的告警到日志
- 脚本开头加权限检查(如 net session >nul 2>&1 || powershell start "" -verb runas -argumentlist "'%~f0' %*" & exit /b)确保始终以管理员运行
- 比 PowerShell 更轻快,不受执行策略限制,适合受限环境
Linux:sha256sum + cron 自动化闭环
推荐用于自定义服务或第三方库文件(如 /opt/myapp/lib/ 下的 .so 文件)。
- 首次生成校验清单:
find /opt/myapp/lib -name "*.so" -type f -print0 | xargs -0 sha256sum > baseline.sha256 - 定时校验脚本(check.sh)调用:
sha256sum -c baseline.sha256 --quiet 2>/dev/null || echo "$(date '+%F %T') - Integrity check FAILED" >> alerts.log - 加入 crontab(如每天 3:00):
0 3 * * * /path/to/check.sh - 若需更严格防护,可将 baseline.sha256 存于只读挂载分区,或用 chattr +i 锁定
通用要点:防篡改与响应机制不能少
光发现变化不够,得知道什么时候变、怎么应对。
- 所有日志必须含精确时间戳(建议用 ISO 8601 格式),便于回溯分析
- 发现异常时,脚本能自动触发辅助动作:比如用 tasklist /m filename.dll(Windows)或 lsof -nPi filename(Linux)查是否被加载
- 权限异常也值得警惕:比对前后检查文件属主、ACL、SELinux 上下文是否突变
- 告警建议分级:轻微变更(如时间戳改但哈希未变)仅记录;哈希不一致则立即通知、暂停服务或上报 SIEM

















