权限设置为 555。其他用户如何修改文件?

权限设置为 555。其他用户如何修改文件?

我运行的是带有 Vesta 的 Ubuntu 12.04 x64 VPS,以及一个使用 PHP 的网站。该网站曾多次遭到黑客攻击,注入的代码如下:

<?php $KoDgalxVvsZfidVcEOTJDeMX='ba'.'se6'.'4_deco'.'de';eval($KoDgalxVvsZfidVcEOTJDeMX("cHJlZ19yZXBsYWNlKCIvN0xna0xnND1IR2JEOGs2WDht....

为了解决这个问题,我决定将所有文件的权限和所有者更改为 555 和 root,这样任何用户都无法更改文件。我删除了 FTP 访问权限并保护了 SSH,因此只有我在 VPS 中的密钥才能连接。

尽管进行了所有这些更改,但其他用户始终能够更改文件、重命名文件夹并上传另一个被黑的文件。

您认为我遗漏了什么?有什么建议吗?谢谢!如果您需要有关此问题的更多信息,我很乐意与您分享,以帮助其他遭受同样困扰的人!

答案1

攻击者已获得您系统的 root 权限。您根本无法信任系统上的任何东西。rootkit 可以执行的操作范围非常广泛。

如果您在某处备份了内容,请使用它们。否则,您可以希望攻击者没有弄乱您的数据。转储您的 SQL 表并将其与其他内容(jpg、pdf、html,但不包括任何脚本/php/任何其他将要执行的内容)一起复制。将其复制到另一个系统,或者如果它足够小以便您能够再次上传,则将其下载到您的家用计算机。

尽一切可能验证你复制的内容仍然正确。(例如,检查 jpg 是否仍然都是有效的 jpg,以防万一。也许对它们运行病毒扫描程序?)

消除被破坏的安装。如果您的服务器托管在典型的托管服务上,那么希望他们已经设置好了一些东西,这样您就拥有一个控制面板,即使是主机上的 root 也无法弄乱它。因此,您可以希望攻击者没有设法触及他们破坏的机器之外的任何东西。(但是,如果您可以无密码访问该机器上设置的任何其他内容,请检查它们。)

尽你所能重新安装。最好还是转到 Ubuntu 14.04 LTS,因为无论如何你都必须重新安装。

不要将任何代码从受感染的系统复制到新系统。来自受感染系统的所有数据都应被视为潜在的瘟疫携带者。

Unix 文件系统语义要求对目录具有写权限,以便您删除文件。(文件名是从名称到 inode 的链接。创建硬链接(文件的其他名称)的系统调用是link(2),删除文件的调用是unlink(2)

如果在目录 ( chmod +t) 上设置了粘性位,unlink(2)并且rename(2)还要求调用者拥有要取消链接或重命名的文件。(无论该文件的写入权限如何)。/tmp/var/tmp的标准是1777(设置粘性位后,所有人都可写入)。

rm,shell 命令,需要POSIX在取消链接只读文件之前进行提示,但它必须检查这种情况。它实际上不必做任何unlink(2)其他事情,就像它对任何其他文件所做的那样。所以不要被愚弄,以为这对对手有任何影响。

这些都与防御攻击没有太大关系,因为最可能的情况是获得对 Web 服务器进程的控制权,或者获得使用对很多东西具有写访问权限的用户 ID 运行的其他程序的控制权。

您越能限制处理来自互联网的数据的进程可以写入的内容,攻击者从控制您的 httpd 升级到修改您的数据或控制您的整个机器的机会就越小。

这就是为什么您不应该以 root 身份运行 apache。

答案2

如果可以避免,您不应该以 root 用户身份运行 Web 服务器进程,因为这意味着 Web 服务中任何漏洞的危害都会彻底危害服务器。

鉴于你现在的情况,我建议从头开始在新服务器上工作 - 攻击者可以通过多种方法获得持久的 root 访问权限。请参阅这里了解更多信息。

答案3

尽管进行了所有这些更改,但其他用户始终能够更改文件、重命名文件夹并上传另一个被黑的文件。

如果您的 Web 根目录的父目录由运行 Web 服务器的同一用户拥有,那么这些父目录权限将覆盖设置给子文件和目录的任何权限。

例如,在您拥有的任何目录中打开“终端”进程。现在创建一个名为的文件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?

然后只需按下yreturn文件就消失了。

这就是为什么简单地更改文件权限永远不是保护 Web 服务器的有效方法。Web 服务器的工作方式非常简单(特别是基于 PHP 的服务器),这意味着 Web 服务器用户将始终拥有对其需要访问的文件的读写权限。因此,简单地更改权限chmod 555 [some files]并不是“防御”恶意软件和黑客攻击的有效方法。

至于您现在能做什么?好吧,仅仅更改权限和所有权是没有用的。更大的问题是您的 PHP 代码库容易受到攻击。因此,清理这类东西的唯一有效方法是清理您的 PHP 代码。如果此网站基于 Joomla!、WordPress 或 CakePHP 等现成框架,那么最好的做法是升级核心 Joomla!、WordPress 或 CakePHP 框架以填补安全漏洞。同样,如果 Joomla!、WordPress 或 CakePHP 插件容易受到攻击,则应升级/修补该插件以填补漏洞。

除此之外,您的核心系统软件(假设它是 LAMP(Linux Apache MySQL PHP)堆栈)也应该保持更新和修补。

归根结底,网站安全并非一次性的事情。它是一种必须坚持的整体心态和维护过程。否则,当您的网站被黑客入侵时,您将在事后无所事事地试图收拾残局,而这实际上可能比最初的恶意软件入侵本身造成的损害更大。

答案4

我同意重新开始使用服务器选项,但如果您想要更多的安全性和控制力,那么专用服务器是一个更好的选择。

至于您的情况,我建议的第一件事是禁用除 shell 访问之外的所有正在运行的服务。这意味着停止 FTP 服务、Web 服务器 (HTTP)、电子邮件等。接下来进入 shell 并导航到包含您声称被黑客入侵的项目的文件夹。然后输入:

ls -al

您应该在结果中看到类似以下内容:

drwxrwxrwx  2 root root  4096 2014-10-10 00:31 ./

如果第四项(或特别是第三项)实际上是“root”,那么您就麻烦大了,需要重新配置 Web 服务器,以便它根据文件夹以不同的用户身份执行操作。您应该查看 apache 的 mod_rewrite(或类似程序),然后相应地调整 apache 配置文件 (httpd.conf),以便系统在每次向文件夹发出请求时更改用户名。然后相应地更改文件夹的用户名和组名。

一旦修复,然后导航到文档根文件夹(可能是 public_html),使用编辑器(pico works)并输入以下内容:

<?php
echo shell_exec("whoami");
?>

然后将其保存为 who.php。接下来打开 Web 服务器,在任何浏览器中,转到您的网站主页,但在其末尾添加 who.php,您应该只会在屏幕上看到一个单词。如果该单词是 root,那么您就麻烦大了,需要再次执行上述步骤。如果该单词是 nobody,那么您就有点麻烦了,因为黑客非常了解该用户名。

相关内容