Ubuntu inotify检测恶意软件的实用方案
工作原理与定位
- inotify 是 Linux 内核提供的文件系统事件机制,可实时捕获目录与文件的创建、删除、修改、属性变更等事件,适合做“文件篡改与可疑落盘”的实时告警与阻断。它并不等同于杀毒引擎,不能仅凭事件判断“是否为恶意”,但可与审计、完整性校验、反病毒引擎联动,形成主机侧入侵检测与响应闭环。
快速落地步骤
- 安装工具
- 在 Ubuntu 上安装命令行工具集:sudo apt-get install inotify-tools。
- 最小可用监控脚本
- 监控关键目录并记录事件与时间戳,示例:
- inotifywait -mrq --timefmt ‘%F %T’ --format ‘%T %w%f %e’
-e create -e modify -e delete -e attrib -e move
/etc /usr/bin /usr/sbin /bin /sbin /var/www /root/.ssh
| while read ts path event; do
echo “[$ts] $event $path” >> /var/log/inotify-alert.log
# 可在此处加入:邮件/企业微信/钉钉告警、隔离脚本等
done
- 作为系统服务常驻
- 将上述脚本保存为 /usr/local/bin/inotify-mon.sh,创建 /etc/systemd/system/inotify-mon.service:
- [Unit]
Description=Inotify File Monitor
After=network.target
- [Service]
ExecStart=/usr/local/bin/inotify-mon.sh
Restart=always
User=root
- [Install]
WantedBy=multi-user.target
- 启用与启动:sudo systemctl daemon-reload && sudo systemctl enable --now inotify-mon.service
- 运行与验证
- 查看实时日志:tail -f /var/log/inotify-alert.log
- 手动触发测试:在受监控目录创建/修改文件,确认日志与告警是否产生。
关键监控点与判定逻辑
- 建议优先覆盖的高价值路径与判定思路如下(事件类型以 inotify 的 create/modify/delete/attrib/move 为主):
| 监控路径 |
关注事件 |
可能威胁 |
建议动作 |
| /etc /usr/bin /usr/sbin /bin /sbin |
modify, attrib |
系统命令被替换、后门植入 |
立即告警;快照取证;校验包完整性(见下节);必要时下线修复 |
| /root/.ssh /home/*/.ssh |
create, modify |
新增公钥、SSH 后门 |
告警并阻断可疑密钥登录;核查 authorized_keys 来源 |
| /etc/crontab /etc/cron.d /etc/init.d |
create, modify |
持久化挖矿/反弹Shell |
告警并回滚变更;审查定时任务合法性 |
| /var/www /var/lib/wordpress |
create, modify |
WebShell 落盘 |
告警并隔离文件;结合 WAF/日志溯源 |
| /tmp /dev/shm |
create, delete |
临时目录驻留恶意可执行文件 |
告警并清理;限制 /tmp 执行权限(noexec) |
| 日志目录(如 /var/log) |
modify, attrib |
日志清理/篡改以掩盖痕迹 |
告警并保护日志完整性(只读挂载/外部日志) |
- 判定要点
- 短时间内在系统目录出现可执行文件(如 /tmp/.hidden)且为 create + close_write 连续事件,风险高。
- attrib 事件伴随权限变为 4755/2755(SUID/SGID) 需重点核查。
- /root/.ssh/authorized_keys 被修改且来源不明,极可能为入侵迹象。
溯源与自动化响应
- 关联用户与进程溯源
- inotify 本身不直接提供“哪个用户/进程触发的事件”,建议与 auditd 联动:
- 配置审计规则(示例):sudo auditctl -w /etc/passwd -p wa -k passwd_change
- 发生 inotify 告警后,用 ausearch -k passwd_change 查询对应 auid/pid/ppid 与时间戳,还原操作链。
- 完整性校验与基线对比
- 使用发行版包管理校验:rpm -V 或 dpkg -V 检查被监控目录中属于包管理的文件是否被篡改(适用于 /bin /sbin /usr/bin 等)。
- 自动响应与联动
- 在 inotify 脚本中接入:
- 告警通道(邮件/企业微信/钉钉/Slack Webhook)。
- 隔离动作(将可疑文件移至隔离区并 chattr +i 防改写,或移动到只读挂载点)。
- 临时阻断(结合 iptables/fail2ban 对来源 IP 封禁,或暂停相关服务)。
- 反病毒引擎协同
- 部署 ClamAV/maldet,并启用其基于 inotify 的目录监控能力,对落盘文件进行实时扫描与清除,弥补仅依赖事件判定的不足。
性能与误报控制
- 控制监控范围:仅监控关键目录与文件,避免递归整个 /。
- 精简事件集:只订阅与风险相关的事件(如 create/modify/delete/attrib/move),减少噪声。
- 事件去抖与聚合:对同一目标的短时间批量事件做合并告警,避免告警风暴。
- 权限与运行账户:以 最小权限运行监控脚本;日志文件权限设为 600,仅管理员可读写。
- 资源与稳定性:在高并发写入目录(如日志/缓存)使用更严格的过滤;必要时拆分监控进程与队列处理。