VSRC二进制漏洞挖掘课堂 | 第一篇

2016-08-08 15,890

VSRC二进制漏洞挖掘课堂 第一篇 漏洞挖掘中的流程

    这是漏洞挖掘的第一篇,整个课堂系列主要分享的是二进制程序的漏洞挖掘技术。

先推荐两本书,基础部分都在里面《深入理解计算机系统》和《软件调试》。这两本书虽然和漏洞完全无关,但这是基础中的基础,读通了很多东西都会理解了。

那这篇我讲点什么呢?我分享下漏洞挖掘中的流程。

 

0X01 二进制漏洞挖掘和WEB漏洞挖掘的区别

    通常形式WEB漏洞挖掘主要分析的是对数据处理的过程,而二进制漏洞挖掘也是分析的是数据处理过程;

WEB漏洞挖掘主要面对的对象是脚本语言和数据库系统,相对于二进制的漏洞挖掘则面对的是汇编等编译型语言;

WEB漏洞挖掘和二进制程序的漏洞挖掘有黑盒,白盒和灰盒3种挖掘方式;两种漏洞挖掘都需要考虑系统、网络等环境因素,同样也需要了解业务逻辑。

通过以上概述,不难发现其实二进制漏洞挖掘和WEB漏洞挖掘的内容基本一样,方式方法基本相通,两者有很多共通性。

 

0X02 二进制漏洞挖掘的重点在哪里?

    通常,二进制漏洞挖掘可以使用FUZZING,符号执行,面向污点分析等,还有一些私有的挖掘方式,但无论哪种方式的漏洞挖掘技术,使用的前提都是要先理解你要挖掘的程序,那再挖掘之前需要了解程序的哪些东西呢?

  • 1:执行流程;
  • 2:数据流程(输入,输出);
  • 3:数据格式(文件类型,协议);
  • 4:编程语言;
  • 5:函数;
  • 6:运行环境;
  • 7:开发者的编程习惯;

基本上可以分为以上7点,而这7点当中的1-6点会直接影响到漏洞挖掘的效率和发现的概率,第7点则是附加点,如能了解到则会提高漏洞的挖掘效率,少走很多弯路。

有很多工具已经可以做到以上的分析,但是我并不建议使用工具去直接的分析这些,因为工具分析出来的结果是抽象的,并不能让我们能够有更直观的理解程序的整个流程和开发者的真正意图,也无法分析程序的业务逻辑。想更多的挖掘出二进制程序的漏洞,唯一的“捷径”就是彻底理解软件。

 

0X03 二进制漏洞挖掘中的辅助工具

    虽然我不建议直接使用工具进行漏洞挖掘,但是还是推荐一些辅助工具能让大家更好的理解程序的流程和掌握漏洞挖掘技术。

  • IDA 静态分析利器,从汇编层面让你快速理解程序的逻辑;
  • Ollydbg 动态分析神器,替换内存数据,定位程序输入输出点,没他可不行;
  • api-monitor 监控程序的调用函数,也可直接查看程序内存数据,分析程序必备;
  • ExeinfoPE 查看PE程序的结构,还能查看是否加壳和使用的编程语言;
  • TUPortable 监控程序安装结构,写入了哪些文件,写入了那些注册表之类;
  • Wireshark 分析数据包必备;
  • Python or Go 以上软件可以都不使用,但必须要会python 或者 Go, 无论是生成污数据,还是快速编写漏洞验证程序,都是必不可少的。

 

可能做过二进制漏洞挖掘的朋友会问我,为什么没有peach,afl等等之类的工具?

其实这类工具我也会使用,但我还是不推荐给大家,因为挖掘形式太单一。

 

0X04 二进制漏洞挖掘案例分享

    下面我会通过一个案列来分享下如何通过以上方式来快速的分析一个程序的流程。

待分析程序为:NAT365网络监控软件。

binary1

程序有2个目录,分别是管理端和被管理端。

