我是一名软件安全助教,运行着一个设计上存在漏洞的服务器。
这是一台 nginx 服务器,它开放了 40 个端口。每个端口都服务于一个 Web 应用程序,而所有 Web 应用程序都很容易受到黑客攻击。如果一个 Web 应用程序被攻陷,攻击者将获得 www-data 用户的权限,然后攻击者将能够攻陷其他 39 个 Web 应用程序。有什么方法可以防止这种情况发生?我不希望攻击者获得访问权限超过单个被黑客入侵的网络应用程序。
服务器上的硬件限制使得 Docker 变得不可行,更不用说虚拟机了。
答案1
如果一个 Web 应用程序被攻陷,攻击者将获得 www-data 用户的权限,然后攻击者将能够攻陷其他 39 个 Web 应用程序。有什么方法可以防止这种情况发生吗?
是的。不要这样做。绝对没有理由以单个用户身份运行不相关的应用程序。典型的类 Unix 系统上有超过 65,000 个可用用户 ID,您应该利用它们。如何做到这一点取决于特定的应用程序及其使用的技术,最好在单独的问题中提出。
答案2
这听起来像是应用程序的一个独特情况,但我想问一下开发人员:如果应用程序是 PHP 应用程序,为什么他们不能使用它$_SERVER['SERVER_PORT']
来获取当前应用程序的当前端口,并相应地封锁数据?这可以作为检查添加到 PHP 程序的顶部,如果发现任何不正常的情况,只需exit();
做一些明确禁止不良行为的事情即可。如何做到这一点取决于应用程序。