为什么应用程序崩溃被认为是不安全的?

信息安全 Web应用程序 已知漏洞 攻击向量 调试
2021-09-07 15:04:58

如果应用程序崩溃,程序就会停止,除了重新启动程序之外,任何人都无能为力。

崩溃通常是一种不良行为,应该避免,但为什么它们被视为安全漏洞?

4个回答
  1. 它崩溃了,因为某些输入未正确处理。攻击者可能会试图找到导致错误过程的代码路径,并试图通过潜在的漏洞执行任意代码。

  2. 崩溃可能会为攻击者提供有关系统及其内部详细信息的有价值信息。

  3. 崩溃可能会造成临时漏洞或留下可能被利用的未受保护的文件(例如内存转储)。

  4. (感谢Ladadadada) 崩溃的应用程序需要重新启动,这显然需要时间(即使使用看门狗和对称故障转移方案)。如果攻击者复制导致崩溃的条件,您的服务将遭受长时间中断(拒绝服务),这意味着财务、声誉和其他损失。

正如之前的答案已经涵盖了攻击者可以通过分析应用程序崩溃获得直接利益的大部分场景。我建议阅读“分析崩溃以查找应用程序中的安全漏洞”分析安全漏洞的崩溃可能需要低级编程技能。如图 1 所示,每个漏洞利用都可能不会导致安全漏洞,并定义了用于分析应用程序崩溃的调查路径。

  • 在此处输入图像描述

概括 Deer Hunter 的答案:

  • 如果应用程序崩溃,则意味着发生的事情不是预期的,也不是被理解的。
  • 如果它不是预期的和不被理解的,你就无法知道它是否安全。
  • 因此,您必须假设它不安全。

请注意,简单地捕获和丢弃意外异常也是不安全的,不应该这样做。终止进程比在意外的不一致状态下继续要好。

这本质上是费曼附录的精华:

(...) 侵蚀和窜气不是设计所期望的。它们是在警告某些事情是错误的。设备未按预期运行,因此存在以这种意想不到且未完全理解的方式以更大偏差运行的危险。这种危险以前没有导致灾难的事实并不能保证下次不会发生,除非完全理解。

您可以在此处找到完整的文档:

推荐所有软件开发人员阅读这篇文章,尤其是那些习惯于捕捉他们不完全理解的异常的人。

应用程序崩溃是意外和未处理行为的结果。这意味着应用程序中存在崩溃的错误,并且许多错误会导致漏洞。

最危险的崩溃之一是由于内存损坏(分段错误)导致的崩溃。通常可以利用这种错误使易受攻击的应用程序执行任意(恶意)代码。

此外,一种使软件崩溃的方法可用于拒绝服务攻击。