基于新型程序依赖图的非控制数据攻击检测方法及装置转让专利

申请号 : CN201910848694.7

文献号 : CN110717181B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李清宝王烨曹飞杨治国张平陈志峰张贵民

申请人 : 中国人民解放军战略支援部队信息工程大学

摘要 :

本发明属于网络安全空间技术领域,特别涉及一种基于新型程序依赖图的非控制数据攻击检测方法及装置,通过静态分析构造程序中安全敏感的非控制数据集合和基本块粒度的新型程序依赖图,对程序LLVM中间语言表示进行插桩;在运行时对程序中安全敏感的非控制数据的访问和调用操作进行验证,从而保护安全敏感的非控制数据的数据流完整性。本发明将程序的控制流和数据流结合,在运行时根据新型程序依赖图实现对目标程序中安全敏感的非控制数据的数据流完整性保护;将保护的非控制数据缩小到安全敏感的非控制数据集合,在基本块粒度进行分析和插桩处理,保证程序的运行效率,平衡安全性和性能开销,具有较好通用性,为非控制数据攻击检测提供新的解决方案。

权利要求 :

1.一种基于新型程序依赖图的非控制数据攻击检测方法,其特征在于,包含:A)通过静态分析,识别和定位目标程序中安全敏感非控制数据,获取安全敏感非控制数据表,并生成目标程序基本块粒度的传统程序依赖图;

B)结合传统程序依赖图,在有向边上添加包含目标程序中识别和定位的安全敏感非控制数据的注释,构造目标程序的新型程序依赖图;

C)根据新型程序依赖图,在涉及访问调用安全敏感非控制数据的基本块中进行代码插桩;

D)执行目标程序时,结合新型程序依赖图和安全敏感非控制数据表进行进程的攻击检测,以保证目标程序中安全敏感非控制数据的数据流完整性;

D)目标程序运行进行进程攻击检测,包含如下内容:D1)当目标程序执行到插桩代码时,触发异常;

D2)根据新型程序依赖图,定位触发异常的基本块号;

D3)判断该基本块中是否存在访问且调用同一个安全敏感的非控制数据的情况,若存在,则定位在该基本块中触发异常的位置,当触发异常的位置为访问安全敏感非控制数据之后,则获取当前目标进程内存中被访问操作的安全敏感非控制数据的值,并在安全敏感非控制数据表中更新对应值;当触发异常的位置为调用安全敏感非控制数据之前,则对即将调用的安全敏感非控制数据的数据流完整性进行验证,并执行步骤D4);

D4)判断该基本块中是否存在访问安全敏感的非控制数据的情况,若存在,则获取目标进程内存中被访问操作的安全敏感非控制数据的值,并在安全敏感非控制数据表中将对应的值进行更新;然后,结束该异常的处理,通知目标进程继续运行;若该基本块中不存在访问安全敏感非控制数据的情况,则执行步骤D5);

D5)判断该基本块中是否存在调用安全敏感非控制数据的情况,若存在,则对即将调用的安全敏感非控制数据的数据流完整性进行检测验证,若不存在,则判定当前目标进程触发的异常为意料之外的异常情况,终止目标进程运行。

2.根据权利要求1所述的基于新型程序依赖图的非控制数据攻击检测方法,其特征在于,A)中安全敏感非控制数据包含目标程序中自定义函数的函数参数,系统调用参数,及与函数参数和系统调用参数存在依赖关系的变量。

3.根据权利要求1所述的基于新型程序依赖图的非控制数据攻击检测方法,其特征在于,A)中识别和定位安全敏感非控制数据,包含如下内容:A1)利用编译器生成目标程序对应的中间语言表示,并生成对应的基本块粒度的程序依赖图;

A2)分析目标程序对应的中间语言表示,识别并定位安全敏感非控制数据,并构建目标程序中安全敏感非控制数据表。

4.根据权利要求3所述的基于新型程序依赖图的非控制数据攻击检测方法,其特征在于,A2)中识别并定位的安全敏感非控制数据,包含:通过敏感函数分析,识别的自定义函数和系统调用函数,并提取和定位对应自定义函数和系统调用函数的参数;通过数据依赖分析,识别并定位与自定义函数参数和系统调用参数存在依赖关系的变量。

