CN104731708A - 一种Shellcode的动态检测方法 - Google Patents

一种Shellcode的动态检测方法 Download PDF

Info

Publication number
CN104731708A
CN104731708A CN201510134654.8A CN201510134654A CN104731708A CN 104731708 A CN104731708 A CN 104731708A CN 201510134654 A CN201510134654 A CN 201510134654A CN 104731708 A CN104731708 A CN 104731708A
Authority
CN
China
Prior art keywords
shellcode
detected
operating system
chain
current execution
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
Application number
CN201510134654.8A
Other languages
English (en)
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.)
COMPUTER APPLICATION INST CHINA ENGINEERING PHYSICS ACADEMY
Beijing Information Is Controlled Research Institute
Original Assignee
COMPUTER APPLICATION INST CHINA ENGINEERING PHYSICS ACADEMY
Beijing Information Is Controlled Research Institute
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 COMPUTER APPLICATION INST CHINA ENGINEERING PHYSICS ACADEMY, Beijing Information Is Controlled Research Institute filed Critical COMPUTER APPLICATION INST CHINA ENGINEERING PHYSICS ACADEMY
Priority to CN201510134654.8A priority Critical patent/CN104731708A/zh
Publication of CN104731708A publication Critical patent/CN104731708A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

一种Shellcode的动态检测方法,首先抓取网络数据流并进行划分,得到多个执行链;然后触发一个操作系统breakpoint异常,将异常触发时的寄存器值和内存内容作为初始寄存器值和内存内容并存储;最后依次执行执行链,同时在每一执行链执行过程中,检测是否出现死循环或者操作系统异常,如果出现死循环或系统异常,则当前执行链没有Shellcode,否则使用启发式方法检测当前执行链是否含有Shellcode,完成检测。本发明方法不仅能够检测到使用了代码混淆技术的Shellcode,而且未采用虚拟化技术、易于部署,能有效检测到可发现虚拟化环境的Shellcode,大大降低了Shellcode检测暴露的可能性。

Description

