CN116204891B - 漏洞利用分析方法、设备及存储介质 - Google Patents
漏洞利用分析方法、设备及存储介质 Download PDFInfo
- Publication number
- CN116204891B CN116204891B CN202310473727.0A CN202310473727A CN116204891B CN 116204891 B CN116204891 B CN 116204891B CN 202310473727 A CN202310473727 A CN 202310473727A CN 116204891 B CN116204891 B CN 116204891B
- Authority
- CN
- China
- Prior art keywords
- byte
- repair
- program
- user program
- leakage
- 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
Links
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/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
-
- 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/568—Computer malware detection or handling, e.g. anti-virus arrangements eliminating virus, restoring damaged files
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Virology (AREA)
- Computing Systems (AREA)
- General Health & Medical Sciences (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请提供一种漏洞利用分析方法、设备及存储介质,可用于计算机领域。该方法包括:获取网络攻击流量、用户程序及用户程序对应的随机源,提取网络攻击流量中的输入字节序列;启动多版本执行引擎的多个程序实例,将输入字节序列及用户程序发送给多个程序实例,基于多个程序实例的输出结果,确定网络攻击流量中的泄露字节;调用污点分析引擎,将输入字节序列、用户程序及随机源输入至污点分析引擎,以使污点分析引擎进行污点分析,确定网络攻击流量中的修复字节;确定修复字节的作用,并确定泄露字节和修复字节之间的修复函数;根据泄露字节、修复字节及修复函数生成攻击脚本;将攻击脚本输入至用户程序,实现漏洞利用重现,提高了修复漏洞的效率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种漏洞利用分析方法、设备及存储介质。
背景技术
软件漏洞可存在于系统或应用软件中,攻击者可利用软件漏洞实施网络攻击,是信息产业面临的一大严重威胁。为尽快对漏洞进行修复,可基于流量重放对漏洞利用进行分析和重现,有助于开发者和安全研究者研究漏洞细节。
现有技术中,为了能够抵御内存错误导致的攻击,通常采用多种缓解措施来阻断漏洞的利用过程。攻击者在进行漏洞利用时,需设法绕过上述缓解措施最终完成攻击。
但是上述缓解措施使得流量重放难以应用于漏洞利用分析和重现,导致漏洞修复效率较低。
发明内容
本申请提供一种漏洞利用分析方法、设备及存储介质,用以解决由于缓解措施使得流量重放难以应用于漏洞利用分析和重现,导致漏洞修复效率较低的问题。
第一方面,本申请提供一种漏洞利用分析方法,包括:
获取网络攻击流量、用户程序及用户程序对应的随机源,并提取网络攻击流量中的输入字节序列;
启动多版本执行引擎的多个程序实例,将输入字节序列及用户程序发送给多个程序实例,并基于多个程序实例的输出结果,确定网络攻击流量中的泄露字节;
调用污点分析引擎,将输入字节序列、用户程序及用户程序对应的随机源输入至污点分析引擎,以使污点分析引擎进行污点分析,确定网络攻击流量中的修复字节;
确定修复字节的作用,并基于修复字节的作用,确定泄露字节和修复字节之间的修复函数,修复函数用于修复修复字节;
根据泄露字节、修复字节及修复函数,生成攻击脚本;
将攻击脚本输入至用户程序,以进行漏洞利用分析,对漏洞利用进行修复。
第二方面,本申请提供一种漏洞利用分析设备,包括:
获取模块,用于获取网络攻击流量、用户程序及用户程序对应的随机源,并提取网络攻击流量中的输入字节序列;
泄露字节识别模块,用于启动多版本执行引擎的多个程序实例,将输入字节序列及用户程序发送给多个程序实例,并基于多个程序实例的输出结果,确定网络攻击流量中的泄露字节;
修复字节识别模块,用于调用污点分析引擎,将输入字节序列、用户程序及用户程序对应的随机源输入至污点分析引擎,以使污点分析引擎进行污点分析,确定网络攻击流量中的修复字节;
字节修复与重放模块,用于确定修复字节的作用,并基于修复字节的作用,确定泄露字节和修复字节之间的修复函数,修复函数用于修复修复字节;
攻击脚本生成模块,用于根据泄露字节、修复字节及修复函数,生成攻击脚本;
输入模块,用于将攻击脚本输入至用户程序,以进行漏洞利用分析,对漏洞利用进行修复。
第三方面,本申请提供一种漏洞利用分析设备,包括:处理器、存储器,存储器中存储代码,处理器运行存储器中存储的代码,以执行如第一方面中任一项的方法。
第四方面,本申请提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现如第一方面任一项的方法。
本申请提供一种漏洞利用分析方法、设备及存储介质,该方法利用多版本执行引擎确定网络攻击流量中的泄露字节。利用污点分析引擎进行污点分析,确定网络攻击流量中的修复字节。通过重放用户程序被攻击时的流量,确定用于对修复字节进行修复的修复函数。根据泄露字节、修复字节和修复函数生成攻击脚本,并将攻击脚本输入至用户程序。由于本申请能够基于修复函数,动态地根据当前用户程序的输出即泄露字节,对修复字节进行修复,从而调整对用户程序的输入,消除地址空间布局随机化等不确定性对漏洞利用执行流的影响,能够在已经部署缓解措施的系统上实现漏洞利用的重现,可进一步对漏洞利用进行分析,提高修复漏洞的效率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为本申请实施例提供的一种漏洞利用分析系统架构图;
图2为本申请实施例提供的一种漏洞利用分析方法流程图;
图3为本申请实施例提供的一种利用攻击脚本进行漏洞利用的工作流程图;
图4为本申请实施例提供的一种修复字节的确定方法流程图;
图5为本申请实施例提供的一种修复字节作用的确定方法流程图;
图6为本申请实施例提供的一种修复函数的确定方法流程图;
图7为本申请实施例提供的一种用户程序被攻击时和本地重放过程中的内存布局示意图;
图8为本申请实施例提供的一种漏洞利用分析设备示意图一;
图9为本申请实施例提供的一种漏洞利用分析设备示意图二。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
软件漏洞是信息产业面临的一大严重威胁。攻击者可以利用漏洞实施网络攻击,完成窃取数据、植入后门等操作,严重的影响了用户、行业实体乃至国家的安全,带来了较大的信息财产损失。而在攻击过程中,漏洞利用分析作为核心,是当今软件安全领域的研究重点,也是信息系统开发者、维护者、使用者共同的关注焦点。及时发现网络攻击,并针对漏洞利用的特征进行针对性的分析和防御,对信息系统具有非常重要的意义。具体而言,漏洞利用的分析和重现,有助于开发者和安全研究者理解漏洞细节,从而加速漏洞的修复。重现的攻击流量,还可被入侵检测系统用作为特征,用于识别来自网络流量中的威胁,从而提前拦截攻击,保护用户和系统免受入侵威胁。
重放是指通过将威胁流量再次作为输入,提供给目标程序的过程,并在过程中检测软件的行为。当前的网络环境中,在网络边界部署入侵检测系统或防火墙的做法较为常见,实时监测网络流量。其中,网络流量记录的功能可以保留攻击者入侵的相关信息,并为攻击行为中漏洞利用的分析提供重要的依据。同时,目前网络上部署的蜜罐系统也是捕获攻击流量的强有力工具。因此,基于流量重放进行漏洞利用分析和重现具有较高的有效性和普适性。
然而,为了能够抵御内存错误导致的攻击,现代系统采用了多种缓解措施来阻断漏洞的利用过程,例如数据执行保护(Data Execution Prevention,DEP)、地址空间布局随机化(Address space layout randomization,ASLR)技术。攻击者在进行漏洞利用时需要设法绕过这些缓解措施完成攻击,而这些措施可能导致流量重放难以应用于漏洞利用分析和重现。
例如,地址空间布局随机化技术使得程序的代码和数据的位置变得不可预测,从而避免攻击者轻易伪造恶意指针,劫持程序的数据流和控制流。而为了绕过这些缓解措施的限制,攻击者通常会采用一些利用技术,比如面向返回编程(Return-orientedprogramming,ROP)技术,完成漏洞利用。概括的说,就是先通过信息泄露的方法,获取程序的内存地址布局信息,再利用程序自身已有的代码来实现恶意功能。在这种策略的作用下,攻击者产生的流量将随着程序本身地址空间的变化而发生变化,使得分析者无法通过流量重放来完成对漏洞利用的重现,进而导致漏洞修复效率较低。
有鉴于此,本申请提供了一种漏洞利用分析方法,利用多版本执行引擎确定网络攻击流量中的泄露字节。利用污点分析引擎进行污点分析,确定网络攻击流量中的修复字节。通过重放用户程序被攻击时的流量,确定用于对修复字节进行修复的修复函数。通过泄露字节、修复字节和修复函数生成攻击脚本。将攻击脚本输入至用户程序,由于本申请能够动态根据当前用户程序的输出即泄露字节,对修复字节进行修复,调整对用户程序的输入,即利用用户程序执行时的实际数据来修复程序的输入,消除地址空间布局随机化等不确定性的影响,因此能够在已经部署缓解措施的系统上实现漏洞利用的重现,从而可对漏洞利用进行分析,有利于提高漏洞修复效率。同时可以为预防攻击者利用安全漏洞对软件用户发起网络攻击提供必要的信息,为入侵检测系统等提供信息,提高网络层面拦截漏洞攻击的几率,进而提高安全性。
图1为本申请实施例提供的一种漏洞利用分析系统架构图,如图1所示,包含泄露字节识别模块、修复字节识别模块、字节修复与重放模块及攻击脚本生成模块。其中,在网络攻击流量中提取输入字节序列。泄露字节识别模块包含多版本执行引擎,多版本执行引擎中包含多个程序实例。泄露字节识别模块将输入字节序列和用户程序分别输入至多个程序实例中,并对多个程序实例的输出结果进行差异分析,确定输出结果中存在差异的字节,并将差异的字节作为泄露字节。
修复字节识别模块中包含污点分析引擎。修复字节识别模块将输入字节序列、用户程序以及用户程序对应的随机源输入至污点分析引擎,基于动态污点分析,即进行污点标记、污点传播及污点检测等步骤,确定修复字节。
字节修复与重放模块中包含重放引擎,重放引擎用于根据用户程序和输入字节序列进行本地重放过程。重放引擎中的轻量级数据流记录器,可记录本地重放过程中的相关信息。根据轻量级数据流记录器记录的相关信息、泄露字节和修复字节,生成对修复字节进行修复的修复函数。
攻击脚本生成模块可根据泄露字节、修复字节和修复函数自动生成攻击脚本,利用该攻击脚本即可进行漏洞利用重现,对漏洞利用过程进行分析,以更好的对漏洞利用进行修复,提高操作系统的稳定性。
同时,由于本申请的漏洞利用分析系统基于模块化,降低了各个功能的耦合度,因此若遇到新的、更加复杂的攻击方法时,能够在本申请的漏洞利用分析系统上,编写自定义的重放模块,进而完成对新的攻击方法的分析和重现,可扩展性较强。
进一步的,由于在实际的网络攻击中,攻击流量通常隐藏在众多正常交互流量之中,难以分辨,数据量较大。若采用人工分析的方法,容易造成漏报等情况。而本申请的漏洞利用分析系统能够自动化工作在网络边界设备或重要系统中,实时进行分析,提高了自动化程度,大大降低了人工分析的成本投入,提高了分析效率。
下面以具体的实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
图2为本申请实施例提供的一种漏洞利用分析方法流程图。本实施例的方法可以由漏洞利用分析设备执行,可以通过硬件、软件、或者硬件和软件相结合的方式实现。如图2所示,该方法具体如下:
S201:获取网络攻击流量、用户程序及用户程序对应的随机源,并提取网络攻击流量中的输入字节序列。
网络攻击流量是用户程序在攻击过程中产生的流量,包含输入字节序列和输出字节序列。其中,输入字节序列是用户程序在攻击发生过程中的输入字节,即输入至用户程序的相关字节。输出字节序列是用户程序在攻击发生过程中的输出字节,即用户程序输出的相关字节。
需要说明的是,由于攻击者的概念证明(Proof of Concept,PoC)作为漏洞利用的关键信息,难以轻易被公开和获取,因此相较于自动化漏洞利用生成系统需要攻击者的概念证明作为输入,网络攻击流量在网络边界设备或者蜜罐设备的场景下是更为易于获取的信息,方便快携。
用户程序对应的随机源可以是缓解措施引入的随机化,其中,缓解措施可以是数据执行保护、地址空间布局随机化等技术。
S202:启动多版本执行引擎的多个程序实例,将输入字节序列及用户程序发送给多个程序实例,并基于多个程序实例的输出结果,确定网络攻击流量中的泄露字节。
在一些实施例中,多版本执行引擎中包含多个程序实例,并且能够监控多个程序实例的运行,并向多个程序实例分发操作系统调用的返回结果。由于在操作系统调用的返回结果一致的情况下,同一程序的数据流和控制流应保持一致,因此此时多个程序实例之间的不同在于缓解措施引入的随机化,比如内存布局等,多个程序实例的输出差异则可能由缓解措施引入的随机化导致。
其中,数据流是用于描述程序运行过程中,数据的流转方式及其行为状态,控制流是用于控制程序逻辑执行的先后顺序。
在一些实施例中,多版本执行引擎可以基于功能较为完善的多版本执行引擎GHUMVEE实现。由于在一次重放过程中,可能会产生多个泄露字节,多版本执行引擎需要满足以下要求:在进行write系统调用,输出的内容不一致时,可使得程序继续执行。需要说明的是,在程序没有功能性随机的情况下,仅需要保证程序输入的一致性即可,资源消耗较少。同时,为了进一步缩短时间,提高效率,也可以不使用ptrace监控程序状态。
在一种实施场景下,泄露字节是网络攻击流量中的一种关键字节,具体的,可以是用户程序在受到攻击过程中,泄露出的信息,因此泄露字节是网络攻击流量中,输出字节序列包含的字节。在重放时,程序输入相同的情况下,泄露字节会发生变化,因此可对多个程序实例的输出结果进行差异分析,确定多个输出结果中存在差异的字节。提取差异的字节,将差异的字节作为泄露字节。
S203:调用污点分析引擎,将输入字节序列、用户程序及用户程序对应的随机源输入至污点分析引擎,以使污点分析引擎进行污点分析,确定网络攻击流量中的修复字节。
在一些实施例中,修复字节也是网络攻击流量中的一种关键字节,具体的,存在于输入字节序列中。修复字节会和用户程序正常执行过程中的其他随机源的输入字节,共同影响用户程序的执行路径。需要说明的是,此时确定的修复字节是待进行修复的字节。
污点分析引擎是一种轻量级的跟踪程序数据流的系统,通过为数据标记污点,并在程序运行过程中跟踪数据传播,并提供相关信息,例如程序执行在某个时间点上数据的来源,并在需求时检查或者清洗污点标记。污点分析引擎进行污点分析的过程可参考下述实施例,在此不再赘述。
S204:确定修复字节的作用,并基于修复字节的作用,确定泄露字节和修复字节之间的修复函数,修复函数用于修复修复字节。
在一些实施例中,修复字节的作用可通过进行本地重放进行确定,具体的,可将输入字节序列输入到本地的用户程序中,进行本地重放。其中,修复字节的作用可包括被用于劫持数据流和/或控制流、未被用于劫持数据流和控制流两种情况。
在一种实施场景下,若修复字节被用于劫持数据流和/或控制流,此时可根据应用程序包含的程序模块,在本地重放过程中泄露的地址和基地址、程序模块被攻击时泄露的地址确定泄露字节与修复字节之间的第一修复函数。
在另一种实施场景下,若修复字节未被用于劫持数据流和控制流,将泄露字节替换修复字节作为第二修复函数。举例而言,若泄露字节为栈的警惕标志,则修复字节被修复为被泄露的警惕标志。
第二修复函数可参考如下所示:修复后的修复字节=泄露字节。
S205:根据泄露字节、修复字节及修复函数,生成攻击脚本。
在一些实施例中,根据泄露字节、修复字节及修复函数,可自动生成攻击脚本。其中,攻击脚本的形式可以是Python脚本形式,也可以是其他形式,可以自定义为任意语言,可根据实际需求设置。
其中,修复函数可包含上述的第一修复函数和第二修复函数。
S206:将攻击脚本输入至用户程序,以进行漏洞利用分析,对漏洞利用进行修复。
图3为本申请实施例提供的一种利用攻击脚本进行漏洞利用的工作流程图。如图3所示,用户程序写出即输出泄露字节,提取泄露字节并生成泄露字节集合。确定需要进行修复的修复字节,调用修复函数对修复字节进行修复,并将修复后的修复字节输入至用户程序。用户程序读取修复后的修复字节,再次根据修复后的修复字节进行输出,完成漏洞利用。其中,提取泄露字节和待修复的修复字节可参考其他实施例,在此不再赘述。
在一些实施例中,具体的,可以使用Python自带的subprocess模块来启动子进程,通过输入输出管道进行交互。其中,输入输出管道即为图3所示的交互模块。在提取泄露字节时,可以将字节数据根据目标系统的字节序转换为地址值的数字形式。然后根据修复函数计算修复后的修复字节,替换输入字节序列中需要被修复的字节数据,即修复字节。
将攻击脚本输入至用户程序,由于攻击脚本中包含修复函数,因此能够基于修复函数,对待修复的修复字节进行修复,动态地根据用户程序的输出即泄露字节,调整接下来对用户程序的输入即修复字节,因此能够实现与最初攻击者进行漏洞利用的效果一致,实现漏洞利用的重现,进而有助于开发者和安全研究者分析漏洞细节,以对漏洞进行修复。同时基于攻击脚本,实现了上述过程的持久化。
本申请实施例提供一种漏洞利用分析方法,获取网络攻击流量、用户程序和用户程序对应的随机源,并提取网络攻击流量中的输入字节序列。通过启动多版本执行引擎的多个程序实例,确定网络攻击流量中的泄露字节。通过污点分析引擎进行污点分析,确定网络攻击流量中的修复字节。确定修复字节的作用,并基于修复字节的作用,确定泄露字节和修复字节之间的修复函数。根据泄露字节、修复字节及修复函数,生成攻击脚本。将攻击脚本输入至用户程序,以进行漏洞利用重现。本申请的方法由于攻击脚本中包含泄露字节与修复字节的修复函数,因此根据该修复函数能够动态根据当前用户程序的输出即泄露字节,对修复字节进行修复,即调整对用户程序的输入,消除地址空间布局随机化等不确定性对漏洞利用执行流的影响,进而可在部署缓解措施的系统上实现漏洞利用重现,能够对漏洞利用进行分析,提高修复漏洞的效率。
图4为本申请实施例提供的一种修复字节的确定方法流程图,在本申请的一个或多个实施例中,可选的,污点分析引擎进行污点分析,确定网络攻击流量中的修复字节,可包括如图4所示的步骤:
S401:将输入字节序列及用户程序对应的随机源作为污点源,将用户程序中的间接跳转指令作为污点汇聚点进行程序插桩处理。
在一些实施例中,污点分析中可包含污点源和污点汇聚点。其中,污点源代表直接引入不受信任的数据,污点汇聚点代表直接产生安全敏感操作或泄露数据到外界。
在一种实施场景下,可将输入字节序列及用户程序对应的随机源作为污点源,此时需要对输入字节序列和用户程序对应的随机源进行污点标记。由于本申请中需要确定修复字节在输入字节序列中具体的字节偏移,因此可以对每个输入的字节进行不同的标记。由于DataTracker支持任意类型的标记,因此能够在内存和寄存器上实现字节级的污点跟踪。若使用libdft工具,由于libdft工具实现的标记类型通常为一个字节,因此使用libdft工具时需要进行一定的修改。
间接跳转指令是指跳转目标是从寄存器或内存位置中读取的指令。在一种实施场景下,在用户程序执行间接跳转指令时,用户程序将从指令的寄存器中获取其跳转的目的地址。由于攻击者能够修改寄存器的内容,存在间接跳转指令对应的目的地址被篡改的可能性,因此可将间接跳转指令作为污点汇聚点。
程序插桩是在保证被测程序原有逻辑完整性的基础上,在程序中插入一些探针,通过探针的执行获得程序的控制流和数据流信息,以实现测试的目的。
在一些实施例中,由于DataTracker与Dytan污点分析工具均使用Intel Pin插桩平台开发,可扩展性较强,且能够比较灵活的实现定制化的二进制程序分析功能,因此可使用DataTracker与Dytan污点分析工具作为本申请中污点分析引擎的基础。
S402:当用户程序的控制流到达间接跳转指令时,提取间接跳转指令中跳转条件的指令操作数对应的目标数据,并检查目标数据是否存在污点。
指令操作数用于指出间接跳转指令执行的操作所需要数据的来源,举例而言,可以是特定的寄存器或存储器等。
目标数据即间接跳转指令执行时获取到的数据。
在一种实施场景下,若目标数据不存在污点,则表明当前用户程序运行安全。
S403:若存在污点,记录目标数据对应污点源数据在输入字节序列中的字节偏移,并将目标数据作为修复字节。
在一种实施场景下,若目标数据存在污点,则表明当前用户程序运行异常,用户程序被攻击者劫持了控制流。
目标数据对应污点源数据在输入字节序列中的字节偏移,即目标数据对应污点源数据在输入字节序列中的位置,表示攻击发生时,数据流或控制流劫持的目标地址。举例而言,若输入字节序列中包含100个字节,目标数据对应污点源数据在输入字节序列中的字节偏移为50,即目标数据对应污点源数据为输入字节序列中的第50个字节。
将目标数据作为修复字节,需要说明的是,此时的修复字节还未进行修复,需要根据该修复字节的作用,利用泄露字节对该修复字节进行修复,具体修复过程可参考其他实施例,在此不再赘述。
综上,基于动态污点分析,利用污点分析引擎确定修复字节具体的字节偏移,精确度较高,提高了确定修复字节的准确率。同时污点分析引擎为轻量级的跟踪程序数据流的系统,相较于众多重量级污点分析与符号执行引擎而言,消耗的资源较少。
图5为本申请实施例提供的一种修复字节作用的确定方法流程图。在本申请的一个或多个实施例中,可选的,确定修复字节的作用,包括如图5所示的步骤:
S501:将输入字节序列输入至用户程序,进行本地重放。
在一些实施例中,进行本地重放过程中,可调用数据流记录器,以记录当前本地重放过程中,用户程序包含的程序模块加载的虚拟地址值、泄露字节以及对应的随机化信息,虚拟地址值包含每个程序模块在本地重放过程中的基地址,随机化信息包含栈金丝雀值。
其中,数据流记录器可以是轻量级数据流记录器,简单方便。数据流记录器记录的随机化信息可以包含随机化地址、栈金丝雀值等信息。其中,栈金丝雀值是放置在缓冲器和控制数据之间的一个随机值,当金丝雀值验证失败时,表示出现了缓冲区溢出,从而触发维护机制,使程序停止运行。
需要说明的是,数据流记录器记录的泄露字节是在本地重放过程中的泄露字节,与网络攻击流量中的泄露字节存在差异。
应用程序中可包含一个或多个程序模块,程序模块可以作为一个整体来处理的、独立的、可识别的程序指令。
S502:对修复字节符号化进行执行,若用户程序崩溃,则确定修复字节被用于劫持数据流或控制流,否则,确定修复字节未被用于劫持数据流或控制流。
在一些实施例中,对修复字节符号化进行执行即符号执行,是指使用符号值代替真实值进行执行。
在一种实施场景下,将修复字节符号化,在用户程序崩溃时可进一步判断被符号化的寄存器,以确定具体用于劫持数据流或控制流的修复字节。其中,被符号化的寄存器可以是PC寄存器或其他通用寄存器。
在另一种实施场景下,修复字节执行过程中,用户程序没有崩溃,则表明修复字节未被用于劫持数据流或控制流。
综上,通过将输入字节序列输入至用户程序,进行本地重放过程确定修复字节的作用,方便快携,有效缩短了确定修复字节作用的时间,提高了效率。
图6为本申请实施例提供的一种修复函数的确定方法流程图。在本申请的一个或多个实施例中,可选的,基于修复字节的作用,确定泄露字节和修复字节之间的修复函数,可包括图6所示的步骤:
S601:若修复字节被用于劫持数据流和控制流,根据每个程序模块在本地重放过程中泄露的地址和基地址确定地址偏移量。
在一些实施例中,每个程序模块在本地重放过程中泄露的地址和基地址可通过数据流记录器进行记录。地址偏移量是指每个程序模块在本地重放过程中泄露的地址和基地址之间的偏移量。
图7为本申请实施例提供的一种用户程序被攻击时和本地重放过程中的内存布局示意图,如图7所示,图7中的地址1是程序模块1在本地重放过程中泄露出的地址,可记为RL1。地址2是程序模块1在本地重放过程中的基地址,可记为RB1。地址3是程序模块2在本地重放过程中泄露出的地址,可记为RL2。地址4是程序模块2在本地重放过程中的基地址,可记为RB2。其中,RL1和RL2为数据流记录器在本地重放过程中记录的泄露字节,RB1和RB2是数据流记录器记录的虚拟地址值。图7中显示的0x00000000-0xffffffff表示用户程序的地址空间。
将程序模块1在本地重放过程中对应的地址偏移量1记为RO1,此时RO1=RL1-RB1。将程序模块2在本地重放过程中对应的地址偏移量2记为RO2,此时RO2=RL2-RB2。
S602:获取网络攻击流量中包含的每个程序模块被攻击时泄露的地址,程序模块被攻击时泄露的地址为网络攻击流量中的泄露字节。
参考图7所示,图中的地址5是程序模块1被攻击时泄露的地址,可记为PL1,地址7是程序模块2被攻击时泄露的地址,可记为PL2。需要说明的是,PL1和PL2为用户程序在被攻击时泄露的地址,即网络攻击流量中的泄露字节,是网络攻击流量中的原始数据,因此可通过网络攻击流量进行获取。
S603:根据每个程序模块被攻击时泄露的地址和地址偏移量确定每个程序模块被攻击时的基地址。
在一些实施例中,由于地址空间布局随机化的随机粒度通常是模块级别的,即程序模块内部地址的相对偏移不会发生改变,因此程序模块被攻击时对应的地址偏移量与程序模块在本地重放过程中的地址偏移量相等。
仍参考图7所示,地址偏移量3是程序模块1被攻击时对应的地址偏移量,可记为PO1。由于程序模块内部地址的相对偏移不会发生改变,因此程序模块1被攻击时对应的地址偏移量PO1与程序模块1在本地重放过程中对应的地址偏移量RO1相等,即PO1=RO1。同理,地址偏移量4是程序模块2被攻击时对应的地址偏移量,可记为PO2。PO2与程序模块2在本地重放过程中对应的地址偏移量RO2相等,即PO2=RO2。
图7中的地址6是程序模块1被攻击时的基地址,可记为PB1。由于此时已知程序模块1被攻击时泄露的地址PL1和对应的地址偏移量PO1,因此,PB1的一种计算方式如下:PB1=PL1-PO1。
同理,地址8是程序模块2被攻击时的基地址,可记为PB2,因此PB2的一种计算方式如下:PB2=PL2-PO2,其中,PL2是程序模块2被攻击时泄露的地址,PO2则为程序模块2被攻击时对应的地址偏移量。
S604:根据每个程序模块被攻击时泄露的地址和修复字节,确定用户程序被攻击时,修复字节对应的程序模块,将程序模块作为用于修复的泄露模块。
仍以图7为例,图中的地址9为修复字节的字节偏移,可记为PA。程序模块1被攻击时泄露的地址为PL1,程序模块2被攻击时泄露的地址为PL2。由于无法获知攻击发生时,用户程序的内存布局信息,而此时PA距离PL1更近,则确定程序模块1是用户程序被攻击时,修复字节所指向的程序模块,因此将程序模块1作为泄露模块。
需要说明的是,修复字节的字节偏移可通过上述污点分析引擎进行污点分析确定,其具体过程在此不再赘述。
S605:根据修复字节、泄露模块被攻击时的基地址和泄露模块在本地重放过程中的基地址生成第一修复函数。
在一些实施例中,第一修复函数的一种计算方式如下所示:
修复后的修复字节=PA-PB1+RB1
其中,PA为修复字节的字节偏移,PB1为泄露模块被攻击时的基地址,RB1为泄露模块在本地重放过程中的基地址。
综上,通过本地重放过程,确定修复字节被用于劫持数据流和控制流时,修复字节与泄露字节之间的第一修复函数,对修复字节进行修复。利用第一修复函数,能够动态地根据泄露字节调整修复字节,消除地址空间布局随机化等不确定性的影响,实现在已部署缓解措施的系统上,进行漏洞利用的重现。
图8为本申请实施例提供的一种漏洞利用分析设备示意图一。如图8所示,本申请实施例提供一种漏洞利用分析设备800,可以包括获取模块801、泄露字节识别模块802、修复字节识别模块803、字节修复与重放模块804、攻击脚本生成模块805和输入模块806。
获取模块801,用于获取网络攻击流量、用户程序及用户程序对应的随机源,并提取网络攻击流量中的输入字节序列;
泄露字节识别模块802,用于启动多版本执行引擎的多个程序实例,将输入字节序列及用户程序发送给多个程序实例,并基于多个程序实例的输出结果,确定网络攻击流量中的泄露字节;
修复字节识别模块803,用于调用污点分析引擎,将输入字节序列、用户程序及用户程序对应的随机源输入至污点分析引擎,以使污点分析引擎进行污点分析,确定网络攻击流量中的修复字节;
字节修复与重放模块804,用于确定修复字节的作用,并基于修复字节的作用,确定泄露字节和修复字节之间的修复函数,修复函数用于修复修复字节;
攻击脚本生成模块805,用于根据泄露字节、修复字节及修复函数,生成攻击脚本;
输入模块806,用于将攻击脚本输入至用户程序,以进行漏洞利用分析,对漏洞利用进行修复。
本实施例的设备,可用于执行上述的方法实施例,其实现原理和技术效果类似,此处不再赘述。
图9为本申请实施例提供的一种漏洞利用分析设备示意图二。如图9所示,本申请实施例提供一种漏洞利用分析设备900包括处理器901和存储器902,其中,处理器901、存储器902通过总线903连接。
在具体实现过程中,存储器902中存储代码,处理器901运行存储器902中存储的代码,以执行上述方法实施例的方法。
处理器901的具体实现过程可参见上述方法实施例,其实现原理和技术效果类似,本实施例此处不再赘述。
在上述的图9所示的实施例中,应理解,处理器901可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application SpecificIntegrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器902可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器。
总线903可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线903可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线903并不限定仅有一根总线或一种类型的总线。
本申请实施例提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现上述方法实施例的方法。
上述的计算机可读存储介质,可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。可读存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的可读存储介质耦合至处理器,从而使处理器能够从该可读存储介质读取信息,且可向该可读存储介质写入信息。当然,可读存储介质也可以是处理器的组成部分。处理器和可读存储介质可以位于专用集成电路(Application Specific IntegratedCircuits,简称:ASIC)中。当然,处理器和可读存储介质也可以作为分立组件存在于设备中。
本申请实施例提供一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时实现上述本申请实施例中任意实施例提供的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求书指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求书来限制。
Claims (10)
1.一种漏洞利用分析方法,其特征在于,包括:
获取网络攻击流量、用户程序及所述用户程序对应的随机源,并提取所述网络攻击流量中的输入字节序列;
启动多版本执行引擎的多个程序实例,将所述输入字节序列及所述用户程序发送给多个程序实例,并基于多个程序实例的输出结果,确定所述网络攻击流量中的泄露字节;
调用污点分析引擎,将所述输入字节序列、所述用户程序及所述用户程序对应的随机源输入至所述污点分析引擎,以使所述污点分析引擎进行污点分析,确定所述网络攻击流量中的修复字节;
确定所述修复字节的作用,并基于所述修复字节的作用,确定所述泄露字节和所述修复字节之间的修复函数,所述修复函数用于修复所述修复字节;
根据所述泄露字节、所述修复字节及所述修复函数,生成攻击脚本;
将所述攻击脚本输入至所述用户程序,以进行漏洞利用分析,对漏洞利用进行修复。
2.根据权利要求1所述的方法,其特征在于,所述基于多个程序实例的输出结果,确定所述网络攻击流量中的泄露字节,包括:
对多个程序实例的输出结果进行差异分析,确定多个输出结果中存在差异的字节;
提取所述差异的字节,将所述差异的字节作为泄露字节。
3.根据权利要求2所述的方法,其特征在于,所述污点分析引擎进行污点分析,确定所述网络攻击流量中的修复字节,包括:
将所述输入字节序列及所述用户程序对应的随机源作为污点源,将所述用户程序中的间接跳转指令作为污点汇聚点进行程序插桩处理;
当所述用户程序的控制流到达所述间接跳转指令时,提取所述间接跳转指令中跳转条件的指令操作数对应的目标数据,并检查所述目标数据是否存在污点;
若存在污点,记录所述目标数据对应污点源数据在所述输入字节序列中的字节偏移,并将所述目标数据作为修复字节。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述确定所述修复字节的作用,包括:
将所述输入字节序列输入至所述用户程序,进行本地重放;
对所述修复字节符号化进行执行,若所述用户程序崩溃,则确定所述修复字节被用于劫持数据流或控制流,否则,确定所述修复字节未被用于劫持数据流或控制流。
5.根据权利要求4所述的方法,其特征在于,所述将所述输入字节序列输入至所述用户程序,进行本地重放,包括:
调用数据流记录器,以记录当前本地重放过程中,所述用户程序包含的程序模块加载的虚拟地址值、泄露字节以及对应的随机化信息,所述虚拟地址值包含每个程序模块在本地重放过程中的基地址,所述随机化信息包含栈金丝雀值。
6.根据权利要求5所述的方法,其特征在于,所述修复函数包含第一修复函数;所述基于所述修复字节的作用,确定所述泄露字节和所述修复字节之间的修复函数,包括:
若所述修复字节被用于劫持数据流和控制流,根据每个程序模块在本地重放过程中泄露的地址和基地址确定地址偏移量;
获取所述网络攻击流量中包含的每个程序模块被攻击时泄露的地址,程序模块被攻击时泄露的地址为所述网络攻击流量中的泄露字节;
根据每个程序模块被攻击时泄露的地址和所述地址偏移量确定每个程序模块被攻击时的基地址;
根据每个程序模块被攻击时泄露的地址和所述修复字节,确定所述用户程序被攻击时,所述修复字节对应的程序模块,将所述程序模块作为用于修复的泄露模块;
根据所述修复字节、所述泄露模块被攻击时的基地址和所述泄露模块在本地重放过程中的基地址生成第一修复函数。
7.根据权利要求5所述的方法,其特征在于,所述修复函数包含第二修复函数;所述基于所述修复字节的作用,确定所述泄露字节和所述修复字节之间的修复函数,包括:
若所述修复字节未被用于劫持数据流和控制流,将所述泄露字节替换所述修复字节作为第二修复函数。
8.一种漏洞利用分析设备,其特征在于,包括:
获取模块,用于获取网络攻击流量、用户程序及所述用户程序对应的随机源,并提取所述网络攻击流量中的输入字节序列;
泄露字节识别模块,用于启动多版本执行引擎的多个程序实例,将所述输入字节序列及所述用户程序发送给多个程序实例,并基于多个程序实例的输出结果,确定所述网络攻击流量中的泄露字节;
修复字节识别模块,用于调用污点分析引擎,将所述输入字节序列、所述用户程序及所述用户程序对应的随机源输入至所述污点分析引擎,以使所述污点分析引擎进行污点分析,确定所述网络攻击流量中的修复字节;
字节修复与重放模块,用于确定所述修复字节的作用,并基于所述修复字节的作用,确定所述泄露字节和所述修复字节之间的修复函数,所述修复函数用于修复所述修复字节;
攻击脚本生成模块,用于根据所述泄露字节、所述修复字节及所述修复函数,生成攻击脚本;
输入模块,用于将所述攻击脚本输入至所述用户程序,以进行漏洞利用分析,对漏洞利用进行修复。
9.一种漏洞利用分析设备,包括:处理器、存储器,所述存储器中存储代码,所述处理器运行所述存储器中存储的代码,以执行如权利要求1-7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1-7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310473727.0A CN116204891B (zh) | 2023-04-28 | 2023-04-28 | 漏洞利用分析方法、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310473727.0A CN116204891B (zh) | 2023-04-28 | 2023-04-28 | 漏洞利用分析方法、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116204891A CN116204891A (zh) | 2023-06-02 |
CN116204891B true CN116204891B (zh) | 2023-07-14 |
Family
ID=86515987
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310473727.0A Active CN116204891B (zh) | 2023-04-28 | 2023-04-28 | 漏洞利用分析方法、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116204891B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117097513A (zh) * | 2023-07-14 | 2023-11-21 | 博智安全科技股份有限公司 | 一种自定义漏洞检测和漏洞利用系统及方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112615848A (zh) * | 2020-12-14 | 2021-04-06 | 北京达佳互联信息技术有限公司 | 漏洞修复状态检测方法及系统 |
CN113158180A (zh) * | 2021-04-06 | 2021-07-23 | 中国汽车技术研究中心有限公司 | 汽车网络安全威胁场景构建方法、装置、设备和可读存储介质 |
CN115361203A (zh) * | 2022-08-18 | 2022-11-18 | 长春嘉诚信息技术股份有限公司 | 一种基于分布式扫描引擎的脆弱性分析方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2372034A1 (en) * | 2002-02-14 | 2003-08-14 | Cloakware Corporation | Foiling buffer-overflow and alien-code attacks by encoding |
-
2023
- 2023-04-28 CN CN202310473727.0A patent/CN116204891B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112615848A (zh) * | 2020-12-14 | 2021-04-06 | 北京达佳互联信息技术有限公司 | 漏洞修复状态检测方法及系统 |
CN113158180A (zh) * | 2021-04-06 | 2021-07-23 | 中国汽车技术研究中心有限公司 | 汽车网络安全威胁场景构建方法、装置、设备和可读存储介质 |
CN115361203A (zh) * | 2022-08-18 | 2022-11-18 | 长春嘉诚信息技术股份有限公司 | 一种基于分布式扫描引擎的脆弱性分析方法 |
Non-Patent Citations (1)
Title |
---|
浅谈自动化漏洞利用的发展;刘凯;;信息系统工程(第06期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN116204891A (zh) | 2023-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7665138B2 (en) | Detecting method and architecture thereof for malicious codes | |
US20090271867A1 (en) | Virtual machine to detect malicious code | |
US8918885B2 (en) | Automatic discovery of system integrity exposures in system code | |
US20200193031A1 (en) | System and Method for an Automated Analysis of Operating System Samples, Crashes and Vulnerability Reproduction | |
US20200012793A1 (en) | System and Method for An Automated Analysis of Operating System Samples | |
CN113761519B (zh) | 一种Web应用程序的检测方法、装置及存储介质 | |
CN116204891B (zh) | 漏洞利用分析方法、设备及存储介质 | |
CN109684829B (zh) | 一种虚拟化环境中服务调用监控方法和系统 | |
CN111427792A (zh) | 测试方法、装置、电子设备和可读存储介质 | |
Xu et al. | BofAEG: Automated stack buffer overflow vulnerability detection and exploit generation based on symbolic execution and dynamic analysis | |
Peiró et al. | Detecting stack based kernel information leaks | |
US9003236B2 (en) | System and method for correct execution of software based on baseline and real time information | |
CN111367505A (zh) | 一种JavaScript源代码保密方法、装置、设备及存储介质 | |
US20240012886A1 (en) | Code flow protection with error propagation | |
CN109344577A (zh) | 一种art下使用自修改技术进行软件保护的方法 | |
CN111858307B (zh) | 模糊测试方法和设备 | |
US11238162B1 (en) | Method for systematically and objectively assessing system security risk | |
Xu et al. | Memory Error Detection Based on Dynamic Binary Translation | |
Shafana et al. | Exploitation analysis of buffer overflow in SL-Mail Server | |
Inácio et al. | Corca: An automatic program repair tool for checking and removing effectively c flaws | |
US20160344753A1 (en) | Method for instruction set morphing to inhibit malicious code injection | |
CN111625784B (zh) | 一种应用的反调试方法、相关装置及存储介质 | |
Teplyuk et al. | Study of security flaws in the Linux kernel by fuzzing | |
Grechko et al. | Secure software developing recommendations | |
Peiró et al. | An analysis on the impact and detection of kernel stack infoleaks |
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 |