基于def-use数据依赖图的IPSec协议状态变化标识方法

文档序号:35101905发布日期:2023-08-10 09:04阅读:31来源:国知局
基于def-use数据依赖图的IPSec协议状态变化标识方法

本发明涉及网络安全,尤其涉及一种基于def-use数据依赖图的ipsec协议状态变化标识方法。


背景技术:

1、ipsec(internet protocol security,互联网安全协议)是vpn(virtual privatenetwork,虚拟专用网)中一种广泛应用的技术,它为 ip 数据报提供了高质量的、可互操作的、基于密码学的安全性,从而实现在internet非安全信道中的保密通讯。出于不同应用场景的需求,ipsec拥有不同的具体实现,包括strongswan、openswan、libreswan等开源软件以及cisco、juniper等众多厂商的闭源产品,可以运行于主机、服务器、路由器、防火墙网关等多类型设备环境。

2、ipsec是一个协议族,由ike、ah、esp、ipsec doi等一系列子协议构成,定义了一套复杂的协议状态转换关系,以实现对ip报文数据完整性检测、加密保护和身份验证等诸多安全特性。如,ike负责协商加密密钥和验证密钥以保护私有数据;ah协议提供数据完整性验证,但不提供加密服务。这些子协议自身的设计与实现安全是整个ipsec vpn系统安全的基石,因此研究ipsec协议的安全性,挖掘协议可能存在的安全漏洞,具有十分重要的意义。

3、当前,模糊测试技术是ipsec协议安全测试分析的主流技术,其面临的一大技术挑战是如何有效标识ipsec协议工作状态并进行反馈引导,从而提高协议渗透深度和模糊测试效率。

4、现有协议状态提取方法主要有三大类。一类是基于模式生成的方法,如peach、boofuzz、spfuzz、pavfuzz等,通过人工阅读分析协议规范说明文档,采用自定义的模式(如xml)描述消息格式和状态转换关系,自主生成测试用例;其局限性在于,依赖大量专家知识和人工分析,且不同协议实现细节的差异导致协议状态模型描述不准确。第二类是基于推理学习的方法,如aflnet、snapfuzz、snpsfuzzer,ics3fuzzer、dtls-fuzzer等,基于网络流量截包,采用主、被动学习方法,从交互数据中推理获得协议状态变化信息;其局限性在于,黑盒测试模式,协议测试渗透深度不够,同时依赖通信i/o数据,网络通信延迟严重限制测试吞吐量。第三类是基于运行信息提取的方法,如firmhunter、stateafl、stateinspector等,通过运行时动态插桩或者快照方式,分析内存、i/o、寄存器等上下文数据,获得协议状态变化信息;其局限性在于,运行时动态插桩增加了内存和cpu开销,降低了测试效率。


技术实现思路

1、为解决现有协议状态提取方法存在依赖人工分析、协议测试渗透深度不足以及测试效率低的问题,本发明提供一种基于def-use数据依赖图的ipsec协议状态变化标识方法。

2、本发明提供一种基于def-use数据依赖图的ipsec协议状态变化标识方法,包括:

3、步骤1:获取实现ipsec协议的目标二进制程序;

4、步骤2:对所述目标二进制程序进行重写插桩来实现基本块的标识和定位;

5、步骤3:对重写插桩后的目标二进制程序进行扫描以获取所有函数指针间接调用指令,并生成包含所有函数指针间接调用指令所在位置索引的指针函数字典;

6、步骤4:遍历所述目标二进制程序中的所有函数,为每个函数生成对应的def-use数据依赖图;

7、步骤5:遍历所述目标二进制程序中所有结构体变量赋值指令,根据每条赋值指令所在函数的def-use数据依赖图和所述指针函数字典标识出协议状态变化操作所在代码的位置。

8、进一步地,其特征在于,步骤2具体包括:

9、对所述目标二进制程序进行反汇编并生成中间语言;

10、基于所述中间语言,采用二进制重写工具在目标二进制程序的数据段中插入一个全局共享数组和一个全局整型变量,以及在代码段中的每个基本块起始位置均插入两条特征指令;其中一条特征指令用于为所在基本块生成一个随机数,并采用该随机数作为下标对全局共享数组进行计数操作来基本块的标识,另一条特征指令采用魔数对全局整型变量进行赋值来实现基本块定位。

11、进一步地,步骤3具体包括:

12、使用反汇编工具对重写插桩后的目标二进制程序进行反汇编得到汇编代码;