一种Shellcode的动态检测方法
技术领域
本发明涉及信息安全技术领域,特别是一种Shellcode的动态检测方法。
背景技术
随着网络攻击技术的发展,缓冲区溢出的代码注入攻击越来越受到攻击者们的重视,已经成为主要的攻击计算机系统的手段,其中,缓冲区溢出的代码注入包括了Shellcode注入。Shellcode注入,就是向目标主机中存在漏洞的应用程序发送包含Shellcode的恶意数据,从而改变存在漏洞的应用程序的执行流程,甚至控制整个计算机系统。抵御这种攻击的关键在于能否精确地发现网络数据流中Shellcode的存在,而现有的检测Shellcode的技术方法可以分为静态检测方法和动态检测方法两大类。
检测Shellcode的静态检测方法大多基于特征匹配的方法,即事先对一些已经存在的Shellcode通过特定的算法提取其特征,然后与网络数据流进行特征匹配,进而检测Shellcode。虽然这种方法简单高效,但是它很难检测到使用了代码混淆技术而使特征不再明显的Shellcode。
检测Shellcode的基于虚拟化技术的动态检测方法可以检测出使用了代码混淆技术的Shellcode。这种方法的核心思想是使用一个CPU模拟器来直接执行网络数据流。Shellcode是一串有效的指令链,所以在执行过程中不会导致操作系统异常,网络数据流对于CPU来说大部分是一些无效的或非法的指令,所以在执行过程中会引起大量的操作系统异常。同时即使在网络数据流中存在有效的指令链,也可以通过明显的行为差异与Shellcode区别开来。因此,当恶意行为被发现而所执行的网络数据流没有引发操作系统异常时,可以认定当前网络数据流中存在Shellcode。动态检测方法是一种非常有效的检测Shellcode的方法,目前绝大多数的基于动态检测方法的Shellcode检测方法都使用了虚拟化技术为执行网络数据流搭建虚拟执行环境。但是Shellcode很有可能通过先检测是否存在虚拟化环境,来决定是否真正执行Shellcode的有效部分,以此逃避检测。因此,需要一种可以解决现有Shellcode动态检测方法容易被发现的问题,即不使用虚拟化技术的动态检测方法,进一步提高Shellcode检测的隐蔽性。
发明内容
本发明解决的技术问题是:克服现有动态检测方法存在的不足,提供了一种不使用任何虚拟化技术、网络数据流直接在CPU上执行的Shellcode动态检测方法,可以有效检测具备发现虚拟化环境的Shellcode,降低了检测暴露的可能性。
本发明的技术解决方案是:一种Shellcode的动态检测方法,包括步骤如下:
(1)令待检测主机执行能够引起breakpoint异常的指令,将此时寄存器值和内存内容作为重置待检测主机状态的初始寄存器值和内存内容并存储;
(2)从待检测主机的网络通信信道中抓取网络数据流,并存储至待检测主机的内存中;
(3)对抓取的网络数据流进行划分,得到多个执行链,并使用初始寄存器值和内存内容开始执行第一个执行链;
(4)执行链执行过程中,检测是否出现死循环或者操作系统异常,如果出现死循环,则当前执行链没有Shellcode且当前执行链检测完成,输出未检测到Shellcode信号,读取初始寄存器值和内存内容,替换当前寄存器值和内存内容并转入步骤(6),如果出现操作系统异常,则当前执行链没有Shellcode且当前执行链检测完成,在产生对应的操作系统异常处理信号并送至操作系统内的异常处理程序之前,中止该操作系统异常对应的异常处理流程,输出未检测到Shellcode信号,读取初始寄存器值和内存内容,替换当前寄存器值和内存内容并转入步骤(6),如果没有出现死循环或者操作系统异常,则转入步骤(5);
(5)使用Heuristics方法检测当前执行链,如果检测到Shellcode,则输出检测到Shellcode信号,转入步骤(6),否则输出未检测到Shellcode信号,转入步骤(6);
(6)重复步骤(4)-步骤(5)执行下一执行链直至网络数据流划分得到的所有执行链被遍历。
所述的死循环的检测方法为:记录当前执行链开始执行时计数器变量的初始值为A,当前执行链执行过程中每次时钟中断时,比较此时计数器变量与A的差值,如果差值大于1,则当前执行链陷入死循环;如果差值不大于1,则当前执行的执行链没有陷入死循环。
所述的Heuristics方法为PEB Heuristics方法。
本发明与现有技术相比的优点在于:
(1)本发明方法与现有静态检测技术相比,克服了静态检测技术在检测使用代码混淆技术而使特征不再明显的Shellcode时失效的缺陷,能够检测到使用了代码混淆技术的Shellcode;
(2)本发明方法与现有动态检测技术相比,未采用虚拟化技术,不使用任何CPU模拟器或者虚拟机,实现直接基于硬件的动态检测方法,易于部署;
(3)本发明方法与现有动态检测技术相比,克服了传统的动态监测技术中Shellcode通过先检测是否存在虚拟化环境来逃避检测的问题,能有效检测到可发现虚拟化环境的Shellcode,大大降低了Shellcode检测暴露的可能性。
附图说明
图1为本发明一种Shellcode的动态检测方法流程图。
具体实施方式
本发明提出一种Shellcode的动态检测方法,不使用任何虚拟化技术,使网络数据流直接在CPU上执行,并能有效检测Shellcode。本发明方法直接令网络数据流在CPU上执行,一般的网络数据流对CPU来说大多是无效的或非法的指令,直接在CPU上执行会引发当前使用的操作系统异常或陷入死循环,然而执行到Shellcode则不会引起操作系统异常。因此为了使网络数据流能够顺利地连续执行,需要处理操作系统异常和系统陷入死循环这两种情况。
判断执行链是否处于死循环状态,其核心思想就是查看当前操作系统的计数器变量,检查刚开始执行一条执行链时的计数器数值和执行过程中发生时钟中断时的计数器数值的差值,如果差值大于1,则说明系统陷入死循环,即当前执行的执行链内没有Shellcode,如果差值不大于1,则说明当前执行的执行链可能有Shellcode,并继续执行本执行链。
判断执行链执行时操作系统是否发生异常,首先当执行一个执行链操作系统产生异常时(例如,divide error,page fault),CPU就会产生对应的异常中断向量;然后,操作系统内核根据CPU产生的异常中断向量,通过中断描述符表(IDT),计算出对应的异常处理程序的入口地址,进行相应的异常处理。为了防止执行链执行时由于触发系统异常,接收到异常信号导致无法连续执行执行链,本发明在操作系统即将处理异常信号时,截断异常信号的发送来中止该操作系统异常对应的异常处理流程,并重置到初始的寄存器值和内存内容,然后立即返回继续执行下一个执行链。
本发明中初始产生的以及重置时使用的寄存器值和内存内容,是在执行网络数据流中第一个执行链之前,触发一个操作系统breakpoint异常,将异常触发时的寄存器值和内存内容作为初始寄存器值和内存内容并存储;然后开始依次执行执行链,每当发生系统异常或陷入死循环时,即终止当前执行链执行,使用存储的初始寄存器值和内存内容替换当前寄存器值和内存内容,执行下一条执行链,避免了前一执行链执行后对后一执行链的执行环境的影响,保证了所有执行链都能有相同的执行环境。
如果执行执行链引发异常或者陷入死循环,说明当前执行链中没有Shellcode,那么操作系统会使用初始寄存器值和内存内容开始执行下一条执行链。如果既没有引发异常也没有陷入死循环,那么可以判断该执行链中可能存在Shellcode,需要进一步利用其它方法进行判别。本发明采用的是启发式(Heuristics)方法,例如PEB启发式(Heuristics)方法,通过检查与PEB相关内存地址是否被注入的Shellcode所访问,来判断当前执行链是否有Shellcode。
本发明一种Shellcode的动态检测方法如图1所示,具体步骤包括:
1.从网络通信信道中抓取网络数据流,并存储至待检测主机的内存中;
2.令待检测主机执行能够引起breakpoint异常的指令,将此时寄存器值和内存内容作为重置待检测主机状态的初始寄存器值和内存内容并存储;
3.根据Polychronakis M.等人在文献《Network-level PolymorphicShellcode Detection using Emulation》中提出的执行链(Execution Chain)概念,对抓取的网络数据流进行划分,得到多个执行链,并使用步骤(2)得到的初始寄存器值和内存内容开始执行第一个执行链;
4.执行链执行过程中,检测是否出现死循环或者操作系统异常,如果出现死循环,则当前执行链没有Shellcode且当前执行链检测完成,输出未检测到Shellcode信号,读取初始寄存器值和内存内容,替换当前寄存器值和内存内容并转入步骤6,如果出现操作系统异常,则当前执行链没有Shellcode且当前执行链检测完成,并在CPU产生对应的操作系统异常处理信号并送至操作系统内的异常处理程序之前,中止该操作系统异常对应的异常处理流程,输出未检测到Shellcode信号,读取初始寄存器值和内存内容,替换当前寄存器值和内存内容并转入步骤6,否则(没有出现死循环或者操作系统)转入步骤5;其中,死循环的检测方法为查看当前操作系统的计数器变量,记录当前执行链开始执行时计数器变量的初始值为A,当前执行链执行过程中每次时钟中断时,比较此时计数器变量与A的差值,如果差值大于1,则当前执行链陷入死循环(即当前执行链没有Shellcode)且当前执行链不再继续执行;如果差值不大于1,则说明当前执行的执行链没有陷入死循环(即当前执行链可能有Shellcode),并继续执行直至当前执行链执行完毕;如果操作系统执行一个执行链时产生异常,则CPU产生对应的操作系统异常信号,操作系统将该信号传输到内部自带的异常处理程序,将此时刻设定为检测出操作系统异常的时刻且当前执行链不再继续执行,但是因为异常处理程序处理异常信号后,会导致操作系统无法继续执行下一条执行链,本发明在操作系统即将处理异常信号时,截断异常信号的发送来中止该操作系统异常对应的异常处理流程,如果一个执行链没有产生异常,则继续执行直至当前执行链执行完毕。
5.使用PEB启发式(Heuristics)方法检测当前执行链,如果检测到Shellcode,则输出检测到Shellcode信号,转入步骤(6),否则输出没有检测到Shellcode信号,转入步骤(6)。
6.重复步骤4-步骤5执行下一执行链直至网络数据流划分得到的所有执行链被遍历。
本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。

