破坏共享虚拟主机帐户是否会威胁同级帐户的安全性,因为它们在同一台服务器上共享?
无论是通过 htaccess 设置、公开发布登录凭据和配置细节等,共享主机上的客户端可能面临来自恶意兄弟帐户的主要漏洞是什么?或者他们完全的菜鸟错误。
破坏共享虚拟主机帐户是否会威胁同级帐户的安全性,因为它们在同一台服务器上共享?
无论是通过 htaccess 设置、公开发布登录凭据和配置细节等,共享主机上的客户端可能面临来自恶意兄弟帐户的主要漏洞是什么?或者他们完全的菜鸟错误。
这取决于帐户之间的隔离程度。简化原本相当广泛的主题:
网络服务器运行,比如说,wwwrun:wwwdata所有网站都是组可读写的,帐户被 ftp-chroot 到他们自己的 webroot 中。站点 A 上的恶意脚本随后作为组 wwwdata 运行,并可能读取和写入其他 webroot 上的文件。你可以说这样的账户天生就被盗用了。
尽管如此,一些为客户维护网站(完全外包)的小公司可能会选择这种方式运营,因为“我们是唯一访问服务器的人”。维护不善、员工不满和安装易受攻击的第三方框架(通常不按此顺序)是主要风险。即,如果客户 A 不想将 MyNiceBlog 1.0 的高度公司定制版本升级到安全修复 1.5,因为移植定制会很昂贵,那么他实际上会危及同一台机器上的所有其他站点。
网络服务器如上运行,但有一些限制(“安全模式”)试图阻止脚本退出其网络监狱。问题是该过程自愿避免使用它仍然拥有的一些权利和权力。因此,您还需要删除一些可能导致恶意脚本能够再次使用这些功能的功能和特性(例如执行 shell 脚本)。该站点只是稍微安全一些,并且在讨价还价中失去了一些功能和性能。
网络服务器以完全权限运行,然后对于它收到的每个请求,它都会生成一个具有减少权限的自身副本。然后,每个 webroot 也由具有自己的组的特定用户拥有,并且没有交叉读取访问权限。用户被 chroot 到网站。如果一切正常,那么这个设置是相当安全的——所以你必须警惕可能使事情不应该工作的特权升级漏洞。根据安装的平台和软件,攻击面可能非常大。某些功能(例如加载动态模块)可能仍需要阻塞。
此外,进程在网络级别不是隔离的;因此,例如,来自站点 A 的任何请求都会被站点 B 视为来自同一主机,这可能对(例如)数据库服务器不利。如果站点 A 具有GRANT ALL PRIVILEGES ON mydb.* TO root@localhost,则站点 B 可以在具有完全访问权限的同一“本地主机”上连接到该数据库,而 A 则不明智。
每个网络服务器实例都在相当于自己的虚拟机中运行,具有独立的网络。这些站点不能互相看到,如果他们看到,它们使用外部 IP 地址这样做,因此 DB 服务器 A 不能将来自站点 B 的登录请求误认为来自其内部的请求。尽管如此,资源争用可能是一个问题,并且与外部的连接可能会被 NAT,因此它们无法区分。例如,站点 A 可能会伪装成站点 B 发送电子邮件,或者它可能会尝试回收所有可用的内存、带宽或磁盘 I/O 插槽,从而对站点 A 产生负面影响。一些低级功能可能在机器之间共享,并且可以用于安装攻击,例如时钟和随机源读取以破坏身份验证方案。
通常,是的,情况就是这样。
根据使用中的帐户分离机制,攻击者可能能够绕过主机提供的保护并攻击其他站点。该区域的安全性通常很差,以至于大多数攻击者会尝试在同一服务器上的站点之间横向移动。它经常起作用,足以让他们将其作为他们战略的一部分。以下是当今使用的一些隔离层及其提供的保护。我会假设 apache,因为这很常见。尽管这些相同的原则适用于其他服务器软件。
如果没有进行安全定制,Web 服务器将运行在所有站点之间共享的单个用户(“apache”或“nobody”或“www-data”),而文件将由特定的 FTP 用户拥有。目的是通过确保公众 (apache) 没有对您的文件的写访问权限来限制公众 (apache) 的访问类型。不幸的是,这种安排与当今大多数希望用户能够上传文件(包括可执行代码)的 Web 应用程序不兼容,从而允许站点自我更新、安装扩展程序以及通过站点执行的其他管理任务。
在这种配置中,在任何一个站点上运行的代码对另一个站点的文件具有与该站点本身相同的访问权限。这种配置很容易导致对许多 Web 应用程序的妥协。
使用 SuExec,CGI 应用程序在站点所有者的权限下运行,而不是使用 Apache 自己的权限。suPHP 和 suhosin 都将此行为扩展到 PHP(传统上不作为 CGI 可执行文件运行)。FastCGI 包括 fcgid 通常也提供相同的行为。
在这种制度下,文件通常仍可由 Apache 的用户帐户读取,但只能由站点所有者的帐户写入。这限制了大多数类型的横向移动,但仍然允许有限的一组攻击。
我观察到的一种此类攻击是这样的:攻击者会为服务器上的其他站点创建指向配置文件的符号链接,如下所示:
/home/user1/public_html/foo.txt -> /home/user2/public_html/wp-config.php
然后用户直接浏览该文件,它包含的配置(包括数据库密码)会显示给攻击者。
Kees Monshouwer 的一个名为mod_ruid2的新的实验性 Apache 模块在用户权限下运行 apache 进程本身。这个模块现在可以在 cPanel 服务器上使用,这意味着它被共享托管环境广泛部署。这可以防止上述攻击,但在面对不适当的权限和管理、权限提升漏洞和其他系统级问题时无法提供保护。它也与许多常见功能和扩展不兼容。
可以使用 chroot 和类似功能(例如 cgroups)在隔离机制下运行服务器,以提供额外的隔离和安全性,而无需花费虚拟化。不过,这个选项传统上并没有被追求很远。
在不给每个用户自己的服务器的情况下,给每个用户自己的虚拟服务器是下一个最好的事情。这是“云”托管的核心,它提供了相对较强的安全性,但成本相当高。