加密通信协议的一种逆向分析方法
0 引言
同类对比
- Discoverer
采用递归聚类技术将具有相似格式的消息组合在一起, 分析速度快, 自动化程度高。但其缺乏对协议中语义信息的解析,存在准确性不高、不 能 处 理 加 密 通 信 等 局 限。- Polyglot
采 用 了 一 种shadowing方法来监视应用程序对协议数据的处理过程,并通过分析应用程序对协议数据进行处理时的二进制信息来提取协议格式,准确性更高,也能解析出更多的协议信息。
但 Polyglot也无法解析加密通信协议。- AutoFormat的关键思想是同一条协议消息中不同协议字段被处理时的执行上下文一般不同。因此通过对每个消息字节的执行上下文信息进行聚类即可推断出协议字段组成。
但 AutoFormat 不能处理经过混淆的恶意代码,对加密通信数据也无法处理。- Reformat通过统计函数片段中算术和逻辑指令所占的比例来定位协议解密过程,进而定位协议明文数据。
但 Reformat 只考虑了简单软件的通信实现
情况,对于协议数据经过分段加密、多重加密等情况未予考虑
1 本文思想简介
基于动态污点分析的加密通信协议逆向分析方法,利用动态二进制插桩平台 Pin[6] 将目标程序通信过程中的程序轨迹记录成二进制文件,并以这些文件作为分析基础,采用数据流分析构建指令级和函数级的污点传播图, 还原程序的函数调用和函数的参数信息,再利用提取的解密过程的特征定位协议数据的解密函数, 进而定位解密的明文, 最后对协议明文的格式进行解析
插桩:探针,进行信息采集的代码段
轨迹文件:程序运行时的指令序列
污点分析:通过对带污点标记的数据的传播实施分析来达到保护数据完整性和保密性的目的
2 思路
2.1 动态执行轨迹记录
定义一 . 协议逆向分析
对于一条协议消息 M, 对它进行逆向分析是指将 M 还原成符合协议规范的 n 个字段
Fieldi = { rangei,valuei,typei}={偏移范围,取值,类型}
定义二 . 加密协议逆向分析
对于一条加密协议消息M* ,对 它 进 行 逆 向 分 析 是 指 找 到 消 息 明 文 M
M =D( M* )
定义三。执行轨迹
执行轨迹是指程序运行时的指令序列,记做 Trace〈I, N〉
定义四。污点源
指污点分析需要关注的关键数据,在协议分析中污点源指程序收到的数据包, 记为
TS〈Addr,Length〉
方法
编写了基于动态分析平台 Pin 的指令轨迹记录插件,记录目标程序在网络通信过程中的运行轨迹信息,每条指令信息包括指令地址、字节码、线程号以及访问的寄存器和内存...
2.2 污点分析
1 中间语言
将复杂指令简单统一化
2 污点传播规则
当污点内容从一个位置传递到另一个位置时,则认为发生了污点传播
3 污点传播结果表示a) 标记接收到的数据包的所有字节为初始污点,分析,构建函数级污点传播流图
b) 函数级污点传播流图用于按时间顺序存储污点数据处理相关的所有函数 TaintedFunc〈Addr,MemSet〉, 是对程序源码的一个近似化还原,从函数角度反映程序的执行轨迹, 对程序的
抽象理解很有帮助
c)统计每个函数的访问内存情况,把每个函数读取的内存地址和第一次读取的值作为函数的输入,把函数写入的内存地址和最后一次写入的值作为函数的输出,将相邻的内存地址当做一个整体, 作为函数最终的输入和输出参数。同时记录各个参数的污点状态,最终构成函数级的污点传播流图
2.3 解密过程识别
软件的加密通信过程如图 3 所示, 可以看出, 以接收到的数据包为起点,沿着程序执行轨迹向前跟踪, 理论上就可以找到数据包的解密过程,进而得到数据包在软件内的明文数据
image.png
根据污点传播图,逆向退出协议数据在程序中的传播轨迹,还原出函数之间的调用关系以及函数参数信息