直接检查/etc/hosts文件是否被非法修改是排查域名劫持最快速有效的切入点,需重点核查异常映射行、权限属性及修改源头,并同步排查resolv.conf、crontab等关联文件。

直接检查 /etc/hosts 文件是否被非法修改,是排查域名劫持最快速有效的切入点。这类劫持往往不触发杀毒软件告警,但会导致访问百度、银行、邮箱等网站时跳转到钓鱼页或空白页,本质是系统绕过 DNS,强制将域名解析到恶意 IP。
一、确认 hosts 文件内容是否异常
用终端打开文件,重点看是否有非本地、非测试用途的映射行:
- 执行 sudo cat /etc/hosts,逐行检查每条记录
- 过滤掉以 # 开头的注释行和 127.0.0.1 localhost 等合法本地条目
- 特别警惕形如 185.143.224.12 www.alipay.com 这类将知名域名指向境外 IP 的行——该 IP 很可能属于钓鱼服务器
- 注意空格/制表符是否混用、IP 格式是否错误(如 256.1.1.1)、域名是否拼错(如 baidu.coom)
二、检查文件权限与隐藏属性
即使内容正常,若权限失控或被加锁,也说明系统已被渗透:
- 运行 ls -l /etc/hosts,确认所有者是 root:root,权限为 -rw-r--r--(644)
- 在 macOS 或较新 Linux(启用 extended attributes)上,额外执行 ls -l@ /etc/hosts,查看是否存在 uchg(用户不可更改)等隐藏标志
- 若发现权限为 666、777 或所有者不是 root,或存在 uchg 标志,说明文件已被主动加固或篡改
三、定位是谁改的——监控与溯源
仅恢复文件不够,必须揪出修改源头,否则几小时后又会被覆盖:
- Linux 下可用 auditctl 实时监听: sudo auditctl -w /etc/hosts -p wa -k hosts_monitor 后续用 sudo ausearch -k hosts_monitor 查看谁、何时、通过什么命令写的
- 若 auditd 未启用,可临时用 inotifywait(需安装 inotify-tools): sudo inotifywait -m -e attrib,modify /etc/hosts
- 结合 ps aux --forest 和 lsof -i,排查正在运行且有网络行为的可疑进程
四、关联排查其他被篡改点
hosts 被动改,往往不是孤立事件,要同步检查同类高危目标:
- /etc/resolv.conf:是否被改成非法 DNS(如 114.114.114.114 是合法,但 103.104.227.12 就可疑)
- /etc/crontab 及 /etc/cron.d/ 下文件:是否有定时任务反复写入 hosts
-
/tmp 和 /var/tmp:查找最近生成的脚本(如
*.sh、*.py),常是劫持程序本体 - systemctl list-timers --all:检查是否有伪装成系统服务的定时器
查实后,先停掉对应进程,再清除恶意条目,最后刷新 DNS 缓存(sudo systemd-resolve --flush-caches 或 sudo killall -HUP mDNSResponder)。修复不是终点,而是把这次修改行为当作入侵入口,继续深挖账户、日志和网络连接。











