寻找软件中的漏洞

时间:2010-09-27 22:20:07

标签: security

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

我不寻找魔杖,我只是寻找最常见的技巧,我认为查看整个来源是一些项目的史诗作品,承认你可以访问源代码。尝试手动模糊输入也不太舒服。所以我想知道一些有用的工具。

E.g。

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

提前谢谢。

3 个答案:

答案 0 :(得分:4)

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

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

关于发现的速度:我认为数量往往胜过光彩......把一块软件,甚至是一块好软件放在一百万无聊/好奇/有动力的人手中,并且必然会发现漏洞。急需将产品推向市场。

答案 1 :(得分:2)

没有有效的方法可以做到这一点,因为公司花费大量资金来生产和维护安全的软件。理想情况下,他们在保护软件方面的工作并非始于寻找成品中的漏洞;当软件出来时,已经根除了许多庸俗。

回到你的问题:它取决于你拥有的东西(工作二进制文件,完整/部分源代码等)。另一方面,它没有发现任何漏洞,而是那些可以计算的漏洞(例如,审计客户或软件所有者)。对?

这有助于您了解需要担心的输入和功能。一旦你对这些进行了本地化,你可能已经对软件的质量有了一种感觉:如果它不是很好,那么可能模糊不清会找到你的一些错误。否则,您需要开始了解这些函数以及如何在代码中使用输入来理解代码是否可以以任何方式被破坏。

一些经验将帮助您减轻每项任务投入的费用以及何时进一步推进。例如,如果您看到使用了一些不良做法,那么请深入研究。如果您看到从头开始实施加密,请深入研究。等

答案 2 :(得分:0)

除了缓冲区溢出和格式字符串漏洞之外,您可能希望阅读代码注入。 (很多你会遇到的将是网络/数据库相关,但深入挖掘)AFAIK这是一个越狱iThingies的巨大力量。 Saurik的移动基板允许您(-ed?)加载第三方.dylib,并调用其中包含的任何代码。