我们最近有一个网站被黑客入侵,一些 PHP 代码被注入到 index.php 文件中,如下所示:
eval (gzinflate(base64_decode('s127ezsS/…bA236UA1')));
该代码导致另一个 php 文件 (cnfg.php) 被包含,这导致显示一些与制药相关的垃圾邮件(但只有 googlebot 等才能看到)。这看起来像是针对 wordpress 的制药黑客攻击,只是我们没有运行该软件。该代码已被删除,但我希望防止此类事件在未来再次发生。
我意识到这是一个相当普遍的问题,可能存在无数的安全漏洞导致这一问题,但我想我还是把这个问题提出来,以防有人过去遇到过这样的问题。
有哪些潜在的安全漏洞会允许这些 php 文件上传?我该怎么做才能防止这种情况再次发生?
干杯
答案1
您需要弄清楚它是怎么到达那里的。
- 攻击者是否可以通过 sftp/scp 访问文件系统?
- 如果发生这种情况,你需要锁定你的远程访问方法
- 攻击者是否使用了一些上传脚本或者现有脚本中的一些错误来修改文件?
- 修复脚本,更改脚本和 Web 内容的权限,以便 Web 服务器进程无法更改它们。Web 服务器应仅限于修改某个数据目录中的文件。您的脚本和文件通常不应由 Web 服务器拥有或写入。
- 该脚本是否是您所安装的某些恶意软件的一部分?
- 我曾见过类似的东西包含在 wordpress 模板中。毫无戒心的用户从某个随机网站下载了模板。这些模板包含一个从外部 Web 服务器运行代码的功能。这与糟糕的权限设置相结合,使攻击者能够修改其他内容。
答案2
只是一个警告。
如果您使用 FileZilla 作为 FTP 客户端,那么恶意软件会从 Filezilla 纯文本文件 (哎呀!) 中获取您的 FTP 凭据,并使用该信息插入恶意软件代码(由“gzinflate(base64_decode)”命令周围的 #b58b6f# 类型的代码表示)。这就是您的文件受到攻击/泄露的方式。
查看您的 %APPDATA%/Roaming/Filezilla 文件夹。其中一个 XML 文件以纯文本形式包含您的所有 FTP 网站凭证(用户/密码/等)!而 FileZilla 人员拒绝修复这个明显的安全漏洞。
我的建议:从您的计算机中删除 FileZilla(并且您必须手动删除 APPDATA 文件夹中的文件夹)。
如果您需要安全的 FTP 客户端,请使用 WinSCP (www.winscp.net),您可以在其中设置主密码,并且您的所有站点凭据都会被加密。
只是一个警告...Rick...J
答案3
入侵的可能性非常大。有一条信息可以帮助限制这种情况,那就是您拥有的托管类型(共享、专用、虚拟)以及您的托管人是谁。一些潜在的入口点是
- 管理员账户被盗
- 妥协你的ftp/ssh/web console/etc 帐户。如果您曾经通过未加密的协议(如 FTP)发送密码,请停止这样做。
- 妥协你的拥有本地开发机器
- 服务器上的任何服务器软件都存在漏洞,例如 Apache 或其任何模块。
您网站的 PHP 中存在应用程序级漏洞:
- 您是否使用第三方软件?如果是,它是最新的吗?
- 您是否在网站上编写了大量自己的程序?如果是这样,那么您可能有无数种方法可以编写漏洞。检查任何接触来自用户输入的数据的方法(REQUEST/GET/POST/COOKIES/FILES)。如果您允许文件上传,您是否将这些文件不加过滤地保存到 Web 可查看的目录中?如果是这样,有人可以上传 .php 脚本,然后查看它。如果您使用以下模板解决方案,include/require 语句是特别热门的目标:
<?php include $_GET['page'] . '.php'; ?>
如何防止其再次发生?
- 确保你绝对信任主机的安全性。打电话给他们,询问他们的安全政策,当漏洞出现时他们修补服务的速度有多快,等等。
- 跳过廉价的共享主机,购买专用或虚拟专用。使用服务器的人越少,攻击的载体就越少
- 保持您自己的第三方应用程序/库为最新。加入他们的邮件列表、RSS 订阅源或任何其他方式,以便及时了解他们的发布版本。
- 审计你自己的代码。如果你在这方面经验不足,可以找一个愿意付费的人。
- 将您的网站置于 git 或 subversion 等版本控制中。将生产目录保留为工作副本,以便您可以轻松地从代码库中检测到更改(但请确保阻止对 .git 和 .svn 目录等元数据的访问)。
答案4
您可能想尝试http://www.hardened-php.net/suhosin/除其他外,它可能会禁用 eval()。如果 cnfg.php 是远程托管的,它也可能阻止它被包含。
如果可能的话,不要授予用户正在运行的 Web 服务器对 php 文件的写权限。