【问题标题】:Finding Vulnerabilities in Software发现软件中的漏洞
【发布时间】:2016-06-08 17:33:13
【问题描述】:

我很想知道用于发现漏洞的技术。我知道关于缓冲区溢出、格式字符串漏洞利用、ecc 的理论,我也写了一些。但是我仍然没有意识到如何以有效的方式找到漏洞。

我不是在寻找魔杖,我只是在寻找最常见的技术,我认为查找整个源代码对于某些承认您可以访问源代码的项目来说是一项史诗般的工作。尝试手动对输入进行模糊测试也不太舒服。所以我想知道一些有用的工具。

例如

我没有意识到开发团队如何能如此快地找到越狱 iPhone 的漏洞。 他们没有源代码,他们不能执行程序,因为有少量默认 程序,我不希望有大量的安全漏洞。那么如何找到这种漏洞 这么快?

提前谢谢你。

【问题讨论】:

    标签: security


    【解决方案1】:

    在较低层上,手动检查内存可能会很有启发性。您当然可以使用 Visual Studio 之类的工具查看内存,我想有人甚至编写了一个工具来根据应用程序执行的指令和它放入内存的数据结构粗略地重建应用程序。

    在网络上,我发现了许多与序列相关的漏洞,只需简单地反转操作发生的顺序(例如,在线交易)。由于服务器是有状态的,而客户端是无状态的,因此您可以通过模拟不同的序列来快速利用设计不佳的流程。

    至于发现的速度:我认为数量往往胜过才华......把一个软件,即使是一个好的软件,放在一百万无聊/好奇/上进的人手中,漏洞必然会被发现.人们急于将产品推出市场。

    【讨论】:

      【解决方案2】:

      没有有效的方法来做到这一点,因为公司花费大量资金来生产和维护安全软件。理想情况下,他们保护软件的工作不是从寻找成品中的漏洞开始的;软件出来的时候已经消灭了这么多的漏洞。

      回到您的问题:这将取决于您拥有什么(工作二进制文件、完整/部分源代码等)。另一方面,它没有发现任何漏洞,而是发现了那些重要的漏洞(例如,审计的客户或软件所有者的漏洞)。正确的?

      这将帮助您了解您需要担心的输入和功能。一旦你本地化了这些,你可能已经对软件的质量有了感觉:如果它不是很好,那么 fuzzing 可能会发现一些 bug。否则,您需要开始了解这些功能以及如何在代码中使用输入,以了解代码是否可以以任何方式被颠覆。

      一些经验将帮助您衡量在每项任务上付出多少努力以及何时进一步推进。例如,如果您发现使用了一些不良做法,请深入研究。如果您看到从头开始实施加密,请深入研究。等等

      【讨论】:

        【解决方案3】:

        除了缓冲区溢出和格式字符串漏洞,您可能还想了解一下代码注入。 (您会遇到很多与 Web/DB 相关的内容,但要深入挖掘)AFAIK 这是越狱 iThingies 的巨大力量。 Saurik 的移动基板允许(-ed?)您加载第 3 方 .dylib,并调用其中包含的任何代码。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-02
          • 1970-01-01
          • 2017-09-24
          • 2011-01-16
          • 2018-08-31
          • 2016-01-11
          • 1970-01-01
          • 2018-10-19
          相关资源
          最近更新 更多