PHP eval(gzinflate(base64_decode(..)))破解 – 如何防止它再次发生?

我们最近有一个网站被黑了,其中一些PHP代码被注入到index.php文件中,看起来像这样:

eval(gzinflate(base64_decode('s127ezsS / … bA236UA1')));

该代码导致另一个php文件(cnf​​g.php)被包括在内,导致一些与制药有关的垃圾邮件被显示(但只能被googlebot等人看到)。 这看起来像WordPress的药品黑客,除非我们没有运行该软件。 代码已经被删除,但是我希望能够防止这种情况在将来发生。

我意识到这是一个相当广泛的问题,可能会有无数的安全漏洞可能是负责任的,但是我认为我会把它放在那里,以防过去有人遇到过这样的问题。

什么是一些潜在的安全漏洞,将允许这些PHPfile upload? 我能做些什么来防止这种情况发生?

干杯

你需要知道如何到达那里。

  • 攻击者是否可以通过sftp / scp访问文件系统?
    • 如果发生这种情况,您需要locking远程访问方法
  • 攻击者是否使用了一些上传者脚本或现有脚本中的一些错误来允许他们修改文件?
    • 修复脚本,更改脚本和Web内容的权限,以便Web服务器进程不能更改它们。 Web服务器应该限于修改某个数据目录中的文件。 您的脚本和文件通常不应该由Web服务器拥有或写入。
  • 这个脚本是否是作为一个恶意软件的一部分?
    • 我已经看到包括作为wordpress模板的一部分的东西。 一个不知情的用户从一些随机站点下载模板。 这些模板包括一个从外部Web服务器运行代码的function。 这与糟糕的权限设置相结合,攻击者可以修改其他东西。

只是一个警告。

如果您使用的是FileZilla作为您的FTP客户端,则会有恶意软件从Filezilla PLAIN TEXT FILE(yikes!)抓取您的FTP凭据,并使用该信息插入恶意软件代码(由#b58b6f#代码types围绕着一个“gzinflate(base64_decode)”命令,这就是你的文件如何受到攻击/攻击的原因。

查看你的%APPDATA%/ Roaming / Filezilla文件夹。 其中的一个XML文件在PLAIN TEXT中拥有所有的FTP网站证书(用户名/密码/ etc)! 而FileZilla的人拒绝修复这个明显的安全漏洞。

我的build议:从您的计算机中删除FileZilla(并且您必须手动删除您的APPDATA文件夹中的文件夹)。

如果您需要安全的FTP客户端,请使用WinSCP(www .winscp .net),您可以在其中设置主密码,并且您的所有站点凭证均已encryption。

只是一个警告…. Rick … J

有这样一个巨大的领域的可能性,这可能已经进入。有助于限制这种情况的一个信息是什么types的托pipe(共享,专用,虚拟),以及你的主人是谁。 一些潜在的入口点是

  • pipe理员帐户的妥协
  • 妥协您的提供商的ftp / ssh / web控制台/ etc帐户。 如果你曾经通过一个不encryption的协议(如FTP)发送你的密码,停止这样做。
  • 妥协自己的本地开发机器
  • 服务器上的任何服务器软件(如Apache或其任何模块)都存在漏洞。
  • PHP中的应用程序级漏洞:

    • 您是否正在使用第三方软件,如果是的话,它是最新的?
    • 你在网站上写了大量自己的编程吗? 如果是这样,有一百万个方法可以写出一个漏洞。 检查任何触及用户input(REQUEST / GET / POST / COOKIES / FILES)的数据的方法。 如果您允许file upload,您是否将这些未经过滤的文件保存到网页浏览目录? 如果是这样,有人可以上传.php脚本,然后查看它。 如果您使用如下模板解决scheme,include / require语句是特别热门的目标:

    <?php include $_GET['page'] . '.php'; ?>

如何防止它再次发生?

  • 确保你绝对相信你的主机的安全。 打电话给他们,让他们遵守安全政策,在漏洞出现时他们的服务有多快。
  • 跳过廉价的共享主机,并支付专用或虚拟专用。 使用服务器的用户越less意味着攻击的载体就越less
  • 保持你自己的第三方应用程序/库最新。 获取他们的邮件列表,RSS源,或任何与他们的发布保持同步的任何东西。
  • 审核你自己的代码。 如果你没有足够的经验,找一个人来付钱。
  • 保持您的网站版本控制像混帐或颠覆。 保持您的生产目录为工作副本,以便您可以轻松地检测代码库中的更改(但要确保阻止访问.git和.svn目录等元数据)。

您将需要find允许此代码上传的漏洞。

我经历了类似的黑客攻击,它被确定为由第三方Joomla扩展上传,允许FTP上传。

在我的情况下,我删除了Joomla扩展,并告诉Web开发人员不要再安装它。

根据你的情况,你可能想禁用eval,base64_decode和gzinflate。

您可以通过查找该行在php.ini中执行此操作

 disable_functions = 

并将其设置为

 disable_functions = eval, base64_decode, gzinflate 

您将需要重新启动您的Web服务器才能使更改生效。

还值得一提的是,当我用clamscan扫描受感染文件时,它被识别为恶意软件。 我正在运行ClamAV版本0.96.1

我现在没有我的笔记,所以不能告诉你确切的结果。

如果这样做是可行的,你可以安排一个工作,定期(也许是每小时)对你的代码运行clamscan来监视未来的感染。

您可能希望尝试http://www.hardened-php.net/suhosin/ ,其中,可能已禁用eval()。 如果cnfg.php是远程托pipe的,它可能会阻止它被包含在内。

如果可能的话,不要授予用户Web服务器作为对php文件的写访问权限。