CN110795739A - 一种基于动态调试的缓冲区漏洞检查系统和方法 - Google Patents

一种基于动态调试的缓冲区漏洞检查系统和方法 Download PDF

Info

Publication number
CN110795739A
CN110795739A CN201910908613.8A CN201910908613A CN110795739A CN 110795739 A CN110795739 A CN 110795739A CN 201910908613 A CN201910908613 A CN 201910908613A CN 110795739 A CN110795739 A CN 110795739A
Authority
CN
China
Prior art keywords
program
module
exception
target program
buffer
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
CN201910908613.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.)
Suzhou Wave Intelligent Technology Co Ltd
Original Assignee
Suzhou Wave Intelligent Technology 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 Suzhou Wave Intelligent Technology Co Ltd filed Critical Suzhou Wave Intelligent Technology Co Ltd
Priority to CN201910908613.8A priority Critical patent/CN110795739A/zh
Publication of CN110795739A publication Critical patent/CN110795739A/zh
Pending legal-status Critical Current

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

本发明提出了一种基于动态调试的缓冲区漏洞检查系统和方法,该系统包括异常捕捉模块和fuzzer模块;异常捕捉模块用于创建目标程序进程,实时监测程序运行状态并记录异常信息,fuzzer模块根据被测软件的特征构造畸形数据,然后采用TCP或UDP的方式发送给目标程序端口开始进行模糊测试,如果发现程序异常,则目标程序存在漏洞,否则,则继续进行模糊测试。异常捕捉模块和fuzzer模块之间通过全局变量来进行通信。基于本发明提出的系统,还提出了一种基于动态调试的缓冲区漏洞检查方法。本发明采用触发和捕获的方式,不仅可以实现自动化的漏洞检测,还可以记录现场信息。缩小检测范围,集中精力分析漏洞成因和利用方法。

Description

