在 Apache 中安全地存储 Web 应用程序服务的凭证

信息安全 Web应用程序 渗透测试 阿帕奇
2021-09-08 03:43:00

我们正在使用带有 apache2 的 wsgi 在 python 中运行 Web 应用程序,并且必须提交渗透测试。如果攻击者以 apache 用户的身份获得 shell 访问权限,测试人员将探索造成损害的可能性。

目前,潜在的破坏是巨大的,因为我们将数据库、s3 服务等的凭据都存储在 apache 用户可读的文本文件中。这似乎是设置这类应用程序时的默认建议,但有没有更安全的方法来做到这一点?

我正在考虑使用 apache(以 root 身份)将带有 setenv 的环境变量传递给 wsgi 应用程序,但这实际上更安全吗?对此有何建议?

1个回答

这真的取决于你的威胁模型是什么。

如果我们把其他所有东西都拿走,只考虑应用程序,那么基本上你就无法真正提高应用程序的安全性了。远离深奥的解决方案,专注于更易于维护和清洁的解决方案。我想强调干净,因为通常安全灾难是由混乱的情况引起的。

无论如何:如果攻击者在应用程序用户下远程执行代码,你不能以任何方式限制对配置的访问——应用程序必须访问它,攻击者也可以。如果他获得了文件读取功能,那么存储在数据库中将保护您免遭泄露——即使您必须将数据库的凭据存储在文件中,攻击者也希望无法利用这些凭据。如果他获得 SQL 注入,访问数据库(在不太可能的情况下这不会转换为远程代码执行),那么将它们放在文件中会更安全。实际上,这取决于您的应用程序是如何设计的。

以 root 身份运行 Apache 确实是个坏主意(好吧,我的意思是禁用特权下降)。与其实施一次性解决方案,不如专注于无需更多黑客攻击即可保持原位并获得渗透测试的好处的东西。例如,通过标准输入传递东西会使测试人员很难检索凭证,但从长远来看,你可能最终会得到一个 bash 脚本来完成这项工作......这比其他解决方案差得多.