Claims (3)

1.一种Shellcode的动态检测方法,其特征在于包括步骤如下:
(1)令待检测主机执行能够引起breakpoint异常的指令,将此时寄存器值和内存内容作为重置待检测主机状态的初始寄存器值和内存内容并存储;
(2)从待检测主机的网络通信信道中抓取网络数据流,并存储至待检测主机的内存中;
(3)对抓取的网络数据流进行划分,得到多个执行链,并使用初始寄存器值和内存内容开始执行第一个执行链;
(4)执行链执行过程中,检测是否出现死循环或者操作系统异常,如果出现死循环,则当前执行链没有Shellcode且当前执行链检测完成,输出未检测到Shellcode信号,读取初始寄存器值和内存内容,替换当前寄存器值和内存内容并转入步骤(6),如果出现操作系统异常,则当前执行链没有Shellcode且当前执行链检测完成,在产生对应的操作系统异常处理信号并送至操作系统内的异常处理程序之前,中止该操作系统异常对应的异常处理流程,输出未检测到Shellcode信号,读取初始寄存器值和内存内容,替换当前寄存器值和内存内容并转入步骤(6),如果没有出现死循环或者操作系统异常,则转入步骤(5);
(5)使用Heuristics方法检测当前执行链,如果检测到Shellcode,则输出检测到Shellcode信号,转入步骤(6),否则输出未检测到Shellcode信号,转入步骤(6);
(6)重复步骤(4)-步骤(5)执行下一执行链直至网络数据流划分得到的所有执行链被遍历。
2.根据权利要求1所述的一种Shellcode的动态检测方法,其特征在于:所述的死循环的检测方法为:记录当前执行链开始执行时计数器变量的初始值为A,当前执行链执行过程中每次时钟中断时,比较此时计数器变量与A的差值,如果差值大于1,则当前执行链陷入死循环;如果差值不大于1,则当前执行的执行链没有陷入死循环。
3.根据权利要求1或2所述的一种Shellcode的动态检测方法,其特征在于:所述的Heuristics方法为PEB Heuristics方法。
CN201510134654.8A 2015-03-25 2015-03-25 一种Shellcode的动态检测方法 Pending CN104731708A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510134654.8A CN104731708A (zh) 2015-03-25 2015-03-25 一种Shellcode的动态检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510134654.8A CN104731708A (zh) 2015-03-25 2015-03-25 一种Shellcode的动态检测方法

