CN113569246A - 漏洞检测方法、装置、计算机设备和存储介质 - Google Patents

漏洞检测方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN113569246A
CN113569246A CN202010350007.1A CN202010350007A CN113569246A CN 113569246 A CN113569246 A CN 113569246A CN 202010350007 A CN202010350007 A CN 202010350007A CN 113569246 A CN113569246 A CN 113569246A
Authority
CN
China
Prior art keywords
function
target
callback
callback function
target process
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202010350007.1A
Other languages
English (en)
Other versions
CN113569246B (zh
Inventor
盛子骁
殷赵辉
曹飞
宋青原
卢正军
李文豪
朱泽瑾
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202010350007.1A priority Critical patent/CN113569246B/zh
Publication of CN113569246A publication Critical patent/CN113569246A/zh
Application granted granted Critical
Publication of CN113569246B publication Critical patent/CN113569246B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请涉及一种漏洞检测方法、装置、计算机设备和存储介质。所述方法包括:识别操作系统中运行的目标进程,将预设库文件注入至目标进程;预设库文件用于对运行的目标进程进行显式调用;获取系统属性信息和目标检测代码,利用预设回调函数根据系统属性信息和目标检测代码构造目标进程对应的回调函数;利用预设进程函数和回调函数对目标进程进行回调配置;通过回调函数从操作系统中返回目标进程的系统调用,获取返回的系统调用,利用回调函数解析系统调用对应的返回地址;当返回地址与目标进程的偏移地址不匹配时,确定返回地址对应的系统调用存在安全漏洞。采用本方法能够有效提高漏洞检测的效率和准确率。

Description

漏洞检测方法、装置、计算机设备和存储介质
技术领域
本申请涉及计算机安全技术领域,特别是涉及一种漏洞检测方法、装置、计算机设备和存储介质。
背景技术
随着互联网技术的迅速发展,信息网络广泛涉及各个领域,这也导致网络信息网络存在被攻击、数据被窃取等风险,网络信息安全成为了备受关注的问题。因此出现了一些基于网络信息安全的漏洞检测方式。通常是利用驱动层中设置的全局钩子拦截操作系统中所有进程的调用,再基于函数挂钩的系统调用识别,对调用地址进行筛选和判断,从而识别出不安全的系统调用。
然而,目前的基于驱动层的钩子识别方式易被常见工具检测到,且全局拦截方式需要拦截所有进程的系统调用,这种方式的处理复杂度较高,容易影响操作系统的稳定性,导致操作系统运行缓慢,从而导致漏洞检测的效率较低。
发明内容
基于此,有必要针对上述技术问题,提供一种能够有效提高漏洞检测的效率和准确率的漏洞检测方法、装置、计算机设备和存储介质。
一种漏洞检测方法,所述方法包括:
识别操作系统中运行的目标进程,将预设库文件注入至所述目标进程;所述预设库文件用于对所述运行的目标进程进行显式调用;
获取系统属性信息和目标检测代码,利用预设回调函数根据所述系统属性信息和所述目标检测代码构造所述目标进程对应的回调函数;
获取预设进程函数的进程函数信息,根据所述回调函数和所述进程函数信息对所述目标进程进行回调配置;
通过所述回调函数从所述操作系统中返回所述目标进程的系统调用,获取返回的系统调用,利用所述回调函数解析所述系统调用对应的返回地址;
当所述返回地址与所述目标进程的偏移地址不匹配时,确定所述返回地址对应的系统调用存在安全漏洞。
一种漏洞检测装置,所述装置包括:
文件注入模块,用于识别操作系统中运行的目标进程,将预设库文件注入至所述目标进程;所述预设库文件用于对所述运行的目标进程进行显式调用;
回调配置模块,用于获取系统属性信息和目标检测代码,利用预设回调函数根据所述系统属性信息和所述目标检测代码构造所述目标进程对应的回调函数;
回调处理模块,用于通过所述回调函数从所述操作系统中返回所述目标进程的系统调用,获取返回的系统调用,利用所述回调函数解析所述系统调用对应的返回地址;获取预设进程函数的进程函数信息,根据所述回调函数和所述进程函数信息对所述目标进程进行回调配置;
漏洞检测模块,用于当所述返回地址与所述目标进程的偏移地址不匹配时,确定所述返回地址对应的系统调用存在安全漏洞。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
识别操作系统中运行的目标进程,将预设库文件注入至所述目标进程;所述预设库文件用于对所述运行的目标进程进行显式调用;
获取系统属性信息和目标检测代码,利用预设回调函数根据所述系统属性信息和所述目标检测代码构造所述目标进程对应的回调函数;
获取预设进程函数的进程函数信息,根据所述回调函数和所述进程函数信息对所述目标进程进行回调配置;
通过所述回调函数从所述操作系统中返回所述目标进程的系统调用,获取返回的系统调用,利用所述回调函数解析所述系统调用对应的返回地址;
当所述返回地址与所述目标进程的偏移地址不匹配时,确定所述返回地址对应的系统调用存在安全漏洞。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
识别操作系统中运行的目标进程,将预设库文件注入至所述目标进程;所述预设库文件用于对所述运行的目标进程进行显式调用;
获取系统属性信息和目标检测代码,利用预设回调函数根据所述系统属性信息和所述目标检测代码构造所述目标进程对应的回调函数;
获取预设进程函数的进程函数信息,根据所述回调函数和所述进程函数信息对所述目标进程进行回调配置;
通过所述回调函数从所述操作系统中返回所述目标进程的系统调用,获取返回的系统调用,利用所述回调函数解析所述系统调用对应的返回地址;
当所述返回地址与所述目标进程的偏移地址不匹配时,确定所述返回地址对应的系统调用存在安全漏洞。
上述漏洞检测方法、装置、计算机设备和存储介质,识别到操作系统中运行的目标进程后,将预设库文件注入至操作系统中运行的目标程序,根据系统属性信息和目标检测代码构造和配置目标进程对应的回调函数,并利用预设进程函数的进程函数信息和回调函数对目标进程进行回调配置,由此能够有效地对目标进程进行回调配置,以有效获取目标进程的回调链。进而通过回调函数可以截获从操作系统的内核层返回至应用层的所有的系统调用,进而通过利用回调函数识别系统调用的调用链,由此能够快速精准地识别出存在安全漏洞的系统调用,从而有效提高了漏洞检测的效率和精准度。
附图说明
图1为一个实施例中漏洞检测方法的应用环境图;
图2为一个实施例中漏洞检测方法的流程示意图;
图3为一个实施例中漏洞检测方法的流程示意图;
图4为另一个实施例中漏洞检测方法的流程示意图;
图5为又一个实施例中漏洞检测方法的流程示意图;
图6为一个具体的实施例中漏洞检测方法的流程示意图;
图7为一个具体的实施例中检测shellcode漏洞的流程示意图;
图8为一个实施例中漏洞检测装置的结构框图;
图9为另一个实施例中漏洞检测装置的结构框图;
图10为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的漏洞检测方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。终端102运行目标程序时,与服务器104进行交互,服务器104向终端102返回目标进程相应的返回地址、请求数据以及相应功能等。终端102识别操作系统中运行的目标进程,将预设库文件注入至目标进程,预设库文件用于对运行的目标进程进行显式调用。获取系统属性信息和目标检测代码,利用预设回调函数根据系统属性信息和目标检测代码构造目标进程对应的回调函数,并利用预设进程函数的进程函数信息和回调函数对目标进程进行回调配置。通过回调函数从操作系统中返回目标进程的系统调用,获取返回的系统调用,利用回调函数解析系统调用对应的返回地址,将系统调用的返回地址与目标进程的偏移地址进行比对。当返回地址与偏移地址不匹配时,确定返回地址对应的系统调用存在安全漏洞。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图2所示,提供了一种漏洞检测方法,以该方法应用于图1中的终端为例进行说明,包括以下步骤:
步骤S202,识别操作系统中运行的目标进程,将预设库文件注入至目标进程;预设库文件用于对运行的目标进程进行显式调用。
其中,操作系统是管理计算机硬件与软件资源的计算机程序,是直接运行在计算机上的最基本的系统软件。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作系统的功能包括管理系统资源、控制程序运行、操作网络与管理文件系统、为其它应用软件提供支持等,让计算机系统所有资源最大限度地发挥作用。操作系统包括内核层和应用层。
常见的操作系统包括Windows、Linux、Android、iOS等系统。本实施例中以操作系统为Windows系统为例进行说明,具体可以应用于MicrosoftWindows7、Window8、Windows8.1、Windows10的32位和64位操作系统。
其中,进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是操作系统动态执行的基本单元。进程是一个实体,每一个进程都有对应的地址空间,包括文本区域、数据区域和堆栈。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。进程可以是一个“执行中的程序”,其中,程序是指令、数据及其组织形式的描述,进程是程序的实体。具体地,本实施例中的目标进程是指正在运行的程序的实例。目标进程可以为对应的目标程序在运行时的实例,目标程序可以为应用程序,也可以是网页应用等。
程序在运行的过程中可能会遭受各种攻击,例如木马、外挂等。因此,为保障程序的安全,在程序运行的过程中,需要对特定程序对应的目标进程进行漏洞检测。
其中,预设库文件为动态链接库文件,动态链接库(Dynamic Link Library,DLL)是一种共享函数库,动态链接库文件是一种动态链接库不可执行的二进制程序文件,允许程序共享执行特殊任务所必需的代码和其他资源。DLL文件包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。多个应用程序运行时可同时访问内存中单个DLL副本的内容。使用动态链接库可以更为容易地将更新应用于程序的各个模块,而不会影响该程序的其他部分。例如,可以将DLL文件作为程序运行时动态链接的运行时隐式链接,如果不能找到链接的DLL文件,操作系统将提示一个错误消息并且调用应用程序失败。
DLL文件能够在运行时使用LoadLibrary或者LoadLibraryEx对应的API函数进行显式调用,这个过程可以称为运行时动态调用。API函数GetProcAddress根据查找输出名称符号、FreeLibrary卸载DLL。LoadLibrary被调用时,载入指定的动态链接库,并将它映射到当前进程使用的地址空间。一旦载入,即可访问库内保存的资源。调用FreeLibrary时,则释放相应的动态链接库,从存储器卸载相应的DLL。从存储器卸载一个DLL时,进程可以从对应的VAS注销此计数器。
例如,在一个网络游戏应用程序中,如果把整个数百MB甚至数GB的游戏的代码都放在一个应用程序里,后续的修改成本较大。通过将不同功能的代码分别放在数个动态链接库中,则无需重新生成或安装整个程序就可以应用更新。以操作系统为Windows为例,Windows提供的DLL文件中包含了允许基于Windows的程序在Windows环境下操作的许多函数和资源。
当终端在运行特定的程序时,终端首先需要识别操作系统中该程序对应的目标进程,以对运行中的目标进程进行漏洞检测。
具体地,开发人员可以预先配置目标进程对应的动态链接库文件。当终端识别出操作系统中运行的目标进程后,获取预设的动态链接库文件,将动态链接库文件注入至相应的目标进程,用于目标进程在运行过程中进行显式调用,以使得进程在运行的过程中能够显示相应的链接。其中,动态链接库文件可以利用编译器编译生成。终端将预设库文件注入至相应的目标进程时,可以通过远程线程将预设库文件注入至相应的目标进程。
步骤S204,获取系统属性信息和目标检测代码,利用预设回调函数根据系统属性信息和目标检测代码构造目标进程对应的的回调函数。
其中,回调函数,在计算机程序设计中是指一个通过函数指针调用的函数。当把函数的地址作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,这个函数则为回调函数。回调函数是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
其中,目标检测代码指用于检测漏洞对象的一段代码。具体地,目标检测代码可以为shellcode,shellcode是指脱离了PE文件(Portable Executable,可移植的可执行程序文件)格式的一段可执行的二进制代码,用于检测进程运行过程中,来自shellcode漏洞的系统调用。
在发生网络攻击时,利用外挂、木马等漏洞攻击方式,为了躲避安全方案的检测,提升自身隐蔽性,其文件形式逐渐从PE文件转化为shellcode,因为其在内存中加载地址不同,在定位shellcode模块和分析shellcode功能时逆向成本较大。本实施例中,通过构造一段基于shellcode的目标检测代码,可以用于检测特定的来自shellcode的系统调用。
终端将预设库文件注入至目标进程后,则构造目标进程对应的回调函数。具体地,终端获取预设的回调函数后,首先识别操作系统的系统属性信息。具体地,系统属性信息为操作系统的属性信息,系统属性信息包括系统版本信息、操作系统的位类型信息,其中,操作系统通常包括32位和64位的操作系统。
终端在构造回调函数时,跟操作系统的系统属性信息填充预设回调函数的结构信息,同时构造一段目标检测代码,将目标检测代码作回调函数的桩代码,进而根据系统参数信息和目标检测代码构造得到目标进程对应的回调函数。
步骤S206,获取预设进程函数的进程函数信息,根据回调函数和进程函数信息对目标进程进行回调配置。
其中,预设进程函数是指预先配置的特定的进程函数,用于在目标进程中进行主动调用。
终端构造目标进程对应的回调函数后,还需要进一步对目标进程进行回调配置。终端可以获取预设进程函数,并获取预设进程函数的进程函数信息。其中,进程函数信息中包括传递参数、函数地址等信息。终端则利用回调函数和进程函数信息对目标进程进行回调配置,由此使得目标进程在运行时,主动返回目标进程的系统调用,从而实现对运行的目标进程进行显式调用。
具体地,预设的回调函数可以为InstrumentationCallBack函数,预设进程函数可以为NtSetInformationProcess函数。在构造回调函数时,可以进一步利用NtSetInformationProcess函数的进程函数信息对回调函数进行封装,并利用ProcessInstrumentationCallback函数对目标进程进行回调配置,从而能够有效构造出目标进程对应的回调函数。由于NtSetInformationProcess函数是一个未公开的函数,因此不易被恶意程序识别,从而能够有效提高漏洞检测的隐蔽性和检测效率。
步骤S208,通过回调函数从操作系统中返回目标进程的系统调用,获取返回的系统调用,利用回调函数解析系统调用对应的返回地址。
其中,系统调用(system call),指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务。系统调用是应用程序与操作系统之间的接口,由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(ApplicationProgrammingInterface,API)。系统调用提供用户程序与操作系统之间的接口。大多数系统交互式操作需求在操作系统的内核层运行。
系统调用把应用程序的请求传给内核层,调用相应的内核函数完成所需的处理,将处理结果返回给应用层中的应用程序。系统功能调用就是用户在程序中使用“访管指令”调用由操作系统提供的子功能集合。
操作系统通常都具有多任务处理的功能,通常靠进程来实现。由于操作系统快速的在每个进程间切换执行,所以一切看起来就会像是同时的。同时这也带来了很多安全问题,例如,一个进程可以轻易的修改进程的内存空间中的数据来使另一个进程异常或达到一些目的,因此操作系统必须保证每一个进程都能安全的执行。这一问题的解决方法是在处理器中加入基址寄存器和界限寄存器。这两个寄存器中的内容用硬件限制了对储存器的存取指令所访问的储存器的地址。
终端利用预设回调函数根据系统参数信息和目标检测代码构造出目标进程的回调函数后,目标进程在运行时,从操作系统的内核层返回到应用层的函数均会经过所构造的回调函数返回。
具体地,终端在运行目标进程时,通过回调函数从操作系统中返回目标进程的系统调用。终端首先截获这些返回的系统调用,并进一步利用回调函数解析各个系统调用对应的返回地址。其中,返回地址可以反映该系统调用的调用源头,以进一步识别该系统调用是否存在安全漏洞。
由于在构造目标进程的回调函数时,根据目标进程进行了回调配置,因此在运行目标进程的过程中,从操作系统的内核层向操作系统的应用层返回相应的系统调用时,都会经过回调函数返回。其中,回调函数中包括函数信息和回调参数。当终端获取操作系统返回的系统调用后,则可以通过解析该系统调用经过回调函数时,回调函数对应的回调参数,从而可以快速有效地获取到该系统调用对应的返回地址。
步骤S210,当返回地址与目标进程的偏移地址不匹配时,确定返回地址对应的系统调用存在安全漏洞。
其中,偏移地址是指计算机里的内存分段后,在段内某一地址相对于段首地址(段地址)的偏移量。目标进程的偏移地址是指操作系统的寄存器相对所在寄存器组基地址的偏移量,偏移地址可以反应目标进程在运行过程中各个模块的实际运行地址。
终端截获返回的系统调用并获取对应的返回地址后,则将各个系统调用的返回地址与目标进程的偏移地址进行比对。其中,目标进程可以包括多个功能模块,每个功能模块都有相应的偏移地址。终端在将各个系统调用的返回地址与目标进程的偏移地址进行比对时,将每个系统调用的返回地址与目标进程中各个功能模块对应的偏移地址进行比对。当该系统调用的返回地址与各个应用模块对应的偏移地址中的任意一个偏移地址相匹配时,则表示该系统调用是来自目标进程的系统调用,即为正常的系统调用。
当该系统调用的返回地址与各个应用模块对应的偏移地址均不匹配时,表示该系统调用不是来自目标进程的系统调用,即为非正常的系统调用。终端则将该返回地址对应的系统调用确定为存在安全漏洞的系统调用。
由于在运行的目标进程中引入了回调函数,可以利用回调函数截获从操作系统的内核层返回至应用层的所有的系统调用,进而通过利用回调函数识别系统调用的调用链,可以快速精准地识别出存在安全漏洞的系统调用。
进一步地,目标进程中可以预先配置对应的漏洞防护等级。终端可以根据目标进程对应的漏洞防护等级,当漏洞防护等级高时,可以直接对存在安全漏洞的系统调用进行拦截,以保障操作系统的安全和目标进程的运行安全。当漏洞防护等级不高时,可以对存在安全漏洞的系统调用进行标记后放行,以进一步对存在安全漏洞的系统调用进行安全分析,根据安全分析结果对目标进程对应的目标程序进行维护等处理,以提高目标程序的安全性。
上述漏洞检测方法中,终端将预设库文件注入至操作系统中运行的目标程序后,根据系统属性信息和目标检测代码构造和配置目标进程对应的回调函数,并利用预设进程函数的进程函数信息和回调函数对目标进程进行回调配置。进而通过回调函数可以截获从操作系统的内核层返回至应用层的所有的系统调用,进而通过利用回调函数识别系统调用的调用链,由此能够快速精准地识别出存在安全漏洞的系统调用,从而有效提高了漏洞检测的效率和精准度。
在一个实施例中,利用预设回调函数根据系统属性信息和目标检测代码构造目标进程对应的回调函数包括:获取预设回调函数,根据系统属性信息填充预设回调函数的结构字段信息;根据待检测漏洞属性获取目标检测代码;根据结构字段信息和目标检测代码构造目标进程对应的回调函数。
其中,漏洞属性可以包括多种代码格式类型对应的漏洞,例如包括PE文件形式的漏洞代码和shellcode形式的漏洞代码等。
终端将预设库文件注入至目标进程后,获取预设回调函数。终端首先根据操作系统的系统属性信息填充预设回调函数的结构信息,以保证回调函数能被执行。具体地,终端可以通过预设指令集获取操作系统的系统属性信息,进而利用操作系统的系统属性信息填充预设回调函数结构中的字段,从而填充得到预设回调函数的结构字段信息,以根据填充的结构字段信息和获取的目标检测代码构造回调函数。由此能够快速有效地构造出回调函数。
例如,在一个实施例中,回调函数可以为InstrumentationCallBack函数。终端需要识别当前操作系统是32位还是64位,具体地,可以借助PE工具如PEID直接查询获取,也可以通过编写程序指令集获取。终端可以通过分析程序的PE文件,确定预设回调函数结构中Magic字段。例如,010B为32位程序,020B位64位程序;判断32位程序后,需要将构造的结构InstrumentationCallBack中version字段填1,如果是64位程序则填0,从而填充得到预设回调函数的结构字段信息。
在一个实施例中,根据结构字段信息和目标检测代码构造目标进程对应的回调函数包括:根据目标进程确定目标进程对应的目标代码区域;根据待检测漏洞属性和目标代码区域确定对应的目标检测代码,利用目标检测代码生成回调函数的桩代码;利用结构字段信息和桩代码生成目标进程对应的回调函数。
其中,桩代码就是用来代替某些代码的代码,桩函数可以用来模拟已有函数的行为或是对将要开发的功能的一种临时替代。
终端在对目标进程进行回调配置时,需要指明一段代码区域作为操作系统从内核层返回应用层所调用的回调函数。这段代码正常情况下程序不会生成,所以需要向目标进程写入这一段代码,这段代码即为目标检测代码,例如可以为shellcode。
终端根据目标进程确定目标进程对应的目标代码区域后,根据待检测漏洞属性和目标代码区域获取对应的目标检测代码。这段目标检测代码可以是预先根据目标进程的漏洞检测类型所构造的。终端利用目标检测代码生成回调函数的桩代码,进而利用结构字段信息和桩代码生成目标进程对应的回调函数,以快速有效地构造目标进程对应的回调函数。
在一个实施例中,如图3所示,提供了一种漏洞检测方法,包括以下步骤:
步骤S302,识别操作系统中运行的目标进程,将预设库文件注入至目标进程;预设库文件用于对运行的目标进程进行显式调用。
步骤S304,获取预设回调函数,根据系统属性信息填充预设回调函数的结构字段信息。
步骤S306,获取目标进程从内核层返回应用层的堆栈分布和回调函数参数;根据堆栈分布确定目标进程对应的目标代码区域。
步骤S308,根据待检测漏洞属性和目标代码区域确定对应的目标检测代码,利用目标检测代码生成回调函数的桩代码。
步骤S310,利用结构字段信息和桩代码生成目标进程对应的回调函数。
步骤S312,通过回调函数从操作系统中返回目标进程的系统调用,获取返回的系统调用,利用回调函数解析系统调用对应的返回地址。
步骤S314,将系统调用的返回地址与目标进程的偏移地址进行比对。
步骤S316,当返回地址与偏移地址不匹配时,确定返回地址对应的系统调用存在安全漏洞。
终端在构造目标检测代码时,依据程序从内核返回应用层前后的堆栈分布和回调函数所需要的参数进行构造。具体地,终端获取目标进程从内核层返回应用层对应的堆栈分布和回调函数参数,根据堆栈分布可以确定目标进程对应的目标代码区域,根据回调函数参数可以确定目标检测代码的调用参数。终端进而利用目标代码区域和回调函数参数生成目标漏洞检测代码。构造的这段目标检测代码需要保证在执行前后堆栈平衡,用以保证程序能正常运行。通过在回调函数中构造目标检测代码,由此能够精准有效地检测出相应的存在安全漏洞的系统调用。
本实施例中,通过目标代码区域和回调函数参数生成目标漏洞检测代码,进而构造和配置回调函数,由此能够有效获取目标进程在运行过程中的回调链,能够精准有效地识别返回的系统调用是否存在安全漏洞。
在一个实施例中,该方法还包括:获取目标进程的回调域;获取预设回调函数和对应的回调函数信息,根据回调域和回调函数信息配置回调函数的第一参数;获取预设进程函数和对应的进程函数信息,利用进程函数信息生成第二参数;利用第二参数封装回调函数。
其中,回调域是表示目标程序在操作系统执行后返回的地址,即回调地址,用来指定跳转回目标程序或网站相应的地址。
终端在构造回调函数时,利用系统属性信息和目标检测代码生成回调函数的结构信息和的回调函数的桩代码后,进一步获取目标进程的回调域。其中,目标进程的回调域可以通过操作系统对目标程序进行调试过程中,获取从操作系统的底层调用参数,从而得到回调地址。终端进而获取预设回调函数,回调函数包括了对应的回调函数信息。终端则根据目标进程的回调域配置回调函数信息,并利用配置后的回调函数信息生成回调函数的第一参数。在执行回调函数时,通过获取回调函数的第一参数则可以获取相应系统调用的返回地址。
进一步地,终端生成回调函数后,还获取预设进程函数,预设进程函数包括对应的进程函数信息。终端则利用进程函数信息生成第二参数,并利用第二参数封装回调函数。具体地,预设进程函数可以为未公开的函数,例如可以为NtSetInformationProcess函数,使得构造的回调函数不易被破解。通过预设进程函数对回调函数进行封装,能够使得操作系统有效地利用回调函数对目标进程进行回调,以准确有效地获取系统调用的调用链。
在一个实施例中,如图4所示,提供了一种漏洞检测方法,包括以下步骤:
步骤S402,识别操作系统中运行的目标进程,将预设库文件注入至目标进程;预设库文件用于对运行的目标进程进行显式调用。
步骤S404,获取系统属性信息和目标检测代码,利用预设回调函数根据系统属性信息和目标检测代码构造目标进程对应的回调函数。
步骤S406,获取目标进程的回调域;获取预设回调函数和对应的回调函数信息,根据回调域和回调函数信息配置回调函数的第一参数。
步骤S408,获取预设进程函数和对应的进程函数信息,利用进程函数信息生成第二参数;利用第二参数封装回调函数。
步骤S410,获取预设进程函数的传递参数和进程函数地址。
步骤S412,利用传递参数确定第二参数;利用第二参数和进程函数地址对目标进程进行回调配置。
步骤S414,通过回调函数从操作系统中返回目标进程的系统调用,获取返回的系统调用,利用回调函数解析系统调用对应的返回地址。
步骤S416,将系统调用的返回地址与目标进程的偏移地址进行比对。
步骤S418,当返回地址与偏移地址不匹配时,确定返回地址对应的系统调用存在安全漏洞。
在截获通过回调函数从系统中返回的系统调用之前,利用预设进程函数对目标进程进行回调配置,以使得目标进程在运行时,终端能够有效地获取目标进程中的系统调用。具体地,终端获取预设进程函数的传递参数和进程函数地址,利用传递参数确定预设进程函数的第二参数。其中,终端可以利用预设函数接口获取预设进程函数的句柄标识,通过预设地址接口获取传递参数,将预设进程函数的传递参数作为预设进程函数的第二参数,并利用预设进程函数的第二参数封装回调函数,并利用预设进程函数的第二参数和进程函数地址对目标进程进行回调配置,从而使得目标进程在运行时能够准确有效地进行回调。
终端通过回调函数从操作系统中返回目标进程的系统调用,获取返回的系统调用,利用回调函数解析系统调用对应的返回地址,并将系统调用的返回地址与目标进程的偏移地址进行比对。当返回地址与偏移地址不匹配时,确定返回地址对应的系统调用存在安全漏洞,从而能够精准有效地识别返回的系统调用是否存在安全漏洞。
在一个实施例中,通过回调函数从操作系统中返回目标进程的系统调用,获取返回的系统调用包括:获取系统调用的返回函数;利用回调函数对返回函数对应的第一参数进行解析,得到系统调用的返回地址。
其中,所构造的目标进程的回调函数包括第一参数和第二参数,第一参数可以反应经过回调函数时的调用地址,第二参数用于对目标进程进行回调配置。通过回调函数从操作系统中返回目标进程的系统调用时,可以通过回调函数获取当前系统调用对应的第一参数,此时,当前系统调用的返回函数的第一参数即回调函数在回调时的第一参数。通过获取系统调用的返回函数,并利用回调函数对返回函数对应的第一参数进行解析,则可以得到系统调用的返回地址,从而能够准确地获取该系统调用的调用链。通过进一步对返回地址进行识别,从而可以准确地判断出该系统调用是否存在漏洞。
在一个实施例中,将系统调用的返回地址与目标进程的偏移地址进行比对包括:获取目标进程中各个子程序的偏移地址;将系统调用的返回地址与各个子程序的偏移地址进行比对;当返回地址与各个子程序的偏移地址均不匹配时,确定返回地址对应的系统调用存在安全漏洞。
其中,在目标进程对应的目标程序中,为提高应用程序的灵活性,可以将不同功能的部分代码分别放在数个动态链接库中,每个部分功能的代码则可以对应为一个子程序。子程序可以表示目标程序中的子功能模块,目标程序中则可以由多个子程序组成。目标程序在运行时,在目标进程中各个子程序分别在相应动态链接库运行,各个子程序的偏移地址也不同。
终端通过回调函数捕获从操作系统中返回的系统调用后,获取目标进程中各个子程序的偏移地址,并将该系统调用的返回地址与各个子程序的偏移地址进行比对,以判断该系统调用是否来自目标进程。具体地,终端将该系统调用的返回地址分别与各个子程序的偏移地址进行比对。当该系统调用的返回地址与目标进程中的任意一个子程序的偏移地址相匹配时,则表示该系统调用是来自目标进程的正常的系统调用。当该系统调用的返回地址与目标进程中的所有子程序的偏移地址都不匹配时,则表示该系统调用不是来自目标进程的系统调用,即为非正常的系统调用。终端则将该系统调用确定为存在漏洞的系统调用。通过利用回调函数识别系统调用的调用链,由此能够快速精准地识别出存在安全漏洞的系统调用,从而有效提高了漏洞检测的效率和精准度。
在另一个实施例中,目标进程中各个子程序在运行时会产生相应的调用函数。终端获取系统调用后,获取系统调用的返回函数。终端还可以将系统调用的返回函数与各个子程序的调用函数进行比对,具体可以利用函数名称进行比对。若返回函数的函数名称与各个各个子程序的调用函数的函数名称均不匹配时,表示该系统调用不是来自目标进程的系统调用,终端则将该系统调用确定为存在漏洞的系统调用。通过系统调用的返回函数的函数名称也能够准确有效地识别系统调用的调用链,由此能够快速精准地识别出存在安全漏洞的系统调用。
在其中一个实施例中,终端识别出目标进程中存在安全漏洞的系统调用后,筛选出存在安全漏洞的系统调用,直接对对存在安全漏洞的系统调用进行拦截。
在一个实施例中,如图5所示,提供了一种漏洞检测方法,包括以下步骤:
步骤S502,识别操作系统中运行的目标进程,将预设库文件注入至目标进程;预设库文件用于对运行的目标进程进行显式调用。
步骤S504,获取系统属性信息和目标检测代码,利用预设回调函数根据系统属性信息和目标检测代码构造目标进程对应的的回调函数。
步骤S506,通过回调函数从操作系统中返回目标进程的系统调用,获取返回的系统调用,利用回调函数解析系统调用对应的返回地址。
步骤S508,将系统调用的返回地址与目标进程的偏移地址进行比对。
步骤S510,当返回地址与偏移地址不匹配时,确定返回地址对应的系统调用存在安全漏洞。
步骤S512,筛选出存在安全漏洞的系统调用,识别系统调用的漏洞类型;根据漏洞类型确定系统调用的风险等级。
步骤S514,当系统调用的风险等级满足拦截条件时,拦截系统调用。
其中,每个漏洞包括相应的漏洞类型,漏洞类型包括SQL注入漏洞、跨站脚本漏洞、弱口令漏洞、HTTP报头追踪漏洞、远程命令执行漏洞、框架注入漏洞、文件上传漏洞、应用程序测试脚本泄露、私有IP地址泄露漏洞、未加密登录请求、敏感信息泄露漏洞等。其中,SQL注入漏洞可能会破坏数据库,还可能会破坏承载数据库的操作系统。SQL注入漏洞具体还包括数据库信息泄漏、网页篡改、网站被挂马、传播恶意软件、数据库被恶意操作、服务器被远程控制、破坏硬盘数据等漏洞类型。可以根据漏洞类型对多种漏洞划分相应的风险等级。例如,可以对于仅涉及增加当前账户的应用功能的漏洞类型时,可以将这种漏洞类型的风险等级定义为低风险等级。对于涉及恶意获取敏感信息、篡改软件、攻击数据库等漏洞类型,则将此类漏洞类型定义为高风险等级。具体可以根据预设的风险等级映射表确定每种漏洞类型对应的风险等级。
进一步地,目标进程在运行的过程中会返回多个系统调用,对每个系统调用的返回地址进行识别后,筛选出存在安全漏洞的系统调用。终端进一步对筛选出的系统调用进行安全分析。具体地,终端根据系统调用的返回函数识别系统调用的漏洞类型,根据漏洞类型确定系统调用的风险等级。其中,当该系统调用的风险等级为高风险等级时,确定该系统调用满足拦截条件,终端则对嘎系统调用进行拦截,以保证目标程序和操作系统的安全。
当该系统调用的风险等级为低风险等级时,终端可以获取该系统调用的调用链信息和相关参数信息,并对该系统调用放行。对于低风险等级的系统调用的调用链信息和相关参数信息可以用于漏洞分析,以使得相应的维护人员对目标程序进行维护,以提高目标程序的安全性。
如图6所示,为一个具体地实施例中的漏洞检测方法,包括以下步骤:
步骤S602,识别操作系统中运行的目标进程,将预设库文件注入至目标进程;预设库文件用于对运行的目标进程进行显式调用。
步骤S604,获取预设回调函数,根据系统属性信息填充预设回调函数的结构字段信息。
步骤S606,获取目标进程从内核层返回应用层的堆栈分布和回调函数参数;根据堆栈分布确定目标进程对应的目标代码区域。
步骤S608,根据待检测漏洞属性和目标代码区域确定对应的目标检测代码,利用目标检测代码生成回调函数的桩代码。
步骤S610,利用结构字段信息和桩代码生成目标进程对应的回调函数。
步骤S612,获取目标进程的回调域;获取预设回调函数和对应的回调函数信息,根据回调域和回调函数信息配置回调函数的第一参数。
步骤S614,获取预设进程函数和对应的进程函数信息,利用进程函数信息生成第二参数;利用第二参数封装回调函数。
步骤S616,获取预设进程函数的传递参数和进程函数地址;利用传递参数确定第二参数;利用第二参数和进程函数地址对目标进程进行回调配置。
步骤S618,通过回调函数从操作系统中返回目标进程的系统调用,获取返回的系统调用和对应的返回函数。
步骤S620,利用回调函数对返回函数对应的第一参数进行解析,得到系统调用的返回地址。
步骤S622,获取目标进程中各个子程序的偏移地址;将系统调用的返回地址与各个子程序的偏移地址进行比对。
步骤S624,当返回地址与各个子程序的偏移地址均不匹配时,确定返回地址对应的系统调用存在安全漏洞。
步骤S626,筛选出存在安全漏洞的系统调用,识别系统调用的漏洞类型;根据漏洞类型确定系统调用的风险等级。
步骤S628,当系统调用的风险等级满足拦截条件时,拦截系统调用。
本实施例中,终端识别操作系统中运行的目标进程,并将预设库文件注入至操作系统中运行的目标程序后,根据系统属性信息和目标检测代码构造和配置目标进程对应的回调函数,以有效获取目标进程的调用链。进而通过回调函数可以截获从操作系统的内核层返回至应用层的所有的系统调用,进而通过利用回调函数识别系统调用的调用链,由此能够快速精准地识别出存在安全漏洞的系统调用,从而有效提高了漏洞检测的效率和精准度。
举例说明,在一个具体的应用场景中,如图7所示,为一个具体的实施例中检测shellcode漏洞的流程示意图。其中,待检测漏洞属性可以为识别来自shellcode的漏洞。终端识别操作系统中运行的目标进程,通过远程线程技术将DLL文件注入至目标进程。同时针对构造基于InstrumentationCallBack的回调函数,具体地,终端获取当前操作系统的系统属性信息,利用系统属性信息填充正确的InstrumentationCallBack的结构信息,以保证回调函数能被执行。具体可以利用程序指令集,以填充InstrumentationCallBack结构中的version字段,同时获取预先构造一段基于shellcode的目标检测代码,作为回调函数的桩代码。在桩代码中,需要操作寄存器用来平衡堆栈,同时需要传递正确的寄存器作为参数用以正确调用预设回调函数。
终端进一步获取基于NtSetInformationProcess的预设进程函数和对应的函数地址。其中,NtSetInformationProcess为未公开的函数,在调用该函数接口前需要确定其函数地址。具体可以通过API-GetModuleHandle获得ntdll.dll的Hanlde,再通过获取的handle,通过调用api-GetProcAddress获得传递参数,传递函数名字作为第二个参数,以获得NtSetInformationProcess函数的地址。终端进一步配置进程回调,即ProcessInstrumentationCallback。具体地,终端通过获得NtSetInformationProcess的函数地址,在目标进程中主动调用。例如可以将第二个参数配置为40,可以表示目标进程在操作系统中运行的第40号配置信息,即ProcessInstrumentationCallback枚举,即可完成回调配置。
终端在目标进程内设置ProcessInstrumentationCallback后,所有从操作系统的内核层返回到操作系统的应用层的函数都会经过预设的回调函数。在回调函数中,可以通过解析当前回调函数对应的第一个参数,从而可以获得系统调用从内核层返回应用层的地址。终端利用回调函数获得了系统调用的返回地址后,即将这个返回地址于目标进程中各个子程序模块的偏移地址进行比对,以判断该返回地址是否在进程中各个子程序模块内。终端还可以通过直接调用预设地址接口,例如Api-SymFromAddr,来判断能否获取这个返回的系统调用的函数名称。通常情况下,来自shellcode漏洞的返回地址,不在目标进程的任何子程序模块的地址空间中,因此通过SymFromAddr也无法获得系统调用的函数名称。因此,当系统调用的返回地址不在目标进程的地址中,或SymFromAddr无法解析出返回函数的调用地址时,可以判断出这是来自shellcode中的系统调用,由此可以确定该系统调用存在安全漏洞。
上述漏洞检测方法,不需要驱动接管,也不需要Inline-hook,即消息钩子,通过调用未公开的API,即NtSetInformationProcess,配置目标进程的第40号信息(即ProcessInstrumentationCallback)。由此,当系统调用发生时,即会执行目标程序中预设的回调函数,通过对返回的系统调用的返回地址进行识别,就能够精准有效地识别出来自shellcode漏洞中的系统调用。
本申请还提供一种应用场景,应用于网络游戏安全检测场景,该应用场景应用上述的漏洞检测方法。具体地,该漏洞检测方法在该应用场景的应用如下:
目前一些网络游戏程序的安全对抗逐步升级,外挂、木马等漏洞为了躲避安全方案的检测,提升自己的隐蔽性,其文件形式逐渐从PE文件转化为shellcode形式的漏洞。因为其在内存中加载地址不同,在定位shellcode调用链和分析shellcode功能时逆向成本较大。外挂开发者的通常以小段shellcode形式的外挂隐蔽在游戏程序中,通过调用系统API来实现进一步隐藏,作弊等恶意行为。因此需要在大量的游戏代码中识别并筛选出这些shellcode漏洞,进而分析外挂的实现过程。
上述漏洞检测方法应用在游戏程序的外挂分析中时,识别到操作系统中运行的目标游戏进程后,获取预设的DLL文件,将DLL文件注入至目标游戏进程。获取操作系统的系统属性信息以及目标检测代码,即预先构造的用于识别shellcode漏洞的shellcode检测代码。进而利用预设回调函数根据系统属性信息和shellcode检测代码构造并配置目标游戏进程对应的回调函数,并对目标游戏进程进行回调配置。通过回调函数从操作系统中返回目标游戏进程的系统调用,并获取返回的系统调用,提供利用回调函数解析当前系统调用对应的返回地址。进而识别当前系统调用的返回地址自动筛选来自shellcode中的系统调用,从而能够准确地识别出非游戏程序本身的shellcode漏洞。通过根据系统调用链可快速辅助确认外挂的实现原理,从而能够有效推动对抗方案的快速开发。
应该理解的是,虽然图2-6的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-6中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图8所示,提供了一种漏洞检测装置800,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:文件注入模块802、回调配置模块804、回调处理模块806和漏洞检测模块808,其中:
文件注入模块802,用于识别操作系统中运行的目标进程,将预设库文件注入至目标进程;预设库文件用于对运行的目标进程进行显式调用;
回调配置模块804,用于获取系统属性信息和目标检测代码,利用预设回调函数根据系统属性信息和目标检测代码构造目标进程对应的回调函数;获取预设进程函数的进程函数信息,根据回调函数和进程函数信息对目标进程进行回调配置;
回调处理模块806,用于通过回调函数从操作系统中返回目标进程的系统调用,获取返回的系统调用,利用回调函数解析系统调用对应的返回地址;
漏洞检测模块808,用于当返回地址与目标进程的偏移地址不匹配时,确定返回地址对应的系统调用存在安全漏洞。
在一个实施例中,回调配置模块804还用于获取预设回调函数,根据系统属性信息填充预设回调函数的结构字段信息;根据待检测漏洞属性获取目标检测代码;根据结构字段信息和目标检测代码构造目标进程对应的回调函数。
在一个实施例中,回调配置模块804还用于根据目标进程确定目标进程对应的目标代码区域;根据待检测漏洞属性和目标代码区域确定对应的目标检测代码,利用目标检测代码生成回调函数的桩代码;利用结构字段信息和桩代码生成目标进程对应的回调函数。
在一个实施例中,操作系统包括内核层和应用层,回调配置模块804还用于获取目标进程从内核层返回应用层的堆栈分布和回调函数参数;根据堆栈分布确定目标进程对应的目标代码区域;利用目标代码区域和回调函数参数生成目标漏洞检测代码。
在一个实施例中,回调配置模块804还用于获取目标进程的回调域;获取预设回调函数和对应的回调函数信息,根据回调域和回调函数信息配置回调函数的第一参数;获取预设进程函数和对应的进程函数信息,利用进程函数信息生成第二参数;利用第二参数封装回调函数。
在一个实施例中,回调配置模块804还用于获取预设进程函数的传递参数和进程函数地址;利用传递参数确定第二参数;利用第二参数和进程函数地址对目标进程进行回调配置。
在一个实施例中,回调处理模块806还用于获取系统调用的返回函数;利用回调函数对返回函数对应的第一参数进行解析,得到系统调用的返回地址。
在一个实施例中,漏洞检测模块808还用于获取目标进程中各个子程序的偏移地址;将系统调用的返回地址与各个子程序的偏移地址进行比对;当返回地址与各个子程序的偏移地址均不匹配时,确定返回地址对应的系统调用存在安全漏洞。
在一个实施例中,如图9所示,该装置还包括漏洞拦截模块810,用于筛选出存在安全漏洞的系统调用,识别系统调用的漏洞类型;根据漏洞类型确定系统调用的风险等级;当系统调用的风险等级满足拦截条件时,拦截系统调用。
关于漏洞检测装置的具体限定可以参见上文中对于漏洞检测方法的限定,在此不再赘述。上述漏洞检测装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图10所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种漏洞检测方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static RandomAccess Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (12)

1.一种漏洞检测方法,其特征在于,所述方法包括:
识别操作系统中运行的目标进程,将预设库文件注入至所述目标进程;所述预设库文件用于对所述运行的目标进程进行显式调用;
获取系统属性信息和目标检测代码,利用预设回调函数根据所述系统属性信息和所述目标检测代码构造所述目标进程对应的回调函数;
获取预设进程函数的进程函数信息,根据所述回调函数和所述进程函数信息对所述目标进程进行回调配置;
通过所述回调函数从所述操作系统中返回所述目标进程的系统调用,获取返回的系统调用,利用所述回调函数解析所述系统调用对应的返回地址;
当所述返回地址与所述目标进程的偏移地址不匹配时,确定所述返回地址对应的系统调用存在安全漏洞。
2.根据权利要求1所述的方法,其特征在于,所述利用预设回调函数根据所述系统属性信息和所述目标检测代码构造所述目标进程对应的回调函数包括:
获取预设回调函数,根据所述系统属性信息填充所述预设回调函数的结构字段信息;
根据待检测漏洞属性获取目标检测代码;
根据所述结构字段信息和所述目标检测代码构造所述目标进程对应的回调函数。
3.根据权利要求2所述的方法,其特征在于,所述根据所述结构字段信息和所述目标检测代码构造所述目标进程对应的回调函数包括:
根据所述目标进程确定所述目标进程对应的目标代码区域;
根据所述待检测漏洞属性和所述目标代码区域确定对应的目标检测代码,利用所述目标检测代码生成回调函数的桩代码;
利用所述结构字段信息和所述桩代码生成所述目标进程对应的回调函数。
4.根据权利要求3所述的方法,其特征在于,所述操作系统包括内核层和应用层,所述根据所述目标代码区域确定对应的目标检测代码,利用所述目标检测代码生成回调函数的桩代码包括:
获取所述目标进程从所述内核层返回所述应用层的堆栈分布和回调函数参数;
根据所述堆栈分布确定所述目标进程对应的目标代码区域;
利用所述目标代码区域和所述回调函数参数生成目标漏洞检测代码。
5.根据权利要求1所述的方法,其特征在于,所述获取预设进程函数的进程函数信息,根据所述回调函数和所述进程函数信息对所述目标进程进行回调配置包括:
获取所述目标进程的回调域;
获取预设回调函数和对应的回调函数信息,根据所述回调域和所述回调函数信息配置所述回调函数的第一参数;
获取预设进程函数和对应的进程函数信息,利用所述进程函数信息生成第二参数;
利用所述第二参数封装所述回调函数。
6.根据权利要求5所述的方法,其特征在于,所述根据所述回调函数和所述进程函数信息对所述目标进程进行回调配置包括:
获取所述预设进程函数的传递参数和进程函数地址;
利用所述传递参数确定第二参数;
利用所述第二参数和所述进程函数地址对所述目标进程进行回调配置。
7.根据权利要求5所述的方法,其特征在于,所述通过所述回调函数从所述操作系统中返回所述目标进程的系统调用,获取返回的系统调用包括:
获取所述系统调用的返回函数;
利用所述回调函数对所述返回函数对应的第一参数进行解析,得到所述系统调用的返回地址。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述目标进程中各个子程序的偏移地址;
将所述系统调用的返回地址与所述各个子程序的偏移地址进行比对;
当所述返回地址与所述各个子程序的偏移地址均不匹配时,确定所述返回地址对应的系统调用存在安全漏洞。
9.根据权利要求1至8任意一项所述的方法,其特征在于,所述方法还包括:
筛选出存在安全漏洞的系统调用,识别所述系统调用的漏洞类型;
根据所述漏洞类型确定所述系统调用的风险等级;
当所述系统调用的风险等级满足拦截条件时,拦截所述系统调用。
10.一种漏洞检测装置,其特征在于,所述装置包括:
文件注入模块,用于识别操作系统中运行的目标进程,将预设库文件注入至所述目标进程;所述预设库文件用于对所述运行的目标进程进行显式调用;
回调配置模块,用于获取系统属性信息和目标检测代码,利用预设回调函数根据所述系统属性信息和所述目标检测代码构造所述目标进程对应的回调函数;获取预设进程函数的进程函数信息,根据所述回调函数和所述进程函数信息对所述目标进程进行回调配置;
回调处理模块,用于通过所述回调函数从所述操作系统中返回所述目标进程的系统调用,获取返回的系统调用,利用所述回调函数解析所述系统调用对应的返回地址;
漏洞检测模块,用于当所述返回地址与所述目标进程的偏移地址不匹配时,确定所述返回地址对应的系统调用存在安全漏洞。
11.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至9中任一项所述的方法的步骤。
12.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至9中任一项所述的方法的步骤。
CN202010350007.1A 2020-04-28 2020-04-28 漏洞检测方法、装置、计算机设备和存储介质 Active CN113569246B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010350007.1A CN113569246B (zh) 2020-04-28 2020-04-28 漏洞检测方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010350007.1A CN113569246B (zh) 2020-04-28 2020-04-28 漏洞检测方法、装置、计算机设备和存储介质

Publications (2)

Publication Number Publication Date
CN113569246A true CN113569246A (zh) 2021-10-29
CN113569246B CN113569246B (zh) 2024-05-28

Family

ID=78158079

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010350007.1A Active CN113569246B (zh) 2020-04-28 2020-04-28 漏洞检测方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN113569246B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114297662A (zh) * 2021-12-24 2022-04-08 深圳开源互联网安全技术有限公司 一种sql注入漏洞检测方法、装置及可读存储介质
CN114500101A (zh) * 2022-03-07 2022-05-13 桂林高升网络科技有限公司 一种基于云计算的云游戏漏洞分析方法及服务器
CN115221524A (zh) * 2022-09-20 2022-10-21 深圳市科力锐科技有限公司 业务数据保护方法、装置、设备及存储介质
CN116028929A (zh) * 2023-01-19 2023-04-28 安芯网盾(北京)科技有限公司 基于Linux内核的无文件攻击的检测方法及装置
CN117112435A (zh) * 2023-09-08 2023-11-24 清科万道(北京)信息技术有限公司 一种漏洞联动检测结果的融合方法、存储介质及电子设备
CN118036019A (zh) * 2024-04-11 2024-05-14 成都派沃特科技股份有限公司 基于代码自动检测的漏洞定位方法及系统

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103632101A (zh) * 2013-12-09 2014-03-12 北京奇虎科技有限公司 一种拦截系统调用的方法和装置
US20150213260A1 (en) * 2014-01-27 2015-07-30 Igloo Security, Inc. Device and method for detecting vulnerability attack in program
CN105740711A (zh) * 2016-01-29 2016-07-06 哈尔滨工业大学深圳研究生院 一种基于内核对象行为本体的恶意代码检测方法及系统
US20170300698A1 (en) * 2016-04-19 2017-10-19 Synack, Inc. Distributed System for Discovery of Vulnerabilities in Applications Including Detecting and/or Filtering Out Vulnerability Duplicates
CN108664793A (zh) * 2017-03-30 2018-10-16 腾讯科技(深圳)有限公司 一种检测漏洞的方法和装置
CN109002721A (zh) * 2018-07-12 2018-12-14 南方电网科学研究院有限责任公司 一种信息安全漏洞的挖掘分析方法
CN110059477A (zh) * 2019-03-14 2019-07-26 成都亚信网络安全产业技术研究院有限公司 一种攻击检测方法及装置
CN110929267A (zh) * 2019-11-29 2020-03-27 深信服科技股份有限公司 代码漏洞检测方法、装置、设备及存储介质

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103632101A (zh) * 2013-12-09 2014-03-12 北京奇虎科技有限公司 一种拦截系统调用的方法和装置
US20150213260A1 (en) * 2014-01-27 2015-07-30 Igloo Security, Inc. Device and method for detecting vulnerability attack in program
CN105740711A (zh) * 2016-01-29 2016-07-06 哈尔滨工业大学深圳研究生院 一种基于内核对象行为本体的恶意代码检测方法及系统
US20170300698A1 (en) * 2016-04-19 2017-10-19 Synack, Inc. Distributed System for Discovery of Vulnerabilities in Applications Including Detecting and/or Filtering Out Vulnerability Duplicates
CN108664793A (zh) * 2017-03-30 2018-10-16 腾讯科技(深圳)有限公司 一种检测漏洞的方法和装置
CN109002721A (zh) * 2018-07-12 2018-12-14 南方电网科学研究院有限责任公司 一种信息安全漏洞的挖掘分析方法
CN110059477A (zh) * 2019-03-14 2019-07-26 成都亚信网络安全产业技术研究院有限公司 一种攻击检测方法及装置
CN110929267A (zh) * 2019-11-29 2020-03-27 深信服科技股份有限公司 代码漏洞检测方法、装置、设备及存储介质

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114297662A (zh) * 2021-12-24 2022-04-08 深圳开源互联网安全技术有限公司 一种sql注入漏洞检测方法、装置及可读存储介质
CN114297662B (zh) * 2021-12-24 2023-02-03 深圳开源互联网安全技术有限公司 一种sql注入漏洞检测方法、装置及可读存储介质
CN114500101A (zh) * 2022-03-07 2022-05-13 桂林高升网络科技有限公司 一种基于云计算的云游戏漏洞分析方法及服务器
CN114500101B (zh) * 2022-03-07 2023-01-13 上海维迈文博数字科技有限公司 一种基于云计算的云游戏漏洞分析方法及服务器
CN115221524A (zh) * 2022-09-20 2022-10-21 深圳市科力锐科技有限公司 业务数据保护方法、装置、设备及存储介质
CN116028929A (zh) * 2023-01-19 2023-04-28 安芯网盾(北京)科技有限公司 基于Linux内核的无文件攻击的检测方法及装置
CN116028929B (zh) * 2023-01-19 2023-08-22 安芯网盾(北京)科技有限公司 基于Linux内核的无文件攻击的检测方法及装置
CN117112435A (zh) * 2023-09-08 2023-11-24 清科万道(北京)信息技术有限公司 一种漏洞联动检测结果的融合方法、存储介质及电子设备
CN117112435B (zh) * 2023-09-08 2024-01-26 清科万道(北京)信息技术有限公司 一种漏洞联动检测结果的融合方法、存储介质及电子设备
CN118036019A (zh) * 2024-04-11 2024-05-14 成都派沃特科技股份有限公司 基于代码自动检测的漏洞定位方法及系统

Also Published As

Publication number Publication date
CN113569246B (zh) 2024-05-28

Similar Documents

Publication Publication Date Title
CN113569246B (zh) 漏洞检测方法、装置、计算机设备和存储介质
US10528734B2 (en) System and method for vetting mobile phone software applications
Xue et al. NDroid: Toward tracking information flows across multiple Android contexts
EP2979219B1 (en) Suspicious program detection
US9552285B2 (en) Micro-execution for software testing
US9223964B2 (en) Detecting JAVA sandbox escaping attacks based on JAVA bytecode instrumentation and JAVA method hooking
US20190114401A1 (en) On device structure layout randomization for binary code to enhance security through increased entropy
US11263311B2 (en) Securing virtual-machine software applications
JP2019503539A (ja) 仮想マシンを監査するためのシステムおよび方法
US8667298B2 (en) Module signing for unprivileged users to create and load trustworthy kernel modules
CN109271789B (zh) 恶意进程检测方法、装置、电子设备及存储介质
CN109388946B (zh) 恶意进程检测方法、装置、电子设备及存储介质
US20170185784A1 (en) Point-wise protection of application using runtime agent
Harrison et al. A framework for detecting malware in cloud by identifying symptoms
Cho et al. Anti-debugging scheme for protecting mobile apps on android platform
US20080028180A1 (en) Inappropriate access detector based on system segmentation faults
US20240193278A1 (en) Vulnerability analysis of a computer driver
CN108985096B (zh) 一种Android SQLite数据库安全增强、安全操作方法以及装置
Ascia et al. Making android apps data-leak-safe by data flow analysis and code injection
US8484753B2 (en) Hooking nonexported functions by the offset of the function
CN113114681B (zh) 测试报文处理方法、装置、计算机系统及可读存储介质
US11556645B2 (en) Monitoring control-flow integrity
Peiró et al. An analysis on the impact and detection of kernel stack infoleaks
Chiaramida et al. AppSeer: discovering flawed interactions among Android components
CN113391874B (zh) 一种虚拟机检测对抗方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant