我很想知道用来发现漏洞的技术。我知道关于缓冲区溢出,格式字符串漏洞,ecc的理论,我也写了其中的一些。但我仍然没有意识到如何以一种有效的方式找到漏洞。
我不是在寻找魔术棒,我只是在寻找关于它的最常见的技术,我认为对于一些承认你有权访问源代码的项目来说,查看整个源代码是一项史诗般的工作。尝试手动模糊输入也不是很舒服。所以我想知道一些有用的工具。
例如。
我不知道开发团队怎么能这么快就找到漏洞来越狱iPhones。他们没有源代码,他们不能执行程序,因为有少量的默认程序,我不希望有大量的安全漏洞。那么,如何如此快速地找到这种漏洞呢?
提前谢谢你。
发布于 2010-09-28 06:34:21
在较低的层上,手动检查内存可能非常有启发性。您当然可以使用Visual Studio这样的工具查看内存,我可以想象,有人甚至编写了一个工具,根据应用程序执行的指令和放入内存中的数据结构来粗略地重建应用程序。
在web上,我发现了许多通过简单地颠倒操作发生的顺序(例如,在线事务)来利用顺序的漏洞。因为服务器是有状态的,而客户端是无状态的,所以您可以通过模拟不同的序列来快速利用设计不佳的流程。
至于发现的速度:我认为数量往往胜过brilliance...put一个软件,即使是一个好的软件,在一百万无聊/好奇/有动力的人手中,漏洞肯定会被发现。将产品推出市场的热潮令人惊叹不已。
发布于 2013-11-12 22:03:07
没有有效的方法来做到这一点,因为公司花费大量资金来生产和维护安全的软件。理想情况下,他们在保护软件方面的工作并不是从寻找成品中的漏洞开始的;当软件发布时,许多漏洞已经被消除了。
回到你的问题:这将取决于你拥有什么(工作的二进制文件,完整/部分源代码,等等)。另一方面,它发现的不是任何漏洞,而是那些重要的漏洞(例如,审计的客户端或软件所有者)。对吗?
这将帮助您理解需要担心的输入和函数。一旦你本地化了这些,你可能已经对软件的质量有了一种感觉:如果它不是很好,那么fuzzing可能会给你找一些bug。否则,您需要开始了解这些函数以及如何在代码中使用输入,以了解代码是否可以以任何方式被破坏。
一些经验将帮助你权衡在每项任务上投入多少努力,以及何时进一步推进。例如,如果您看到使用了一些不好的做法,那么请深入研究。如果您看到crypto是从头开始实现的,请深入研究。等
发布于 2010-09-28 06:41:47
除了缓冲区溢出和格式字符串利用之外,您可能还需要阅读一些关于代码注入的内容。(你会遇到很多与web/DB相关的东西,但请深入挖掘) AFAIK这是越狱iThingies的一股巨大的力量。Saurik的移动底物允许(S) (-ed?)您可以加载第三方.dylibs,并调用其中包含的任何代码。
https://stackoverflow.com/questions/3808346
复制相似问题