Publications (1)

Publication Number Publication Date
CN104731708A true CN104731708A (zh) 2015-06-24

Family

ID=53455617

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510134654.8A Pending CN104731708A (zh) 2015-03-25 2015-03-25 一种Shellcode的动态检测方法

Country Status (1)

Country Link
CN (1) CN104731708A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107392619A (zh) * 2017-07-31 2017-11-24 众安信息技术服务有限公司 智能合约处理方法及装置
CN108970122A (zh) * 2018-06-28 2018-12-11 广州华多网络科技有限公司 防止外挂的方法、装置、终端及存储介质
CN113076540A (zh) * 2021-04-16 2021-07-06 顶象科技有限公司 一种攻击检测的方法、装置、电子设备及存储介质
CN113360902A (zh) * 2020-03-05 2021-09-07 奇安信科技集团股份有限公司 shellcode的检测方法、装置、计算机设备及计算机存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008165601A (ja) * 2006-12-28 2008-07-17 Secure Ware:Kk 通信監視システム、通信監視装置、及び通信制御装置
CN101673326A (zh) * 2008-09-11 2010-03-17 北京理工大学 基于程序执行特征的网页木马检测方法
US20100281540A1 (en) * 2009-05-01 2010-11-04 Mcafee, Inc. Detection of code execution exploits

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008165601A (ja) * 2006-12-28 2008-07-17 Secure Ware:Kk 通信監視システム、通信監視装置、及び通信制御装置
CN101673326A (zh) * 2008-09-11 2010-03-17 北京理工大学 基于程序执行特征的网页木马检测方法
US20100281540A1 (en) * 2009-05-01 2010-11-04 Mcafee, Inc. Detection of code execution exploits

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
BOXUAN GU等: ""Malicious Shellcode Detection with Virtual Memory Snapshots"", 《IEEE INFOCOM 2010》 *
DONGHAI TIAN等: ""Efficient Shellcode Detection on Commodity Hardware"", 《IEICE TRANSACTIONS ON INFORMATION AND SYSTEMS》 *
董鹏程等: ""一种shellcode动态检测与分析技术"", 《小型微型计算机系统》 *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107392619A (zh) * 2017-07-31 2017-11-24 众安信息技术服务有限公司 智能合约处理方法及装置
WO2019024674A1 (zh) * 2017-07-31 2019-02-07 众安信息技术服务有限公司 智能合约处理方法及装置
CN108970122A (zh) * 2018-06-28 2018-12-11 广州华多网络科技有限公司 防止外挂的方法、装置、终端及存储介质
CN108970122B (zh) * 2018-06-28 2021-06-08 广州华多网络科技有限公司 防止外挂的方法、装置、终端及存储介质
CN113360902A (zh) * 2020-03-05 2021-09-07 奇安信科技集团股份有限公司 shellcode的检测方法、装置、计算机设备及计算机存储介质
CN113360902B (zh) * 2020-03-05 2024-02-20 奇安信科技集团股份有限公司 shellcode的检测方法、装置、计算机设备及计算机存储介质
CN113076540A (zh) * 2021-04-16 2021-07-06 顶象科技有限公司 一种攻击检测的方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN108573144B (zh) 安全的执行上下文数据
KR102306568B1 (ko) 컴퓨터 시스템의 제어 흐름 무결성의 프로세서 트레이스 기반 집행
US9177153B1 (en) Verifying integrity and guaranteeing execution of code on untrusted computer platform
US7953980B2 (en) Signed manifest for run-time verification of software program identity and integrity
Tucek et al. Sweeper: A lightweight end-to-end system for defending against fast worms
US10395033B2 (en) System, apparatus and method for performing on-demand binary analysis for detecting code reuse attacks
Qi et al. SpecTaint: Speculative Taint Analysis for Discovering Spectre Gadgets.
TW201212037A (en) Methods and apparatus to protect segments of memory
CN104731708A (zh) 一种Shellcode的动态检测方法
US11087001B2 (en) Determining location of speculation denial instructions for memory access vulnerabilities
US11093605B2 (en) Monitoring real-time processor instruction stream execution
Zhang et al. Recfa: Resilient control-flow attestation
CN103617396B (zh) 一种漏洞利用的检测方法和系统
Feng et al. Fastcfi: Real-time control-flow integrity using fpga without code instrumentation
Ding et al. Android low entropy demystified
US20170031750A1 (en) Zero Overhead Code Coverage Analysis
CN106909509A (zh) 一种虚拟机进程代码的无代理分页式度量系统和方法
Jiang et al. Efficient and trusted detection of rootkit in IoT devices via offline profiling and online monitoring
Zhu et al. Jintide: Utilizing low-cost reconfigurable external monitors to substantially enhance hardware security of large-scale CPU clusters
Wang et al. A Fine-Grained Hardware Security Approach for Runtime Code Integrity in Embedded Systems.
CN108073411A (zh) 一种补丁的内核加载方法及装置
US10691586B2 (en) Apparatus and method for software self-test
KR101421630B1 (ko) 코드 인젝션된 악성코드 탐지 시스템 및 방법
CN111796911A (zh) 一种面向云平台虚拟设备的攻击检测方法及电子装置
Xiang et al. A design of security module to protect program execution in embedded system

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into 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: 20150624