5.根据权利要求1所述的基于新型程序依赖图的非控制数据攻击检测方法,其特征在于,B)中在有向边添加注释,对应于基本块执行时访问和调用的安全敏感非控制数据情形,该情形包含将安全敏感非控制数据作为算术逻辑运算对象操作使用时的访问行为和将安全敏感非控制数据作为函数参数操作使用时的调用行为。

6.根据权利要求1所述的基于新型程序依赖图的非控制数据攻击检测方法,其特征在于,C)中进行代码插桩,包含如下内容:C1)从目标程序的中间代码取一个基本块i;

C2)根据新型程序依赖图,判断该基本块中是否存在访问且调用同一个安全敏感非控制数据,若存在,则在对应的访问操作之后和调用操作之前分别插入插桩代码,并判断目标程序的所有基本块是否已进行插桩处理完毕,若未处理完毕,则进入步骤C3);

C3)判断基本块i中是否存在访问安全敏感的非控制数据的情况,若存在,则在基本块i的出口处插入插桩代码,若不存在,则进入步骤C4);

C4)判断基本块i中是否存在调用安全敏感的非控制数据的情况,若存在,则在基本块i的入口处插入插桩代码;否则,判断目标程序的所有基本块是否已经进行插桩处理完毕;

C5)若目标程序中还有基本块等待进行插桩处理,i=i+1,并回到步骤C1);否则,目标程序代码插桩完成。

7.根据权利要求1所述的基于新型程序依赖图的非控制数据攻击检测方法,其特征在于,D)中,安全敏感非控制数据的数据流完整性的验证,包含如下内容:获取目标进程内存中即将被调用的安全敏感非控制数据的值,并查询安全敏感非控制数据表中对应的值,验证其一致性,若验证通过,则该异常处理结束,通知目标进程继续运行;否则,则判定该非控制数据在调用前被恶意篡改,认为存在非控制数据攻击行为,立即终止目标进程的运行。

8.根据权利要求1所述的基于新型程序依赖图的非控制数据攻击检测方法,其特征在于,D)中,目标程序运行时,自动处理目标程序由于执行插桩代码触发的异常情形,并对存储在内核空间的安全敏感非控制数据表进行更新记录,以完成对非控制数据的攻击检测。

9.一种基于新型程序依赖图的非控制数据攻击检测装置,其特征在于,基于权利要求1所述的方法实现,包含:静态分析模块、新型依赖图构建模块、插桩模块和处理模块,其中,静态分析模块,用于通过静态分析,识别和定位目标程序中安全敏感非控制数据,生成安全敏感非控制数据表和目标程序基本块粒度的传统程序依赖图;

新型依赖图构建模块,用于结合传统程序依赖图,在有向边上添加包含目标程序中识别和定位的安全敏感非控制数据的注释,构造目标程序的新型程序依赖图;

插桩模块,用于根据新型程序依赖图,在涉及访问调用安全敏感非控制数据的基本块中进行代码插桩;

处理模块,用于执行目标程序时,结合新型程序依赖图和安全敏感非控制数据表进行进程的攻击检测,以保证目标程序中安全敏感非控制数据的数据流完整性。

说明书 :

基于新型程序依赖图的非控制数据攻击检测方法及装置

技术领域

[0001] 本发明属于网络安全空间技术领域,特别涉及一种基于新型程序依赖图的非控制数据攻击检测方法及装置,可用于检测目标程序中存在的非控制数据攻击行为。

背景技术

