上周三凌晨两点,网站一位做独立站的病毒朋友发来截图:Google Search Console里突然冒出三百多条陌生URL,全指向博彩页面。检测他的网站站是个卖手工皮具的小博客,日访问量不到两百。病毒这就是检测典型的网站病毒——不是电脑中毒那种弹窗,而是网站服务器端被注入了恶意脚本或垃圾链接。检测它,病毒靠的检测不是杀毒软件,是网站看日志、比文件、病毒盯异常。检测
先说日志。网站很多人装了CDN或WAF就以为万事大吉,病毒但攻击者往往从你忽略的检测角落钻进来。比如那个皮具站,我让他导出最近七天的原始访问日志,用grep筛出状态码200但URL里带“?id=”或“/go/”的请求。一查,每天凌晨三点到四点,固定有个IP段在批量请求不存在的路径,返回全是200。正常网站不会对随机路径返回200,除非被挂了软404或恶意重定向。这就是第一个信号:异常状态码与请求频率不匹配。
接着看文件修改时间。用
find /var/www -type f -mtime -7列出最近七天被改过的文件。他的WordPress主题目录下,functions.php在三天前被改过,但那天他没动过任何代码。打开一看,文件末尾多了一行eval(base64_decode('...'))。这就是典型的webshell。检测网站病毒,别只扫根目录,wp-content/uploads里藏个.php图片马是常见手法。我见过一个案例,攻击者把后门伪装成cache/avatar_1x1.jpg.php,文件头是JPEG,中间夹着PHP代码。数据库也得查。他的
wp_options表里,siteurl被改成了带跳转的域名。这种叫“条件跳转病毒”——只对谷歌爬虫返回恶意页面,普通用户访问正常。检测方法是:用curl模拟Googlebot的User-Agent去请求首页,对比返回内容。curl -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://example.com,如果返回的HTML里出现<script src="http://恶意域名/1.js">,而普通浏览器看不到,那就是中了cloaking病毒。还有种更隐蔽的:DNS劫持型病毒。你服务器本身干净,但域名解析被改到攻击者的IP。检测方法简单——用
dig对比不同公共DNS的解析结果。dig @8.8.8.8 yourdomain.com和dig @1.1.1.1 yourdomain.com,如果A记录不同,或者TTL异常短(比如60秒),基本可以确定。我见过一个外贸站,国内解析正常,国外解析到俄罗斯IP,专门骗欧美用户。日常巡检不用太复杂。我自己的习惯:每周一早上跑三个命令。
grep -r "eval(" /var/www --include="*.php";ls -la /tmp看有没有可疑的.sh或.py;netstat -tunlp | grep -v "127.0.0.1"查异常外连。有次发现/tmp/.X11-unix下多了个kworker文件,实际是个挖矿脚本。删掉后,CPU从90%降到5%。别迷信在线扫描工具。Sucuri、Quttera能查已知特征,但变种病毒改个混淆方式就绕过了。最可靠的是文件哈希基线。装个
aide或tripwire,首次运行生成数据库,之后每天对比。有变化就报警。我那个皮具站朋友后来装了这个,第二天就抓到wp-includes里一个class-wp-text.php被改,攻击者加了file_put_contents写马。他手动删掉,又改了SSH端口,加了fail2ban。一周后日志干净了。最后说个反直觉的:网站病毒检测最怕“干净得反常”。正常站点日志里总有404、500、爬虫、扫描器。如果某天所有请求都返回200,且User-Agent全是空或伪造的,那可能被挂了“全站镜像”病毒——你的内容被复制到攻击者服务器,你这边只是空壳。检测方法是:
curl -I看响应头里的X-Cache或Server字段是否异常,或者用wget --spider遍历几个随机URL,看返回内容是否为空。我见过一个案例,攻击者用mod_rewrite把所有请求重写到index.php,而index.php只输出空白,但搜索引擎里你的站全是垃圾关键词。这种病毒不占资源,不弹窗,但毁掉你的SEO。检测完记得清干净再上线。别只删文件,要查
顶: 5踩: 655crontab -l、/etc/rc.local、~/.bashrc。有次我删了webshell,但忘了/etc/cron.d/里有个每五分钟下载一次后门的任务。结果第二天又回来了。网站病毒检测不是一次性动作,是持续对账。你比攻击者更了解自己的文件,这就是优势。






评论专区