掌桥专利:专业的专利平台
掌桥专利
首页

一种漏洞检测方法、终端及存储介质

文献发布时间:2023-06-19 09:43:16


一种漏洞检测方法、终端及存储介质

技术领域

本发明涉及计算机安全技术领域,尤其涉及一种漏洞检测方法、终端及存储介质。

背景技术

在计算机领域中,Use After Free(简称UAF,一个内存块被释放之后再次被使用)是指程序试图访问之前已经被释放的内存区域。

当如下这三步同时发生时,会出现UAF漏洞:

(1)一块内存区域被分配并且有一个指针指向它。

(2)内存区域被释放但是指针是可用的。

(3)指针被使用并访问之前释放掉的内存。

大多时候,UAF漏洞能够导致信息泄漏。但是,更特殊的是UAF导致代码执行,导致被黑客入侵。

例如,可通过几个步骤完成:

(1)程序分配并释放内存块A。

(2)攻击者分配内存块B,重用之前分配给内存块A的内存。

(3)攻击者写入数据到B块。

(4)程序使用释放掉的块A,访问攻击者留在那里的数据。

而现有技术中在攻击者利用漏洞之前,没有有效检测软件是否存在漏洞的方法。

因此,现有技术还有待于改进和发展。

发明内容

本发明的主要目的在于提供一种漏洞检测方法、终端及存储介质,旨在解决现有技术中在攻击者利用漏洞之前,没有有效检测软件是否存在漏洞的方法的问题。

为实现上述目的,本发明提供一种漏洞检测方法,所述漏洞检测方法包括如下步骤:

当检测到free函数被调用时,将释放的内存块保存;

当检测到内存被访问时,判断当前被访问的内存块是否属于已保存的内存块;

如果当前被访问的内存块属于被释放的内存,则上报UAF漏洞。

所述的漏洞检测方法,其中,所述如果当前被访问的内存块属于被释放的内存,则上报UAF漏洞,之后还包括:

如果检测存在所述UAF漏洞,则对所述UAF漏洞进行修复。

所述的漏洞检测方法,其中,所述对所述UAF漏洞进行修复,具体包括:

检查代码,将释放内存操作放置使用后面,用于保证使用完后再释放内存。

所述的漏洞检测方法,其中,所述判断当前被访问的内存块是否属于已保存的内存块,之后还包括:

如果当前被访问的内存块不属于被释放的内存,则不存在UAF漏洞。

所述的漏洞检测方法,其中,所述当检测到free函数被调用时,将释放的内存块保存,之前还包括:

重新加载Checker类的checkPreCall接口。

所述的漏洞检测方法,其中,所述当检测到内存被访问时,判断当前被访问的内存块是否属于已保存的内存块,之前还包括:

重新加载Checker类的checkLocation接口。

此外,为实现上述目的,本发明还提供一种终端,其中,所述终端包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的漏洞检测程序,所述漏洞检测程序被所述处理器执行时实现如上所述的漏洞检测方法的步骤。

此外,为实现上述目的,本发明还提供一种存储介质,其中,所述存储介质存储有漏洞检测程序,所述漏洞检测程序被处理器执行时实现如上所述的漏洞检测方法的步骤。

本发明当检测到free函数被调用时,将释放的内存块保存;当检测到内存被访问时,判断当前被访问的内存块是否属于已保存的内存块;如果当前被访问的内存块属于被释放的内存,则上报UAF漏洞。本发明通过对二进制文件进行Use After Free漏洞进行检测,在攻击者利用漏洞之前,先进行检测,如果检测存在漏洞,则及时进行修复,避免黑客入侵。

附图说明

图1是本发明漏洞检测方法的较佳实施例的流程图;

图2为本发明终端的较佳实施例的运行环境示意图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明较佳实施例所述的漏洞检测方法,如图1所示,所述漏洞检测方法包括以下步骤:

步骤S10、当检测到free函数被调用时,将释放的内存块保存。

其中,free函数即free(),free()是C语言中释放内存空间的函数,通常与申请内存空间的函数malloc()结合使用,可以释放由malloc()、calloc()、realloc()等函数申请的内存空间。

宏观上讲,Clang是一个项目名称。微观上,类似于GCC,Clang是一个C语言、C++、Objective C语言的轻量级编译器,它是Clang项目的一部分。相比较于GCC,Clang的编译速度更快,占用的内存更少。Clang的错误提示与警告信息也比GCC更加准确清晰。此外,Clang基于库的模块化设计,易于IDE的集成并且遵循LLVM BSD协议。

Clang Static Analyzer是一个能查找C语言、C++、Objective-C(C语言家族)漏洞的源码分析工具。

目前,Clang Static Analyzer可以作为一个独立的工具,也可以在Xcode开发环境(Mac os)中运行。Clang Static Analyzer作为一个独立的工具可以从命令行(如ubuntu的终端)中启动,并且它运行在构建一个代码库过程中。

Clang Static Analyzer作为Clang项目的一部分,是一个百分之百开源的软件。就像Clang编译器一样,Clang Static Analyzer可以像一个C++库一样集成到其他应用程序中。

本发明是基于Clang Static Analyzer的Use After Free漏洞检测技术,ClangStatic Analyzerr具有对源代码进行符号执行的功能,并提供模块化的checker接口,通过对Checker类接口进行重载并注册,可在符号执行过程中调用定义的接口。

