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

直接检查 /etc/hosts 文件是否被非法修改,是发现域名劫持最快速有效的切入点。这类篡改往往不触发杀毒软件告警,但会导致访问银行、邮箱、百度等网站时跳转到钓鱼页、空白页或无法连接,本质是系统绕过 DNS,强制将域名解析到恶意 IP。
一、快速识别 hosts 文件中的异常条目
执行 sudo cat /etc/hosts 查看全部内容,重点过滤以下几类可疑行:
- 排除以
#开头的注释行,以及标准本地条目(如127.0.0.1 localhost、::1 localhost) - 警惕将知名域名映射到非常规 IP 的记录,例如
185.143.224.12 www.alipay.com——该 IP 属于境外可疑段,极可能是钓鱼服务器 - 检查 IP 格式是否合法(如
256.1.1.1是无效地址),域名是否拼错(如baidu.coom)、分隔符是否混用(空格与制表符交错) - 留意新增的、指向 CDN 域名或云服务子域名的映射(如
xxx.cloudfront.net、xxx.azurewebsites.net),尤其是对应 IP 不属于主流云厂商网段时
二、核查文件权限与隐藏属性是否被操控
权限异常往往是系统已被渗透的明确信号:
- 运行
ls -l /etc/hosts,确认所有者为root:root、权限为-rw-r--r--(即 644)。若出现666、777或所有者非 root,说明文件控制权已失守 - 在支持扩展属性的系统(如较新 Linux 或 macOS)上,执行
ls -l@ /etc/hosts,检查是否存在uchg(用户不可更改)等标志——攻击者常加锁防止你恢复文件 - 对比
/etc/hosts与原始发行版默认内容(可通过rpm -Vf /etc/hosts检查完整性,适用于 RHEL/CentOS;Debian/Ubuntu 可参考dpkg --verify hostname类似逻辑)
三、定位修改源头:谁改的?何时改的?怎么改的?
仅清理条目治标不治本,必须揪出篡改行为本身:
- 若系统启用 auditd,用
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,排查正在运行且有网络行为的可疑进程;特别关注名称伪装成系统进程(如kthreaddk、sysupdate)或 CPU 占用异常高的进程
四、同步排查关联配置与持久化痕迹
hosts 被动改,几乎从不单独发生,务必延伸检查:
-
/etc/resolv.conf:是否被改成非常规 DNS(如103.104.227.12),而不仅是国内常用公共 DNS(如114.114.114.114) -
/etc/crontab及/etc/cron.d/下所有文件:搜索含hosts、echo、sed -i、cat >>等关键词的定时任务 -
/tmp和/var/tmp:查找最近生成的脚本(find /tmp /var/tmp -name "*.sh" -mmin -1440),常是劫持程序本体或下载器 -
systemctl list-timers --all:检查是否有伪装成系统服务的定时器,其触发的 unit 文件可能藏在/etc/systemd/system/下
确认问题后,先停掉对应进程,清除恶意条目,再刷新 DNS 缓存(sudo systemd-resolve --flush-caches 或 sudo killall -HUP systemd-resolved)。整个过程不复杂但容易忽略关键细节。


















