我的二进制漏洞挖掘方法
我不知当前较好的漏洞挖掘方法是什么,是 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跟踪分析各函数路径上的内存使用状态变化,应该可以找出所有的堆溢和栈溢
评论1