系统命令被篡改是典型后门或提权行为,需用干净系统的可信md5特征库比对校验/bin等目录下可执行文件哈希值,发现差异即告警并优先通过备份、包管理器或重装对应软件包修复,同时建立cron定时扫描、inotify实时监控及selinux/apparmor策略等持续防护机制。

系统命令被篡改是典型的后门或提权行为,常见于rootkit植入、恶意脚本替换/bin/ls、/usr/bin/ps等关键二进制文件。排查与修复的核心逻辑是:用可信基准(如MD5特征库)比对当前命令哈希值,发现差异即判定异常,并自动还原原始文件。
准备可信的MD5特征库
特征库必须来自干净、未被入侵的同版本系统,或官方离线包提取。不能直接从当前可疑系统生成——否则等于用“污染源”校验自身。
- 在干净环境中执行:
find /bin /sbin /usr/bin /usr/sbin -type f -executable -print0 | xargs -0 md5sum > cmd_md5.db - 建议按发行版+版本号命名,例如
ubuntu22.04_cmd_md5.db,并签名保存(可用gpg --sign) - 特征库中每行格式为:
MD5_HASH /path/to/binary(注意空格分隔,路径含空格需提前规避或改用sha256sum+awk解析)
扫描并识别被篡改的命令
脚本需跳过动态链接库、符号链接和不可读文件,只校验真实可执行文件。重点监控/bin、/usr/bin等PATH高频路径。
- 逐行读取特征库,用
md5sum "$path" | awk '{print $1}'获取当前哈希 - 对比时用
diff -q或直接字符串匹配,避免因换行符/空格导致误判 - 记录差异项到临时文件,例如:
echo "$path differs: expected $expect, got $actual" >> /tmp/cmd_alert.log - 可加白名单机制,跳过已知合法更新(如刚打完安全补丁的
curl)
一键修复:从备份或包管理器还原
修复不是简单覆盖,要确保来源可信。优先级:本地备份 > 官方deb/rpm包解压 > 离线镜像挂载。
- 若部署时已用
dpkg --verify或rpm -V生成过校验基准,直接调用对应命令修复:rpm --replacefiles -Uvh /path/to/original.rpm - 无包信息时,从特征库反查所属软件包:
dpkg -S /bin/ls→ 得到coreutils→ 重装:apt install --reinstall coreutils - 谨慎处理
/sbin/init、/bin/bash等核心命令:修复前先确认shell仍可用,避免系统卡死
加固与自动化建议
单次修复只是止损,需建立持续防护机制。
- 将校验脚本加入
cron每日凌晨运行,异常时邮件告警(用mail -s "CMD TAMPER ALERT" admin@local) - 配合
inotifywait监听/bin目录写入事件,实时触发校验(注意性能开销) - 关键命令启用
chattr +i(需root权限),但要评估运维兼容性;更推荐用SELinux/AppArmor策略限制修改权限 - 所有修复操作记录完整日志,包含时间、文件路径、旧/新哈希、执行用户,便于溯源