13、基于所述汇编代码对代码段进行全空间扫描,正向搜索具有预设特征的指令语句作为函数指针间接调用指令;其中,具有预设特征的指令语句为“ call[base+func_ offset]”类型, base表示结构体变量地址, func_offset表示函数指针偏移量;

14、对于每条函数指针间接调用指令,从其所在位置开始,反向搜索并提取该函数指针间接调用指令所在基本块对应的随机数,将该随机数和该函数指针间接调用指令所在位置组成二元组信息,将该二元组信息存入以函数指针偏移量 func_offset为key值的指针函数字典。

15、进一步地,步骤4中,通过idapython使用miasm插件遍历所述目标二进制程序中的所有函数,生成以函数为单位的def-use数据依赖图。

16、进一步地,步骤5具体包括:

17、将满足预设约束条件的指令语句作为结构体变量赋值指令,所述预设约束条件包括:指令语句为“ mov [base+dst_offset],src_value”类型,且目的操作数 [base+dst_ offset]中的 base地址值属性为内存地址、 dst_offset值是非0立即数,且源操作数 src_ value的值为立即数或者值传递自一个立即数,且在程序控制流中存在以 [base+dst_ offset]为地址的结构体变量被引用;

18、判断源操作数 src_value的值类型属于函数内部初始定义、函数直接调用参数传入和函数指针间接调用参数传入三种模式中的何种模式;

19、根据源操作数 src_value的值类型所属模式,采取对应的标识方式标识出协议状态变化操作所在代码的位置。

20、进一步地,所述的根据源操作数 src_value的值类型所属模式,采取对应的标识方式标识出协议状态变化操作所在代码的位置,具体包括:

21、步骤a1:针对函数内部初始定义模式,继续判断 src_value的值类型:若值为立即数,则直接按照<基本块标识,状态变量偏移,状态值立即数,赋值类型, 所在函数名称>五元组格式记录该赋值指令位置,即为协议状态变化操作所在代码的位置;若值传递自一个立即数,则在函数代码区域内依据对应函数的def-use数据依赖图,遍历所有路径,以该赋值指令所在位置为起点,回溯追踪 src_value的值传递过程,直至追踪到定义立即数初值的位置,则按照<基本块标识,状态变量偏移,状态值立即数,赋值类型, 所在函数名称>记录该立即数初值定义的位置,即为协议状态变化操作所在代码的位置;

22、步骤a2:针对函数直接调用参数传入模式,获取该赋值指令所在函数的代码交叉引用列表,遍历该代码交叉引用列表中的每个调用点代码位置,进入对应调用函数代码空间,接着转步骤a1按函数内部初始定义模式处理;

23、步骤a3:针对函数指针间接调用参数传入模式,获取该赋值指令所在函数的数据交叉引用表,在该数据交叉引用表中定位至数据引用代码位置,正向搜索“ lea reg,fun_ offset;mov [base+func_offset],reg”2条关联指令,采用 func_offset作为key值,查询指针函数字典,以获得 func_offset对应的所有函数指针间接调用指令的代码位置,逐一进入每条函数指针间接调用指令的代码空间进行遍历并转步骤a1按函数内部初始定义模式处理。

24、本发明的有益效果:

25、(1)本发明通过获取不同具体实现的ipsec协议的二进制程序,从而基于二进制程序进行静态逆向分析,从中标识出协议状态变化信息;基于该设计构思,一方面是直接基于二进制程序进行分析,而无需针对不同协议实现细节对协议状态模型进行描述,因此无需依赖大量专家知识和人工分析;另一方面,对二进制程序进行静态分析,而不是动态插桩,则降低了开销,提高了测试效率。

26、(2)在获取二进制程序时,若为开源产品,可直接对开源源码编译链接生成二进制程序,若为闭源产品,可通过解压提取闭源产品固件来获取二进制程序;因此,本发明支持对开源、闭源程序分析。

27、(3)由于本发明是基于def-use数据依赖图来实现ipsec协议状态变化标识的,理论上支持对协议内部所有子状态的标识,提供细粒度的状态变化信息反馈,提升了协议测试渗透深度。

28、(4)本发明是ipsec协议实现的二进制程序来标识协议状态变化的,而二进制程序的获取并不依赖于网络通信交互,因此,本发明支持提供离线式ipsec协议状态变化标识,不受网络通信延迟的限制。

29、(5)本发明并未额外增加程序负担,可与现有主流网络协议模糊测试平台无缝结合,提高了有状态协议的模糊测试效率。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1