|
打开一个被挂马的木马网站,浏览器悄悄向某个IP发出一条请求,分析服务器返回一段混淆过的网站JavaScript——整个过程不到0.3秒。用户什么都没感觉到,木马但电脑里的分析密码、Cookie、网站甚至摄像头权限,木马可能已经被人握在手里了。分析木马分析网站干的网站,就是木马把这0.3秒里发生的事拆开、摊平、分析翻译成人能看懂的网站东西。 我第一次用这类网站是木马在2013年,当时帮朋友看一个WordPress站点。分析他的网站首页每隔几小时就跳转到一个博彩页面,刷新几次又恢复正常。 hosting后台日志里全是乱码,根本看不出问题。后来把可疑的JS代码丢进Sucuri SiteCheck,结果页面上直接标红了一段被base64编码的脚本。解码后是一串document.write,往页面里注入了一个隐藏iframe。那个iframe指向的域名,在VirusTotal上有37个引擎报毒。整个过程不到两分钟,比手动去翻混淆代码快太多了。 这类网站的核心能力其实就三块:抓取、解码、比对。抓取靠的是爬虫模拟浏览器访问,把页面里所有外链脚本、iframe、甚至CSS里的url()都扒下来。解码是重头戏——恶意代码作者最爱用的招数无非那么几种:eval执行、String.fromCharCode拼字符、base64套一层再套一层、十六进制转义。分析网站会自动跑几轮反混淆,把可读的代码还原出来。比对则是拿还原后的代码片段去撞已知恶意特征库,或者看它请求的域名有没有在威胁情报的黑名单里。 URLVoid和VirusTotal是两回事。VirusTotal更像一个通用扫描器,你丢文件、丢URL、丢哈希都行,它跑几十个引擎给你出报告。URLVoid专注在域名信誉上,会查whois年龄、Alexa排名、有没有出现在钓鱼域名列表里。Sucuri SiteCheck偏重网站层面,能检测挂马、恶意重定向、SEO垃圾链接。Quttera有个免费版,会给出一个“可疑度”评分,但免费版经常把正常压缩过的JS也标黄,误报率不低。我一般先跑Sucuri,如果它报干净但页面行为还是诡异,再上VirusTotal手动查域名。 有个细节值得说:很多分析网站对“混淆”和“恶意”的判定边界很模糊。jQuery压缩版也是混淆过的,Google Analytics的代码也动态创建script标签。判断恶意与否,关键看它有没有未授权的数据外发。比如一段代码把document.cookie的值拼进一个Image对象的src里,这基本就是偷Cookie的。如果它只是往一个CDN地址请求一个js文件,那大概率是正常依赖。分析网站的报告里,这个“外发行为”通常藏在“Network Requests”或“Outgoing Links”那一栏,得点开看。 去年碰到一个案例,客户网站被挂了“暗链”。页面底部多了一个display:none的div,里面塞了二十几个赌博关键词的a标签。用Sucuri扫,它只报了“suspicious hidden text”,没报恶意脚本。因为那段代码确实没执行任何JS,纯粹是HTML层面的SEO投毒。这种就得靠人工看DOM结构,分析网站只能给个提示。工具再强,也替代不了对页面实际渲染结果的观察。 免费工具够用吗?日常排查够。但如果你要分析一个APT组织的C2服务器,或者追踪一个刚注册三小时的域名,免费接口的速率限制和情报延迟就会卡住你。商业版比如Sucuri的完整版能看历史扫描记录、能设置告警,但一年几百美金,个人站长没必要。我的习惯是:免费工具初筛,可疑样本手动丢进沙箱跑一遍,再配合whois和DNS历史记录交叉验证。 最后说个反直觉的事。很多木马分析网站自己就是攻击目标。2019年有个叫“MalwareTips”的论坛被挂马,攻击者往分析工具的结果页里注入恶意脚本,专门坑安全研究员。你用工具查别人,工具本身也可能被污染。所以看到分析结果时,别全信,尤其是那些跳转链接和“下载详细报告”按钮。手动复制域名去另一个平台再查一次,花不了三十秒。 |