-
-
[原创]我的二进制漏洞挖掘方法思路(不仅是fuzz)希望有缘人指点
-
发表于:
2018-11-28 22:29
12105
-
[原创]我的二进制漏洞挖掘方法思路(不仅是fuzz)希望有缘人指点
我不知当前较好的漏洞挖掘方法是什么,是fuzz吗?个人认为不是,毕竟路径的覆盖率低。我曾经遍历一个1000行左右的二进制代码的函数的所有路径,用了一晚上还没有遍历完,如果代码量大,加上执行,估计要用几年才能遍历完,毕竟路径爆炸不是开玩笑的。就算是覆盖率能提高,但是单纯的输入输出分析能发现的漏洞还是很少的。很多漏洞的很复杂,权限控制、资源泄露、同步问题等都不是单一的输入能发现的。
个人认为最理想的还是分析二进制代码的指令,或者说反汇编的指令。可能因为我做过一段时间的二进制代码反汇编后的分析工具。这些都是废话,直接说我的方法吧。
0 给一个二进制文件,要求没有壳或加密的,脱壳是另外讨论的问题。
1 执行文件,看哈基本功能。如果不能执行,要口令之类的,则破解,找出基本的功能。破解方法当然是通过逆向,调试修改二进制代码了。这不是我讨论的重点。
2 用各种fuzz跑哈,毕竟这样最快,最少用动脑筋。
3 找个PEid之类的,看是什么程序编写的,用什么编译器
4 找个资源编辑器,看程序有那些界面。
5 好像有按钮事件查看器之类的工具可以找出所有按钮对应的函数调用。
6 用OD或IDA找出程序的导入系统函数,模块
7 用IDA找出程序的所有用户函数的反汇编代码,可能要自己编写脚本/插件。好像OD也可以找出所有函数、基本块,这个我没有试过,但看OD的帮助说可以。
8 列出程序的所有API函数调用,顺便分析这些特征函数是否有问题
9 根据反汇编代码分析各个函数的数据流、控制流特征。这个可能有点难,好像没有现成的工具,有些国外的二进制静态分析工具可能有接口。过几天我看能否找到,如找到在补上(我做了个小东东,但不成熟)。。
10 利用OD和IDA找出各个函数的循环、基本块、条件判断。这两工具对循环不一定能找全,毕竟判断二进制代码的循环在学术界还是个难题。
11 利用OD和IDA分析构建各个函数的栈帧结构及变化模型,(要自己编写脚本/插件)
12 跟踪分析各函数路径上的内存使用状态变化,应该可以找出所有的堆溢和栈溢
13 分析其他一些特征,如污染分析、路径异常、除0、资源泄露。
14 结合程序界面构建程序的功能状态变化逻辑(这个可能要用手工做了,自己编写程序,我还没有做出来)
[培训]科锐逆向工程师培训第53期2025年7月8日开班!