一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种检测绕过Windows控制流防护CFG的方法及装置与流程

2022-04-27 11:32:34 来源:中国专利 TAG:

一种检测绕过windows控制流防护cfg的方法及装置
技术领域
1.本发明涉及计算机信息安全领域,尤其涉及一种检测绕过windows控制流防护cfg的方法及装置。


背景技术:

2.控制流防护cfg(control flow guard)是微软从windows 8.1开始推出的一种防止利用内存漏洞攻击的缓解措施,用于阻止攻击者对可执行代码的间接调用。传统的绕过cfg的方法通常需要构造返回导向编程rop(return-oriented programming)链,现有技术中也已经存在多种通过构造rop链绕过cfg的攻击检测方法。
3.随着系统攻击技术的发展,最新的绕过cfg的方法不再构造rop链,而是利用windows rpc(remote procedure call,远程调用)来绕过cfg,rpc是一种c/s架构的客户端/服务器功能调用的方案。基于windows rpc,客户端可以调用与本地函数调用相同的服务器功能。对于这种新出现的绕过cfg的方法,现有技术中针对通过构造rop链绕过cfg攻击的检测方法均失效了,目前现有技术中针对这种利用windows rpc来绕过cfg的方法,还没有很好的检测手段。


技术实现要素:

4.为解决上述技术问题,本发明提出了一种检测绕过windows控制流防护cfg的方法及装置,用以解决现有技术中针对利用windows rpc来绕过cfg的方法,还没有很好的检测手段的技术问题。
5.根据本发明的第一方面,提供了一种检测绕过windows控制流防护cfg的方法,包括以下步骤:
6.步骤s1,对windows模块的存放cfg检测函数的地址变量设置写断点;
7.步骤s2,注册异常处理函数;
8.步骤s3,当存放cfg检测函数的地址变量的内容被改写时,触发写断点,操作系统执行所述异常处理函数;
9.步骤s4,所述异常处理函数判断发生的异常是否是步骤s1触发的,如果是,则检测到绕过windows控制流防护cfg的攻击。
10.进一步地,所述存放cfg检测函数的地址变量为windows系统模块的__guard_check_icall_fptr变量。
11.进一步地,所述异常处理函数为通过veh或seh设置的异常处理函数。
12.进一步地,所述写断点为内存写断点或硬件写断点。
13.根据本发明第二方面,提供一种检测绕过windows控制流防护cfg的装置,所述装置包括:
14.设置写断点模块,用于对windows模块的存放cfg检测函数的地址变量设置写断点;
15.注册模块,用于注册异常处理函数;
16.触发模块,用于当存放cfg检测函数的地址变量的内容被改写时,触发写断点,操作系统执行所述异常处理函数;
17.检测模块,用于所述异常处理函数判断发生的异常是否是所述设置写断点模块触发的,如果是,则检测到绕过windows控制流防护cfg的攻击。
18.进一步地,所述存放cfg检测函数的地址变量为windows系统模块的__guard_check_icall_fptr变量。
19.进一步地,所述异常处理函数为通过veh或seh设置的异常处理函数。
20.进一步地,所述写断点为内存写断点或硬件写断点。
21.根据本发明第三方面,提供一种检测绕过windows控制流防护cfg的系统,包括处理器和存储器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行如前所述的检测绕过windows控制流防护cfg的方法。
22.根据本发明第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序用于由处理器加载并执行如前所述的检测绕过windows控制流防护cfg的方法。
23.根据本发明的上述方案,能够获得以下技术效果:首先,针对最新出现的利用windows rpc来绕过cfg的方法,提出了一种有效的检测手段。其次,本发明的检测手段效果显著,能够在漏洞利用关键阶段就能检测并让攻击利用失败,从而为系统提供保护。
24.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
25.构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明提供如下附图进行说明。在附图中:
26.图1为本发明一个实施方式的利用windows rpc来绕过cfg的方法流程图;
27.图2为本发明一个实施方式的利用windows rpc来绕过cfg的装置结构框图。
具体实施方式
28.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明具体实施例及相应的附图对本发明技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
29.首先介绍基于windows rpc的绕过cfg的新方法。远程调用rpc(remote procedure call),是一种c/s架构的客户端/服务器功能调用的方案。基于windows rpc,客户端可以调用与本地函数调用相同的服务器功能。客户端/服务器程序将调用参数或返回值传递给较低级的stub函数,stub函数负责将数据封装为ndr格式,客户端和服务器的通信是由windows的rpcrt4.dll这个系统动态库负责。利用windows rpc绕过cfg的新方法是通过构造虚假的rpc_message,设置要调用的函数指针和函数参数,然后手动调用rpcrt4.dll这个系统动态库的导出函数ndrservercall2以实现任意函数调用。然而从windows 8.1开始,
ndrservercall2中对这个函数调用进行了cfg检查。因此新的绕过cfg方法中使用伪造的rpc_message,通过调用ndrservercall2调用系统模块kernel32.dll中的virtualprotect函数,所述virtualprotect函数是修改内存属性的函数,将rpcrt4的系统检测cfg的函数地址存放在__guard_check_icall_fptr变量里。通过virtualprotect函数将__guard_check_icall_fptr的内存属性修改为可读、可写、可执行,并将rpcrt4.dll的__guard_check_icall_fptr处保存的指针替换为系统模块ntdll.dll中的kifastsystemcallret函数,由于kifastsystemcallret函数只是一条简单的退出指令ret,因此在要执行cfg检查的时候执行退出,从而达到了绕过cfg检查的目的。本发明提出的攻击检测方法,正是针对上述的windows rpc的绕过cfg的新方法提出的一种全新的检测手段,能够有效检测并防御这一新的绕过cfg的方法。
30.上述的__guard_check_icall_fptr存放的是windows系统的cfg检测函数,通过上述攻击,__guard_check_icall_fptr这个变量已经被替换成ntdll.dll中的kifastsystemcallret函数,而kifastsystemcallret是一个空函数(里面没有任何代码),因此windows系统的cfg检测流程就此瘫痪了,从而绕过系统的cfg检测。
31.下面结合图1说明本发明一个实施方式的检测绕过windows控制流防护cfg的方法流程图。如图1所示,所述方法包括以下步骤:
32.步骤s1,对windows模块的存放cfg检测函数的地址变量设置写断点;
33.在该步骤中,所述存放cfg检测函数的地址变量为windows系统模块的__guard_check_icall_fptr变量。设置的写断点可以为硬件写断点、内存写断点。
34.步骤s2,注册异常处理函数;
35.在该步骤中,所述异常处理函数为通过veh或seh设置的异常处理函数。
36.步骤s3,当存放cfg检测函数的地址变量的内容被改写时,触发写断点,操作系统执行所述异常处理函数;
37.步骤s4,所述异常处理函数判断发生的异常是否是步骤s1触发的,如果是,则检测到绕过windows控制流防护cfg的攻击。
38.在步骤s3和s4中,当新的绕过cfg方法试图替换rpcrt4.dll的__guard_check_icall_fptr指针时,硬件断点或内存断点会被触发,这样程序控制流就会走到先前安装的veh或者seh异常处理函数,在veh或者seh异常处理函数里判断异常类型是单步异常或内存访问异常且被写的地址是rpcrt4.dll的__guard_check_icall_fptr指针时,则认为是有新的绕过cfg手段发生,进而检测到新的绕过cfg的方法,这时可结束此进程,或者发出告警,从而达到防御目的。
39.本发明实施例针对新的绕过cfg的方法提出新的检测手段,检测效果显著,能够在漏洞利用关键阶段就能检测并让攻击利用失败,从而起到保护系统安全的作用。
40.本发明实施例进一步给出一种检测绕过windows控制流防护cfg的装置,如图2所示,所述装置包括:
41.设置写断点模块,用于对windows模块的存放cfg检测函数的地址变量设置写断点;
42.注册模块,用于注册异常处理函数;
43.触发模块,用于当存放cfg检测函数的地址变量的内容被改写时,触发写断点,操
作系统执行所述异常处理函数;
44.检测模块,用于所述异常处理函数判断发生的异常是否是所述设置写断点模块触发的,如果是,则检测到绕过windows控制流防护cfg的攻击。
45.进一步地,所述存放cfg检测函数的地址变量为windows系统模块的__guard_check_icall_fptr变量。
46.进一步地,所述异常处理函数为通过veh或seh异常处理函数。
47.进一步地,所述写断点为内存写断点或硬件写断点。
48.本实施例中的检测绕过windows控制流防护cfg的装置各功能模块所执行的功能与前述实施例中的检测绕过windows控制流防护cfg方法的步骤相对应,在此不再赘述。
49.本发明实施例进一步给出一种检测绕过windows控制流防护cfg的系统,包括处理器和存储器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行如前所述的检测绕过windows控制流防护cfg的方法。
50.本发明实施例进一步给出一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序用于由处理器加载并执行如前所述的检测绕过windows控制流防护cfg的方法。
51.需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
52.在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
53.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
54.另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
55.上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括计算机程序用以使得一台计算机装置(可以是个人计算机,实体机服务器,或者网络云服务器等,需安装windows、windows server、linux所有版本操作系统)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
56.以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献