一种基于动态调试的缓冲区漏洞检查系统和方法
技术领域
本发明属于服务器安全技术领域,特别涉及一种基于动态调试的缓冲区漏洞检查系统和方法。
背景技术
随着IT行业的快速发展,计算机软件的种类和数量不断增多,软件中存在的漏洞也快速增长,这些漏洞给企业和用户带来了重大的经济损失。这些漏洞主要包括:缓冲区溢出漏洞、SQL注入漏洞、跨站脚本执行漏洞、整数溢出漏洞、格式化字符串漏洞等。在各类软件安全漏洞中缓冲区溢出可谓是最为普遍。
近几年虽然出现了很多保护机制,在遏制缓冲区溢出漏洞方面取得了非常大的成果,但是随着保护机制逐渐被人们了解,其弊端也不断显现。传统的漏洞检测技术一般都要借助静态分析工具来生成反汇编代码,通过反汇编代码来查找程序中存在的漏洞。这种分析方法很笨拙,需要阅读大量的反汇编代码,且不说阅读底层代码有多困难,单就工作量来说也是非常大。
发明内容
本发明提出了一种基于动态调试的缓冲区漏洞检查系统和方法,通过触发和捕获的方式,实现自动记录检测过程中触发的程序异常,从而定位漏洞。
为了实现上述目的,本发明提出了一种基于动态调试的缓冲区漏洞检查系统,该系统包括异常捕捉模块和fuzzer模块;
所述异常捕捉模块用于创建目标程序进程,实时监测程序运行状态并记录异常信息;所述fuzzer模块用于根据被测软件的特征构造畸形数据,然后将畸形数据发送到目标程序端口进行模糊测试,如果发现程序异常,则目标程序存在漏洞,否则继续进行模糊测试;
所述异常捕捉模块和所述fuzzer模块通过全局变量进行通信。
进一步的,所述异常捕捉模块采用API函数CreateProcessA()创建目标程序进程;所述异常捕捉模块采用连续调用WaitForDebugEvent()函数实时监测程序运行状态。
进一步的,所述异常捕捉模块实时监测的程序运行状态包括CPU寄存器的信息,系统堆栈的信息。
进一步的,所述异常捕捉模块为了获取异常发生是的CPU寄存器信息,增加提取寄存器信息的功能,采用GetThreadContext()函数获取寄存器信息,采用SetThreadContext()函数更改寄存器信息。
进一步的,所述fuzzer模块在进行漏洞检查之前,首先通过检测程序进程状态判断,判断程序是否处于活动状态,当process-active状态为true时,程序处于活动状态;当process-active状态为false时,则程序出现异常。
进一步的,所述fuzzer模块根据被测软件的特征构造random和unexpected的畸形数据,然后采用TCP或UDP的方式发送给目标程序端口开始进行模糊测试,如果发现程序异常,则目标程序存在漏洞,否则,则继续进行模糊测试。
本发明还提出了一种基于动态调试的缓冲区漏洞检查方法,是在一种基于动态调试的缓冲区漏洞检查系统上实现的,包括以下步骤:
S1:采用API函数CreateProcessA()创建目标程序进程;
S2:检测目标进程是否处于活动状态,如果目标进程处于活动状态,根据被测软件的特征构造random和unexpected的畸形数据,然后采用TCP或UDP的方式发送给目标程序端口开始进行模糊测试;如果发现程序异常,则目标程序存在漏洞,否则,则继续进行模糊测试;
S3:记录异常信息;所述异常信息包括异常发生的地址和CPU寄存器的状态。
进一步的,在执行步骤S1之前还包括,
S0:根据目标程序的特性填写fuzz规则,目标程序协议、端口号。
发明内容中提供的效果仅仅是实施例的效果,而不是发明所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:
本发明实施例提出了一种基于动态调试的缓冲区漏洞检查系统和方法,该系统包括异常捕捉模块和fuzzer模块;异常捕捉模块用于创建目标程序进程,实时监测程序运行状态并记录异常信息;采用API函数CreateProcessA()创建目标程序进程;采用连续调用WaitForDebugEvent()函数实时监测程序运行状态。程序运行状态包括CPU寄存器的信息,系统堆栈的信息。fuzzer模块根据被测软件的特征构造random和unexpected的畸形数据,然后采用TCP或UDP的方式发送给目标程序端口开始进行模糊测试,如果发现程序异常,则目标程序存在漏洞,否则,则继续进行模糊测试。本发明属于轻量级的检测系统,为了减少进程间通信,fuzzer模块和异常捕获模块都采用线程的方式创建,所以异常捕捉模块和fuzzer模块之间通过全局变量来进行通信。基于本发明提出的一种基于动态调试的缓冲区漏洞检查系统,还提出了一种基于动态调试的缓冲区漏洞检查方法。在执行该方法之前,首先根据目标程序的特性填写fuzz规则,目标程序协议、端口号。本发明采用触发和捕获的方式,不仅可以实现自动化的漏洞检测,还可以记录现场信息,帮助分析人员缩小检测范围,集中精力分析漏洞成因和利用方法,大大提高分析人员的工作效率。
附图说明
如图1给出了本发明实施例1提出的一种基于动态调试的缓冲区漏洞检查系统架构图;
如图2给出了本发明实施例1提出的一种基于动态调试的缓冲区漏洞检查方法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要理解的是,术语“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
实施例1
本发明实施例1提出了一种基于动态调试的缓冲区漏洞检查系统和方法,如图1给出了本发明实施例1提出的一种基于动态调试的缓冲区漏洞检查系统架构图;包括异常捕捉模块和fuzzer模块。
异常捕捉模块用于创建目标程序进程,实时监测程序运行状态并记录异常信息;fuzzer模块用于根据被测软件的特征构造畸形数据,然后将畸形数据发送到目标程序端口进行模糊测试,如果发现程序异常,则目标程序存在漏洞,否则继续进行模糊测试;验证目标程序对非正常输入的可靠性和稳定性。
异常捕捉模块和fuzzer模块通过全局变量进行通信。
其中,异常捕捉模块采用API函数CreateProcessA()创建目标程序进程;异常捕捉模块采用连续调用WaitForDebugEvent()函数实时监测程序运行状态。程序运行状态包括CPU寄存器的信息,系统堆栈的信息。为了获取异常发生是的CPU寄存器信息,程序还需要添加一个提取寄存器信息的功能。提供了API函数GetThreadContext()用来获取寄存器的信息,提供API函数SetThreadContext()用来更改CPU寄存器的信息。GetThreadContext()函数和SetThreadContext()函数的第一个参数都是线程句柄,第二个参数是一个结构体,用于保存CPU的各个寄存器的取值。
fuzzer模块的工作过程为构造一些random、unexpected的畸形数据,采用tcp或udp的方式发送给目标程序端口开始模糊测试,如果发现程序异常比如程序崩溃,说明目标程序可能存在漏洞,否则继续进行模糊测试。
fuzzer模块在进行漏洞检查之前,首先通过检测程序进程状态判断,判断程序是否处于活动状态,当process-active状态为true时,程序处于活动状态;当process-active状态为false时,则程序出现异常。
基于本发明提出的一种基于动态调试的缓冲区漏洞检查系统,还提出了一种基于动态调试的缓冲区漏洞检查方法。如图2所示,为本发明实施例1提出的一种基于动态调试的缓冲区漏洞检查方法。
在步骤S201中,根据目标程序的特性填写fuzz规则,以及目标程序协议、端口号等内容。
在步骤S202中,创建目标程序进程;采用API函数CreateProcessA()创建目标程序进程,采用连续调用WaitForDebugEvent()函数实时监测程序运行状态。
在步骤S203中,检测目标进程是否处于活动状态,如果目标进程处于活动状态,则执行步骤S204,否则,则返回步骤S202。每次测试前都要重新探测目标进程的活动状态,如果目标进程没有处于活动状态,则停止fuzzing测试。
通过检测程序进程状态判断,判断程序是否处于活动状态,当process-active状态为true时,程序处于活动状态;当process-active状态为false时,则程序出现异常。
在步骤S204中,根据被测软件的特征构造random和unexpected的畸形数据,然后采用TCP或UDP的方式发送给目标程序端口开始进行模糊测试。
在步骤S205中,判断是否发现程序异常,如果发现异常,则执行步骤S206,如果没有发现异常,则返回步骤S204。
在步骤S206中,捕获记录异常信息,其中异常信息包括异常发生的地址和cpu寄存器的状态,保存现场信息后重新启动目标程序的进程。
本发明不仅可以实现自动化的漏洞检测,还可以记录现场信息,帮助分析人员缩小检测范围,集中精力分析漏洞成因和利用方法,大大提高分析人员的工作效率。
以上内容仅仅是对本发明的结构所作的举例和说明,所属本技术领域的技术人员对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,只要不偏离发明的结构或者超越本权利要求书所定义的范围,均应属于本发明的保护范围。

