会员体验
专利管家(专利管理)
工作空间(专利管理)
风险监控(情报监控)
数据分析(专利分析)
侵权分析(诉讼无效)
联系我们
交流群
官方交流:
QQ群: 891211   
微信请扫码    >>>
现在联系顾问~
首页 / 专利库 / 专利权 / 第I章 / 受理局 / 形式要求 / 缺陷 / 软件安全缺陷发现系统

软件安全缺陷发现系统

阅读:120发布:2021-03-03

IPRDB可以提供软件安全缺陷发现系统专利检索,专利查询,专利分析的服务。并且本发明公开了一种软件安全缺陷发现系统。使用本发明能够对待测软件进行静态分析、行为监测、模糊测试和渗透测试,测试方式完善,能够较完善、准确地发现软件的安全缺陷,且提高了检测速度。本发明首先进行静态分析,将其获得的安全缺陷数据按照设定的数据库格式存入缺陷数据库,然后采用行为监控模块、模糊测试模块和渗透测试模块分别对静态分析模块获得的安全缺陷进行检测,同时也对待测软件进行常规的检测,将导致系统行为异常或出现安全问题的系统调用序列、模糊测试用例或渗透测试用例名存入缺陷数据库中。本发明能够实现完整且强大的缺陷检测流程,检测流程自动化,能够减少安全缺陷测试人员的使用难度。,下面是软件安全缺陷发现系统专利的具体信息内容。

1.一种软件安全缺陷发现系统,其特征在于,包括静态测试模块、行为监控模块、模糊测试模块、渗透测试模块、行为监控知识库和缺陷数据库;其中,静态测试模块、行为监控模块、模糊测试模块、渗透测试模块分别与缺陷数据库连接,行为监控模块、模糊测试模块、渗透测试模块分别与静态测试模块连接,行为监控知识库与行为监测模块连接;

其中,静态分析模块内包括若干个静态分析插件,每一个静态分析插件分别对应着一个特定编程语言;静态分析模块在系统对被测软件的源代码目录进行递归扫描并获取源代码目录下所有文件后,根据文件名后缀将文件分类并过滤掉静态分析模块中静态分析插件不能检测的文件,然后针对各类型的源代码文件,选择对应的静态分析插件进行安全检测,得到安全缺陷数据;将安全缺陷数据按照设定的缺陷数据库格式进行格式化处理后存入缺陷数据库;

行为监控模块针对由静态分析模块获得的安全缺陷,对输入的待测软件进行行为监控,同时,也对待测软件进行其他的常规的行为监控,得到系统调用序列,并与行为监控知识库中的参考系统调用序列相匹配;将系统行为异常的系统调用序列存入缺陷数据库中;

模糊测试模块针对由静态分析模块获得的安全缺陷,对待测软件进行模糊测试,同时,也对待测软件进行其他的常规的模糊测试,将能够造成被测软件出现安全问题的模糊测试用例存入缺陷数据库中;

渗透测试模块针对由静态分析模块获得的安全缺陷,对待测软件进行渗透测试,同时,也对待测软件进行其他的常规的渗透测试;其中,利用一台Linux服务器运行metasploit软件对待测软件进行渗透测试;将能够造成被测软件出现安全问题的渗透测试用例名存入缺陷数据库中;其中,Linux服务器监听来自待测软件所在系统的请求,当监听到待测软件所在系统发送的待测软件及其所在 系统的信息后,调用metasploit完成对待测软件所在系统端口和服务的扫描,得到输出结果后,发送给待测软件所在系统。

2.如权利要求1所述的软件安全缺陷发现系统,其特征在于,所述缺陷数据库格式如下表所示:字段名 字段类型 字段含义

Plugin String 安全缺陷测试插件名

File String 被测程序(文件)路径

Severity Number 缺陷严重程度

Severify_desc String 与severity对应的缺陷严重程度的具体解释 Message String 缺陷描述信息

Source_type String 被测程序类型

Source_context String 缺陷上下文信息

Line_number Number 对源代码而言缺陷产生的行号

