基于新型程序依赖图的非控制数据攻击检测方法及装置转让专利
申请号 : CN201910848694.7
文献号 : CN110717181B
文献日 : 2021-07-02
发明人 : 李清宝 , 王烨 , 曹飞 , 杨治国 , 张平 , 陈志峰 , 张贵民
申请人 : 中国人民解放军战略支援部队信息工程大学
摘要 :
权利要求 :
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所述的方法实现,包含:静态分析模块、新型依赖图构建模块、插桩模块和处理模块,其中,静态分析模块,用于通过静态分析,识别和定位目标程序中安全敏感非控制数据,生成安全敏感非控制数据表和目标程序基本块粒度的传统程序依赖图;
新型依赖图构建模块,用于结合传统程序依赖图,在有向边上添加包含目标程序中识别和定位的安全敏感非控制数据的注释,构造目标程序的新型程序依赖图;
插桩模块,用于根据新型程序依赖图,在涉及访问调用安全敏感非控制数据的基本块中进行代码插桩;
处理模块,用于执行目标程序时,结合新型程序依赖图和安全敏感非控制数据表进行进程的攻击检测,以保证目标程序中安全敏感非控制数据的数据流完整性。
说明书 :
基于新型程序依赖图的非控制数据攻击检测方法及装置
技术领域
背景技术
维。从某种程度上讲,人们所处环境,都被赋予网络和信息的属性。因此,可以认为网络空间
安全的核心是信息安全。如今,信息技术以及其工业应用迎来了前所未有的繁荣,网络空间
安全问题也变得越来越突出。网络安全由于不同环境和应用,分为:系统安全、网络安全、信
息传播安全和信息内容安全。系统安全即保证信息处理和传输系统的安全,它侧重于保证
系统正常运行,避免因为系统的崩演和损坏而对系统存储、处理和传输的消息造成破坏和
损失,避免由于电磁泄翻,产生信息泄露,干扰他人或受他人干扰。尽管经过几十年的安全
研究,内存破坏攻击仍然对软件系统构成巨大的威胁。这是因为大多数高性能应用程序都
是用C和C++等内存不安全的语言编写的,软件开发人员为了性能和兼容性的提高而疏忽了
软件和系统安全的重要性等因素。内存破坏攻击通常利用程序中的内存破坏漏洞实现控制
流攻击和非控制数据攻击。控制流攻击通过劫持程序的控制流来执行恶意的代码序列,从
而实现恶意攻击行为,随着安全研究人员对防御控制流攻击的研究不断深入,成功构造一
个控制流攻击的代价越来越高,因此,攻击者尝试利用程序中安全敏感的非控制数据实现
恶意攻击行为,从而绕过现有的控制流攻击防御保护机制。
码泄露或私钥泄露;2)权限升级,如操作用户身份数据;3)性能下降,如资源浪费攻击;4)绕
过安全缓解机制。DOP(Data‑Oriented Programming)是一种用于构建具有表现力的非控制
数据攻击的高级技术,通过连接由load、store和一些算术微操作组成的短指令序列(data‑
oriented gadget),并执行这些精心设计的序列,攻击者在程序内存中可以实现图灵完备
性的计算。由于非控制数据不会违背控制流完整性,而现有的控制流攻击检测方法又无法
有效地检测该种类型的攻击,而DFI(Date Flow Integrity)虽然能防御非控制数据攻击,
但引入了高达103%的性能开销,使得该方法难以在实际环境中部署应用。
发明内容
的非控制数据的数据流完整性保护,保证非恶意程序的正常执行,检测和终止恶意攻击的
运行,性能开销小,更易于部署。
系的变量。
分析,识别并定位的与自定义函数参数和系统调用参数存在依赖关系的变量。
全敏感非控制数据作为算术逻辑运算对象操作使用时的访问行为和将安全敏感非控制数
据作为函数参数操作使用时的调用行为。
程序的所有基本块是否已进行插桩处理完毕,若未处理完毕,则进入代码插桩下个步骤;
之后,则获取当前目标进程内存中被访问操作的安全敏感非控制数据的值,并在安全敏感
非控制数据表中更新对应值;当触发异常的位置为调用安全敏感非控制数据之前,则对即
将调用的安全敏感非控制数据的数据流完整性进行验证,并执行进程攻击检测下个步骤;
应的值进行更新;然后,结束该异常的处理,通知目标进程继续运行;若该基本块中不存在
访问安全敏感非控制数据的情况,则执行进程攻击检测下个步骤;
触发的异常为意料之外的异常情况,终止目标进程运行。
值,并查询安全敏感非控制数据表中对应的值,验证其一致性,若验证通过,则该异常处理
结束,通知目标进程继续运行;否则,则判定该非控制数据在调用前被恶意篡改,认为存在
非控制数据攻击行为,立即终止目标进程的运行。
行更新记录,以完成对非控制数据的攻击检测。
依赖图;
行时更新安全敏感非控制数据表,并验证目标进程中安全敏感的非控制数据的一致性,保
证目标程序中安全敏感的非控制数据的数据流完整性,以确保非恶意程序的正常执行,检
测和终止恶意攻击的运行;与已有的非控制数据攻击检测或防护方法相比,优势主要体现
如下两方面:a)方法的通用性,已有方法局限于某种特定的架构和平台,而本发明技术方案
并不局限于特定的硬件环境,是一种能够检测现有的非控制数据攻击的通用方法;b)运行
的高效性,本发明技术方案将需要保护的非控制数据集合缩小到了安全敏感非控制数据,
且以基本块粒度为单位进行插桩,实现在运行时对安全敏感的非控制数据的数据流完整性
保护,弥补在指令粒度进行监控会引入较大开销的缺陷,保证程序的运行效率,性能开销
小,易于部署,具有较好的应用前景。
附图说明:
可达性分析,由于可达性分析对于某些读操作可能是冗余的,复杂,会导致DFI误报,对所有
变量的数据流完整性实施保护也会引入很大的开销,使得该方法难以在实际环境中部署应
用。本发明实施例,参见图1所示,提供一种基于新型程序依赖图的非控制数据攻击检测方
法,包含如下内容:
控制流和数据流结合,在运行时根据新型程序依赖图实现对目标程序中安全敏感的非控制
数据的数据流完整性保护,能够成功检测非控制数据攻击,较DFI方法性能开销小,更易于
部署。
依赖图,最后根据新型程序依赖图对源程序进行插桩处理,生成受保护的可执行程序;动态
保护阶段主要负责在运行时更新安全敏感的非控制数据表,并验证目标进程中安全敏感的
非控制数据的一致性,从而保证目标程序中安全敏感的非控制数据的数据流完整性。其中,
静态分析模块负责对源程序的静态分析工作。静态分析以基本块为粒度,生成源程序的程
序依赖图,负责识别和定位程序中安全敏感的非控制数据,并将程序中对非控制数据的操
作行为分为访问和调用两种行为,访问行为是指将非控制数据作为算术逻辑运算对象操作
使用的行为,而调用行为则是指将非控制数据作为函数参数操作使用的行为。静态分析完
成后,构造出目标程序对应的新型程序依赖图。然后,根据新型程序依赖图对目标源程序进
行插桩处理,具体地,在涉及访问和调用安全敏感的非控制数据的基本块中插入插桩代码。
具体方法是,当某个基本块存在访问和调用同一个安全敏感的非控制数据时,则在该基本
块中访问该非控制数据之后插入插桩代码,并在该基本块中调用该非控制数据之前插入插
桩代码,从而使得在动态保护阶段,能够在运行时对该基本块访问操作该非控制数据的合
法性进行验证;当某个基本块存在访问安全敏感的非控制数据时,则在该基本块出口处插
入插桩代码,从而使得在动态保护阶段,当基本块执行结束时能够获取程序内存中被访问
的安全敏感的非控制数据的值,并在安全敏感的非控制数据表中更新相应安全敏感的非控
制数据的值。当某个基本块存在调用安全敏感的非控制数据,则在该基本块入口处插入插
桩代码,从而使得在动态保护阶段,当基本块开始执行前能够获取到程序内存中即将被调
用的安全敏感的非控制数据的值,并与安全敏感的非控制数据表中相应的值进行一致性验
证。编译器负责将插桩后的源程序编译成二进制可执行文件;安全敏感的非控制数据表负
责存储目标程序中安全敏感的非控制数据集合及其对应的值,该表存储在系统的内核空间
以防止其中的值被恶意篡改。
于静态分析得到的安全敏感的非控制数据集合,通过在对应的有向边上注释基本块执行时
需要访问和调用的安全敏感的非控制数据,实现了将程序的控制流和数据流相结合,从而
能够在运行时指导验证程序中安全敏感的非控制数据的数据流完整性。如图3所示,上方为
一个程序样例,下方为对应的新型程序依赖图,图中新型程序依赖图样例是利用LLVM编译
器对源程序的LLVM中间语言表示文件分析所构造出来的,其中部分变量即为静态分析中识
别和定位的安全敏感的非控制数据,有向边上注释的变量即为基本块在执行时需要访问和
调用的安全关键非控制数据。作为本发明实施例中的非控制数据攻击检测方法,进一步地,
安全敏感非控制数据包含目标程序中自定义函数的函数参数,系统调用参数,及与函数参
数和系统调用参数存在依赖关系的变量。进一步地,识别并定位的安全敏感非控制数据,包
含:通过敏感函数分析,识别并定位的自定义函数和系统调用函数;通过数据依赖分析,识
别并定位的与自定义函数参数和系统调用参数存在依赖关系的变量。
块级别生成目标程序的传统程序依赖图。通过分析程序依赖图,得到目标程序中的数据依
赖关系和控制依赖关系。本发明实施例中将函数参数、系统调用参数、以及与上述两种非控
制数据存在依赖关系的变量作为安全敏感的非控制数据。静态分析模块通过敏感函数分析
方法在目标程序的LLVM中间语言表示中搜索自定义函数和系统调用函数,并识别和定位函
数参数和系统调用参数,然后,利用数据依赖分析,识别和定位与函数参数和系统调用参数
存在依赖关系的变量。最后,静态分析模块构造一个目标程序中安全敏感的非控制数据集
合,并识别和定位出集合中的全部元素。在此基础上,结合生成的传统程序依赖图,在相应
的有向边上添加注释,构造目标程序的新型程序依赖图。
首先,从目标程序的中间代码取一个基本块i,根据新型程序依赖图,判断该基本块中是否
存在访问且调用同一个安全敏感的非控制数据的情况。若基本块i中存在访问且调用了同
一个安全敏感的非控制数据的情况,则在对应的访问操作之后和调用操作之前分别插入插
桩代码,并判断目标程序的所有基本块是否已进行插桩处理完毕;若基本块i中不存在访问
且调用同一个安全敏感的非控制数据,则判断基本块i中是否存在访问安全敏感的非控制
数据的情况。若基本块i中存在访问安全敏感的非控制数据的情况,则在基本块i的出口处
插入插桩代码;否则,判断基本块i中是否存在调用安全敏感的非控制数据的情况。若存在,
则在基本块i的入口处插入插桩代码;否则,判断该基本块i是否是最后一个待插桩处理的
基本块。上述过程是对一个基本块进行插桩的完整流程,若确定该基本块i并不是最后一个
待插桩处理的基本块,则从中间代码中取下一个待插桩处理的基本块;否则,插桩模块完成
了对目标程序的插桩处理。
应的新型程序依赖图对异常进行处理。首先,处理模块定位触发异常的基本块号。然后,判
断该基本块中是否存在访问且调用同一个安全敏感的非控制数据的情况。若该基本块中存
在访问且调用同一个安全敏感的非控制数据的情况,则在该基本块中进一步定位触发异常
的位置,如果触发异常的位置为访问安全敏感的非控制数据之后,则获取此时目标进程内
存中被访问操作的安全敏感的非控制数据的值,并在安全敏感的非控制数据表中更新对应
的值;如果触发异常的位置为调用安全敏感的非控制数据之前,则获取此时目标进程内存
中安全敏感的非控制数据的值,并查询安全敏感的非控制数据表中对应的值,验证其一致
性。若验证通过,则该异常处理结束,通知目标进程继续运行;否则,该非控制数据在调用前
被恶意篡改,认为存在非控制数据攻击行为,并立即终止目标进程的运行。
感的非控制数据的情况,则获取目标进程内存中被访问操作的安全敏感的非控制数据的
值,并在安全敏感的非控制数据表中将对应的值进行更新。然后,结束该异常的处理,通知
目标进程继续运行。若该基本块中不存在访问安全敏感的非控制数据的情况,则进一步判
断该基本块中是否存在调用安全敏感的非控制数据的情况。若该基本块中存在调用安全敏
感的非控制数据的情况,则获取目标进程内存中即将被调用的安全敏感的非控制数据的
值,并查询安全敏感的非控制数据表中对应的值,验证其一致性。若验证通过,则该异常处
理结束,通知目标进程继续运行;否则,该非控制数据在调用前被恶意篡改,认为存在非控
制数据攻击行为,并立即终止目标进程的运行。若该基本块中不存在调用安全敏感的非控
制数据的情况,则认为本次目标进程触发的异常为意料之外的异常情况。出于安全考虑,认
为此时仍可能存在可疑的恶意行为导致了该意料之外的异常情况,因此,处理模块依然认
为存在非控制数据攻击,并立即终止目标进程的运行。
和处理模块104,其中,
序依赖图;
用安全敏感的非控制数据的基本块中插入插桩代码,编译器负责将插桩后的源程序编译成
二进制可执行文件,安全敏感的非控制数据表负责存储目标程序中安全敏感的非控制数据
集合及其对应的值,该表存储在系统的内核空间以防止其中的值被恶意篡改;处理模块负
责在内核空间处理目标进程运行时由于执行插桩代码触发的异常。根据目标进程的新型程
序依赖图,处理模块能够确定触发该异常的某个基本块,以及该基本块执行时会涉及的访
问和调用的安全敏感的非控制数据对象。然后,对异常进行处理,从而保证目标进程中安全
敏感的非控制数据的数据流完整性。将保护的非控制数据缩小到安全敏感的非控制数据集
合,在基本块粒度进行分析和插桩处理,保证程序的运行效率,平衡安全性和性能开销,具
有较好通用性,为非控制数据攻击检测提供新的解决方案。
于特定的硬件环境,能够针对各种硬件平台环境下的应用程序实施保护,检测目标程序中
存在的非控制数据攻击行为;2、性能开销小,提取目标程序中安全敏感的非控制数据,并对
安全敏感的非控制数据实施数据流完整性保护,解决传统DFI方法对所有非控制数据实施
数据流保护的开销大的问题;3、方案轻便灵活,能方便地部署到实际应用环境中,通过扩展
LLVM编译器实现了静态分析阶段的静态分析与源程序编译功能,且通过扩展在内核空间插
入处理模块与安全敏感的非控制数据表实现动态保护阶段的非控制数据攻击检测功能。
使得所述一个或多个处理器实现上述的方法。
表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用
于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标
注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基
本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的
是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规
定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组
合来实现。
仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可
以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨
论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接
耦合或通信连接,可以是电性,机械或其它的形式。
网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目
的。
的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件
产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得
一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所
述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read‑
Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以
存储程序代码的介质。
明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员
在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻
易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使
相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护
范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。