我自己是静态分析人员;十年前,我主要放弃了动态逆向工程。因此,这些天来,我的过程通常是定位我的输入进入我感兴趣的模块的位置,然后执行大量的静态分析以确定我的输入如何操纵程序状态。我发现了一些巧妙的错误,例如以这种方式公开信息;但是,毫无疑问,我比使用大量动态分析和动态输入生成(例如,随机模糊测试)的同行要慢得多。
您通常采取什么步骤来发现封闭源程序中的漏洞?
#1 楼
尽管通常在很大程度上取决于目标/项目,但这只是我自己喜欢的方式,但这通常是我通常这样做的方式:就像您有目标一样。同时,对应用程序进行静态分析,以了解其工作原理,也许还可以找到漏洞百出的水果漏洞。
请尝试一次了解是否可以使您的模糊器变得更智能您在IDA中发现了足够的结构和功能。
如果您的模糊器受到打击,请找出问题的根本原因并加以利用。但是,如果不是这样,则值得深入检查发生崩溃的区域,因为该崩溃可能是一个值得关注的有趣领域的指标。
如果在进行静态分析时遇到了麻烦,请尝试为此编写一个简单的触发器。
着眼于存在漏洞的那部分继续进行静态分析。
一旦通过模糊或静态分析发现了1个真正的漏洞,编写规则/脚本以查找相似的漏洞漏洞。
可以为它编写一个漏洞,然后回到2。
当厌倦了发现此类漏洞并且在理解了应用程序的内部工作之后,请尝试查找逻辑缺陷。
PS:阅读文档也是查找某些漏洞以及读取更改日志,差异补丁,提交消息等的好方法,如果您可以访问源代码(有时您可以部分访问目标服务器的源代码)源代码,甚至适用于封闭源代码应用程序。)
我只需2美分。
评论
您能否详细说明“编写规则/脚本以查找类似漏洞”。假设您通过模糊测试发现了一个漏洞,您将编写哪种规则?您是说要限制Fuzzer的参数输入搜索空间吗?
– ixje
13年3月28日在6:54
我的意思是在二进制代码中创建规则/脚本以查找与您发现漏洞的代码相似的模式。很可能会有更多与您发现的漏洞类似的漏洞。虽然不是漏洞,但是可以举个例子。
– joxeankoret
13年3月28日在8:55
评论
这听起来很像民意测验,但在StackExchange网站上通常效果不佳。