基于静态二进制分析的一种通信协议逆向解析方法.doc
《基于静态二进制分析的一种通信协议逆向解析方法.doc》由会员分享,可在线阅读,更多相关《基于静态二进制分析的一种通信协议逆向解析方法.doc(7页珍藏版)》请在三一文库上搜索。
1、基于静态二进制分析的一种通信协议逆向解析方法工业控制系统(Industrial Control Systems,ICS)是工业生产的基础,ICS的安全直接关系到经济、社会发展的稳定和国家安全。与其他计算机系统不同,工业控制系统中存在着大量的私有非标准非公开协议1,而通信协议作为工控设备间信息交互的基础,其安全性是工控系统安全的重要组成部分,研究工控协议解析技术对提高工业控制系统安全性具有重要意义。传统的协议逆向分析方法需要耗费大量的时间和人力。目前,协议自动化逆向解析领域主要有两种方法:一种是基于网络报文序列分析的方法,另一种是基于程序执行轨迹的方法。基于网络报文序列分析的方法对于文本协议处理
2、效果比较好,但是缺乏针对性对协议的语义分析2,尤其在面对工业控制环境中普遍存在的多层封装的应用层协议时有些力不从心;而基于执行轨迹方法以动态二进制程序分析为基础,包括Polyglot、AutoFormat、Tupni、Prospex等方法,这些方法要求样本的覆盖率,需要对程序反复地运行调试3,但调试过程中对代码的直接修改严重破坏了工控系统的稳定性,虽然这种方法解析结果更为准确,但并不适合工业控制系统要求高稳定、高实时的实际情况。针对以上问题,本文提出了一种基于静态二进制分析的工控协议解析方法,此方法以只读的方式访问二进制文件,既能获取协议语义,又能保证不破坏工控系统的稳定性。分析的结果除提供协
3、议信息以外,还可以在通信协议健壮性测试平台中作为fuzzing测试模块的输入,解决普通的fuzzing系统在面对私有协议时无法有针对性地构造测试样本的问题。1总体设计本文将此工控协议解析方法作为工业控制系统健壮性测试平台的一个子系统来加以介绍,协议健壮性测试平台结构如图1所示。当今的ICS中越来越广泛地使用了基于x86平台的Windows操作系统,故本文中的方法在实现时主要针对Windows操作系统,反汇编引擎使用Hex-Rays公司的IDA Pro。IDA Pro是一款强大的静态二进制分析工具,能够提供功能丰富的IDC函数库(IDA Pro的一种原生脚本语言)和软件开发包(Software
4、Development Kit,SDK)4。协议解析子系统主要包括以下子模块:文件扫描子模块、协议提取子模块和格式化处理子模块。其中,协议解析模块包括数据预处理阶段、交叉引用分析阶段、协议帧重构阶段、语义提取阶段;格式化处理模块的输出既可以作为测试平台模糊测试模块的输入,为模糊测试样本数据的构造提供参考,又可以作为测试平台交互模块的输入,为用户提供图形化的结果展现。协议解析模块的子模块结构如图2所示。2文件扫描模块扫描模块的扫描目标是组态软件等运行于通用计算机的工控软件。通常,工控软件体积较为庞大,由众多功能模块构成,但协议分析只需要其中的通信模块,对ICS软件的所有功能模块执行协议解析算法不
5、但会增加时间开销,也会降低分析的准确度。扫描模块的主要作用就是定位协议分析的对象,为协议分析模块过滤掉与通信无关的操作。文件扫描子模块有两种实现方式,一种是远程扫描,扫描进程运行于测试平台,通过远程读取工程师站或操作员站上的ICS软件可执行文件并进行分析来实现过滤操作;另一种是以硬件插卡的方式通过USB接口在工控机本地执行扫描进程,并收集扫描结果反馈给测试平台。这两种实现方式的区别在于扫描进程的运行位置不同,远程扫描对工控机没有性能影响,但需要工控机打开文件访问权限;本地扫描在扫描过程中可能会占用一定的CPU时间,但不需要额外的权限,其具体差异如表1所示。以上两种实现方法在算法本质上是没有区别
6、的,都是通过读取动态链接库(Dynami Link Library,DLL)文件的导入表和导入函数表来查找和预测DLL涉及到的操作。一般来讲,涉及到TCP协议通信则需要导入WS2_32.dll中的send和recv函数,UDP协议则需要导入WS2_32.dll中的sendto和recvfrom函数5,通过扫描模块搜索到的某协议通信模块的导入表以及导入函数如图3所示。另外,通过扫描并过滤WriteFile等系统调用还可以找到ICS软件自己封装的一些发包和封包函数,通过这些函数还可以解析那些不基于TCP/IP的工控协议,如基于COM串口的工控协议,这是基于网络流量的协议分析方法无法做到的。3协议提
7、取模块协议解析模块基于IDA Pro的IDC脚本和SDK来实现,以IDA脚本或IDA插件的形式提供协议解析服务。3.1 数据预处理ICS使用的软件种类繁杂,在实现结构上也是千差万别,有些厂商在设计软件时并没有严格地遵循模块化设计的原则,软件通信模块没有独立地封装在DLL中,而是与其他的功能代码混杂在一起放入DLL,甚至分散在多个DLL中。数据预处理针对这种情况,通过读取IDA Pro反汇编后的汇编代码,对DLL中的函数进行标记处理,剔除与通信过程无关的函数。对于无法确定的函数,则选择保留处理。筛选算法同时使用两种标准,第一种标准的依据是向上的代码交叉引用,利用了函数调用的层次结构;第二种标准的
8、思想源自于动态二进制逆向分析中常用的污点算法,经过修改后基于数据交叉引用实现,用于此处的静态二进制分析场景6。定义 二元组f(N,F)表示DLL中的一个函数,其中,N为函数名,F为标记,取值从UNKNOW、STAY、DELETE中枚举。筛选算法的基本流程如下:(1)将目标DLL中的函数(包括DllMain、导出函数和内部函数)f加入到函数集合S中初始的标记F均为DELETE。(2)使用第一种标准,以发送、接收数据包的函数地址为底层起点,使用IDC函数Rfirst和Rnext访问其所有的引用函数fn(N,F),并将fn(N,F)的标记F置为STAY。(3)迭代执行步骤(2),直至所有引用了起点函
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 静态 二进制 分析 一种 通信协议 逆向 解析 方法
链接地址:https://www.31doc.com/p-3418353.html