Stack Exchange 的系统结构是否应该更加模糊?

信息安全 披露 朦胧
2021-08-27 15:45:07

我注意到 Stack Exchange 总是揭示其服务器和系统的详细结构(请参阅 这些 博客 文章)。还有他们测试的确切结果和弱点(参见的和最新的测试结果)我知道开源软件关于安全性的概念,很多眼睛让它比一只眼睛更安全,但我一直认为这是通用东西的案例,不要透露您自己的确切和详细的系统网络架构。

虽然我承认它非常有用和有教育意义,我喜欢阅读和研究它的每一点,它被认为是许多事情的参考,但我是否正确地假设披露这么多细节可以被认为对攻击者并且是明显的安全漏洞?

编辑:同样正如 Henning Klevjer 所指出的,数据浏览器也是内部数据结构和数据库外观的一个很好的来源,如果入侵成功,这可能是一个指南,可以轻松更改或损害特定数据。

我认为这一切都很好,应该在其他站点和系统中鼓励更多的开放性,但是 Stack Exchange 不会离这太远了吗?任何人都可以知道数据中心在哪里、有多少、使用的服务器硬件、完整的堆栈模式、使用的操作系统、网络拓扑以及确切的软件版本(在许多情况下)。您可以了解定期维护;究竟发生了什么,正确发生了什么,错误发生了什么,为什么,以及他们正在做些什么来使它正确。我认为这很棒,但它安全吗?

3个回答

不,您应该始终假设攻击者知道一切。大多数非政府开发人员和架构师认为默默无闻的安全性是不好的做法。它提供的障碍是微乎其微的,如果某些事情是保密的,那么隐藏一个缺陷可能就是如此。 Kerckhoffs 的原理很重要。

编辑:这个答案通常通过默默无闻来讨论安全性;不是特别适合 StackExchange。

披露有两个方面:

  • 据推测,全面披露会增加善意的人找到并报告错误的可能性,以便可以快速修复它们。这就是埃里克·S·雷蒙德 ( Eric S. Raymond) 所说的“莱纳斯定律”(表达为“只要有足够的眼球,所有的虫子都是浅的。”)。尽管 ESR 和 Linus Torvalds 相信这一点,但也有其他观点微软赞助的博客试图反驳一位著名的 Linux 倡导者,这不足为奇。然而,这两篇文章都是有趣的读物(不要相信你读到的;但想想看)。

  • 据说,模糊性可以防止攻击者发现错误;或者,至少,它减慢了他们的速度。历史上有许多安全系统被破坏的例子,即使它们被掩盖了。在计算机领域,任何针对闭源软件的零日漏洞利用都足以证明。对编译后的代码进行逆向工程并不难(作为一名程序员,我有时发现处理反汇编的二进制文件比检查源代码更容易,因为源代码编写得很草率)。此外,系统架构可能记录在某处,通常是匿名书架上的纸堆或(经常)被扔进垃圾箱——这些事情很少会长期保密。这可以概括为:晦涩不全面,难以维护

在实践中,要避免的错误是相信完全披露或模糊的效率。完全披露作为检测安全问题的一种方式并不可靠(它会发现一些,而不是全部)。隐蔽性在隐藏安全问题方面并不可靠(它会减慢一些攻击者的速度,而不是全部)。理想情况下,披露应该无关紧要(但这与“理想情况下”与“理想情况下,软件没有错误”相同)。实际上,只需假设所有情况中最糟糕的情况:考虑所有潜在的攻击者,并且只有他们,检查您的系统,并了解他们的一切。

我会说可能是从响应字符串中隐藏了确切的版本号,但是:

  1. 仅当您确定协议实现稳定且正确时(您不希望某些使用版本的软件知道为您的不良协议实现采用解决方法)。
  2. 这是一个非常容易实现的成果,足以阻止一些脚本小子试图找到他们知道是受感染版本的服务器。即使只是尝试他/她的漏洞列表的脚本小子也不会被阻止。

最终,任何真正的攻击者都有无数种获取此类信息的方法。从它以特定方式运行到软件 x 版本 y,再到内部可以传递细节的人。