CN115600204A - 一种检测shellcode恶意代码的方法和系统及计算机设备 - Google Patents
一种检测shellcode恶意代码的方法和系统及计算机设备 Download PDFInfo
- Publication number
- CN115600204A CN115600204A CN202211319287.5A CN202211319287A CN115600204A CN 115600204 A CN115600204 A CN 115600204A CN 202211319287 A CN202211319287 A CN 202211319287A CN 115600204 A CN115600204 A CN 115600204A
- Authority
- CN
- China
- Prior art keywords
- function
- callback
- thread
- address
- memory
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 111
- 230000006870 function Effects 0.000 claims abstract description 154
- 230000008569 process Effects 0.000 claims abstract description 81
- 238000001914 filtration Methods 0.000 claims abstract description 46
- 238000004590 computer program Methods 0.000 claims description 8
- 230000007547 defect Effects 0.000 abstract description 3
- 238000012544 monitoring process Methods 0.000 description 6
- 230000000694 effects Effects 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000009545 invasion Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Storage Device Security (AREA)
Abstract
本发明的实施例公开了一种检测shellcode恶意代码的方法和系统及计算机设备,方法包括:针对待保护的系统操作,创建用于过滤的Callback回调函数;在Callback回调函数中获取当前进程的Pid识别号,根据Pid识别号判断是否过滤该进程;在Callback回调函数中获取当前线程的线程函数起始地址;查询当前线程的线程函数起始地址对应的虚拟地址描述符VAD里记录的内存信息,若该内存地址没有在任何系统模块中且具有可执行属性,则识别为shellcode恶意代码。系统包括回调函数创建模块,过滤判断模块,地址获取模块和查询判断模块。本发明能够增强检测shellcode执行的能力,弥补Windows平台现有检测shellcode执行手段的不足,适用于Windows操作系统。
Description
技术领域
本发明涉及shellcode检测技术领域,特别涉及一种检测shellcode恶意代码的方法和系统及计算机设备。
背景技术
因为shellcode具有隐蔽性高的特点,所以绝大多数恶意代码都以shellcode的形式存在。目前Windows平台上已有很多shellcode检测方案,但是这些方案都有一定的局限性。
(1)通过注入模块到应用层进程来检测shellcode:注入一个dll到被保护的进程,挂钩内存申请API进行监控,监控其申请可执行内存的动作,或者对peb的访问进行监控,这类方案有2大缺陷,一是对被保护的进程必须注入dll,侵入性太强;二是shellcode可能会模拟实现一个内存申请函数,这个函数使用sysenter/syscall指令进入内核申请可执行内存,这样就绕过了挂钩内存申请API监控可执行内存申请的方案。
(2)利用硬件虚拟化检测shellcode:利用硬件虚拟化对一些关键系统调用进行hook监控内存上的异常申请、篡改动作;或利用硬件虚拟化监控异常的内存执行行为来检测识别shellcode代码的执行。但是这种方案只适用于个人终端,并不适用于企业终端,因为企业的终端大多都在云上,操作系统运行在虚拟机上,由于外部的VMM不支持虚拟化嵌套,从而不可能在虚拟机内部开启虚拟化,这种方案的商业化落地大大受限。
发明内容
有鉴于此,本发明实施例的目的在于提供一种检测shellcode恶意代码的方法和系统及计算机设备,能够增强检测shellcode执行的能力,弥补Windows平台现有检测shellcode执行手段的不足,适用于Windows操作系统。
第一方面,本发明实施例提供了一种检测shellcode恶意代码的方法,其中,包括:
针对待保护的系统操作,创建用于过滤的Callback回调函数。
在Callback回调函数中获取当前进程的Pid识别号,根据Pid识别号判断是否过滤该进程。
在Callback回调函数中获取当前线程的线程函数起始地址。
查询当前线程的线程函数起始地址对应的虚拟地址描述符VAD里记录的内存信息,若该内存地址没有在任何系统模块中且具有可执行属性,则识别为shellcode恶意代码。
结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,所述针对待保护的系统操作,创建用于过滤的Callback回调函数,包括:
针对待保护的系统操作编写Windows驱动程序,调用FltRegisterFilter注册文件过滤回调函数。
调用CmRegisterCallback注册注册表过滤回调函数。
调用PsSetCreateThreadNotifyRoutine注册创建线程回调函数。
调用PsSetCreateProcessNotifyRoutine注册创建进程回调函数。
调用PsSetLoadImageNotifyRoutine注册加载模块回调函数。
调用ObRegisterCallbacks注册打开进程和线程回调函数。
调用FwpsCalloutRegister注册网络过滤回调函数。
结合第一方面,本发明实施例提供了第一方面的第二种可能的实施方式,其中,所述在Callback回调函数中获取当前进程的Pid识别号,根据Pid识别号判断是否过滤该进程,包括:
在Callback回调函数中获取当前进程的Pid识别号。
若当前进程的Pid识别号为0或4,或判断当前模式为内核模式,返回。
过滤掉不必要的操作,提升性能。
结合第一方面,本发明实施例提供了第一方面的第三种可能的实施方式,其中,所述在Callback回调函数中获取当前线程的线程函数起始地址,包括:
调用ZwQueryInformationThread函数获取当前线程的线程函数起始地址。
若获取成功,则进一步识别当前线程的线程函数是否为shellcode恶意代码。
若获取失败,则返回,不再继续执行,避免系统异常。
结合第一方面,本发明实施例提供了第一方面的第四种可能的实施方式,其中,所述查询当前线程的线程函数起始地址对应的虚拟地址描述符VAD里记录的内存信息,若该内存地址没有在任何系统模块中且具有可执行属性,则识别为shellcode恶意代码,包括:
调用ZwQueryVirtualMemory函数查询当前线程的线程函数起始地址对应的虚拟地址描述符VAD里记录的类型信息为MemoryBasicInformation的虚拟地址属性的信息,若该函数返回成功,则得到该虚拟地址在该进程的地址空间中对应一个虚拟地址描述符VAD中记录的属性,若该函数返回失败,则返回,说明线程函数所在的内存被该进程的其他线程释放了。
若该虚拟地址描述符VAD中记录的内存类型为MEM_PRIVATE或者MEM_MAPPED,且该内存的状态为MEM_COMMIT,且该内存的保护属性为PAGE_EXECUTE或PAGE_EXECUTE_READWRITE或PAGE_EXECUTE_READ或PAGE_EXECUTE_WRITECOPY,则说明该内存地址不在任何进程模块地址范围内且具有可执行属性,这是典型的shellcode必须具备的特征,则识别为shellcode恶意代码。
第二方面,本发明实施例还提供了一种检测shellcode恶意代码的系统,其中,包括:
回调函数创建模块,用于针对待保护的系统操作,创建用于过滤的Callback回调函数。
过滤判断模块,用于在Callback回调函数中获取当前进程的Pid识别号,根据Pid识别号判断是否过滤该进程。
地址获取模块,用于在Callback回调函数中获取当前线程的线程函数起始地址。
查询判断模块,用于查询当前线程的线程函数起始地址对应的虚拟地址描述符VAD里记录的内存信息,若该内存地址没有在任何系统模块中且具有可执行属性,则识别为shellcode恶意代码。
结合第二方面,本发明实施例提供了第二方面的第一种可能的实施方式,其中,所述回调函数创建模块包括:
文件过滤编写单元,用于针对待保护的系统操作编写Windows驱动程序,调用FltRegisterFilter注册文件过滤回调函数。
注册表过滤编写单元,用于调用CmRegisterCallback注册注册表过滤回调函数。
创建线程编写单元,用于调用PsSetCreateThreadNotifyRoutine注册创建线程回调函数。
创建进程编写单元,用于调用PsSetCreateProcessNotifyRoutine注册创建进程回调函数。
加载模块编写单元,用于调用PsSetLoadImageNotifyRoutine注册加载模块回调函数。
打开进程和线程编写单元,用于调用ObRegisterCallbacks注册打开进程和线程回调函数。
网络过滤编写单元,用于调用FwpsCalloutRegister注册网络过滤回调函数。
结合第二方面,本发明实施例提供了第二方面的第二种可能的实施方式,其中,所述过滤判断模块包括:
识别号获取单元,用于在Callback回调函数中获取当前进程的Pid识别号。
线程过滤单元,用于若当前进程的Pid识别号为0或4,或判断当前模式为内核模式,返回。
结合第二方面,本发明实施例提供了第二方面的第三种可能的实施方式,其中,所述查询判断模块包括:
虚拟地址查询单元,用于调用ZwQueryVirtualMemory函数查询当前线程的线程函数起始地址对应的虚拟地址描述符VAD里记录的类型信息为MemoryBasicInformation的虚拟地址属性的信息,若该函数返回成功,则得到该虚拟地址在该进程的地址空间中对应一个虚拟地址描述符VAD中记录的属性,若该函数返回失败,则返回。
内存属性判断单元,用于若该虚拟地址描述符VAD中记录的内存类型为MEM_PRIVATE或者MEM_MAPPED,且该内存的状态为MEM_COMMIT,且该内存的保护属性为PAGE_EXECUTE或PAGE_EXECUTE_READWRITE或PAGE_EXECUTE_READ或PAGE_EXECUTE_WRITECOPY,则说明该内存地址不在任何进程模块地址范围内且具有可执行属性,这是典型的shellcode必须具备的特征,则识别为shellcode恶意代码。
第三方面,本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如前所述的检测shellcode恶意代码的方法。
本发明实施例的有益效果是:
本发明的检测shellcode恶意代码的方法和系统及计算机设备,相比现有方案,不用对被保护进程注入dll,对被保护进程没有侵入性;在Windows内核检测shellcode的执行,不容易被绕过;使用Windows提供的标准接口,不存在任何兼容性问题,便于商业化落地。本发明检测Windows平台执行shellcode时效果显著,有不容易被绕过的特点。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明检测shellcode恶意代码的方法的流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件能够以各种不同的配置来布置和设计。
shellcode通常表示一段用于利用软件漏洞而执行的代码。shellcode在执行时通常需要调用一些重要的系统api进行一些操作,比如操作文件、注册表、创建线程、创建进程、加载模块、打开进程或者线程、或者发起网络连接。如果shellcode没有这些操作,那么这样的shellcode对攻击者来说并无意义。
因此编写Windows驱动监控实现文件过滤、注册表过滤、创建线程回调、创建进程回调、加载模块回调、打开进程和线程回调、网络过滤,在这些起过滤操作作用的回调函数里获取当前线程的线程函数起始地址,查询当前线程的线程函数起始地址对应的VAD里的记录的内存信息,只要该内存地址没有在任何模块中且具有可执行属性,则认为是shellcode。
请参照图1,本发明的第一个实施例提供一种检测shellcode恶意代码的方法,其中,包括:
针对待保护的系统操作,创建用于过滤的Callback回调函数。
在Callback回调函数中获取当前进程的Pid识别号,根据Pid识别号判断是否过滤该进程。
在Callback回调函数中获取当前线程的线程函数起始地址。
查询当前线程的线程函数起始地址对应的虚拟地址描述符VAD里记录的内存信息,若该内存地址没有在任何系统模块中且具有可执行属性,则识别为shellcode恶意代码。
其中,Callback回调函数是一个通过函数指针调用的函数。若把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,则称其为回调函数。
其中,所述针对待保护的系统操作,创建用于过滤的Callback回调函数,包括:
针对待保护的系统操作编写Windows驱动程序,调用FltRegisterFilter注册文件过滤回调函数。
调用CmRegisterCallback注册注册表过滤回调函数。
调用PsSetCreateThreadNotifyRoutine注册创建线程回调函数。
调用PsSetCreateProcessNotifyRoutine注册创建进程回调函数。
调用PsSetLoadImageNotifyRoutine注册加载模块回调函数。
调用ObRegisterCallbacks注册打开进程和线程回调函数。
调用FwpsCalloutRegister注册网络过滤回调函数。
其中,FltRegisterFilter、CmRegisterCallback、PsSetCreateThreadNotifyRoutine、PsSetCreateProcessNotifyRoutine、PsSetLoadImageNotifyRoutine、ObRegisterCallbacks、FwpsCalloutRegister均为注册函数。
其中,所述在Callback回调函数中获取当前进程的Pid识别号,根据Pid识别号判断是否过滤该进程,包括:
在Callback回调函数中获取当前进程的Pid识别号。
若当前进程的Pid识别号为0或4,或判断当前模式为内核模式,返回。
过滤掉不必要的操作,提升性能。
其中,Pid识别号是Process Identification的缩写,在操作系统里指进程识别号,也就是进程标识符。操作系统里每打开一个程序都会创建一个进程ID,即Pid识别号。
其中,所述在Callback回调函数中获取当前线程的线程函数起始地址,包括:
调用ZwQueryInformationThread函数获取当前线程的线程函数起始地址。
若获取成功,则进一步识别当前线程的线程函数是否为shellcode恶意代码。
若获取失败,则返回,不再继续执行,避免系统异常。
其中,所述查询当前线程的线程函数起始地址对应的虚拟地址描述符VAD里记录的内存信息,若该内存地址没有在任何系统模块中且具有可执行属性,则识别为shellcode恶意代码,包括:
调用ZwQueryVirtualMemory函数查询当前线程的线程函数起始地址对应的虚拟地址描述符VAD里记录的类型信息为MemoryBasicInformation的虚拟地址属性的信息,若该函数返回成功,则得到该虚拟地址在该进程的地址空间中对应一个虚拟地址描述符VAD中记录的属性,若该函数返回失败,则返回,说明线程函数所在的内存被该进程的其他线程释放了。
若该虚拟地址描述符VAD中记录的内存类型为MEM_PRIVATE或者MEM_MAPPED,且该内存的状态为MEM_COMMIT,且该内存的保护属性为PAGE_EXECUTE或PAGE_EXECUTE_READWRITE或PAGE_EXECUTE_READ或PAGE_EXECUTE_WRITECOPY,则说明该内存地址不在任何进程模块地址范围内且具有可执行属性,这是典型的shellcode必须具备的特征,则识别为shellcode恶意代码。
本发明的第二个实施例提供一种检测shellcode恶意代码的系统,其中,包括:
回调函数创建模块,用于针对待保护的系统操作,创建用于过滤的Callback回调函数。
过滤判断模块,用于在Callback回调函数中获取当前进程的Pid识别号,根据Pid识别号判断是否过滤该进程。
地址获取模块,用于在Callback回调函数中获取当前线程的线程函数起始地址。
查询判断模块,用于查询当前线程的线程函数起始地址对应的虚拟地址描述符VAD里记录的内存信息,若该内存地址没有在任何系统模块中且具有可执行属性,则识别为shellcode恶意代码。
其中,所述回调函数创建模块包括:
文件过滤编写单元,用于针对待保护的系统操作编写Windows驱动程序,调用FltRegisterFilter注册文件过滤回调函数。
注册表过滤编写单元,用于调用CmRegisterCallback注册注册表过滤回调函数。
创建线程编写单元,用于调用PsSetCreateThreadNotifyRoutine注册创建线程回调函数。
创建进程编写单元,用于调用PsSetCreateProcessNotifyRoutine注册创建进程回调函数。
加载模块编写单元,用于调用PsSetLoadImageNotifyRoutine注册加载模块回调函数。
打开进程和线程编写单元,用于调用ObRegisterCallbacks注册打开进程和线程回调函数。
网络过滤编写单元,用于调用FwpsCalloutRegister注册网络过滤回调函数。
其中,所述过滤判断模块包括:
识别号获取单元,用于在Callback回调函数中获取当前进程的Pid识别号。
线程过滤单元,用于若当前进程的Pid识别号为0或4,或判断当前模式为内核模式,返回。
其中,所述查询判断模块包括:
虚拟地址查询单元,用于调用ZwQueryVirtualMemory函数查询当前线程的线程函数起始地址对应的虚拟地址描述符VAD里记录的类型信息为MemoryBasicInformation的虚拟地址属性的信息,若该函数返回成功,则得到该虚拟地址在该进程的地址空间中对应一个虚拟地址描述符VAD中记录的属性,若该函数返回失败,则返回。
内存属性判断单元,用于若该虚拟地址描述符VAD中记录的内存类型为MEM_PRIVATE或者MEM_MAPPED,且该内存的状态为MEM_COMMIT,且该内存的保护属性为PAGE_EXECUTE或PAGE_EXECUTE_READWRITE或PAGE_EXECUTE_READ或PAGE_EXECUTE_WRITECOPY,则说明该内存地址不在任何进程模块地址范围内且具有可执行属性,这是典型的shellcode必须具备的特征,则识别为shellcode恶意代码。
本发明的第三个实施例提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如前所述的检测shellcode恶意代码的方法。
本发明实施例旨在保护一种检测shellcode恶意代码的方法和系统及计算机设备,具备如下效果:
1.相比现有方案,不用对被保护进程注入dll,对被保护进程没有侵入性。
2.在Windows内核检测shellcode的执行,不容易被绕过。
3.使用Windows提供的标准接口,不存在任何兼容性问题,便于商业化落地。
4.本发明检测Windows平台执行shellcode时效果显著,有不容易被绕过的特点。
本发明实施例所提供的检测shellcode恶意代码方法及装置的计算机程序产品,包括存储了程序代码的计算机可读存储介质,程序代码包括的指令可用于执行前面方法实施例中的方法,具体实现可参见方法实施例,在此不再赘述。
具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被运行时,能够执行上述检测shellcode恶意代码方法,从而能够增强检测shellcode执行的能力,弥补Windows平台现有检测shellcode执行手段的不足。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种检测shellcode恶意代码的方法,其特征在于,包括:
针对待保护的系统操作,创建用于过滤的Callback回调函数;
在Callback回调函数中获取当前进程的Pid识别号,根据Pid识别号判断是否过滤该进程;
在Callback回调函数中获取当前线程的线程函数起始地址;
查询当前线程的线程函数起始地址对应的虚拟地址描述符VAD里记录的内存信息,若该内存地址没有在任何系统模块中且具有可执行属性,则识别为shellcode恶意代码。
2.根据权利要求1所述的检测shellcode恶意代码的方法,其特征在于,所述针对待保护的系统操作,创建用于过滤的Callback回调函数,包括:
针对待保护的系统操作编写Windows驱动程序,调用FltRegisterFilter注册文件过滤回调函数;
调用CmRegisterCallback注册注册表过滤回调函数;
调用PsSetCreateThreadNotifyRoutine注册创建线程回调函数;
调用PsSetCreateProcessNotifyRoutine注册创建进程回调函数;
调用PsSetLoadImageNotifyRoutine注册加载模块回调函数;
调用ObRegisterCallbacks注册打开进程和线程回调函数;
调用FwpsCalloutRegister注册网络过滤回调函数。
3.根据权利要求1所述的检测shellcode恶意代码的方法,其特征在于,所述在Callback回调函数中获取当前进程的Pid识别号,根据Pid识别号判断是否过滤该进程,包括:
在Callback回调函数中获取当前进程的Pid识别号;
若当前进程的Pid识别号为0或4,或判断当前模式为内核模式,返回。
4.根据权利要求1所述的检测shellcode恶意代码的方法,其特征在于,所述在Callback回调函数中获取当前线程的线程函数起始地址,包括:
调用ZwQueryInformationThread函数获取当前线程的线程函数起始地址;
若获取成功,则进一步识别当前线程的线程函数是否为shellcode恶意代码;
若获取失败,则返回。
5.根据权利要求1所述的检测shellcode恶意代码的方法,其特征在于,所述查询当前线程的线程函数起始地址对应的虚拟地址描述符VAD里记录的内存信息,若该内存地址没有在任何系统模块中且具有可执行属性,则识别为shellcode恶意代码,包括:
调用ZwQueryVirtualMemory函数查询当前线程的线程函数起始地址对应的虚拟地址描述符VAD里记录的类型信息为MemoryBasicInformation的虚拟地址属性的信息,若该函数返回成功,则得到该虚拟地址在该进程的地址空间中对应一个虚拟地址描述符VAD中记录的属性,若该函数返回失败,则返回;
若该虚拟地址描述符VAD中记录的内存类型为MEM_PRIVATE或者MEM_MAPPED,且该内存的状态为MEM_COMMIT,且该内存的保护属性为PAGE_EXECUTE或PAGE_EXECUTE_READWRITE或PAGE_EXECUTE_READ或PAGE_EXECUTE_WRITECOPY,则识别为shellcode恶意代码。
6.一种检测shellcode恶意代码的系统,其特征在于,包括:
回调函数创建模块,用于针对待保护的系统操作,创建用于过滤的Callback回调函数;
过滤判断模块,用于在Callback回调函数中获取当前进程的Pid识别号,根据Pid识别号判断是否过滤该进程;
地址获取模块,用于在Callback回调函数中获取当前线程的线程函数起始地址;
查询判断模块,用于查询当前线程的线程函数起始地址对应的虚拟地址描述符VAD里记录的内存信息,若该内存地址没有在任何系统模块中且具有可执行属性,则识别为shellcode恶意代码。
7.根据权利要求6所述的检测shellcode恶意代码的系统,其特征在于,所述回调函数创建模块包括:
文件过滤编写单元,用于针对待保护的系统操作编写Windows驱动程序,调用FltRegisterFilter注册文件过滤回调函数;
注册表过滤编写单元,用于调用CmRegisterCallback注册注册表过滤回调函数;
创建线程编写单元,用于调用PsSetCreateThreadNotifyRoutine注册创建线程回调函数;
创建进程编写单元,用于调用PsSetCreateProcessNotifyRoutine注册创建进程回调函数;
加载模块编写单元,用于调用PsSetLoadImageNotifyRoutine注册加载模块回调函数;
打开进程和线程编写单元,用于调用ObRegisterCallbacks注册打开进程和线程回调函数;
网络过滤编写单元,用于调用FwpsCalloutRegister注册网络过滤回调函数。
8.根据权利要求6所述的检测shellcode恶意代码的系统,其特征在于,所述过滤判断模块包括:
识别号获取单元,用于在Callback回调函数中获取当前进程的Pid识别号;
线程过滤单元,用于若当前进程的Pid识别号为0或4,或判断当前模式为内核模式,返回。
9.根据权利要求6所述的检测shellcode恶意代码的系统,其特征在于,所述查询判断模块包括:
虚拟地址查询单元,用于调用ZwQueryVirtualMemory函数查询当前线程的线程函数起始地址对应的虚拟地址描述符VAD里记录的类型信息为MemoryBasicInformation的虚拟地址属性的信息,若该函数返回成功,则得到该虚拟地址在该进程的地址空间中对应一个虚拟地址描述符VAD中记录的属性,若该函数返回失败,则返回;
内存属性判断单元,用于若该虚拟地址描述符VAD中记录的内存类型为MEM_PRIVATE或者MEM_MAPPED,且该内存的状态为MEM_COMMIT,且该内存的保护属性为PAGE_EXECUTE或PAGE_EXECUTE_READWRITE或PAGE_EXECUTE_READ或PAGE_EXECUTE_WRITECOPY,则识别为shellcode恶意代码。
10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至5中任一项所述的检测shellcode恶意代码的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211319287.5A CN115600204A (zh) | 2022-10-26 | 2022-10-26 | 一种检测shellcode恶意代码的方法和系统及计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211319287.5A CN115600204A (zh) | 2022-10-26 | 2022-10-26 | 一种检测shellcode恶意代码的方法和系统及计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115600204A true CN115600204A (zh) | 2023-01-13 |
Family
ID=84851452
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211319287.5A Pending CN115600204A (zh) | 2022-10-26 | 2022-10-26 | 一种检测shellcode恶意代码的方法和系统及计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115600204A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120079594A1 (en) * | 2010-09-27 | 2012-03-29 | Hyun Cheol Jeong | Malware auto-analysis system and method using kernel callback mechanism |
CN102651060A (zh) * | 2012-03-31 | 2012-08-29 | 北京奇虎科技有限公司 | 一种漏洞检测的方法和系统 |
US20190102552A1 (en) * | 2017-09-29 | 2019-04-04 | AO Kaspersky Lab | System and method for detection of malicious code in the address space of processes |
CN113569244A (zh) * | 2021-09-18 | 2021-10-29 | 成都数默科技有限公司 | 一种基于处理器跟踪的内存恶意代码检测方法 |
CN114741695A (zh) * | 2022-04-02 | 2022-07-12 | 安天科技集团股份有限公司 | 一种恶意代码监控方法、装置、电子设备及存储介质 |
-
2022
- 2022-10-26 CN CN202211319287.5A patent/CN115600204A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120079594A1 (en) * | 2010-09-27 | 2012-03-29 | Hyun Cheol Jeong | Malware auto-analysis system and method using kernel callback mechanism |
CN102651060A (zh) * | 2012-03-31 | 2012-08-29 | 北京奇虎科技有限公司 | 一种漏洞检测的方法和系统 |
US20190102552A1 (en) * | 2017-09-29 | 2019-04-04 | AO Kaspersky Lab | System and method for detection of malicious code in the address space of processes |
CN113569244A (zh) * | 2021-09-18 | 2021-10-29 | 成都数默科技有限公司 | 一种基于处理器跟踪的内存恶意代码检测方法 |
CN114741695A (zh) * | 2022-04-02 | 2022-07-12 | 安天科技集团股份有限公司 | 一种恶意代码监控方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US12026257B2 (en) | Method of malware detection and system thereof | |
US20180068115A1 (en) | System and method of detecting malicious code in files | |
US9779240B2 (en) | System and method for hypervisor-based security | |
US11159541B2 (en) | Program, information processing device, and information processing method | |
US20130339313A1 (en) | Guarded file descriptors | |
JPWO2005024630A1 (ja) | 不正コードの防止方法および防止プログラム | |
CN104268475B (zh) | 一种运行应用程序的系统 | |
KR101064164B1 (ko) | 리눅스 커널 기반 스마트 플랫폼 내에서의 커널 무결성 검사 및 변조된 커널 데이터 복구 방법 | |
CN115688106A (zh) | 一种Java agent无文件注入内存马的检测方法及装置 | |
CN116502220A (zh) | 一种对抗性Java内存马的检测方法及处理方法 | |
CN111428240B (zh) | 一种用于检测软件的内存违规访问的方法及装置 | |
JP5955475B1 (ja) | プログラム、情報処理装置、及び情報処理方法 | |
CN115600204A (zh) | 一种检测shellcode恶意代码的方法和系统及计算机设备 | |
CN115758353A (zh) | 应用程序保护方法、装置、设备及存储介质 | |
CN113312623B (zh) | 访问控制中的进程检测方法、装置、电子设备和存储介质 | |
JP4643201B2 (ja) | バッファオーバーフロー脆弱性分析方法、データ処理装置、分析情報提供装置、分析情報抽出処理用プログラムおよび分析情報提供処理用プログラム | |
CN113646763B (zh) | shellcode的检测方法及装置 | |
CN111221628A (zh) | 虚拟化平台上对虚拟机文件的安全检测方法及装置 | |
EP3293660A1 (en) | System and method of detecting malicious code in files | |
CN110610086B (zh) | 非法代码识别方法、系统、装置及存储介质 | |
CN116775147B (zh) | 一种可执行文件处理方法、装置、设备及存储介质 | |
CN106971112A (zh) | 文件读写方法及装置 | |
CN117744082A (zh) | 操作系统中恶意软件的检测方法及装置、存储介质 | |
CN117473501A (zh) | 基于eBPF的隐藏进程检测方法、装置、设备及介质 | |
CN116089933A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20230113 |