问题描述

所以我几个月来一直在这个问题上解决这个问题,并决定这是超出我有限的 (如果有的话) 服务器技能,而且我需要专家的帮助。

我有一个 VPS(具有根访问权限),它承载了几个不同的 PHP 网站,其中一些是 WordPress-based 。由于 MailPoet vulnerability,一些网站被 a malware 感染。我清理了受感染的网站,完全删除了 MailPoet,后门帐户和相关的东西,但是恶意软件在一段时间内不断复活。以下是我可以描述的内容:

  • 有两个恶意软件签名 (对不起,如果我使用错误的术语),都注入在 PHP 页面的顶部。一旦看起来这个<?php $ozufdqjmhx = '7825h!>!%x5c%x7825tdz)%x5c%x7825bbT-%x5c%x782vg}... 与变量 $ozufdqjmhx 不时变化,另一个从<?php if(!isset($GLOBALS['ae... etc etc 开始

  • 恶意软件随机返回。有时候,清洁后的一天会有一天,有时是一周或数周。

  • 只有以前被感染的文件/目录/网站再次被感染。新目录或旧的未受影响的目录总是干净的。旧的受感染目录中的新文件虽然受到感染。

  • maldet(使用 ClamAV 我相信) 无法检测到任何恶意软件。 PHP Shell Detector 可以,但由于仅作为检测器而无法修复。

你们能帮助还是给我一个方向我应该去哪里?一百万感谢提前!

(我也很抱歉,如果这个问题不符合网站的规定,当我是 StackOverflow 的日常用户时,这是我第一次在此安全子网站) 。

编辑:我非常感谢你们的任何建议,但擦拭服务器并从头开始不是一个选择。如果是这样,为什么要问这个问题呢? 🙂

编辑 2:在 @ Mints97 的答案之后,我检查了所有打开的端口 – 看起来正常:

21/tcp    open  ftp
22/tcp    open  ssh
25/tcp    open  smtp
53/tcp    open  domain
80/tcp    open  http
110/tcp   open  pop3
143/tcp   open  imap
443/tcp   open  https
465/tcp   open  smtps
587/tcp   open  submission
993/tcp   open  imaps
995/tcp   open  pop3s
3000/tcp  open  ppp
3306/tcp  open  mysql
5432/tcp  open  postgresql
8000/tcp  open  http-alt
8080/tcp  open  http-proxy
8082/tcp  open  blackice-alerts
10000/tcp open  snet-sensor-mgmt
20000/tcp open  dnp

编辑 3:这是针对 @QuestionOverflow:在搜索 your other answer 中提到的 4 个域时,我遇到了一个脚本来消除恶意软件 here 。在代码中,我们可以看到 if (preg_match('/^<?php $[a-z]{10} = '/', $fh_str)) {,它的目标是第一个签名。我会说现在是同样的恶意软件,或至少是同一个人通过同样的漏洞。很有趣

编辑 4:第二个恶意软件已经被讨论过 here 如果可能有帮助,是的,显然从 4 个域中随机抽取一些有效负载:”33db9538.com”,”9507c4e8.com”,”e5b57288.com”,”54dfa1cb.com” 。我已将全部 4 添加到我的 hosts 文件中,指向 127.0.0.1 。让我们看看下一步。

编辑 5:几个人建议这个问题已经在 How do you explain the necessity of “nuke it from orbit” to management and users? 这里回答了。老实说,我没有看到其他问题如何回答我的问题。我在问如何消除恶意软件,而不是向老板解释为什么要重新安装服务器。

最佳解决方案

我将启用 auditd 来监视您希望退回的文件的更改。您将能够确定负责进行这些更改的帐户和流程。

安装 auditd(在所有系统上未安装 pr default) 后,可以开始监视文件中的更改。为此,只需运行命令:

auditctl -w /var/www -p wa

此命令将记录所有文件更改到 auditd 日志文件。通常你会发现它在/var /log /audit /,但它是系统依赖。

如果您担心攻击者可能会注意到这一点 (可能会删除该规则),则可以通过运行以下命令来锁定它:

auditctl -e 2

在重新启动系统之前,不能对审核规则进行任何更改。在执行此操作之前,请确保上述审核规则不会产生疯狂数量的日志。

最后,审计日志有点神秘。一旦您发现系统再次退回,您可以使用以下命令搜索审计跟踪:

ausearch -f /var/www/backdoored_file.php

我希望这将为您提供有关发生的事情的线索。祝你好运!

额外:

要使审核规则在重新启动后生效,您必须在/etc/audit/audit.rules 中定义它们

次佳解决方案

我最初发表这个评论,但我认为这可以做一点解释。

根据我对网站收购情况的经验,当 shell 上传到网站时,黑客可能会利用服务器漏洞,获得 root 访问权,后门 SSH,并妥协服务器上的所有其他站点,管理这个,并做一个简单的 shell 。我认为,在你的情况下,这是第二种情况,因为你说 VPS 上只有一个网站被感染。

现在为什么壳”ressurect” 。如果您的服务器不是”rooted”,那只剩下四个其他选项我可以想到:

  1. 一个”bindport” 后门

  2. 一个”backconnect” 后门 (罕见)

  3. 您的一个 PHP 文件中的自定义后门或”downloader”

  4. 一个受损的 MySQL 帐户,文件访问和远程登录 priveliges 。

我们来谈谈头两个,首先要怎么处理呢? “bindport” 和”backconnect” 是传统上与 Web Shell 一起运送的两个小程序,通常是 Perl 脚本。它们通常在/tmp 文件夹中创建 (并从中执行),该文件夹可写入所有内容。要找到它们,您可以监视所有进程的奇怪脚本或程序,并在/tmp 文件夹中查看一下。此外,建议设置防火墙。

“Bindport” 打开一个新的端口用于传入连接,并提供对任何敲入 (通常是 password-protected) 的任何人的 Unix shell 访问。找到它,寻找奇怪的开放端口 (许多黑客只是打开端口 31337 或类似的东西) 。

“Backconnect” 完全正是所谓的 – 它打开与远程服务器的连接,同时授予 shell 访问权限。它比”bindport” 更少使用,主要是因为大多数黑客太懒了,无法使用它。只有”bindport” 由于某些原因 (如防火墙设置) 而失败,通常才会使用此方法。

现在,关于自定义后门和”downloaders” 。这些很少被使用,因为攻击者需要知道 PHP 至少有一点使用它 (和今天大多数 site-jackers 只不过是 skriptkiddies 或 badly-made 机器人) 。他们大多是 stand-alone 文件,如简单的 shell,或者一些额外的代码注入到一个脚本中。他们可以执行给他们的命令 (PHP 代码,shell 命令),也可以用一个简单的文件写入数据 (它们可以是另一个后门) 。您可以尝试查找具有 evale 修改器,execsystemfopenfopen /fopen /fopen /fwrite 等 C++ CZYX2ZYXCBAC,preg_replace 等文件,但是,处理这些内容的最佳方式是最简单的恢复整个网站从备份。如果您决定这样做,请务必事先从服务器上擦除所有其他网站的文件,以免您错过了 stand-alone shell 或后门。

而最后一个非常不可能,但仍然可能的情况。如果您已经与 MySQL root 用户 (或仅具有文件写入权限的用户) 一起运行 WordPress,或者只是具有足够权限查看具有文件写入权限的另一用户的密码哈希的用户,并且该用户具有文件写权限有权力从任何地方连接到数据库,好吧… 你得到它。我建议您更改所有 MySQL 密码。

现在为什么只有一组目录被感染了。有两种可能的情况:黑客,没有使用”root” 服务器,使用有限数量的目录 (可能是您的所有网站的目录),或者他们可以访问其他目录,但根本不使用他们。

如果是后一种情况,我会赌注你要么是一个白痴,要么是一个非常懒惰的人。或与机器人。是的,这可能会让你失望,但我怀疑你的网站对于一个经验丰富的黑客来说真的很重要:它可能被用来从用户那里获取点击次数,托管恶意软件,或者简单地输出一大堆垃圾邮件倍。你正在处理一个 scriptkiddie,或者一个没有经验的傻瓜试图从 click-trading 和垃圾邮件中或者与机器人一起刮几分钱。但是,我认为这更有可能是一个活着的人:这可以解释 shell 的”ressurections” 的不规则性。

第三种解决方案

我管理的网站发生了非常类似的事情。在删除恶意代码,然后大概 2 个星期后出现了很多挫折之后,我发现了这一点:

我注意到所有文件被修改的日期戳,然后我查看了那一分钟的访问日志。我看到某个页面被请求似乎是可疑的,因为它是一个没有活动的 wordpress 主题的 404.php 。我检查了该页面,并看到一行基本上是 eval($ _ POST [‘php’]) 编码在 base64 中。

所以我没有删除代码,而是改变它保存发送到该页面的任何东西的日志。两周后,我的网站保持安全,但是一个日志文件记录了一些发送给它的有趣的代码。

第四种方案

听起来像攻击者在你的服务器上安装了一个 rootkit 。一个 rootkit 可以提供一个后门,即使一切看起来都很干净。

我认为最好的方法是擦拭服务器并从头重新安装。修补网站以消除漏洞。如果您需要从备份恢复 (您有备份,对吗?:)) 确保它是一个干净的。

设置一个脚本以查找感染痕迹 (例如 ID 10001 用户),以防除了 MailPoet 问题之外的其他漏洞。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。