重新加载Checker类的checkPreCall接口,实现代码逻辑是:当收到free函数被调用时,将释放的内存块地址保存起来。

步骤S20、当检测到内存被访问时,判断当前被访问的内存块是否属于已保存的内存块。

其中,内存是计算机系统中一个主要部件,用于保存进程运行时的程序和数据,也称可执行存储器。在计算机中,内存空间一般是指主存储器空间(物理地址空间)或系统为一个用户程序分配内存空间。扩展内存空间的方法一般有增加内存大小和虚拟内存。

重新加载Checker类的checkLocation接口,实现代码逻辑是:当接收到内存访问的时候,判断访问的内存块是否属于步骤S10中保存起来的内存块。

步骤S30、如果当前被访问的内存块属于被释放的内存,则上报UAF漏洞。

也就是说,如果内存块属于被释放的内存,则上报Use After Free漏洞,上报漏洞之后还包括:如果检测存在所述UAF漏洞,则对所述UAF漏洞进行修复。修复方式为:检查代码,将释放内存操作放置使用后面,用于保证使用完后再释放内存。

进一步地,如果当前被访问的内存块不属于被释放的内存,则不存在UAF漏洞。

本发明通过对二进制文件进行Use After Free漏洞进行检测,在攻击者利用漏洞之前,先进行检测,如果检测存在漏洞,则进行修复。

其中,二进制文件表示包含在ASCII及扩展ASCII字符中编写的数据或程序指令的文件。计算机文件基本上分为二种:二进制文件和ASCII(也称纯文本文件),图形文件及文字处理程序等计算机程序都属于二进制文件。这些文件含有特殊的格式及计算机代码。ASCII则是可以用任何文字处理程序阅读的简单文本文件。

进一步地,如图2所示,基于上述漏洞检测方法,本发明还相应提供了一种终端,所述终端包括处理器10、存储器20及显示器30。图2仅示出了终端的部分组件,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。

所述存储器20在一些实施例中可以是所述终端的内部存储单元,例如终端的硬盘或内存。所述存储器20在另一些实施例中也可以是所述终端的外部存储设备,例如所述终端上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器20还可以既包括所述终端的内部存储单元也包括外部存储设备。所述存储器20用于存储安装于所述终端的应用软件及各类数据,例如所述安装终端的程序代码等。所述存储器20还可以用于暂时地存储已经输出或者将要输出的数据。在一实施例中,存储器20上存储有漏洞检测程序40,该漏洞检测程序40可被处理器10所执行,从而实现本申请中漏洞检测方法。

所述处理器10在一些实施例中可以是一中央处理器(Central Processing Unit,CPU),微处理器或其他数据处理芯片,用于运行所述存储器20中存储的程序代码或处理数据,例如执行所述漏洞检测方法等。

所述显示器30在一些实施例中可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。所述显示器30用于显示在所述终端的信息以及用于显示可视化的用户界面。所述终端的部件10-30通过系统总线相互通信。

在一实施例中,当处理器10执行所述存储器20中漏洞检测程序40时实现以下步骤:

当检测到free函数被调用时,将释放的内存块保存;

当检测到内存被访问时,判断当前被访问的内存块是否属于已保存的内存块;

如果当前被访问的内存块属于被释放的内存,则上报UAF漏洞。

其中,所述如果当前被访问的内存块属于被释放的内存,则上报UAF漏洞,之后还包括:

如果检测存在所述UAF漏洞,则对所述UAF漏洞进行修复。

其中,所述对所述UAF漏洞进行修复,具体包括:

检查代码,将释放内存操作放置使用后面,用于保证使用完后再释放内存。

其中,所述判断当前被访问的内存块是否属于已保存的内存块,之后还包括:

如果当前被访问的内存块不属于被释放的内存,则不存在UAF漏洞。

其中,所述当检测到free函数被调用时,将释放的内存块保存,之前还包括:

重新加载Checker类的checkPreCall接口。

其中,所述当检测到内存被访问时,判断当前被访问的内存块是否属于已保存的内存块,之前还包括:

重新加载Checker类的checkLocation接口。

本发明还提供一种存储介质,其中,所述存储介质存储有漏洞检测程序,所述漏洞检测程序被处理器执行时实现如上所述的漏洞检测方法的步骤。

综上所述,本发明提供一种漏洞检测方法、终端及存储介质,所述方法包括:当检测到free函数被调用时,将释放的内存块保存;当检测到内存被访问时,判断当前被访问的内存块是否属于已保存的内存块;如果当前被访问的内存块属于被释放的内存,则上报UAF漏洞。本发明通过对二进制文件进行Use After Free漏洞进行检测,在攻击者利用漏洞之前,先进行检测,如果检测存在漏洞,则及时进行修复,避免黑客入侵。

当然,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关硬件(如处理器,控制器等)来完成,所述的程序可存储于一计算机可读取的存储介质中,所述程序在执行时可包括如上述各方法实施例的流程。其中所述的存储介质可为存储器、磁碟、光盘等。

应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

相关技术
  • 一种漏洞检测方法、装置、智能终端及存储介质
  • 一种车载终端漏洞检测方法、系统、设备及存储介质
技术分类

06120112275203