当我们拿到程序之后,先别急着直接放到IDA中分析,我们应该先了解其目录结构并运行软件。

binary2

 

看下目录结构,不难发现这里有很多乱七八糟的文件,暂时无需理会,我们直接运行主程序。我们要了解的是整个程序的运行过程,首先运行NET365网络监控主程序,然后再运行被管理端程序。

binary3

binary4

binary5

我们看到当运行被管理端程序的时候需要我们填写管理端的IP地址,由此可以说明被控端是主动链接管理端程序的,连接之后主控端会直接显示被控端的设备信息。

目前为止我们从运行过程中得知了一些信息,总结如下

  • 1:管理端启动后会监听某个端口,等待被管理端链接;
  • 2:被管理端主动链接管理端;
  • 3:被管理端把机器信息发送给管理端;
  • 4:他们的交互以某种协议进行;

 

通过以上4点,我们产生了几个疑问:

  • 1:我们是否可以模拟被控端链接控制端?
  • 2:被控端发送的数据我们是否可以进行FUZZ?
  • 3:是否存在私有加密协议?

 

首先我们需要知道他们是如何进行通讯的,也就是说他们使用的协议。

了解协议前我们得选择一种分析工具,可以使用网络数据包分析工具进行分析,也可以用api监控类工具进行分析,但不建议直接使用调试器进行分析。

我这里使用API监控进行数据包的分析,从之前得到的信息来看,我们知道是被管理端首先发送数据包给管理端的,那我们需要监控的是被管理端,而不是管理端。

 

首先我们先关闭被管理端软件,然后运行API监控。

binary6

在API FILTER 这里把所有网络的API全都打勾,然后运行被管理端的setup.exe。

API监控程序会弹出对话框,全部监控起来就行了。

binary7

找到system.dll上面一个可能每个进程的名字不一样,但是目录是和system.dll一起的,我这里是UnpackBystander.exe。

binary8

左窗口Ctrl+A 全选后Copy出来。我们知道,发送数据用的函数是Send(),所以我们查找第一个Send。

binary9

序列号是54,我们到API监控中定位到54。

binary10

看蓝色标记的177XXX后面跟着一串字符串,我们并不知道是什么东西,可以先无视,为什么看第一个Send呢?因为当被控制端连接控制端,被控制端会发送设备信息给控制端,这肯定会产生第一个Send,为什么选UnpackBystander.exe这个进程呢?也是因为其他的进程并没有被Send调用。

通过这样简单的分析,我们已经能分析出一些基本的数据格式:

  • 311 进程管理
  • 313 查看安装程序
  • 113 暂停监控
  • 310 查看系统
  • 698 心跳包
  • 177 被管理端首次发送数据包(设备信息)

 

大家不妨按照这样的方式去分析下上面这些数据格式,当作练习,而加密方式我们在下一篇中进行分析。至于其他的几点,也将在今后的几篇中进行阐述。

彩蛋

    程序在XXXX中没做好相应的处理,出现漏洞,如何发现这个漏洞的,也会在后几篇中带领大家一步一步的挖掘。

binary11

本篇结束语

    希望这篇能够让大家少许的理解二进制漏洞挖掘的一些方法,掌握好基础,才能更好的进行漏洞挖掘,切记浮躁和急于功成。有误之处请指出,谢谢。

 

下篇预告

  1. 0x01 各种漏洞挖掘方法的比较
  2. 0x02 我们应该选择什么样的挖掘方式
  3. 0x03 什么是污数据

 

【原文:VSRC二进制漏洞挖掘课堂 | 第一篇   作者:John.Shi   安全脉搏整理发布】

本文作者:VSRC

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/50778.html

Tags:
评论  (1)
快来写下你的想法吧!
  • yy 2016-08-10 12:01:28

    博主,你好,我是一个初学者,只是对渗透很感兴趣,博主,能否指点一下初学者改如何学习渗透那。

VSRC

文章数:28 积分: 50

感谢各位安全专家长期关注唯品会安全。

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号