[0002] 网络空间是连接各种信息技术基础设施的网络,包括互联网、各种计算机系统及人与人之间相互影响的虚拟环境。网络不仅是一个消息的载体和媒介,它还改善着人们思
维。从某种程度上讲,人们所处环境,都被赋予网络和信息的属性。因此,可以认为网络空间
安全的核心是信息安全。如今,信息技术以及其工业应用迎来了前所未有的繁荣,网络空间
安全问题也变得越来越突出。网络安全由于不同环境和应用,分为:系统安全、网络安全、信
息传播安全和信息内容安全。系统安全即保证信息处理和传输系统的安全,它侧重于保证
系统正常运行,避免因为系统的崩演和损坏而对系统存储、处理和传输的消息造成破坏和
损失,避免由于电磁泄翻,产生信息泄露,干扰他人或受他人干扰。尽管经过几十年的安全
研究,内存破坏攻击仍然对软件系统构成巨大的威胁。这是因为大多数高性能应用程序都
是用C和C++等内存不安全的语言编写的,软件开发人员为了性能和兼容性的提高而疏忽了
软件和系统安全的重要性等因素。内存破坏攻击通常利用程序中的内存破坏漏洞实现控制
流攻击和非控制数据攻击。控制流攻击通过劫持程序的控制流来执行恶意的代码序列,从
而实现恶意攻击行为,随着安全研究人员对防御控制流攻击的研究不断深入,成功构造一
个控制流攻击的代价越来越高,因此,攻击者尝试利用程序中安全敏感的非控制数据实现
恶意攻击行为,从而绕过现有的控制流攻击防御保护机制。
[0003] 与控制流攻击不同,非控制数据攻击是通过操纵程序中安全敏感的非控制数据而不破坏程序的控制流完整性,从而改变程序的良性行为。攻击目标包括:1)信息泄露,如密
码泄露或私钥泄露;2)权限升级,如操作用户身份数据;3)性能下降,如资源浪费攻击;4)绕
过安全缓解机制。DOP(Data‑Oriented Programming)是一种用于构建具有表现力的非控制
数据攻击的高级技术,通过连接由load、store和一些算术微操作组成的短指令序列(data‑
oriented gadget),并执行这些精心设计的序列,攻击者在程序内存中可以实现图灵完备
性的计算。由于非控制数据不会违背控制流完整性,而现有的控制流攻击检测方法又无法
有效地检测该种类型的攻击,而DFI(Date Flow Integrity)虽然能防御非控制数据攻击,
但引入了高达103%的性能开销,使得该方法难以在实际环境中部署应用。

发明内容