Custom String 自定义关于该条缺陷记录的说明

Time Date 缺陷记录生成时间 。

3.如权利要求1所述的软件安全缺陷发现系统,其特征在于,对静态分析插件中的静态分析规则进行规则扩展,扩展方法如下:采用“name”确定规则名;采用“file_type=A,B,…”指定本规则生效所针对的源代码文件编码类型为A,B,…;采用“grep=∧.C\(/i”表示调用规则C进行匹配;采用“category”表示本规则的分类;采用“category_link”链接到缺陷详情相关网址;采用“severity”表示安全缺陷严重程度;采用“description”对缺陷进行描述。

4.如权利要求1所述的软件安全缺陷发现系统,其特征在于,建立渗透知识库,将Linux服务器下metasploit针对不同平台下、不同版本的目标软件生成的渗透测试用例存入渗透知识库中,渗透检测模块直接调用渗透知识库中的渗 透测试用例去攻击被测软件,进行渗透测试。

说明书全文

软件安全缺陷发现系统

技术领域

[0001] 本发明涉及软件安全测试技术领域,具体涉及一种软件安全缺陷发现系统。

背景技术

[0002] 目前软件安全缺陷检测技术种类繁多且分散,主要的检测方法有静态分析、行为监控、模糊测试和渗透测试4类,但上述4类检测方法对软件的检测方式方法完全不一样。例如,利用静态分析检测软件的安全缺陷,通常是针对软件的源代码而言,也有一些工具能够将Java、.NET程序的可执行文件反编译后进行静态分析。目前的静态分析安全缺陷检测工具均是针对于一些主流的编程语言,且不同的编程语言都有其对应的静态分析工具。比如针对C/C++的有CppCheck、Antic,针对Java的有FindBugs、Jlint、PMD等,还有针对PHP的PHPLint以及针对JavaScript的JavaScriptLint。
[0003] 行为监控是对正在运行中的软件进行监控,记录软件运行时所有的底层系统调用。行为监控分为两个阶段:训练和匹配。训练阶段需要反复多次运行软件,并记录下软件运行时的系统调用序列,提取出其中的序列段形成知识库,序列段是由多个序列组成,代表软件运行中的一次操作,比如打开文件操作。知识库是可以在将来被反复多次利用的,训练次数越多,样本越全,知识库中序列段越精确。然后在实际测试软件的时候,监控本次软件的系统调用序列提取出序列段,并与知识库中序列段相匹配,未能成功匹配的序列段就可能产生安全隐患。
[0004] 模糊测试的核心思想是自动或半自动的生成随机数据输入到一个程序中,并监视程序异常,如崩溃,断言失败,以发现可能的诸如内存泄漏之类的程序错误。针对使用固定的协议或输入内容格式固定的软件,模糊测试通过随机生成的测试数据能够很有效的对软件可信数据的边界进行测试,进而发现那些正常使用时不容易探查到的安全缺陷。
[0005] 渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析,这个分析是从一个攻击者可能存在的位置来进行的,并且从这个位置有条件主动利用安全漏洞。
[0006] 首先,由于上述检测方法通常都是各自独立存在的,比如静态分析有很多相关的工具,多数编程语言都有一种对应的测试工具。这就造成了想要对软件进行安全缺陷检测的学习成本很大,对一个多语言混杂的大型项目来说,需要精通各种测试工具才能实现比较完整的安全缺陷检测,这也造成了在实际软件开发的过程中,很少对安全缺陷进行测试。
[0007] 其次,现有的缺陷检测工具生成的缺陷报告难懂且格式不统一,即使对一个软件项目进行了较为完整的安全缺陷检测,想要快速、简单地读其各类报告也将非常困难,并且由于缺陷报告分散也不便于对软件安全缺陷有一个整体的了解。
[0008] 再次,现在的缺陷检测通常只提供检测与查看功能,缺陷报告仍需手写,费时费力。
[0009] 现有的比较完善的安全缺陷发现系统非常少,目前虽然《软件安全漏洞检测装置和方法》(中国发明专利申请,公布号:CN 102541729A,公布日2012.7.4)提供了模糊测试和渗透测试的缺陷检测功能,并且配套有相应的缺陷管理功能来查看缺陷,但对于实际应用时检测软件安全而言,一两种检测方法得到的检测结果比较片面,不足以反应出软件整体安全状况,检测结果仍不完善。

发明内容

[0010] 有鉴于此,本发明提供了一种软件安全缺陷发现系统,能够对待测软件进行静态分析、行为监测、模糊测试和渗透测试,测试方式完善,能够较完善、准确地发现软件的安全缺陷,且提高了检测速度。
[0011] 本发明的软件安全缺陷发现系统,包括静态测试模块、行为监控模块、模糊测试模块、渗透测试模块、行为监控知识库和缺陷数据库;其中,静态测试模块、行为监控模块、模糊测试模块、渗透测试模块分别与缺陷数据库连接,行为监控模块、模糊测试模块、渗透测试模块分别与静态测试模块连接,行为监控知识库与行为监测模块连接;
[0012] 其中,静态分析模块内包括若干个静态分析插件,每一个静态分析插件分别对应着一个特定编程语言;静态分析模块在系统对被测软件的源代码目录进行递归扫描并获取源代码目录下所有文件后,根据文件名后缀将文件分类并过滤掉静态分析模块中静态分析插件不能检测的文件,然后针对各类型的源代码文件,选择对应的静态分析插件进行安全检测,得到安全缺陷数据;将安全缺陷数据按照设定的缺陷数据库格式进行格式化处理后存入缺陷数据库;
[0013] 行为监控模块针对由静态分析模块获得的安全缺陷,对输入的待测软件进行行为监控,同时,也对待测软件进行其他的常规的行为监控,得到系统调用序列,并与行为监控知识库中的参考系统调用序列相匹配;将系统行为异常的系统调用序列存入缺陷数据库中;
[0014] 模糊测试模块针对由静态分析模块获得的安全缺陷,对待测软件进行模糊测试,同时,也对待测软件进行其他的常规的模糊测试,将能够造成被测软件出现安全问题的模糊测试用例存入缺陷数据库中;
[0015] 渗透测试模块针对由静态分析模块获得的安全缺陷,对待测软件进行渗透测试,同时,也对待测软件进行其他的常规的渗透测试;其中,利用一台Linux服务器运行metasploit软件对待测软件进行渗透测试;将能够造成被测软件出现安全问题的渗透测试用例名存入缺陷数据库中;其中,Linux服务器监听来自待测软件所在系统的请求,当监听到待测软件所在系统发送的待测软件及其所在系统的信息后,调用metasploit完成对待测软件所在系统端口和服务的扫描,得到输出结果后,发送给待测软件所在系统。
[0016] 进一步地,所述缺陷数据库格式如下表所示:
[0017]字段名 字段类型 字段含义
Plugin String 安全缺陷测试插件名
File String 被测程序(文件)路径
Severity Number 缺陷严重程度
Severify_desc String 与severity对应的缺陷严重程度的具体解释
Message String 缺陷描述信息
Source_type String 被测程序类型
Source_context String 缺陷上下文信息
Line_number Number 对源代码而言缺陷产生的行号
Custom String 自定义关于该条缺陷记录的说明
Time Date 缺陷记录生成时间
[0018] 进一步地,对静态分析插件中的静态分析规则进行规则扩展,扩展方法如下:采用“name”确定规则名;采用“file_type=A,B,…”指定本规则生效所针对的源代码文件编码类型为A,B,…;采用“grep=/\.C\(/i”表示调用规则C进行匹配;采用“category”表示本规则的分类;采用“category_link”链接到缺陷详情相关网址;采用“severity”表示安全缺陷严重程度;采用“description”对缺陷进行描述。
[0019] 进一步地,建立渗透知识库,将Linux服务器下metasploit针对不同平台下、不同版本的目标软件生成的渗透测试用例存入渗透知识库中,渗透检测模块直接调用渗透知识库中的渗透测试用例去攻击被测软件,进行渗透测试。
[0020] 有益效果:
[0021] (1)本发明的软件安全缺陷发现系统,能够将静态分析、行为监测、模糊测试和渗透测试四种缺陷检测方法融入系统中,让系统有一个完整且强大的缺陷检测流程,并且对生成的大量繁杂的安全缺陷检测结果数据进行处理,使其数据格式统一,查看方便。同时,检测流程自动化,能够减少安全缺陷测试人员的使用难度。
[0022] (2)本发明的静态分析模块能够适用于多种编程语言,且使用方便,需要选择待测软件使用的编程语言和输入项目路径,便可自动进行静态分析,生成缺陷数据,并且实现了缺陷数据的格式统一,使得查看、管理缺陷更加容易。
[0023] (3)本发明对静态分析检测的安全缺陷静态分析规则进行补充,扩大、完善了单个静态分析插件的检测范围,使得不需要再单独调用其他静态分析插件进行检测,提高了检测效率。

附图说明

[0024] 图1为本发明系统组成结构示意图。

具体实施方式

[0025] 下面结合附图并举实施例,对本发明进行详细描述。
[0026] 本发明提供了一种软件安全缺陷发现系统(以下简称系统),如图1所示,包括行为静态测试模块、行为监控模块、模糊测试模块、渗透测试模块、知识库和缺陷数据库;其中,知识库包括行为监控知识库和渗透知识库,其中行为监控知识库用于存储行为监控模块进行软件训练产生的序列调用序列段,作为参考调用序列,渗透知识库用于存储用于渗透测试的渗透测试用例;缺陷数据库用于存储经整理、格式化后的缺陷数据。
[0027] 对待测软件的安全检测由监控模块、模糊测试模块、渗透测试模块、静态测试模块完成。其中,首先采用静态分析模块对待测软件进行静态安全检测,利用静态分析得到的静态安全缺陷结果,再使用渗透测试模块和模糊测试模块进行有针对性的安全检测,进一步确认静态分析出的可能导致安全缺陷的地方确实会引发安全缺陷。在渗透和模糊测试的过程中,也可以同时对软件进行行为监控,通过匹配序列来弥补渗透测试和模糊测试的不足,因为测试程序时通常需要将程序测崩溃才算安全缺陷,而有时安全缺陷并不会导致程序崩溃,实现原理靠的是对易引起安全问题的系统调用序列进行保护,类似杀毒软件,当被测程序运行过程中出现了容易引发安全问题的操作,则匹配到相应的系统调用序列段并记录下来。
[0028] 针对安全检测中各模块详述如下。
[0029] (1)静态分析模块
[0030] 静态分析模块内包括若干个静态分析插件,每一个静态分析插件分别对着一个特定编程语言。在检测准备阶段如果指定了源代码的编程语言,系统会从静态分析模块中直接调用相应的静态分析插件来对源代码进行安全缺陷检测;否则系统会通过源代码文件的后缀名判断需要调用的插件。由于被测的源程序可能混杂多种编程语言,如果按代码文件在文件夹下的排列顺序依次对每个代码文件调用相应的插件去检测,效率将会十分低下。而对于每个插件的调用,实际上是单独启用了一个进程,而Windows下进程非常占用资源,同时进程启动速度慢影响检测速度。
[0031] 因此在本系统中采取的策略是,先对被测软件的源代码目录进行递归扫描,获取该目录下所有文件(包括子目录)。然后按文件名后缀将文件分类,并过滤掉那些不能被静态分析模块检测的如txt、exe等文件类型。对于每种类型的源代码文件,选择对应的静态分析插件进行检测:对于支持目录递归检测的静态分析插件,直接调用该插件对整个项目进行递归的静态分析安全检测;对不支持的情况,则依次对单个源代码文件进行检测。
[0032] 在每一次调用插件对源代码进行安全检测后,将会得到安全缺陷数据的中间结果,然后对中间结果按照设定的缺陷数据库格式进行格式化处理,得到最终结果并存入缺陷数据库。
[0033] 其中,缺陷数据库的格式如表1所示。该格式将不同插件得到的检测结果中一些共有的安全缺陷的相关信息(比如所有的静态分析缺陷检测结果都有行号、缺陷严重程度信息)提取出来,并且对于没有对应上下文信息的,通过行号定位到发生安全缺陷的代码片段,获取其上下文信息保存起来。该格式保留了静态分析安全缺陷的相关信息,通过这些信息,可以实现复现原安全缺陷的作用,从而帮助安全检测人员调试修复、缺陷。
[0034] 表1缺陷数据库的格式说明
[0035]字段名 字段类型 字段含义
Plugin String 安全缺陷测试插件名
File String 被测程序(文件)路径
Severity Number 缺陷严重程度
Severify_desc String 与severity对应的缺陷严重程度的具体解释
Message String 缺陷描述信息
Source_type String 被测程序类型
Source_context String 缺陷上下文信息
Line_number Number 对源代码而言缺陷产生的行号
[0036]Custom String 自定义关于该条缺陷记录的说明
Time Date 缺陷记录生成时间
[0037] 其中,表1中的severity和severity_desc,即缺陷严重程度的分级,如表2所示。
[0038] 表2缺陷严重程度分级
[0039]
[0040] 对于采用目前现有的静态分析插件检测不到的安全缺陷,本发明提供了一套自定义规则的接口,补充完成静态分析检测。目前由于最简单的静态分析可以直接用字符串的匹配来实现,通过一些简单的规则来匹配出需要的信息,类似于Linux下Grep工具提供的功能,本发明参照Grep提供一种规则扩展机制,通过写一些简单的正则匹配,来完成对静态分析中某些安全缺陷静态分析规则的补充。例如JavascriptLint插件中没有querySelector的规则,本发明对JavascriptLint进行规则扩展,扩展方法如下表所示,从而使得JavascriptLint插件能够实现对querySelector的检测。其中,file_type指定该规则对于什么样类型的源代码文件生效;severity表示缺陷严重程度,用数字表示;description表示检测到出错后给出的警告;最重要的是grep字段,指定一个正则表达式来匹配源代码中的文本。这样一个简单的静态分析规则就添加好了,虽然他并未利用到抽象语法数、符号分析等,只是简单的正则匹配,但是配合已有的各种静态分析插件,已经能够满足绝大多数情况了。
[0041] 利于系统静态分析规则扩展机制补充对querySelector方法的检测如下,当系统初始化时,会自动扫描在扩展规则目录下所有的规则,并通过file_type将其分类,因此querySelector被分类为js和html。等到实际检测时,如果源代码为html或者js,那么首先调用其对应的静态分析检测插件,其次调用所有html或者js的扩展规则,querySelector规则也就得以调用,调用时其grep字段会用来对整个html或js文件做全文的正则匹配,匹配成功即导致静态分析缺陷。
[0042]
[0043]
[0044] (2)行为监控模块
[0045] 行为监控模块对待测软件进行行为监控,得到系统调用序列,并与行为监控知识库中的参考系统调用序列相匹配,匹配成功则说明系统行为正常,如果不成功则说明系统行为异常;同时,针对由静态分析模块获得的安全缺陷进行重点检测,将系统行为异常的系统调用序列存入缺陷数据库中。
[0046] 本发明中行为监控技术的核心是获取当前软件运行时产生的系统调用,然后通过序列匹配算法来检测可疑的软件异常行为。主要分为两个阶段,第一个阶段为样本采集及训练阶段,在这个阶段中,系统需要多次对运行着的程序进行采样,每一次采样为记录程序正常运行时的系统调用序列。然后对采集到的系统调用序列进行动态行为建模,每一次的行为比如打开文件操作在系统调用序列中反应为一段连续的系统调用序列,称为一个序列段,行为建模将总结出这样的序列段存入知识库。
[0047] 第二个阶段为最终的实际检测阶段。在这个阶段中首先需要做的是运行需要检测的软件并记录其系统调用信息并生成系统调用行为序列段。然后跟第一个阶段生成的知识库中序列段相匹配,不能匹配的则试做异常行为序列段,可能产生安全危害。
[0048] (3)模糊测试模块
[0049] 采用模糊测试模块对待测软件进行模糊测试,同时,针对由静态分析模块获得的安全缺陷进行重点检测,将能够造成被测软件出现安全问题的模糊测试用例存入缺陷数据库中。
[0050] 针对常用网络协议如http、ftp、smtp和常见的文本格式,对每一种协议或文本格式,按照其输入的数据的格式特点,构造随机输入字符串,对报文中有因为依赖其他字段需要计算才能得到值的字段比如checksum字段,检测到后自动计算后填入。
[0051] 然后再根据每个协议的特点,系统自动控制其会话的流程,比如smtp协议中,会话中mail from请求需要等待邮件服务器响应成功后,才能继续发送rcpt to请求,这些数据发送的流程控制就是本系统预先已经设定好了的。
[0052] 通过输入数据的生成和会话流程控制,就可以测试网络协议和文本格式了,但是有时候安全缺陷会使得被测程序崩溃掉而无法继续进行测试,因此,本系统还会在后台监控被测程序的运行进程,如果被测程序崩溃掉,则系统自动重启程序继续进行测试。
[0053] (4)渗透测试模块
[0054] 渗透测试模块利用一台Linux服务器运行metasploit对待测软件进行渗透测试;同时,针对由静态分析模块获得的安全缺陷进行重点检测,将能够造成被测软件出现安全问题的渗透测试用例名存入缺陷数据库中。
[0055] 本专利利用metasploit来辅助进行渗透测试,metasploit是一个渗透测试框架,它的操作方式十分繁琐复杂,用户在使用时需要大量的人机交互,因此不能够直接集成进系统中进行自动化操作。对于端口和服务的扫描,本系统将在远程运行一台Linux服务器上,并且在Linux服务器上监听来自待测软件所在本系统的请求。在安全检测时将被测软件及其所在系统的相关信息发送给Linux服务器,然后在Linux中调用metasploit来完成对目标系统端口和服务的扫描,得到输出结果后,再发送返回给本系统。
[0056] 对于metasploit原本利用漏洞对程序攻击的功能,由于条件限制,不能做到集成进系统实现自动化操作,要是完全利用metasploit,必须在远程Linux服务器端手动按步骤操作metasploit才能完成一次渗透测试,这跟本系统想要自动化安全检测流程的初衷不符合。因此本系统采取提前手动维护一个渗透缺陷库的方法,利用metasploit针对不同平台下、不同版本的目标软件生成渗透测试用例,然后在Windows中保存并直接利用这些渗透测试用例去攻击被测软件。举例来说,对于xxx版本的Word程序,首先人工操作利用metasploit对其进行渗透,metasploit会利用其漏洞库生成一个特殊的Word文档文件,如果用xxx版本的Word打开这个文件会造成Word崩溃。系统要做的就是将这个特殊的Word文件存入到系统的数据库中,包括对应的Word程序版本号等。下次对Word程序进行测试时,本系统通过Word版本号就匹配到了这个特殊的Word文件作为测试用例,用Word打开看其是否异常,完成渗透测试。
[0057] 本发明提供了四种不同的安全检测方法:静态分析、行为监控、模糊测试和渗透测试,是一套较为完整的软件安全检测流程,并且,静态分析模块能够支持多种编程语言,且缺陷数据格式统一,查看方便,因此本专利的缺陷检测的功能更完整、易用性更好。
[0058] 综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
高效检索全球专利

IPRDB是专利检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,专利查询、专利分析

电话:13651749426

侵权分析

IPRDB的侵权分析产品是IPRDB结合多位一线专利维权律师和专利侵权分析师的智慧,开发出来的一款特色产品,也是市面上唯一一款帮助企业研发人员、科研工作者、专利律师、专利分析师快速定位侵权分析的产品,极大的减少了用户重复工作量,提升工作效率,降低无效或侵权分析的准入门槛。

立即试用