应立即排查“谁改的、怎么改的、是否还在生效、是否关联其他后门”:检查/etc/hosts内容与mtime时间戳,验证解析顺序及实际请求,溯源登录日志、定时任务与隐藏进程,并比对文件哈希;清理后需恢复可信配置、锁定权限(chown root:root && chmod 644)、必要时设不可变属性(chattr +i),同时部署完整性监控。

服务器中 /etc/hosts 被恶意修改,常是攻击者实施中间人、服务劫持或身份冒用的第一步——比如把 auth.company.com 指向内网伪造的认证服务器,诱导应用或用户连接到恶意节点,从而窃取凭证、伪造会话。排查需聚焦“谁改的、怎么改的、是否还在生效、是否关联其他后门”,不能只看文件内容。
检查 hosts 文件内容与修改痕迹
直接查看当前配置是否异常:
- 执行
sudo cat /etc/hosts,重点识别:非业务必需的域名映射、指向私有IP(如 127.0.0.1、10.x.x.x、192.168.x.x)但无合理用途的条目、拼写近似的仿冒域名(如gitlab-internal.corpvsgitlab-internal.corp.或gitalb-internal.corp) - 检查时间戳:
ls -la /etc/hosts,比对mtime(修改时间)是否与运维操作时间不符,尤其关注凌晨、节假日等非维护窗口的变更 - 比对历史备份(如有)或基线配置,确认新增/删除行;若无备份,可用
stat /etc/hosts查看 inode 变更,辅助判断是否被覆盖重写
验证解析行为是否真由 hosts 生效
攻击者常配合其他机制确保劫持生效,需排除干扰:
GitHub Hosts 更新工具(仅限中国用户),安全更新系统hosts文件,保留原有非GitHub条目,仅替换GitHub相关地址。支持备份恢复和风险提示。用于解决GitHub访问问题。
- 确认系统解析顺序:
cat /etc/nsswitch.conf | grep hosts,若为hosts: files dns,则 /etc/hosts 优先;若为dns在前或含mdns4_minimal等,可能绕过 hosts - 用不同用户测试解析:
sudo -u nobody getent hosts auth.company.com,对比 root 和普通用户结果——若仅普通用户失效,可能涉及 NSS 配置或权限限制(如某些加固环境禁用非 root 读取 /etc/hosts) - 抓包验证实际请求:
sudo tcpdump -i any port 53 -n -c 5同时执行ping auth.company.com,若无 DNS 查询发出,说明 hosts 生效;若有,则劫持未起作用或已被 bypass
溯源修改来源与关联后门
hosts 被改通常是入侵链路的结果,不是孤立事件:
- 检查近期登录日志:
last -a | head -20、grep 'Accepted' /var/log/auth.log | tail -15,定位可疑 IP 或非授权账号 - 查定时任务和启动项:
ls -l /var/spool/cron/root /etc/cron.*/* 2>/dev/null、systemctl list-unit-files --type=service | grep enabled,寻找自动修改 hosts 的脚本(如每小时 curl 远程配置并 echo 到 /etc/hosts) - 检查是否有隐藏进程写入:
lsof +D /etc/ | grep hosts,或扫描内存中正在写该文件的进程;也可用inotifywait -m -e modify,attrib /etc/hosts实时监控(需提前部署) - 核查关键系统文件完整性:
md5sum /etc/hosts /etc/nsswitch.conf /etc/resolv.conf,再比对已知干净镜像哈希;若发现 /etc/passwd 或 /bin/sh 被篡改,说明攻击已深入,hosts 只是表象
清理与加固措施
清除不等于安全,必须阻断再次发生:
- 恢复 hosts:从可信备份还原,或清空所有非必要行,仅保留
127.0.0.1 localhost和明确需要的内部服务映射 - 锁定文件权限:
sudo chown root:root /etc/hosts && sudo chmod 644 /etc/hosts;进阶可加不可变属性:sudo chattr +i /etc/hosts(注意:后续修改需先chattr -i) - 审计所有具备写 /etc/hosts 权限的账户:检查 sudoers 配置(
sudo -l)、是否有用户被赋予sudo tee /etc/hosts类权限 - 部署文件完整性监控(如 aide、tripwire)或启用 systemd 的
ProtectSystem=strict限制服务写入关键路径