Claims (8)

1.一种基于动态调试的缓冲区漏洞检查系统,其特征在于,包括异常捕捉模块和fuzzer模块;
所述异常捕捉模块用于创建目标程序进程,实时监测程序运行状态并记录异常信息;所述fuzzer模块用于根据被测软件的特征构造畸形数据,然后将畸形数据发送到目标程序端口进行模糊测试,如果发现程序异常,则目标程序存在漏洞,否则继续进行模糊测试;
所述异常捕捉模块和所述fuzzer模块通过全局变量进行通信。
2.根据权利要求1所述的一种基于动态调试的缓冲区漏洞检查系统,其特征在于,
所述异常捕捉模块采用API函数CreateProcessA()创建目标程序进程;所述异常捕捉模块采用连续调用WaitForDebugEvent()函数实时监测程序运行状态。
3.根据权利要求2所述的一种基于动态调试的缓冲区漏洞检查系统,其特征在于,所述异常捕捉模块实时监测的程序运行状态包括CPU寄存器的信息,系统堆栈的信息。
4.根据权利要求3所述的一种基于动态调试的缓冲区漏洞检查系统,其特征在于,所述异常捕捉模块为了获取异常发生是的CPU寄存器信息,增加提取寄存器信息的功能,采用GetThreadContext()函数获取寄存器信息,采用SetThreadContext()函数更改寄存器信息。
5.根据权利要求1所述的一种基于动态调试的缓冲区漏洞检查系统,其特征在于,所述fuzzer模块在进行漏洞检查之前,首先通过检测程序进程状态判断,判断程序是否处于活动状态,当process-active状态为true时,程序处于活动状态;当process-active状态为false时,则程序出现异常。
6.根据权利要求1所述的一种基于动态调试的缓冲区漏洞检查系统,其特征在于,所述fuzzer模块根据被测软件的特征构造random和unexpected的畸形数据,然后采用TCP或UDP的方式发送给目标程序端口开始进行模糊测试,如果发现程序异常,则目标程序存在漏洞,否则,则继续进行模糊测试。
7.一种基于动态调试的缓冲区漏洞检查方法,是在权利要求1至6任意一项所述的一种基于动态调试的缓冲区漏洞检查系统上实现的,其特征在于,包括以下步骤:
S1:采用API函数CreateProcessA()创建目标程序进程;
S2:检测目标进程是否处于活动状态,如果目标进程处于活动状态,根据被测软件的特征构造random和unexpected的畸形数据,然后采用TCP或UDP的方式发送给目标程序端口开始进行模糊测试;如果发现程序异常,则目标程序存在漏洞,否则,则继续进行模糊测试;
S3:记录异常信息;所述异常信息包括异常发生的地址和CPU寄存器的状态。
8.根据权利要求7所述的一种基于动态调试的缓冲区漏洞检查方法,其特征在于,在执行步骤S1之前还包括
S0:根据目标程序的特性填写fuzz规则,目标程序协议、端口号。
CN201910908613.8A 2019-09-25 2019-09-25 一种基于动态调试的缓冲区漏洞检查系统和方法 Pending CN110795739A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910908613.8A CN110795739A (zh) 2019-09-25 2019-09-25 一种基于动态调试的缓冲区漏洞检查系统和方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910908613.8A CN110795739A (zh) 2019-09-25 2019-09-25 一种基于动态调试的缓冲区漏洞检查系统和方法

