CN112395610B - 内核层shellcode的检测方法及装置 - Google Patents

内核层shellcode的检测方法及装置 Download PDF

Info

Publication number
CN112395610B
CN112395610B CN201910755441.5A CN201910755441A CN112395610B CN 112395610 B CN112395610 B CN 112395610B CN 201910755441 A CN201910755441 A CN 201910755441A CN 112395610 B CN112395610 B CN 112395610B
Authority
CN
China
Prior art keywords
memory page
preset memory
behavior
kernel module
page
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.)
Active
Application number
CN201910755441.5A
Other languages
English (en)
Other versions
CN112395610A (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.)
Qax Technology Group Inc
Qianxin Safety Technology Zhuhai Co Ltd
Original Assignee
Qax Technology Group Inc
Qianxin Safety Technology Zhuhai 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 Qax Technology Group Inc, Qianxin Safety Technology Zhuhai Co Ltd filed Critical Qax Technology Group Inc
Priority to CN201910755441.5A priority Critical patent/CN112395610B/zh
Publication of CN112395610A publication Critical patent/CN112395610A/zh
Application granted granted Critical
Publication of CN112395610B publication Critical patent/CN112395610B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1433Vulnerability analysis
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1441Countermeasures against malicious traffic
    • H04L63/145Countermeasures against malicious traffic the attack involving the propagation of malware through the network, e.g. viruses, trojans or worms

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)
  • Computing Systems (AREA)
  • Virology (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Storage Device Security (AREA)

Abstract

本申请公开了一种内核层shellcode的检测方法、装置、计算机设备及计算机存储介质,涉及信息网络安全技术领域,可以对操作系统内核层的特定内存页进行监控,能够及时检测出异常的操作行为,有效发现内核层shellcode攻击行为的执行。所述方法包括:通过在shellcode执行的攻击行为定位内核层支持函数的路径上选取预设内存页,对所述预设内存页设置指定属性;基于设置的指定属性,对内核模块所在预设内存页的操作行为进行监控;若发生对内核模块所在预设内存页的操作行为,则对内核模块所在预设内存页的操作行为进行合法性判定,以检测shellcode执行的攻击行为。

Description

内核层shellcode的检测方法及装置
技术领域
本发明涉及信息网络安全技术领域,尤其是涉及内核层shellcode的检测方法、装置、计算机设备及计算机存储介质。
背景技术
在现有的各种计算机软件中,由于系统开放性、交互性和软件自身的缺陷导致计算机或者服务系统容易遭受恶意代码和漏洞的攻击,特别是系统漏洞触发外地代码shellcode的执行时,shellcode是溢出恶意攻击行为的核心代码,攻击者可以利用shellcode进入宿主进程,对宿主进程发起攻击,从而实现对操作系统的控制。
内核层是操作系统最核心的部分,负责调度cpu资源,管理进程和内存等。用户应用程序不能直接操作应将,而需要通过内核层作为中间层,由内核层真正的操纵硬件资源。一旦内核层出现漏洞,被shellcode发起的攻击行为所控制,危害是极其严重的。目前,利用系统漏洞向内核直接注入shellcode的方式是最常见的攻击手段。然而,当前的防护软件除了封堵之外,只能基于攻击后的行为对shellcode的进行判断,对攻击前的行为束手无策,使得攻击者的异常行为很难被检测,无法及时发现攻击行为的执行。
发明内容
有鉴于此,本发明提供了一种内核层shellcode的检测方法、装置、计算机设备及计算机存储介质,主要目的在于对操作系统内核层的特定内存页进行监控,能够及时检测出异常的操作行为,有效发现内核层shellcode攻击行为的执行。
依据本发明一个方面,提供了一种内核层shellcode的检测方法,该方法包括:
通过在shellcode执行的攻击行为定位内核层支持函数的路径上选取预设内存页,对所述预设内存页设置指定属性;
基于设置的指定属性,对内核模块所在预设内存页的操作行为进行监控;
若发生对内核模块所在预设内存页的操作行为,则对内核模块所在预设内存页的操作行为进行合法性判定,以检测shellcode执行的攻击行为。
进一步地,所述基于设置的指定属性,对内核模块所在预设内存页的操作行为进行监控,包括:
将所述内核模块所在预设内存页设置为缺页状态,以使得所述内核模块所在预设内存页的操作行为会触发缺页中断;
通过捕获系统的缺页中断,监控是否发生对内核模块所在预设内存页的操作行为而触发的缺页中断;
若是,则确定发生对内核模块所在预设内存页的操作行为。
进一步地,所述通过捕获系统的缺页中断,判断是否发生对内核模块所在预设内存页的操作行为而触发的缺页中断,包括:
通过捕获系统的缺页中断,当发生对缺页内存操作行为而触发缺页中断时,判断缺页内存所置换的内存页是否为内核模块所在预设内存页;
所述若是,则确定发生对内核模块所在预设内存页的操作行为,包括:
若缺页内存所置换的内存页为内核模块所在预设内存页,则判定发生对内核模块所在预设内存页的操作行为而触发的缺页中断,并确定发生对内核模块所在预设内存页的操作行为。
进一步地,所述基于设置的指定属性,对内核模块所在预设内存页的操作行为进行监控,包括:
将所述内核模块所在预设内存页的地址设置到调试寄存器中,以使得所述内核模块所在预设内存页的操作行为会触发调试中断;
通过捕获系统的调试中断,监控是否发生对内核模块所在预设内存页的操作行为而触发的调试中断;
若是,则确定发生对内核模块所在预设内存页的操作行为。
进一步地,所述通过捕获系统的调试中断,监控是否发生对内核模块所在预设内存页的操作行为而触发的调试中断,包括:
通过捕获系统的调试中断,当发生对所设置内存地址的操作行为而触发调试中断时,判断所设置内存地址是否为内核模块所在预设内存页的地址;
所述若是,则确定发生预设内存页的操作行为,包括:
若所设置内存地址为内核模块所在预设内存页的地址,则判定发生对内核模块所在预设内存页的操作行为而触发的调试中断,并确定发生对内核模块所在预设内存页的操作行为。
进一步地,所述对内核模块所在预设内存页的操作行为进行合法性判定,以检测shellcode执行的攻击行为,包括:
获取内核模块所在预设内存页的操作行对应的指令地址;
基于预先构建的预定行为库将所述内核模块所在预设内存页的操作行为对应的指令地址与预定行为库中的合法行为对应的指令地址进行比对,所述预定行为库中保存有适用于不同内核模块所在预设内存页的合法操作行为对应的指令地址范围;
将比对结果一致所对应预设内存页的操作行为判定为合法操作行为;
将比对结果不一致所对应预设内存页的操作行为判定为shellcode执行的攻击行为。
进一步地,在所述基于预先构建的预定行为库将所述内核模块所在预设内存页的操作行为对应的指令地址与预定行为库中的合法行为对应的指令地址进行比对之前,所述方法还包括:
利用本地接口函数获取内核模块所在预设内存页的合法操作行为,构建预定行为库。
进一步地,所述利用本地接口函数获取内核模块所在预设内存页的合法操作行为,构建预定行为库,包括:
利用本地接口函数获取内核模块所在预设内存页对应的镜像地址范围,查找内核镜像文件对应PE头;
解析所述内核镜像文件对应PE头,获取所述内核镜像文件对应的导出表;
枚举所述内核镜像文件对应的导出表,获取内核模块所在预设内存页的合法操作行为,构建预定行为库。
依据本发明另一个方面,提供了一种内核层shellcode的检测装置,所述装置包括:
设置单元,用于通过在shellcode执行的攻击行为定位内核支持函数的路径上选取预设内存页,对所述预设内存页设置指定属性;
监控单元,用于基于设置的指定属性,对内核模块所在预设内存页的操作行为进行监控;
判定单元,用于若发生对内核模块所在预设内存页的操作行为,则对内核模块所在预设内存页的操作行为进行合法性判定,以检测shellcode执行的攻击行为。
进一步地,所述监控单元包括:
第一设置模块,用于将所述内核模块所在预设内存页设置为缺页状态,以使得所述内核模块所在预设内存页的操作行为会触发缺页中断;
第一监控模块,用于通过捕获系统的缺页中断,监控是否发生对内核模块所在预设内存页的操作行为而触发的缺页中断;
第一确定模块,用于若发生对内核模块所在预设内存页的操作行为而触发的缺页中断,则确定发生对内核模块所在预设内存页的操作行为。
进一步地,所述第一监控模块,具体用于通过捕获系统的缺页中断,当发生对缺页内存操作行为而触发缺页中断时,判断缺页内存所置换的内存页是否为内核模块所在预设内存页;
所述第一确定模块,具体用于若缺页内存所置换的内存页为内核模块所在预设内存页,则判定发生对内核模块所在预设内存页的操作行为而触发的缺页中断,并确定发生对内核模块所在预设内存页的操作行为。
进一步地,所述监控单元包括:
第二设置模块,用于将所述内核模块所在预设内存页的地址设置到调试寄存器中,以使得所述内核模块所在预设内存页的操作行为会触发调试中断;
第二监控模块,用于通过捕获系统的调试中断,监控是否发生对内核模块所在预设内存页的操作行为而触发的调试中断;
第二确定模块,用于若发生对内核模块所在预设内存页的操作行为而触发的调试中断,则确定发生对内核模块所在预设内存页的操作行为。
进一步地,所述第二监控模块,具体用于通过捕获系统的调试中断,当发生对所设置内存地址的操作行为而触发调试中断时,判断所设置内存地址是否为内核模块所在预设内存页的地址;
所述第二确定模块,具体用于若所设置内存地址为内核模块所在预设内存页的地址,则判定发生对内核模块所在预设内存页的操作行为而触发的调试中断,并确定发生对内核模块所在预设内存页的操作行为。
进一步地,所述判定单元包括:
第一获取模块,用于获取内核模块所在预设内存页的操作行对应的指令地址;
比对模块,用于基于预先构建的预定行为库将所述内核模块所在预设内存页的操作行为对应的指令地址与预定行为库中的合法行为对应的指令地址进行比对,所述预定行为库中保存有适用于不同内核模块所在预设内存页的合法操作行为对应的指令地址范围;
第一判定模块,用于将比对结果一致所对应预设内存页的操作行为判定为合法操作行为;
第二判定模块,用于将比对结果不一致所对应预设内存页的操作行为判定为shellcode执行的攻击行为。
进一步地,所述装置还包括:
构建单元,用于在所述基于预先构建的预定行为库将所述内核模块所在预设内存页的操作行为对应的指令地址与预定行为库中的合法行为对应的指令地址进行比对之前,利用本地接口函数获取内核模块所在预设内存页的合法操作行为,构建预定行为库。
进一步地,所述构建单元包括:
第二获取模块,用于利用本地接口函数获取内核模块所在预设内存页对应的镜像地址范围,查找内核镜像文件对应PE头;
解析模块,用于解析所述内核镜像文件对应PE头,获取所述内核镜像文件对应的导出表;
枚举模块,用于枚举所述内核镜像文件对应的导出表,获取内核模块所在预设内存页的合法操作行为,构建预定行为库。
依据本发明又一个方面,提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现内核层shellcode的检测方法的步骤。
依据本发明再一个方面,提供了一种计算机存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现内核层shellcode的检测方法的步骤。
借由上述技术方案,本发明提供一种内核层shellcode的检测方法及装置,与现有技术中内核层shellcode的检测的方式相比,由于shellcode在产生攻击行为时需要对内核模块所在预设内存页产生特定的行为操作,进而拿到导出表来寻找特定的API,本发明实施例利用内存监控技术对内核模块所在预设内存页的操作行为进行监控。与此同时,在发生内核模块所在预设内存页的操作行为时,并不能说明一定是内核层shellcode执行的攻击行为,进一步通过对该内核模块所在预设内存页的操作行为进行合法性判定,以检测shellcode执行的攻击行为是否发生,进而及时检测出异常的操作行为,有效发现内核层shellcode攻击行为的执行。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明实施例提供的一种内核层shellcode的检测方法流程示意图;
图2a示出了本发明实施例提供的一种内核模块所在预设内存页的正常操作行为所对应的代码图;
图2b示出了本发明实施例提供的另一种内核模块所在预设内存页的正常操作行为所对应的代码图;
图2c示出了本发明实施例提供的另一种内核模块所在预设内存页的正常操作行为所对应的代码图;
图3a示出了本发明实施例提供的一种对内核模块所在预设内存页的操作行为进行监控过程的流程示意图;
图3b示出了本发明实施例提供的另一种内核模块所在对预设内存页的操作行为进行监控过程的流程示意图;
图4示出了本发明实施例提供的另一种内核层shellcode的检测方法流程示意图;
图5示出了本发明实施例提供的另一种内核层shellcode的检测方法流程示意图;
图6示出了本发明实施例提供的一种内核层shellcode的检测装置结构示意图;
图7示出了本发明实施例提供的另一种内核层shellcode的检测装置结构示意图;
图8示出了本发明实施例提供的另一种内核层shellcode的检测装置结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
如背景技术所述,为了绕过ASLR技术,shellcode需要对内核模块所在预设内存页进行操作行为,从而获取系统API地址的技术,目前,针对绕过ASLR机制,并不存在有效的防护技术,使得攻击者的异常行为很难被检测,无法及时发现内核层shellcode攻击行为的执行。
为了解决上述技术问题,本发明实施例提供了一种内核层shellcode的检测方法,可以及时检测出异常的操作行为,有效发现内核层shellcode攻击行为的执行,如图1所示,该方法包括:
101、通过在shellcode执行的攻击行为定位内核层支持函数的路径上选取预设内存页,对所述预设内存页设置指定属性。
其中,对预设内存页设置指定属性可以为对预设内存页设置缺页状态,还可以为对预设内存页设置到寄存器中,这里对指定属性不进行限定,只要是能够用于对预设内存页进行监控的方式皆可适用于本申请。
对于本发明实施例,预设内存页面通常为内核层shellcode在执行攻击时可能会利用的内存页,通过对预设内存页的操作行为注入shellcode执行的攻击行为。shellcode是一段代码(也可以是填充数据),可以利用软件漏洞而执行的代码,通常为16进制的机器码,因为经常让攻击者获得shell文件而得名。因此,本申请通过在shellcode执行的攻击行为定位内核层支持函数的路径上选取预设内存页,对预设内存页设置指定属性的方式以实现对其进行监控。
102、基于设置的指定属性,对内核模块所在预设内存页的操作行为进行监控。
其中,对内核模块所在预设内存页的操作行为可以为对内核模块所在预设内存页中的内存信息进行的操作,例如,读取操作、写入操作和执行操作等操作行为,本发明实施例不进行限定。
103、若发生对内核模块所在预设内存页的操作行为,则对内核模块所在预设内存页的操作行为进行合法性判定,以检测shellcode执行的攻击行为。
应说明的是,系统执行正常操作所产生对内核模块所在预设内存页的操作行为,与shellcode执行的攻击行为所产生对内核模块所在预设内存页的操作行为有着完全不同的过程,例如,系统执行正常操作产生内核模块所在预设内存页的写入行为需要调用函数A,而shellcode攻击者由于不知道、也没有正常途径去调用函数A,所以会使用其他的方式去产生内核模块所在预设内存页的写入行为,以获取相应的内核基址,从而获取相应的API地址。因此,在发生内核模块所在预设内存页的操作行为后,通过对内核模块所在预设内存页的操作行为进行合法性判定,即可检测是否发生shellcode执行的攻击行为。
本发明提供一种内核层shellcode的检测方法,与现有技术中内核层shellcode的检测的方式相比,由于shellcode在产生攻击行为时需要对内核模块所在预设内存页产生特定的行为操作,进而拿到导出表来寻找特定的API,本发明实施例利用内存监控技术对内核模块所在预设内存页的操作行为进行监控。与此同时,在发生内核模块所在预设内存页的操作行为时,并不能说明一定是内核层shellcode执行的攻击行为,进一步通过对该内核模块所在预设内存页的操作行为进行合法性判定,以检测shellcode执行的攻击行为是否发生,进而及时检测出异常的操作行为,有效发现内核层shellcode攻击行为的执行。
如背景技术所述,为了绕过ASLR技术,许多对抗ASLR技术也不断被研发出来,其中绕过ASLR机制,获取系统API地址的方法,主要包括但不局限于以下几种:
1、IDT Scandown
示例代码一:
标例代码二:
2、KPRCB IdleThread Scandown示例代码:
3、SYSENTER_EIP_MSR Scandown示例代码:
4、Known Portable Base Scandown
示例代码:
可以理解的是,上述的攻击技术虽然各自有所不同,但其原理确大同小异。
对于在内核层的shellcode的攻击行为,可以通过不同的锚点,定位到系统内核空间的某个地址,然后通过这个地址按整页向低地址空间扫描,一直找到“0x5a4d”这个可执行文件对应的识别标志,定位到内核基址,然后再定位到导出表,拿到自己需要的导出函数地址。
目前,针对绕过ASLR机制,并不存在有效的防护技术,使得攻击者的异常行为很难被检测,无法及时发现shellcode攻击行为的执行。所以,本发明实施例实施例的核心技术原理就是卡住攻击者需要寻找内核层或者系统DLL模块基址的MZ标志,也就是读取“0x5a4d”这个动作。本申请通过对预设内存页的操作行为进行监控,在这里也就是对预设内存页中读取“0x5a4d”这个动作进行监控,从而对shellcode进行初步筛查。
需要说明的是,从以上攻击技术原理可知,shellcode可以通过读取“0x5a4d”的操作行为来定位内核基址,但是只要发生读取“0x5a4d”的操作行为并不一定说明发生shellcode的攻击行为,这里存在两种读取“0x5a4d”的正常操作行为,第一种是加载并初始化系统模块的时候,具体如图2a所示。第二种是调用系统提供的动态API地址的函数MmGetSystemRoutineAddress的时候,具体如图2b所示。并且系统通过正常行为产生预设内存页的操作行为与shellcode通过异常行为产生预设内存页的操作行为是有所不同的。例如,在内核(R0)中,系统获取内核基址是通过PsNtosImageBase这个全局变量来获取,并调用系统API RtlImageNtHeaderEx来完成功能,其定位“0x5a4d”的操作行为,只是为了验证内核基址的正确性,并非通过定位来获取内核基址,具体如图2c所示。
而内核shellcode则是因为不知道、也没有正常途径可以获取内核基址,才不得不通过内存扫描的方式,定位“0x5a4d”间接来获取内核基址。所以,本发明实施例可以通过分辨定位“0x5a4d”的操作行为是否为正常的系统行为,也就是来自于RtlImageNtHeaderEx还是其他的操作行为,若来自RtlImageNtHeaderEx的操作行为都是正常行为,反之其他的操作行为判定为异常行为,也就是shellcode执行的攻击行为。
另外,以上预设内存页的操作行为只是以操作系统的内核行为来举例,读取“0x5a4d”行为在任何场景下都是低频发生并且可清晰辨别的行为,本发明实施例只需要继续增加新的操作行为发生时的API调用特征来进行识别即可,并不仅限于识别读取“0x5a4d”的RtlImageNtHeaderEx。
进一步地,为了更好地说明上述内核层shellcode的检测过程,作为对上述实施例的细化和扩展,在对内核模块所在预设内存页的操作行为进行监控的过程中,可以采用多种内存监控技术,作为一种内存监控技术的具体实施过程,如图3a所示,具体包括:
1011、将所述内核模块所在预设内存页设置为缺页状态,以使得所述预设内存页的操作行为会触发缺页中断。
通常情况下,内存页中记录有内存信息,如果需要对内核模块所在预设内存页的操作行为进行监控,可以通过修改内核模块所在预设内存页的属性状态,当内核模块所在预设内存页的访问行为发生异常,例如,发生读取异常、写入异常或者执行异常时,能够触发预设内存页的异常,从而监控内核模块所在预设内存页的操作行为。
具体可以通过将内核模块所在预设内存页设置为缺页状态,对于缺页状态的内存页的访问行为,默认该内存页是不存在的,需要操作系统将其调入主存后再进行访问,并产生一个页面不存在的缺页中断异常。
1012、通过捕获系统的缺页中断,监控是否发生对内核模块所在预设内存页的操作行为而触发的缺页中断。
这里捕获系统的缺页中断,指的是不定时检查指定的函数,利用系统的“写时复制”,挂钩缺页异常中断,主动拦截修改指定范围内内存的行为。该方法为主动拦截行为,可以在shellcode执行攻击行为之前及时阻止。
对于缺页中断的行为,可能并非是内核模块所在预设内存页的操作而触发的,也有可能是操作了一个并不存在的内存页而触发的,需要进一步对缺页内存所置换的内存页进行判定。
具体可以通过捕获系统的缺页中断,当发生对缺页内存操作行为而触发缺页中断时,由于进程运行过程中,如果发生缺页中断,而此时内存中没有空闲的物理块时,为了能够把缺的页面装入内存,系统必须从内存中选择一页作为缺页置换的内存调出到磁盘的对换区,进一步可以通过缺页置换的内存地址来判断缺页置换的内存是否为内核模块所在预设内存页,也就是“0x5a4d”所在内核基址对应的内存。
1013、若是,则确定发生对内核模块所在预设内存页的操作行为。
若发生对内核模块所在预设内存页的操作行为而触发的缺页中断,则说明可能存在shellcode在执行攻击行为过程中,触发了对内核模块所在预设内存页的操作行为,当然若未发生对内核模块所在预设内存页的操作行为而触发的缺页中断,而是操作了一个并不存在的内存页而触发的缺页中断,则放行该缺页中断。
进一步地,为了更好地说明上述内核层shellcode的检测过程,作为对上述实施例的细化和扩展,在对内核模块所在预设内存页的操作行为进行监控的过程中,可以采用多种内存监控技术,作为另一种内存监控技术的具体实施过程,如图3b所示,具体包括:
1014、将所述内核模块所在预设内存页的地址设置到调试寄存器中,以使得所述内核模块所在预设内存页的操作行为会触发调试中断。
通常情况下,调试寄存器具有断点调试的功能,也就是在某一地址处设置断点,对于没一个断点设置,通过调试寄存器都可以得到包括但不局限于下述信息:断点发生的线性地址、断点位置的长度信息、在产生了调试异常的地址时需要执行的动作、断点是否被允许以及调试异常产生时断点条件是否满足,可以实现在特定指令操作的条件下,触发调试中断,用以检测内存页的异常。
具体可以将预设内存页的地址设置到调试寄存器DR0-DR7中,DR7具有开启或关闭断点,以及可以设置断点条件的功能,当检测到断点条件时,对应的内存地址,产生调试中断。
1015、通过捕获系统的调试中断,监控是否发生对内核模块所在预设内存页的操作行为而触发的调试中断。
对于设置到调试寄存器中的预设内存页的操作行为,都会发生调试中断,当然发生调试中断的内存页并非一定是预设内存页,也有可能是在某一地址设置的断点,用以调试异常,需要进一步对调试中断的内存页进行判定。
具体可以通过捕获系统的调试中断,当发生对所设置内存地址的操作行为而触发调试中断时,一旦执行流程触碰到标记了断点的内存地址,会将随后的控制权交给调试中断处理句柄,调试中断处理句柄调用预置的函数产生对应的异常信号,并作出处理,进一步可以判断通过设置到调试寄存器的内存地址是否为内核模块所在预设内存页的地址,从而判断是否发生对内核模块所在预设内存页的操作行为而触发的调试中断。
1016、若是,则确定发生对内核模块所在预设内存页的操作行为。
对于本发明实施例,具体对内核模块所在预设内存页的操作行为进行合法性判定,以检测shellcode执行的攻击行为的过程可以具体包括如下步骤:首先获取内核模块所在预设内存页的操作行对应的指令地址;基于预先构建的预定行为库将内核模块所在预设内存页的操作行为对应的指令地址与预定行为库中的合法行为对应的指令地址进行比对,该预定行为库中保存有适用于不同内核模块所在预设内存页的合法操作行为对应的指令地址范围;对于比对结果一致的时候,说明该操作行为属于合法操作行为,进一步将比对结果一致所对应预设内存页的操作行为判定为合法操作行为;对于比对结果不一致的时候,说明该操作行为不属于合法行为,进一步将比对结果不一致所对应预设内存页的操作行为判定为shellcode执行的攻击行为。
为了进一步描述对内核模块所在预设内存页的操作行为进行合法性判定,以检测shellcode执行的攻击行为是否发生的具体实施过程,本发明实施例提供了另一种内核层shellcode的检测方法,如图4所示,所述方法包括:
201、利用缺页中断技术或断点调试技术,监控内核模块的第一个内存页。
202、获取内核模块的第一个内存页的指令地址对应的操作行为。
203、判断内核模块的第一个内存页的指令地址对应的操作行为是否为RtlImageNtHeader等合法地址,也可以是ntoskrnl.exe的镜像地址范围。
204a、如果是,则放过该内存页,并进行任何不处理。
204b、如果不是,则判将内存页的指令地址对应的操作行为判定为shellcode的攻击行为,通知对该攻击行为进行处理。
对于本发明实施例,可以利用本地接口函数获取内核模块所在预设内存页的合法操作行为,构建预定行为库,具体包括如下实现步骤:首先利用本地接口函数获取内核模块所在预设内存页对应的镜像地址范围,查找内核镜像文件对应PE头;然后解析内核镜像文件对应PE头,获取内核镜像文件对应的导出表;通过枚举内核镜像文件对应的导出表,获取内核模块所在预设内存页的合法操作行为,构建预定行为库。
进一步描述构建预定行为库的具体实施过程,本发明实施例提供了另一种内核层shellcode的检测方法,如图5所示,所述方法包括:
301、利用ZwQuerySystemInformation获取NTOSKRNL.EXE所在预设内存页对应的镜像地址范围。
302、解析NTOSKRNL.EXE的PE头,获取导出表。
303、枚举导出表,获取RtlImageNtHead等关键函数地址所包括的合法操作行为,构建预定行为库。
进一步地,作为图1所述方法的具体实现,本发明实施例提供了一种内核层shellcode的检测装置,如图6所示,所述装置包括:设置单元41、监控单元42、判定单元43。
设置单元41,可以用于通过在shellcode执行的攻击行为定位内核支持函数的路径上选取预设内存页,对所述预设内存页设置指定属性;
监控单元42,可以用于基于设置的指定属性,对内核模块所在预设内存页的操作行为进行监控;
判定单元43,可以用于若发生对内核模块所在预设内存页的操作行为,则对内核模块所在预设内存页的操作行为进行合法性判定,以检测shellcode执行的攻击行为。
本发明提供一种内核层shellcode的检测装置,与现有技术中内核层shellcode的检测的方式相比,由于shellcode在产生攻击行为时需要对内核模块所在预设内存页产生特定的行为操作,进而拿到导出表来寻找特定的API,本发明实施例利用内存监控技术对内核模块所在预设内存页的操作行为进行监控。与此同时,在发生内核模块所在预设内存页的操作行为时,并不能说明一定是内核层shellcode执行的攻击行为,进一步通过对该内核模块所在预设内存页的操作行为进行合法性判定,以检测shellcode执行的攻击行为是否发生,进而及时检测出异常的操作行为,有效发现内核层shellcode攻击行为的执行。
作为图6中所示shellcode的检测装置的进一步说明,图7是根据本发明实施例另一种shellcode的检测装置的结构示意图,如图7所示,针对一种对预设内存页的操作行为进行监控的实施过程,所述监控单元42包括:
第一设置模块421,可以用于将所述内核模块所在预设内存页设置为缺页状态,以使得所述内核模块所在预设内存页的操作行为会触发缺页中断;
第一监控模块422,可以用于通过捕获系统的缺页中断,监控是否发生对内核模块所在预设内存页的操作行为而触发的缺页中断;
第一确定模块423,可以用于若发生对内核模块所在预设内存页的操作行为而触发的缺页中断,则确定发生对内核模块所在预设内存页的操作行为。
在具体应用场景中,所述第一监控模块422,具体可以用于通过捕获系统的缺页中断,当发生对缺页内存操作行为而触发缺页中断时,判断缺页内存所置换的内存页是否为内核模块所在预设内存页;
所述第一确定模块423,具体可以用于若缺页内存所置换的内存页为内核模块所在预设内存页,则判定发生对内核模块所在预设内存页的操作行为而触发的缺页中断,并确定发生对内核模块所在预设内存页的操作行为。
作为图6中所示shellcode的检测装置的进一步说明,图8是根据本发明实施例另一种shellcode的检测装置的结构示意图,如图8所示,针对另一种监控技术对预设内存页的操作行为进行监控的实施过程,所述监控单元42包括:
第二设置模块424,可以用于将所述内核模块所在预设内存页的地址设置到调试寄存器中,以使得所述内核模块所在预设内存页的操作行为会触发调试中断;
第二监控模块425,可以用于通过捕获系统的调试中断,监控是否发生对内核模块所在预设内存页的操作行为而触发的调试中断;
第二确定模块426,可以用于若发生对内核模块所在预设内存页的操作行为而触发的调试中断,则确定发生对内核模块所在预设内存页的操作行为。
在具体应用场景中,所述第二监控模块425,具体可以用于通过捕获系统的调试中断,当发生对所设置内存地址的操作行为而触发调试中断时,判断所设置内存地址是否为内核模块所在预设内存页的地址;
所述第二确定模块426,具体可以用于若所设置内存地址为内核模块所在预设内存页的地址,则判定发生对内核模块所在预设内存页的操作行为而触发的调试中断,并确定发生对内核模块所在预设内存页的操作行为。
在上述图7-图8的基础上,所述判定单元43包括:
第一获取模块431,可以用于获取内核模块所在预设内存页的操作行对应的指令地址;
比对模块432,可以用于基于预先构建的预定行为库将所述内核模块所在预设内存页的操作行为对应的指令地址与预定行为库中的合法行为对应的指令地址进行比对,所述预定行为库中保存有适用于不同内核模块所在预设内存页的合法操作行为对应的指令地址范围;
第一判定模块433,可以用于将比对结果一致所对应预设内存页的操作行为判定为合法操作行为;
第二判定模块434,可以用于将比对结果不一致所对应预设内存页的操作行为判定为shellcode执行的攻击行为。
在具体应用场景中,在上述图7-图8的基础上,所述装置还包括:
构建单元44,可以用于在所述基于预先构建的预定行为库将所述内核模块所在预设内存页的操作行为对应的指令地址与预定行为库中的合法行为对应的指令地址进行比对之前,利用本地接口函数获取内核模块所在预设内存页的合法操作行为,构建预定行为库。
进一步地,所述构建单元34包括:
第二获取模块441,可以用于利用本地接口函数获取内核模块所在预设内存页对应的镜像地址范围,查找内核镜像文件对应PE头;
解析模块442,可以用于解析所述内核镜像文件对应PE头,获取所述内核镜像文件对应的导出表;
枚举模块443,可以用于枚举所述内核镜像文件对应的导出表,获取内核模块所在预设内存页的合法操作行为,构建预定行为库。
需要说明的是,本实施例提供的一种内核层shellcode的检测装置所涉及各功能单元的其他相应描述,可以参考图1-图5中的对应描述,在此不再赘述。
基于上述如图1-图5所示方法,相应的,本实施例还提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述如图1-图5所示的内核层shellcode的检测方法。
基于这样的理解,本申请的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施场景所述的方法。
基于上述如图1-图5所示的方法,以及图6-图8所示的虚拟装置实施例,为了实现上述目的,本申请实施例还提供了一种计算机设备,具体可以为个人计算机、服务器、网络设备等,该实体设备包括存储介质和处理器;存储介质,用于存储计算机程序;处理器,用于执行计算机程序以实现上述如图1-图4所示的内核层shellcode的检测方法。
可选地,该计算机设备还可以包括用户接口、网络接口、摄像头、射频(RadioFrequency,RF)电路,传感器、音频电路、WI-FI模块等等。用户接口可以包括显示屏(Display)、输入单元比如键盘(Keyboard)等,可选用户接口还可以包括USB接口、读卡器接口等。网络接口可选的可以包括标准的有线接口、无线接口(如蓝牙接口、WI-FI接口)等。
本领域技术人员可以理解,本实施例提供的内核层shellcode的检测的实体设备结构并不构成对该实体设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置。
存储介质中还可以包括操作系统、网络通信模块。操作系统是管理上述计算机设备硬件和软件资源的程序,支持信息处理程序以及其它软件和/或程序的运行。网络通信模块用于实现存储介质内部各组件之间的通信,以及与该实体设备中其它硬件和软件之间通信。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请可以借助软件加必要的通用硬件平台的方式来实现,也可以通过硬件实现。通过应用本申请的技术方案,与目前现有技术相比,由于shellcode在产生攻击行为时需要对内核模块所在预设内存页产生特定的行为操作,进而拿到导出表来寻找特定的API,本发明实施例利用内存监控技术对内核模块所在预设内存页的操作行为进行监控。与此同时,在发生内核模块所在预设内存页的操作行为时,并不能说明一定是内核层shellcode执行的攻击行为,进一步通过对该内核模块所在预设内存页的操作行为进行合法性判定,以检测shellcode执行的攻击行为是否发生,进而及时检测出异常的操作行为,有效发现内核层shellcode攻击行为的执行。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本申请所必须的。本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本申请序号仅仅为了描述,不代表实施场景的优劣。以上公开的仅为本申请的几个具体实施场景,但是,本申请并非局限于此,任何本领域的技术人员能思之的变化都应落入本申请的保护范围。

Claims (8)

1.一种内核层shellcode的检测方法,其特征在于,所述方法包括:
通过在shellcode执行的攻击行为定位内核层支持函数的路径上选取预设内存页,对所述预设内存页设置指定属性;
基于设置的指定属性,对内核模块所在预设内存页的操作行为进行监控,包括:将所述内核模块所在预设内存页设置为缺页状态,以使得所述内核模块所在预设内存页的操作行为会触发缺页中断;通过捕获系统的缺页中断,监控是否发生对内核模块所在预设内存页的操作行为而触发的缺页中断;若是,则确定发生对内核模块所在预设内存页的操作行为;所述shellcode的攻击行为是通过不同的锚点,定位到系统内核空间的某个地址,通过该地址按整页向低地址空间扫描,找到“0x5a4d”可执行文件对应的识别标志,定位到内核基址,再定位到导出表,获取需要的导出表函数;所述对内核模块所在预设内存页的操作行为进行监控具体为对读取“0x5a4d”的操作行为进行监控,所述预设内存页的操作行为是操作系统的内核行为;
若发生对内核模块所在预设内存页的操作行为,则对内核模块所在预设内存页的操作行为进行合法性判定,以检测shellcode执行的攻击行为,包括:获取内核模块所在预设内存页的操作行为对应的指令地址;基于预先构建的预定行为库将所述内核模块所在预设内存页的操作行为对应的指令地址与预定行为库中的合法行为对应的指令地址进行比对,所述预定行为库中保存有适用于不同内核模块所在预设内存页的合法操作行为对应的指令地址范围;将比对结果一致所对应预设内存页的操作行为判定为合法操作行为;将比对结果不一致所对应预设内存页的操作行为判定为shellcode执行的攻击行为。
2.根据权利要求1所述的方法,其特征在于,所述通过捕获系统的缺页中断,判断是否发生对内核模块所在预设内存页的操作行为而触发的缺页中断,包括:
通过捕获系统的缺页中断,当发生对缺页内存操作行为而触发缺页中断时,判断缺页内存所置换的内存页是否为内核模块所在预设内存页;
所述若是,则确定发生对内核模块所在预设内存页的操作行为,包括:
若缺页内存所置换的内存页为内核模块所在预设内存页,则判定发生对内核模块所在预设内存页的操作行为而触发的缺页中断,并确定发生对内核模块所在预设内存页的操作行为。
3.根据权利要求1所述的方法,其特征在于,所述基于设置的指定属性,对内核模块所在预设内存页的操作行为进行监控,包括:
将所述内核模块所在预设内存页的地址设置到调试寄存器中,以使得所述内核模块所在预设内存页的操作行为会触发调试中断;
通过捕获系统的调试中断,监控是否发生对内核模块所在预设内存页的操作行为而触发的调试中断;
若是,则确定发生对内核模块所在预设内存页的操作行为。
4.根据权利要求3所述的方法,其特征在于,所述通过捕获系统的调试中断,监控是否发生对内核模块所在预设内存页的操作行为而触发的调试中断,包括:
通过捕获系统的调试中断,当发生对所设置内存地址的操作行为而触发调试中断时,判断所设置内存地址是否为内核模块所在预设内存页的地址;
所述若是,则确定发生对内核模块所在预设内存页的操作行为,包括:
若所设置内存地址为内核模块所在预设内存页的地址,则判定发生对内核模块所在预设内存页的操作行为而触发的调试中断,并确定发生对内核模块所在预设内存页的操作行为。
5.根据权利要求1所述的方法,其特征在于,在所述基于预先构建的预定行为库将所述内核模块所在预设内存页的操作行为对应的指令地址与预定行为库中的合法行为对应的指令地址进行比对之前,所述方法还包括:
利用本地接口函数获取内核模块所在预设内存页的合法操作行为,构建预定行为库。
6.一种内核层shellcode的检测装置,其特征在于,所述装置包括:
设置单元,用于通过在shellcode执行的攻击行为定位内核层支持函数的路径上选取预设内存页,对所述预设内存页设置指定属性;
监控单元,用于基于设置的指定属性,对内核模块所在预设内存页的操作行为进行监控,包括:将所述内核模块所在预设内存页设置为缺页状态,以使得所述内核模块所在预设内存页的操作行为会触发缺页中断;通过捕获系统的缺页中断,监控是否发生对内核模块所在预设内存页的操作行为而触发的缺页中断;若是,则确定发生对内核模块所在预设内存页的操作行为;所述shellcode的攻击行为是通过不同的锚点,定位到系统内核空间的某个地址,通过该地址按整页向低地址空间扫描,找到“0x5a4d”可执行文件对应的识别标志,定位到内核基址,再定位到导出表,获取需要的导出表函数;所述对内核模块所在预设内存页的操作行为进行监控具体为对读取“0x5a4d”的操作行为进行监控,所述预设内存页的操作行为是操作系统的内核行为;
判定单元,用于若发生对内核模块所在预设内存页的操作行为,则对内核模块所在预设内存页的操作行为进行合法性判定,以检测shellcode执行的攻击行为,包括:获取内核模块所在预设内存页的操作行为对应的指令地址;基于预先构建的预定行为库将所述内核模块所在预设内存页的操作行为对应的指令地址与预定行为库中的合法行为对应的指令地址进行比对,所述预定行为库中保存有适用于不同内核模块所在预设内存页的合法操作行为对应的指令地址范围;将比对结果一致所对应预设内存页的操作行为判定为合法操作行为;将比对结果不一致所对应预设内存页的操作行为判定为shellcode执行的攻击行为。
7.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至5中任一项所述方法的步骤。
8.一种计算机存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5中任一项所述的方法的步骤。
CN201910755441.5A 2019-08-15 2019-08-15 内核层shellcode的检测方法及装置 Active CN112395610B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910755441.5A CN112395610B (zh) 2019-08-15 2019-08-15 内核层shellcode的检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910755441.5A CN112395610B (zh) 2019-08-15 2019-08-15 内核层shellcode的检测方法及装置

Publications (2)

Publication Number Publication Date
CN112395610A CN112395610A (zh) 2021-02-23
CN112395610B true CN112395610B (zh) 2024-04-16

Family

ID=74601738

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910755441.5A Active CN112395610B (zh) 2019-08-15 2019-08-15 内核层shellcode的检测方法及装置

Country Status (1)

Country Link
CN (1) CN112395610B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101154180A (zh) * 2006-09-29 2008-04-02 大唐移动通信设备有限公司 一种任务栈溢出的监测方法
CN102737188A (zh) * 2012-06-27 2012-10-17 北京奇虎科技有限公司 检测恶意网页的方法及装置
US8307432B1 (en) * 2008-10-07 2012-11-06 Trend Micro Incorporated Generic shellcode detection
CN105718374A (zh) * 2016-01-26 2016-06-29 国家信息技术安全研究中心 一种热点模块指令跟踪的方法及系统
CN109446755A (zh) * 2018-09-30 2019-03-08 龙芯中科技术有限公司 内核钩子函数保护方法、装置、设备以及存储介质
CN110096871A (zh) * 2019-05-10 2019-08-06 南京大学 一种基于硬件虚拟化的多核环境进程内核栈保护方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10771478B2 (en) * 2016-02-18 2020-09-08 Comcast Cable Communications, Llc Security monitoring at operating system kernel level

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101154180A (zh) * 2006-09-29 2008-04-02 大唐移动通信设备有限公司 一种任务栈溢出的监测方法
US8307432B1 (en) * 2008-10-07 2012-11-06 Trend Micro Incorporated Generic shellcode detection
CN102737188A (zh) * 2012-06-27 2012-10-17 北京奇虎科技有限公司 检测恶意网页的方法及装置
CN105718374A (zh) * 2016-01-26 2016-06-29 国家信息技术安全研究中心 一种热点模块指令跟踪的方法及系统
CN109446755A (zh) * 2018-09-30 2019-03-08 龙芯中科技术有限公司 内核钩子函数保护方法、装置、设备以及存储介质
CN110096871A (zh) * 2019-05-10 2019-08-06 南京大学 一种基于硬件虚拟化的多核环境进程内核栈保护方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
何乔 等.基于shellcode检测的缓冲区溢出攻击防御技术研究.《计算机应用》.2007,第27卷(第05期), *
基于shellcode检测的缓冲区溢出攻击防御技术研究;何乔 等;《计算机应用》;20070515;第27卷(第05期);第1044-1049页 *

Also Published As

Publication number Publication date
CN112395610A (zh) 2021-02-23

Similar Documents

Publication Publication Date Title
CN109831420B (zh) 内核进程权限的确定方法及装置
US10083294B2 (en) Systems and methods for detecting return-oriented programming (ROP) exploits
US7721333B2 (en) Method and system for detecting a keylogger on a computer
KR101174751B1 (ko) 커널 콜백 매커니즘을 이용한 악성코드 자동 분석 방법
US9516056B2 (en) Detecting a malware process
US10599558B1 (en) System and method for identifying inputs to trigger software bugs
JP2009129451A (ja) 悪性コードによって挿入されたダイナミックリンクライブラリ検出装置及び方法
CN112395616A (zh) 漏洞处理的方法、装置及计算机设备
US20140201842A1 (en) Identifying stored security vulnerabilities in computer software applications
CN105630659A (zh) 应用崩溃日志的获取方法及装置
CN107229867B (zh) 内核漏洞挖掘方法、装置、计算设备及计算机存储介质
CN113209630B (zh) 游戏应用的抓帧防御方法及装置、存储介质、计算机设备
CN113646763B (zh) shellcode的检测方法及装置
CN111428240B (zh) 一种用于检测软件的内存违规访问的方法及装置
CN112395610B (zh) 内核层shellcode的检测方法及装置
CN112395609B (zh) 应用层shellcode的检测方法及装置
CN108959931B (zh) 漏洞检测方法及装置、信息交互方法及设备
KR101937935B1 (ko) 가상머신 프로세스 실행에 따른 감사 증적 저장 장치 및 방법
CN112395594A (zh) 指令执行序列的处理方法、装置及设备
CN111177726A (zh) 一种系统漏洞检测方法、装置、设备及介质
Muthumanickam COPDA: concealed process and service discovery algorithm to reveal rootkit footprints
CN116414722B (zh) 模糊测试处理方法、装置、模糊测试系统及存储介质
CN115509963A (zh) 一种基于芯片内核的代码安全检测方法
CN112395598A (zh) 指令执行序列被破坏的防护方法、装置及设备
CN115659342A (zh) 一种无害执行pe文件的方法、装置、电子设备及存储介质

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