[0004] 为此,本发明提供一种基于新型程序依赖图的非控制数据攻击检测方法及装置,将程序的控制流和数据流结合,在运行时根据新型程序依赖图实现对目标程序中安全敏感
的非控制数据的数据流完整性保护,保证非恶意程序的正常执行,检测和终止恶意攻击的
运行,性能开销小,更易于部署。
[0005] 按照本发明所提供的设计方案,一种基于新型程序依赖图的非控制数据攻击检测方法,包含:
[0006] 通过静态分析,识别和定位目标程序中安全敏感非控制数据,获取安全敏感非控制数据表,并生成目标程序基本块粒度的传统程序依赖图;
[0007] 结合传统程序依赖图,在有向边上添加包含目标程序中识别和定位的安全敏感非控制数据的注释,构造目标程序的新型程序依赖图;
[0008] 根据新型程序依赖图,在涉及访问调用安全敏感非控制数据的基本块中进行代码插桩;
[0009] 执行目标程序时,结合新型程序依赖图和安全敏感非控制数据表进行进程的攻击检测,以保证目标程序中安全敏感非控制数据的数据流完整性。
[0010] 作为本发明非控制数据攻击检测方法,进一步地,安全敏感非控制数据包含目标程序中自定义函数的函数参数,系统调用参数,及与函数参数和系统调用参数存在依赖关
系的变量。
[0011] 作为本发明非控制数据攻击检测方法,进一步地,识别和定位安全敏感非控制数据,包含如下内容:
[0012] 利用编译器生成目标程序对应的中间语言表示,并生成对应的基本块粒度的程序依赖图;
[0013] 分析目标程序对应的中间语言表示,识别并定位安全敏感非控制数据,并构建目标程序中安全敏感非控制数据表。
[0014] 作为本发明非控制数据攻击检测方法,进一步地,识别并定位的安全敏感非控制数据,包含:通过敏感函数分析,识别并定位的自定义函数和系统调用函数;通过数据依赖
分析,识别并定位的与自定义函数参数和系统调用参数存在依赖关系的变量。
[0015] 作为本发明非控制数据攻击检测方法,进一步地,在传统的程序依赖图的有向边添加注释,对应于基本块执行时访问和调用的安全敏感非控制数据情形,该情形包含将安
全敏感非控制数据作为算术逻辑运算对象操作使用时的访问行为和将安全敏感非控制数
据作为函数参数操作使用时的调用行为。
[0016] 作为本发明非控制数据攻击检测方法,进一步地,进行代码插桩,包含如下内容:
[0017] 从目标程序的中间代码取一个基本块i;
[0018] 根据新型程序依赖图,判断该基本块中是否存在访问且调用同一个安全敏感非控制数据,若存在,则在对应的访问操作之后和调用操作之前分别插入插桩代码,并判断目标
程序的所有基本块是否已进行插桩处理完毕,若未处理完毕,则进入代码插桩下个步骤;
[0019] 判断基本块i中是否存在访问安全敏感的非控制数据的情况,若存在,则在基本块i的出口处插入插桩代码,若不存在,则进入代码插桩下个步骤;
[0020] 判断基本块i中是否存在调用安全敏感的非控制数据的情况,若存在,则在基本块i的入口处插入插桩代码;否则,判断目标程序的所有基本块是否已经进行插桩处理完毕;
[0021] 若目标程序中还有基本块等待进行插桩处理,i=i+1,并回到代码插桩中的第一个步骤;否则,目标程序代码插桩完成。
[0022] 作为本发明非控制数据攻击检测方法,进一步地,目标程序运行进行进程攻击检测,包含如下内容:
[0023] 当目标程序执行到插桩代码时,触发异常;
[0024] 根据新型程序依赖图,定位触发异常的基本块号;
[0025] 判断该基本块中是否存在访问且调用同一个安全敏感的非控制数据的情况,若存在,则定位在该基本块中触发异常的位置,当触发异常的位置为访问安全敏感非控制数据
之后,则获取当前目标进程内存中被访问操作的安全敏感非控制数据的值,并在安全敏感
非控制数据表中更新对应值;当触发异常的位置为调用安全敏感非控制数据之前,则对即
将调用的安全敏感非控制数据的数据流完整性进行验证,并执行进程攻击检测下个步骤;
[0026] 判断该基本块中是否存在访问安全敏感的非控制数据的情况,若存在,则获取目标进程内存中被访问操作的安全敏感非控制数据的值,并在安全敏感非控制数据表中将对
应的值进行更新;然后,结束该异常的处理,通知目标进程继续运行;若该基本块中不存在
访问安全敏感非控制数据的情况,则执行进程攻击检测下个步骤;
[0027] 判断该基本块中是否存在调用安全敏感非控制数据的情况,若存在,则对即将调用的安全敏感非控制数据的数据流完整性进行检测验证,若不存在,则判定当前目标进程
触发的异常为意料之外的异常情况,终止目标进程运行。
[0028] 作为本发明非控制数据攻击检测方法,进一步地,安全敏感非控制数据的数据流完整性的验证,包含如下内容:获取目标进程内存中即将被调用的安全敏感非控制数据的
值,并查询安全敏感非控制数据表中对应的值,验证其一致性,若验证通过,则该异常处理
结束,通知目标进程继续运行;否则,则判定该非控制数据在调用前被恶意篡改,认为存在
非控制数据攻击行为,立即终止目标进程的运行。
[0029] 作为本发明非控制数据攻击检测方法,进一步地,目标程序运行时,自动处理目标程序由于执行插桩代码触发的异常情形,并对存储在内核空间的安全敏感非控制数据表进
行更新记录,以完成对非控制数据的攻击检测。
[0030] 更进一步地,本发明还提供一种基于新型程序依赖图的非控制数据攻击检测装置,包含:静态分析模块、新型依赖图构建模块、插桩模块和处理模块,其中,
[0031] 静态分析模块,用于通过静态分析,识别和定位目标程序中安全敏感非控制数据,生成安全敏感非控制数据表和目标程序基本块粒度的传统程序依赖图;
[0032] 新型依赖图构建模块,用于结合传统程序依赖图,在传统程序依赖图的有向边上添加包含目标程序中识别和定位的安全敏感非控制数据的注释,构造目标程序的新型程序
依赖图;
[0033] 插桩模块,用于根据新型程序依赖图,在涉及访问调用安全敏感非控制数据的基本块中进行代码插桩;
[0034] 处理模块,用于执行目标程序时,结合新型程序依赖图和安全敏感非控制数据表进行进程的攻击检测,以保证目标程序中安全敏感非控制数据的数据流完整性。
[0035] 本发明的有益效果:
[0036] 本发明根据工作流程可分为两个阶段:静态分析阶段和动态保护阶段,通过目标程序的静态分析,构造新型程序依赖图,生成受保护的可执行程序;通过在动态保护阶段运
行时更新安全敏感非控制数据表,并验证目标进程中安全敏感的非控制数据的一致性,保
证目标程序中安全敏感的非控制数据的数据流完整性,以确保非恶意程序的正常执行,检
测和终止恶意攻击的运行;与已有的非控制数据攻击检测或防护方法相比,优势主要体现
如下两方面:a)方法的通用性,已有方法局限于某种特定的架构和平台,而本发明技术方案
并不局限于特定的硬件环境,是一种能够检测现有的非控制数据攻击的通用方法;b)运行
的高效性,本发明技术方案将需要保护的非控制数据集合缩小到了安全敏感非控制数据,
且以基本块粒度为单位进行插桩,实现在运行时对安全敏感的非控制数据的数据流完整性
保护,弥补在指令粒度进行监控会引入较大开销的缺陷,保证程序的运行效率,性能开销
小,易于部署,具有较好的应用前景。
附图说明:
[0037] 图1为本发明实施例中攻击检测方法流程图;
[0038] 图2为本发明实施例中攻击检测流程原理图;
[0039] 图3为本发明实施例中新型程序依赖图样例;
[0040] 图4为本发明实施例中攻击检测装置示意图;
[0041] 图5为本发明实施例中静态分析模块的工作流程示意图;
[0042] 图6为本发明中插桩模块的工作流程图;
[0043] 图7为本发明中处理模块的工作流程图。具体实施方式:
[0044] 为使本发明的目的、技术方案和优点更加清楚、明白,下面结合附图和技术方案对本发明作进一步详细的说明。
[0045] 现有的非控制数据攻击检测技术(DFI)通过验证对变量的操作是否符合数据流图(Data Flow Graph,DFG)实现防御非控制数据攻击。然而,DFI需要对变量的每个操作进行
可达性分析,由于可达性分析对于某些读操作可能是冗余的,复杂,会导致DFI误报,对所有
变量的数据流完整性实施保护也会引入很大的开销,使得该方法难以在实际环境中部署应
用。本发明实施例,参见图1所示,提供一种基于新型程序依赖图的非控制数据攻击检测方
法,包含如下内容:
[0046] S101)通过静态分析,识别和定位目标程序中安全敏感非控制数据,获取安全敏感非控制数据表,并生成目标程序基本块粒度的传统程序依赖图;
[0047] S102)结合传统程序依赖图,在传统程序依赖图的有向边上添加包含目标程序中识别和定位的安全敏感非控制数据的注释,构造目标程序的新型程序依赖图;
[0048] S103)根据新型程序依赖图,在涉及访问调用安全敏感非控制数据的基本块中进行代码插桩;
[0049] S104)执行目标程序时,结合新型程序依赖图和安全敏感非控制数据表进行进程的攻击检测,以保证目标程序中安全敏感非控制数据的数据流完整性。
[0050] 通过定义一种新型的程序依赖图,在程序依赖图的某些有向边上添加相应的注释,注释信息主要为执行基本块时会访问或调用的安全敏感的非控制数据,从而将程序的
控制流和数据流结合,在运行时根据新型程序依赖图实现对目标程序中安全敏感的非控制
数据的数据流完整性保护,能够成功检测非控制数据攻击,较DFI方法性能开销小,更易于
部署。
[0051] 本发明实施例中,参见图2所示,根据工作流程可分为两个阶段:静态分析阶段和动态保护阶段。静态分析阶段主要负责对目标程序进行静态分析,并构造相应的新型程序
依赖图,最后根据新型程序依赖图对源程序进行插桩处理,生成受保护的可执行程序;动态
保护阶段主要负责在运行时更新安全敏感的非控制数据表,并验证目标进程中安全敏感的
非控制数据的一致性,从而保证目标程序中安全敏感的非控制数据的数据流完整性。其中,
静态分析模块负责对源程序的静态分析工作。静态分析以基本块为粒度,生成源程序的程
序依赖图,负责识别和定位程序中安全敏感的非控制数据,并将程序中对非控制数据的操
作行为分为访问和调用两种行为,访问行为是指将非控制数据作为算术逻辑运算对象操作
使用的行为,而调用行为则是指将非控制数据作为函数参数操作使用的行为。静态分析完
成后,构造出目标程序对应的新型程序依赖图。然后,根据新型程序依赖图对目标源程序进
行插桩处理,具体地,在涉及访问和调用安全敏感的非控制数据的基本块中插入插桩代码。
具体方法是,当某个基本块存在访问和调用同一个安全敏感的非控制数据时,则在该基本
块中访问该非控制数据之后插入插桩代码,并在该基本块中调用该非控制数据之前插入插
桩代码,从而使得在动态保护阶段,能够在运行时对该基本块访问操作该非控制数据的合
法性进行验证;当某个基本块存在访问安全敏感的非控制数据时,则在该基本块出口处插
入插桩代码,从而使得在动态保护阶段,当基本块执行结束时能够获取程序内存中被访问
的安全敏感的非控制数据的值,并在安全敏感的非控制数据表中更新相应安全敏感的非控
制数据的值。当某个基本块存在调用安全敏感的非控制数据,则在该基本块入口处插入插
桩代码,从而使得在动态保护阶段,当基本块开始执行前能够获取到程序内存中即将被调
用的安全敏感的非控制数据的值,并与安全敏感的非控制数据表中相应的值进行一致性验
证。编译器负责将插桩后的源程序编译成二进制可执行文件;安全敏感的非控制数据表负
责存储目标程序中安全敏感的非控制数据集合及其对应的值,该表存储在系统的内核空间
以防止其中的值被恶意篡改。
[0052] 新型程序依赖图是在传统的程序依赖图上的改进,传统的程序依赖图反映了程序在基本块粒度的控制流信息,本发明在传统的程序依赖图的有向边上添加了注释信息,基
于静态分析得到的安全敏感的非控制数据集合,通过在对应的有向边上注释基本块执行时
需要访问和调用的安全敏感的非控制数据,实现了将程序的控制流和数据流相结合,从而
能够在运行时指导验证程序中安全敏感的非控制数据的数据流完整性。如图3所示,上方为
一个程序样例,下方为对应的新型程序依赖图,图中新型程序依赖图样例是利用LLVM编译
器对源程序的LLVM中间语言表示文件分析所构造出来的,其中部分变量即为静态分析中识
别和定位的安全敏感的非控制数据,有向边上注释的变量即为基本块在执行时需要访问和
调用的安全关键非控制数据。作为本发明实施例中的非控制数据攻击检测方法,进一步地,
安全敏感非控制数据包含目标程序中自定义函数的函数参数,系统调用参数,及与函数参
数和系统调用参数存在依赖关系的变量。进一步地,识别并定位的安全敏感非控制数据,包
含:通过敏感函数分析,识别并定位的自定义函数和系统调用函数;通过数据依赖分析,识
别并定位的与自定义函数参数和系统调用参数存在依赖关系的变量。
[0053] 作为本发明非控制数据攻击检测方法,进一步地,如图5所示,构造与源程序对应的新型程序依赖图。首先,利用Clang编译器生成目标程序的LLVM中间语言表示,并在基本
块级别生成目标程序的传统程序依赖图。通过分析程序依赖图,得到目标程序中的数据依
赖关系和控制依赖关系。本发明实施例中将函数参数、系统调用参数、以及与上述两种非控
制数据存在依赖关系的变量作为安全敏感的非控制数据。静态分析模块通过敏感函数分析
方法在目标程序的LLVM中间语言表示中搜索自定义函数和系统调用函数,并识别和定位函
数参数和系统调用参数,然后,利用数据依赖分析,识别和定位与函数参数和系统调用参数
存在依赖关系的变量。最后,静态分析模块构造一个目标程序中安全敏感的非控制数据集
合,并识别和定位出集合中的全部元素。在此基础上,结合生成的传统程序依赖图,在相应
的有向边上添加注释,构造目标程序的新型程序依赖图。
[0054] 作为本发明非控制数据攻击检测方法,进一步地,参见图6所示,根据静态分析生成的新型程序依赖图,在目标程序的LLVM中间语言表示通过编写LLVM中的pass进行插桩。
首先,从目标程序的中间代码取一个基本块i,根据新型程序依赖图,判断该基本块中是否
存在访问且调用同一个安全敏感的非控制数据的情况。若基本块i中存在访问且调用了同
一个安全敏感的非控制数据的情况,则在对应的访问操作之后和调用操作之前分别插入插
桩代码,并判断目标程序的所有基本块是否已进行插桩处理完毕;若基本块i中不存在访问
且调用同一个安全敏感的非控制数据,则判断基本块i中是否存在访问安全敏感的非控制
数据的情况。若基本块i中存在访问安全敏感的非控制数据的情况,则在基本块i的出口处
插入插桩代码;否则,判断基本块i中是否存在调用安全敏感的非控制数据的情况。若存在,
则在基本块i的入口处插入插桩代码;否则,判断该基本块i是否是最后一个待插桩处理的
基本块。上述过程是对一个基本块进行插桩的完整流程,若确定该基本块i并不是最后一个
待插桩处理的基本块,则从中间代码中取下一个待插桩处理的基本块;否则,插桩模块完成
了对目标程序的插桩处理。
[0055] 作为本发明非控制数据攻击检测方法,进一步地,参见图7所示,当用户空间的目标进程执行到插桩代码时,会触发异常,陷入到内核空间,此时处理模块会根据目标进程对
应的新型程序依赖图对异常进行处理。首先,处理模块定位触发异常的基本块号。然后,判
断该基本块中是否存在访问且调用同一个安全敏感的非控制数据的情况。若该基本块中存
在访问且调用同一个安全敏感的非控制数据的情况,则在该基本块中进一步定位触发异常
的位置,如果触发异常的位置为访问安全敏感的非控制数据之后,则获取此时目标进程内
存中被访问操作的安全敏感的非控制数据的值,并在安全敏感的非控制数据表中更新对应
的值;如果触发异常的位置为调用安全敏感的非控制数据之前,则获取此时目标进程内存
中安全敏感的非控制数据的值,并查询安全敏感的非控制数据表中对应的值,验证其一致
性。若验证通过,则该异常处理结束,通知目标进程继续运行;否则,该非控制数据在调用前
被恶意篡改,认为存在非控制数据攻击行为,并立即终止目标进程的运行。
[0056] 若该基本块不存在访问且调用同一个安全敏感的非控制数据的情况,则进一步判断该基本块中是否存在访问安全敏感的非控制数据的情况。若该基本块中存在访问安全敏
感的非控制数据的情况,则获取目标进程内存中被访问操作的安全敏感的非控制数据的
值,并在安全敏感的非控制数据表中将对应的值进行更新。然后,结束该异常的处理,通知
目标进程继续运行。若该基本块中不存在访问安全敏感的非控制数据的情况,则进一步判
断该基本块中是否存在调用安全敏感的非控制数据的情况。若该基本块中存在调用安全敏
感的非控制数据的情况,则获取目标进程内存中即将被调用的安全敏感的非控制数据的
值,并查询安全敏感的非控制数据表中对应的值,验证其一致性。若验证通过,则该异常处
理结束,通知目标进程继续运行;否则,该非控制数据在调用前被恶意篡改,认为存在非控
制数据攻击行为,并立即终止目标进程的运行。若该基本块中不存在调用安全敏感的非控
制数据的情况,则认为本次目标进程触发的异常为意料之外的异常情况。出于安全考虑,认
为此时仍可能存在可疑的恶意行为导致了该意料之外的异常情况,因此,处理模块依然认
为存在非控制数据攻击,并立即终止目标进程的运行。
[0057] 基于上述的方法,本发明实施例还提供一种基于新型程序依赖图的非控制数据攻击检测装置,参见图4所示,包含:静态分析模块101、新型依赖图构建模块102、插桩模块103
和处理模块104,其中,
[0058] 静态分析模块101,用于通过静态分析,识别和定位目标程序中安全敏感非控制数据,生成安全敏感非控制数据表和目标程序基本块粒度的传统程序依赖图;
[0059] 新型依赖图构建模块102,用于结合传统程序依赖图,在传统程序依赖图的有向边上添加包含目标程序中识别和定位的安全敏感非控制数据的注释,构造目标程序的新型程
序依赖图;
[0060] 插桩模块103,用于根据新型程序依赖图,在涉及访问调用安全敏感非控制数据的基本块中进行代码插桩;
[0061] 处理模块104,用于执行目标程序时,结合新型程序依赖图和安全敏感非控制数据表进行进程的攻击检测,以保证目标程序中安全敏感非控制数据的数据流完整性。
[0062] 结合图2,在装置的架构中,静态分析模块负责对源程序的静态分析工作,插桩模块负责插入插桩代码,插入代码主要根据源程序对应的新型程序依赖图,在涉及访问和调
用安全敏感的非控制数据的基本块中插入插桩代码,编译器负责将插桩后的源程序编译成
二进制可执行文件,安全敏感的非控制数据表负责存储目标程序中安全敏感的非控制数据
集合及其对应的值,该表存储在系统的内核空间以防止其中的值被恶意篡改;处理模块负
责在内核空间处理目标进程运行时由于执行插桩代码触发的异常。根据目标进程的新型程
序依赖图,处理模块能够确定触发该异常的某个基本块,以及该基本块执行时会涉及的访
问和调用的安全敏感的非控制数据对象。然后,对异常进行处理,从而保证目标进程中安全
敏感的非控制数据的数据流完整性。将保护的非控制数据缩小到安全敏感的非控制数据集
合,在基本块粒度进行分析和插桩处理,保证程序的运行效率,平衡安全性和性能开销,具
有较好通用性,为非控制数据攻击检测提供新的解决方案。
[0063] 如上所述,本发明实施例中通过构造目标程序的新型程序依赖图,并基于新型程序依赖图实现了在运行时对非控制数据攻击检测,其优点在于:1、通用性更好,实施不受限
于特定的硬件环境,能够针对各种硬件平台环境下的应用程序实施保护,检测目标程序中
存在的非控制数据攻击行为;2、性能开销小,提取目标程序中安全敏感的非控制数据,并对
安全敏感的非控制数据实施数据流完整性保护,解决传统DFI方法对所有非控制数据实施
数据流保护的开销大的问题;3、方案轻便灵活,能方便地部署到实际应用环境中,通过扩展
LLVM编译器实现了静态分析阶段的静态分析与源程序编译功能,且通过扩展在内核空间插
入处理模块与安全敏感的非控制数据表实现动态保护阶段的非控制数据攻击检测功能。
[0064] 除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对步骤、数字表达式和数值并不限制本发明的范围。
[0065] 基于上述的方法,本发明实施例还提供一种服务器,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,
使得所述一个或多个处理器实现上述的方法。
[0066] 基于上述的方法,本发明实施例还提供一种计算机可读介质,其上存储有计算机程序,其中,该程序被处理器执行时实现上述的方法。
[0067] 本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
[0068] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0069] 在这里示出和描述的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制,因此,示例性实施例的其他示例可以具有不同的值。
[0070] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
[0071] 附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代
表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用
于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标
注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基
本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的
是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规
定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组
合来实现。
[0072] 在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,
仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可
以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨
论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接
耦合或通信连接,可以是电性,机械或其它的形式。
[0073] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个
网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目
的。
[0074] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0075] 所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明
的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件
产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得
一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所
述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read‑
Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以
存储程序代码的介质。
[0076] 最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发
明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员
在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻
易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使
相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护
范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。