Publications (1)

Publication Number Publication Date
CN110795739A true CN110795739A (zh) 2020-02-14

Family

ID=69439637

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910908613.8A Pending CN110795739A (zh) 2019-09-25 2019-09-25 一种基于动态调试的缓冲区漏洞检查系统和方法

Country Status (1)

Country Link
CN (1) CN110795739A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022134975A1 (zh) * 2020-12-24 2022-06-30 中科信息安全共性技术国家工程研究中心有限公司 一种基于注解的模糊测试方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080301647A1 (en) * 2007-06-01 2008-12-04 Microsoft Corporation Delivering Malformed Data for Fuzz Testing to Software Applications
CN101853200A (zh) * 2010-05-07 2010-10-06 北京大学 一种高效动态软件漏洞挖掘方法
CN105138459A (zh) * 2015-09-11 2015-12-09 北京金山安全软件有限公司 一种对软件程序进行测试的方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080301647A1 (en) * 2007-06-01 2008-12-04 Microsoft Corporation Delivering Malformed Data for Fuzz Testing to Software Applications
CN101853200A (zh) * 2010-05-07 2010-10-06 北京大学 一种高效动态软件漏洞挖掘方法
CN105138459A (zh) * 2015-09-11 2015-12-09 北京金山安全软件有限公司 一种对软件程序进行测试的方法及装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022134975A1 (zh) * 2020-12-24 2022-06-30 中科信息安全共性技术国家工程研究中心有限公司 一种基于注解的模糊测试方法

Similar Documents

Publication Publication Date Title
JP5430570B2 (ja) システムコールカバレッジ基準による試験スイート削減のための方法
CN106201892B (zh) 用于嵌入式软件的异常中断源定位检测方法
CN103699480B (zh) 一种基于java的web动态安全漏洞检测方法
US20110107307A1 (en) Collecting Program Runtime Information
CN1328638C (zh) Windows环境下的主机入侵检测方法
CN107483510B (zh) 一种提高Web应用层攻击检测准确率的方法及装置
US10474565B2 (en) Root cause analysis of non-deterministic tests
CN111259399B (zh) 用于web应用的动态检测漏洞攻击的方法及系统
CN104303189B (zh) 用于确定应用程序漏洞的系统及方法
CN112380542B (zh) 基于错误场景生成的物联网固件漏洞挖掘方法及系统
CN111291384A (zh) 漏洞扫描方法、装置及电子设备
CN113392409B (zh) 一种风险自动化评估预测方法及终端
CN113158197B (zh) 一种基于主动iast的sql注入漏洞检测方法、系统
CN110851352A (zh) 一种模糊测试系统及终端设备
Liu et al. IFIZZ: Deep-state and efficient fault-scenario generation to test IoT firmware
CN110795739A (zh) 一种基于动态调试的缓冲区漏洞检查系统和方法
CN114826639A (zh) 基于函数调用链跟踪的应用攻击检测方法及装置
CN117076301A (zh) 系统性能测试方法、装置及电子设备
US20240160737A1 (en) Methods and apparatus determining document behavior based on the reversing engine
CN110543759A (zh) 恶意文件检测方法、装置、计算机设备和存储介质
US11860765B2 (en) Method and system for fuzzing windows kernel by utilizing type information obtained through binary static analysis
CN115357895A (zh) 基于iast快速定位json框架中污点数据位置的方法及系统
CN114579342A (zh) 故障检测方法、装置、电子设备及存储介质
Khan et al. A hybrid monitoring of software design-level security specifications
CN111538986A (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: 20200214