CN104462981B - 漏洞检测方法及装置 - Google Patents

漏洞检测方法及装置 Download PDF

Info

Publication number
CN104462981B
CN104462981B CN201310416757.4A CN201310416757A CN104462981B CN 104462981 B CN104462981 B CN 104462981B CN 201310416757 A CN201310416757 A CN 201310416757A CN 104462981 B CN104462981 B CN 104462981B
Authority
CN
China
Prior art keywords
source code
variable
hole detection
initial value
loophole
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
CN201310416757.4A
Other languages
English (en)
Other versions
CN104462981A (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.)
Shenzhen Tencent Computer Systems Co Ltd
Original Assignee
Shenzhen Tencent Computer Systems 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 Shenzhen Tencent Computer Systems Co Ltd filed Critical Shenzhen Tencent Computer Systems Co Ltd
Priority to CN201310416757.4A priority Critical patent/CN104462981B/zh
Publication of CN104462981A publication Critical patent/CN104462981A/zh
Application granted granted Critical
Publication of CN104462981B publication Critical patent/CN104462981B/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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/034Test or assess a computer or a system

Abstract

本发明公开一种漏洞检测方法及装置,该方法包括:接收需进行漏洞检测的源代码;对接收的源代码进行词法语法分析并配置漏洞检测的检测点,得到对应的语法树信息;解析语法树信息中配置的各检测点,获取与各检测点相关联的变量,并通过解析获取的变量,得到该变量的初始值;分析获取的变量的初始值为外部可控输入时,检测出源代码存在漏洞;相较于现有技术中,过于依赖测试用例的动态黑盒测试,以及通过审计工具进行扫描检测的静态白盒测试,本发明实施例具体提高漏洞检测准确率的有益效果,降低了对源代码进行检测时的漏洞误报率。

Description

漏洞检测方法及装置
技术领域
本发明涉及计算机领域,还涉及信息安全技术,尤其涉及一种漏洞检测方法及装置。
背景技术
随着Web应用如社交网站、电子商城、门户网站、论坛的普及和迅速发展,Web应用的安全问题也备受关注。由于承载web应用的硬件设备、软件系统、通信协议等的具体实现或系统安全策略上存在缺陷,web应用在开发过程中也会不可避免地存在漏洞。
目前常见的检测Web漏洞的方法主要是动态黑盒测试和静态白盒扫描;动态黑盒测试是通过构造大量畸形的测试用例,访问Web页面,然后判断返回Web页面的内容;根据返回的Web页面中存在的数据,检测该Web页面是否存在漏洞。静态白盒扫描是通过深入程序内部代码结构,利用PHP(Professional Hypertext Preprocessor,服务器端编程语言)代码审计工具并结合设定的检测规则进行检查。动态黑盒测试过于依赖测试用例,因此很容易造成漏报;而现有的静态白盒通过审计工具进行扫描来检测漏洞的方式,对漏洞的误报率也很高。
发明内容
鉴于此,有必要提供一种漏洞检测方法及装置,以降低对源代码进行漏洞检测的误报率。
本发明实施例公开了一种漏洞检测方法,包括以下步骤:
接收需进行漏洞检测的源代码;
对接收的所述源代码进行词法语法分析并配置漏洞检测的检测点,得到对应的语法树信息;
解析所述语法树信息中配置的各检测点,获取与各检测点相关联的变量,并通过解析获取的所述变量得到所述变量的初始值;
分析获取的所述变量的初始值为外部可控输入时,检测出所述源代码存在漏洞。
本发明实施例还公开一种漏洞检测装置,包括:
代码接收模块,用于接收需进行漏洞检测的源代码;
漏洞检测模块,用于:
接收的所述源代码进行词法语法分析并配置漏洞检测的检测点,得到对应的语法树信息;解析所述语法树信息中配置的各检测点,获取与各检测点相关联的变量,并通过解析获取的所述变量得到所述变量的初始值;分析获取的所述变量的初始值为外部可控输入时,检测出所述源代码存在漏洞。
本发明实施例接收需进行漏洞检测的源代码;对接收的所述源代码进行词法语法分析并配置漏洞检测的检测点,得到对应的语法树信息;解析所述语法树信息中配置的各检测点,获取与各检测点相关联的变量,并通过解析获取的所述变量得到所述变量的初始值;分析获取的所述变量的初始值为外部可控输入时,检测出所述源代码存在漏洞;相较于现有技术中,过于依赖测试用例的动态黑盒测试,以及通过审计工具进行扫描检测的静态白盒测试,本发明实施例具体提高漏洞检测准确率的有益效果,降低了对源代码进行检测时的漏洞误报率。
附图说明
图1是本发明漏洞检测方法第一实施例流程示意图;
图2是本发明漏洞检测方法第二实施例流程示意图;
图3是本发明漏洞检测装置第一实施例功能模块示意图;
图4是本发明漏洞检测装置第二实施例功能模块示意图。
本发明实施例目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
以下结合说明书附图及具体实施例进一步说明本发明的技术方案。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1是本发明漏洞检测方法第一实施例流程示意图;如图1所示,本发明漏洞检测方法包括以下步骤:
步骤S01、接收需进行漏洞检测的源代码;
漏洞检测程序接收需进行漏洞检测的源代码;本实施例中,漏洞检测程序接收需进行漏洞检测的源代码的方式包括但不限于:web页面提交的源代码,脚本批量提交的源代码以及由SVN(subversion,版本管理)工具定期提交的源代码。在实际的应用场景中,web页面提交的源代码通常是由PHP(Professional Hypertext Preprocessor,超级文本预处理语言)语言开发的源代码。脚本批量提交的源代码,支持脚本使用CURL的方式提交;其中,CURL是利用URL(Uniform Resource Locator,统一资源定位符)语法在命令行方式下工作的文件传输工具。SVN定期提交是在将SVN项目名称和路径存储在数据库中,每次定期扫描数据进行漏洞检测时,漏洞检测程序从数据库里取SVN项目路径,进行扫描,从而检测是否存在漏洞。
步骤S02、对接收的源代码进行词法语法分析并配置漏洞检测的检测点,得到对应的语法树信息;
漏洞检测程序通过编译原理的词法和语法分析过程,将需检测的源代码转成AST(Abstract Syntax Tree,抽象语法树);在转换的过程中,每个源文件对应一个AST文件,该AST文件可以为XML(XExrensible Markup Language,可扩展标记语言)格式的文件;而每个源文件中的源码语句将对应转换为AST的一个节点。比如,漏洞检测程序会将if(){}这一源码语句转成一个ifStmt的节点;if里面的子语句则对应转换到ifStmt下对应的子节点;其中,AST中的每个节点中保存了对应的源码信息,比如行信息等。在词法和语法的分析过程中,漏洞检测程序设置该源代码的触发点,即检测点。
本实施例中,对源代码进行词法、语法分析可以理解为:词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序可以使用Lex等工具自动生成。语法分析则是编译过程的一个逻辑阶段;语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”、“语句”、“表达式”等等。语法分析程序判断源程序在结构上是否正确,源程序的结构由上下文无关文法描述,语法分析程序可以用YACC(Yet Another Compiler,编译器编译器)等工具自动生成。
步骤S03、解析语法树信息中配置的各检测点,获取与各检测点相关联的变量,并通过解析获取的变量得到该变量的初始值;
步骤S04、分析获取的变量的初始值为外部可控输入时,检测出源代码存在漏洞。
漏洞检测程序读取AST信息,解析语法数信息中配置的各检测点;比如,获取各检测点与哪些变量相关,即哪些变量能够控制该检测点的行为,然后开始回溯这些变量从哪里来、被其他什么变量所影响等;漏洞检测程序按照上述规则一直回溯到该变量的最原始的起头,即获取到该变量的初始值。如果发现变量的初始值为外部可控输入,即该变量的初始值能够被使用者控制输入时,则认为存在漏洞。漏洞检测程序分析获取的该变量的初始值为外部可控输入,可以理解为:分析得出该变量的初始值能够被除了该源代码合法更改者之外的其他使用控制输入。比如,在web页面上输入用户名这一操作,设置的规则为输入的用户名只能为阿拉伯数字和英文字母;若能够被输入除阿拉伯数字和英文字母之外的其他字符作为用户名,则识别该web页面存在漏洞。
本实施例中,漏洞检测程序接收需进行漏洞检测的源代码包括:
漏洞检测程序接收到需进行漏洞检测的源代码后,将接收到的所有源代码按照预设过滤规则进行过滤;该预设过滤规则可以根据具体检测的源代码的类型进行设定,也可以由后台维护人员或者检测人员根据具体的代码检测需求进行设置;比如,设置该预设过滤规则为,将仅在企业内部使用而不外发的代码进行过滤;或者,设置某一类型的代码不进行过滤等;本实施例对预设过滤规则的具体内容不做限定。在具体的应用场景中,比如在某企业内部,对于确认的内部项目,将不进行后续的扫描,直接将内部项目所涉及的所有代码进行过滤,提升了代码的检测效率,节省了代码开发的处理时间。
本发明实施例接收需进行漏洞检测的源代码;对接收的所述源代码进行词法语法分析并配置漏洞检测的检测点,得到对应的语法树信息;解析所述语法树信息中配置的各检测点,获取与各检测点相关联的变量,并通过解析获取的所述变量得到所述变量的初始值;分析获取的所述变量的初始值为外部可控输入时,检测出所述源代码存在漏洞;相较于现有技术中,过于依赖测试用例的动态黑盒测试,以及通过审计工具进行扫描检测的静态白盒测试,本发明实施例具体提高漏洞检测准确率的有益效果,降低了对源代码进行检测时的漏洞误报率。
请继续参照图1,如图1所示,步骤S03中,漏洞检测程序解析语法树信息中配置的各检测点,获取与各检测点相关联的变量及变量的初始值的过程中,当漏洞检测程序获取到与某一检测点相关联的变量后,在回溯该检测点相关联的变量的初始值的过程中,若存在与预设安全规则匹配的操作,则识别该变量对应的检测点不存在漏洞,并停止回溯即停止继续获取所述变量的初始值的操作。比如,漏洞检测程序在回溯该检测点相关联变量的初始值的过程的同时,参考安全API(Application Programming Interface,应用程序接口)过滤规则,如果回溯过程中检测到某一中间环节有经过安全API过滤,则停止回溯,识别该变量对应的检测点不存在漏洞。
由于本实施例漏洞检测程序在回溯检测点变量的初始值的过程中,识别到存在与预设安全规则匹配的操作,并立刻停止继续获取该变量初始值的操作,因此在提高漏洞检测准确率的同时,进一步提高了漏洞检测的效率。
图2是本发明漏洞检测方法第二实施例流程示意图;本实施例与图1所述实施例的区别是,在步骤S04之后,增加了步骤S05;本实施例仅对步骤S05进行具体描述,有关本发明漏洞检测方法所涉及的其他步骤请参照相关实施例的具体描述,在此不再赘述。
基于图1所述实施例的具体描述,如图2所示,本发明漏洞检测方法在步骤S04、分析获取的变量的初始值为外部可控输入时,检测出源代码存在漏洞,之后还包括:
步骤S05、识别检测出的存在漏洞的源代码为误报时,将误报为存在漏洞的源代码进行标记,得到被标记为误报的漏洞数据。
漏洞检测程序分析获取的变量的初始值为外部可控输入,并检测出源代码存在漏洞后,将得到的漏洞数据进行上报。当检测人员得到上报的漏洞数据后,对所有漏洞数据进行核查,当识别检测出的存在漏洞的源代码为误报时,对误报的漏洞数据做出标识。漏洞检测程序响应检测人员的操作,识别检测人员检测出的误报漏洞数据,并将误报为存在漏洞的源代码进行标记,得到被标记为误报的漏洞数据。当该漏洞检测程序接收到需进行漏洞检测的源代码时,识别该源代码中是否存在有与预设过滤规则匹配的代码的同时,识别接收的源代码中是否存在被标记为误报的漏洞数据,并将识别出的被标记为误报的漏洞数据剔除后,再对剩余的源代码进行漏洞检测。
进一步地,本实施例漏洞检测装置可以将进行漏洞检测后存在漏洞的源代码存储在数据库中,并自行对存在漏洞的源代码进行修复;在修后可对已修复漏洞后的源代码再次进行漏洞检测,如此循环,直至该源代码中不存在漏洞。
本实施例中漏洞检测程序识别需进行漏洞检测的源代码中是否存在被标记为误报的漏洞数据,并将识别出的被标记为误报的漏洞数据进行剔除,同样达到了降低漏洞误报率的有益效果;同时,提高了漏洞检测的效率。
基于上述实施例的具体描述,在具体的应用场景中,比如,用户A在开发完项目代码后,想验证项目代码是否存在安全漏洞,则将代码提交至漏洞检测程序,漏洞检测程序的检测结果为发现有几个漏洞;则漏洞检测程序根据提交代码测试时登记的负责人的信息,将检测出的漏洞结果发给该用户A。用户A仔细对每个漏洞结果进行确认,对于确定是系统误报的漏洞结果,进行误报标记,对于确定是漏洞的结果,可以根据提供的漏洞修复方案,对漏洞结果进行修复,修复完成后,再次将新的代码提交到至漏洞检测程序中,则此时漏洞检测程序检测出该项目代码的漏洞结果变成0,排除了代码安全隐患。
又比如,用户B是负责某个部门的项目代码的质检人员,想了解目前该部门所有项目的项目代码安全性,则可以根据该漏洞检测程序对应提交方式比如脚本提交方式,根据提供的脚步模板,编写简单的脚本,则漏洞检测程序便会定期对该部门所有项目的项目代码进行批量提交检测,对检测出有漏洞结果的项目,将结果推送给相关开发负责人,开发负责人对漏洞结果进行确认和标记,并完成修复,下一次定期扫描时,修复过和标记误报的结果将不再报出,系统误报率降低。
图3是本发明漏洞检测装置第一实施例功能模块示意图;如图3所示,本发明漏洞检测装置包括:代码接收模块01和漏洞检测模块02。
代码接收模块01,用于接收需进行漏洞检测的源代码;
代码接收模块01接收需进行漏洞检测的源代码;本实施例中,代码接收模块01接收需进行漏洞检测的源代码的方式包括但不限于:web页面提交的源代码,脚本批量提交的源代码以及由SVN工具定期提交的源代码。在实际的应用场景中,web页面提交的源代码通常是由PHP语言开发的源代码。脚本批量提交的源代码,支持脚本使用CURL的方式提交;其中,CURL是利用URL语法在命令行方式下工作的文件传输工具。SVN定期提交是在将SVN项目名称和路径存储在数据库中,每次定期扫描数据进行漏洞检测时,漏洞检测程序从数据库里取SVN项目路径,进行扫描,从而检测是否存在漏洞。
漏洞检测模块02,用于:接收的所述源代码进行词法语法分析并配置漏洞检测的检测点,得到对应的语法树信息;解析所述语法树信息中配置的各检测点,获取与各检测点相关联的变量及所述变量的初始值;分析获取的所述变量的初始值为外部可控输入时,检测出所述源代码存在漏洞。
漏洞检测模块02通过编译原理的词法和语法分析过程,将需检测的源代码转成AST;在转换的过程中,每个源文件对应一个AST文件,该AST文件可以为XML格式的文件;而每个源文件中的源码语句将对应转换为AST的一个节点。比如,漏洞检测模块02会将if(){}这一源码语句转成一个ifStmt的节点;if里面的子语句则对应转换到ifStmt下对应的子节点;其中,AST中的每个节点中保存了对应的源码信息,比如行信息等。在词法和语法的分析过程中,漏洞检测模块02设置该源代码的触发点,即检测点。
本实施例中,漏洞检测模块02对源代码进行词法、语法分析可以理解为:词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序可以使用Lex等工具自动生成。语法分析则是编译过程的一个逻辑阶段;语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”、“语句”、“表达式”等等。语法分析程序判断源程序在结构上是否正确,源程序的结构由上下文无关文法描述,语法分析程序可以用YACC(Yet Another Compiler,编译器编译器)等工具自动生成。
漏洞检测模块02读取AST信息,解析语法数信息中配置的各检测点;比如,漏洞检测模块02获取各检测点与哪些变量相关,即哪些变量能够控制该检测点的行为,然后开始回溯这些变量从哪里来、被其他什么变量所影响等;漏洞检测模块02按照上述规则一直回溯到该变量的最原始的起头,即获取到该变量的初始值。如果发现变量的初始值为外部可控输入,即该变量的初始值能够被使用者控制输入时,漏洞检测模块02则认为存在漏洞。漏洞检测模块02分析获取的该变量的初始值为外部可控输入,可以理解为:分析得出该变量的初始值能够被除了该源代码合法更改者之外的其他使用控制输入。比如,在web页面上输入用户名这一操作,设置的规则为输入的用户名只能为阿拉伯数字和英文字母;若能够被输入除阿拉伯数字和英文字母之外的其他字符作为用户名,漏洞检测模块02则识别该web页面存在漏洞。
本实施例中,代码接收模块01接收需进行漏洞检测的源代码包括:
代码接收模块01接收到需进行漏洞检测的源代码后,将接收到的所有源代码按照预设过滤规则进行过滤;该预设过滤规则可以根据具体检测的源代码的类型进行设定,也可以由后台维护人员或者检测人员根据具体的代码检测需求进行设置;比如,代码接收模块01设置该预设过滤规则为,将仅在企业内部使用而不外发的代码进行过滤;或者,代码接收模块01设置某一类型的代码不进行过滤等;本实施例对预设过滤规则的具体内容不做限定。在具体的应用场景中,比如在某企业内部,对于确认的内部项目,将不进行后续的扫描,代码接收模块01直接将内部项目所涉及的所有代码进行过滤,提升了代码的检测效率,节省了代码开发的处理时间。
本发明实施例接收需进行漏洞检测的源代码;对接收的所述源代码进行词法语法分析并配置漏洞检测的检测点,得到对应的语法树信息;解析所述语法树信息中配置的各检测点,获取与各检测点相关联的变量及所述变量的初始值;分析获取的所述变量的初始值为外部可控输入时,检测出所述源代码存在漏洞;相较于现有技术中,过于依赖测试用例的动态黑盒测试,以及通过审计工具进行扫描检测的静态白盒测试,本发明实施例具体提高漏洞检测准确率的有益效果,降低了对源代码进行检测时的漏洞误报率。
请继续参照图3,如图3所示,漏洞检测模块02解析语法树信息中配置的各检测点,获取与各检测点相关联的变量及变量的初始值的过程中,当漏洞检测模块02获取到与某一检测点相关联的变量后,在回溯该检测点相关联的变量的初始值的过程中,若存在与预设安全规则匹配的操作,则识别该变量对应的检测点不存在漏洞,并停止回溯即停止继续获取所述变量的初始值的操作。比如,漏洞检测模块02在回溯该检测点相关联变量的初始值的过程的同时,参考安全API过滤规则,如果回溯过程中检测到某一中间环节有经过安全API过滤,漏洞检测模块02则停止回溯,识别该变量对应的检测点不存在漏洞。
由于本实施例漏洞检测程序在回溯检测点变量的初始值的过程中,识别到存在与预设安全规则匹配的操作,并立刻停止继续获取该变量初始值的操作,因此在提高漏洞检测准确率的同时,进一步提高了漏洞检测的效率。
图4是本发明漏洞检测装置第二实施例功能模块示意图;本实施例与图3所述实施例的区别是,增加了误报标记模块03。本实施例仅对误报标记模块03进行具体描述,有关本发明漏洞检测装置所涉及的其他模块请参照相关实施例的具体描述,在此不再赘述。
基于图3所述实施例的具体描述,如图4所示,本发明漏洞检测装置还包括误报标记模块03;
误报标记模块03用于:识别检测出的存在漏洞的源代码为误报时,将误报为存在漏洞的所述源代码进行标记,得到被标记为误报的漏洞数据。
漏洞检测模块02分析获取的变量的初始值为外部可控输入,并检测出源代码存在漏洞后,将得到的漏洞数据进行上报。当检测人员得到上报的漏洞数据后,对所有漏洞数据进行核查,当识别检测出的存在漏洞的源代码为误报时,对误报的漏洞数据做出标识。误报标记模块03响应检测人员的操作,识别检测人员检测出的误报漏洞数据,并将误报为存在漏洞的源代码进行标记,得到被标记为误报的漏洞数据。当代码接收模块01接收到需进行漏洞检测的源代码时,代码接收模块01识别该源代码中是否存在有与预设过滤规则匹配的源代码的同时,识别接收的源代码中是否存在被标记为误报的漏洞数据,并将识别出的被标记为误报的漏洞数据剔除后,再对剩余的源代码进行漏洞检测。
进一步地,本实施例漏洞检测装置可以将进行漏洞检测后存在漏洞的源代码存储在数据库中,并自行对存在漏洞的源代码进行修复;在修后可对已修复漏洞后的源代码再次进行漏洞检测,如此循环,直至该源代码中不存在漏洞。
本实施例中漏洞检测程序识别需进行漏洞检测的源代码中是否存在被标记为误报的漏洞数据,并将识别出的被标记为误报的漏洞数据进行剔除,同样达到了降低漏洞误报率的有益效果;同时,提高了漏洞检测的效率。
基于上述实施例的具体描述,在具体的应用场景中,比如,用户A在开发完项目代码后,想验证项目代码是否存在安全漏洞,则将代码提交至本发明实施例所述的漏洞检测装置,漏洞检测装置的检测结果为发现有几个漏洞;则漏洞检测装置根据提交代码测试时登记的负责人的信息,将检测出的漏洞结果发给该用户A。用户A仔细对每个漏洞结果进行确认,对于确定是系统误报的漏洞结果,进行误报标记,对于确定是漏洞的结果,可以根据提供的漏洞修复方案,对漏洞结果进行修复,修复完成后,再次将新的代码提交到至漏洞检测装置中,则此时漏洞检测装置检测出该项目代码的漏洞结果变成0,排除了代码安全隐患。
又比如,用户B是负责某个部门的项目代码的质检人员,想了解目前该部门所有项目的项目代码安全性,则可以根据该漏洞检测装置对应提交方式比如脚本提交方式,根据提供的脚步模板,编写简单的脚本,则漏洞检测装置便会定期对该部门所有项目的项目代码进行批量提交检测,对检测出有漏洞结果的项目,将结果推送给相关开发负责人,开发负责人对漏洞结果进行确认和标记,并完成修复,下一次定期扫描时,修复过和标记误报的结果将不再报出,系统误报率降低。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在图3或图4所述漏洞检测装置的一个存储介质(如ROM/RAM、磁碟、光盘)中,图3或图4所述漏洞检测装置包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述仅为本发明的优选实施例,并非因此限制其专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (16)

1.一种漏洞检测方法,其特征在于,包括以下步骤:
接收需进行漏洞检测的源代码;
对接收的所述源代码进行词法语法分析并配置漏洞检测的检测点,得到对应的语法树信息;
解析所述语法树信息中配置的各检测点,获取与各检测点相关联的变量,并通过解析获取的所述变量得到所述变量的初始值;
分析获取的所述变量的初始值为外部可控输入时,检测出所述源代码存在漏洞;所述外部可控输入为除了源代码合法更改者之外的其他使用控制输入。
2.如权利要求1所述的方法,其特征在于,所述分析获取的所述变量的初始值为外部可控输入时,检测出所述源代码存在漏洞,包括:
分析获取的所述变量的初始值能够被使用者控制输入时,检测出所述变量对应的检测点存在漏洞。
3.如权利要求1或2所述的方法,其特征在于,所述获取与各检测点相关联的变量,并通过解析获取的所述变量得到所述变量的初始值,包括:
获取与某一检测点相关联的变量后,在获取所述变量的初始值的过程中,若存在与预设安全规则匹配的操作,则识别所述变量对应的检测点不存在漏洞,停止继续获取所述变量的初始值。
4.如权利要求1或2所述的方法,其特征在于,所述分析获取的所述变量的初始值为外部可控输入时,检测出所述源代码存在漏洞,之后还包括:
识别检测出的存在漏洞的源代码为误报时,将误报为存在漏洞的所述源代码进行标记,得到被标记的误报漏洞数据。
5.如权利要求4所述的方法,其特征在于,所述接收需进行漏洞检测的源代码,包括:
接收已剔除被标记的误报漏洞数据后的需进行漏洞检测的源代码。
6.如权利要求1或2所述的方法,其特征在于,所述接收需进行漏洞检测的源代码包括:
接收根据预设过滤规则过滤后的需进行漏洞检测的源代码。
7.如权利要求6所述的方法,其特征在于,所述接收根据预设过滤规则过滤后的需进行漏洞检测的源代码,包括:
接收到需进行漏洞检测的源代码后,按照预设过滤规则对接收到的源代码进行过滤,将符合所述预设过滤规则的源代码去除,仅保留不符合所述预设过滤规则的源代码,以对保留的源代码进行后续的漏洞检测。
8.如权利要求1或2所述的方法,其特征在于,所述接收需进行漏洞检测的源代码包括:
接收web页面和/或脚本和/或版本管理程序提交的需进行漏洞检测的源代码。
9.一种漏洞检测装置,其特征在于,包括:
代码接收模块,用于接收需进行漏洞检测的源代码;
漏洞检测模块,用于:
接收的所述源代码进行词法语法分析并配置漏洞检测的检测点,得到对应的语法树信息;解析所述语法树信息中配置的各检测点,获取与各检测点相关联的变量,并通过解析获取的所述变量得到所述变量的初始值;分析获取的所述变量的初始值为外部可控输入时,检测出所述源代码存在漏洞;所述外部可控输入为除了源代码合法更改者之外的其他使用控制输入。
10.如权利要求9所述的装置,其特征在于,所述漏洞检测模块用于:
分析获取的所述变量的初始值能够被使用者控制输入时,检测出所述变量对应的检测点存在漏洞。
11.如权利要求9或10所述的装置,其特征在于,所述漏洞检测模块还用于:
获取与某一检测点相关联的变量后,在获取所述变量的初始值的过程中,若存在与预设安全规则匹配的操作,则识别所述变量对应的检测点不存在漏洞,停止继续获取所述变量的初始值。
12.如权利要求9或10所述的装置,其特征在于,还包括误报标记模块;
所述误报标记模块用于:识别检测出的存在漏洞的源代码为误报时,将误报为存在漏洞的所述源代码进行标记,得到被标记为误报的漏洞数据。
13.如权利要求12所述的装置,其特征在于,所述代码接收模块还用于:
接收已剔除被标记的误报漏洞数据后的需进行漏洞检测的源代码。
14.如权利要求9或10所述的装置,其特征在于,所述代码接收模块还用于:
接收根据预设过滤规则过滤后的需进行漏洞检测的源代码。
15.如权利要求14所述的装置,其特征在于,所述代码接收模块还用于:
接收到需进行漏洞检测的源代码后,按照预设过滤规则对接收到的源代码进行过滤,将符合所述预设过滤规则的源代码去除,仅保留不符合所述预设过滤规则的源代码,以对保留的源代码进行后续的漏洞检测。
16.如权利要求9或10所述的装置,其特征在于,所述代码接收模块还用于:
接收web页面和/或脚本和/或版本管理程序提交的需进行漏洞检测的源代码。
CN201310416757.4A 2013-09-12 2013-09-12 漏洞检测方法及装置 Active CN104462981B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310416757.4A CN104462981B (zh) 2013-09-12 2013-09-12 漏洞检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310416757.4A CN104462981B (zh) 2013-09-12 2013-09-12 漏洞检测方法及装置

Publications (2)

Publication Number Publication Date
CN104462981A CN104462981A (zh) 2015-03-25
CN104462981B true CN104462981B (zh) 2019-01-04

Family

ID=52909006

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310416757.4A Active CN104462981B (zh) 2013-09-12 2013-09-12 漏洞检测方法及装置

Country Status (1)

Country Link
CN (1) CN104462981B (zh)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106295346B (zh) * 2015-05-20 2022-08-30 深圳市腾讯计算机系统有限公司 一种应用漏洞检测方法、装置及计算设备
CN106874767B (zh) * 2015-12-14 2019-10-01 阿里巴巴集团控股有限公司 一种程序漏洞的检测方法、终端及服务器
CN107038378B (zh) * 2016-11-14 2018-06-26 平安科技(深圳)有限公司 应用软件安全漏洞检测方法和系统
CN107038115B (zh) * 2016-11-14 2018-05-04 平安科技(深圳)有限公司 应用软件安全漏洞检测方法和系统
CN107169360A (zh) * 2017-06-14 2017-09-15 广东电力发展股份有限公司沙角A电厂 一种源代码安全漏洞的检测方法及系统
US11017094B2 (en) * 2018-01-03 2021-05-25 Beijing Jingdong Shangke Information Technology Co., Ltd. System and method for java deserialization vulnerability detection
CN109344611B (zh) * 2018-09-06 2024-02-27 天翼安全科技有限公司 应用的访问控制方法、终端设备及介质
CN109358564B (zh) * 2018-09-19 2022-05-20 珠海格力电器股份有限公司 一种检测组态软件的方法及装置、计算机可读存储介质
CN111310190A (zh) * 2018-12-11 2020-06-19 中国航天科工集团六院情报信息研究中心 一种网络安全漏洞的检测方法
CN110532782B (zh) * 2019-07-30 2023-02-21 平安科技(深圳)有限公司 一种任务执行程序的检测方法、装置及存储介质
CN110753047B (zh) * 2019-10-16 2022-02-11 杭州安恒信息技术股份有限公司 一种减少漏洞扫描误报的方法
CN111125708B (zh) * 2019-11-25 2021-12-03 吉林亿联银行股份有限公司 漏洞检测方法及装置
CN111222141B (zh) * 2019-12-31 2021-10-19 广东为辰信息科技有限公司 一种汽车电控单元代码漏洞分析方法和系统
CN111428244A (zh) * 2020-03-25 2020-07-17 中国建设银行股份有限公司 源码测试方法及装置
CN111367819A (zh) * 2020-03-30 2020-07-03 中国建设银行股份有限公司 代码扫描过滤方法及装置
CN114257389A (zh) * 2020-09-22 2022-03-29 北京安全共识科技有限公司 一种基于语法分析的反射型xss检测方法及装置
CN112100626B (zh) * 2020-09-24 2023-06-09 成都信息工程大学 一种提高源代码审计漏洞命中率开发方法
CN112464237B (zh) * 2020-11-26 2023-10-31 中国工商银行股份有限公司 一种静态代码安全诊断方法及装置
CN114117426B (zh) * 2021-11-16 2023-03-24 中国人民解放军国防科技大学 一种web应用漏洞检测方法及系统
CN114579969B (zh) * 2022-05-05 2022-08-23 北京邮电大学 漏洞检测方法、装置、电子设备及存储介质
CN115879868B (zh) * 2022-09-09 2023-07-21 南京审计大学 一种专家系统与深度学习相融合的智能合约安全审计方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1694411A (zh) * 2004-07-16 2005-11-09 北京航空航天大学 具有二级决策内核的网络入侵检测系统及其报警优化方法
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
CN101562537A (zh) * 2009-05-19 2009-10-21 华中科技大学 分布式自优化入侵检测报警关联系统
CN101661543A (zh) * 2008-08-28 2010-03-03 西门子(中国)有限公司 软件源代码安全漏洞的检测方法及检测装置
CN102955914A (zh) * 2011-08-19 2013-03-06 百度在线网络技术(北京)有限公司 一种源文件安全漏洞的检测方法及检测装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101964025B (zh) * 2009-07-23 2016-02-03 北京神州绿盟信息安全科技股份有限公司 Xss检测方法和设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1694411A (zh) * 2004-07-16 2005-11-09 北京航空航天大学 具有二级决策内核的网络入侵检测系统及其报警优化方法
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
CN101661543A (zh) * 2008-08-28 2010-03-03 西门子(中国)有限公司 软件源代码安全漏洞的检测方法及检测装置
CN101562537A (zh) * 2009-05-19 2009-10-21 华中科技大学 分布式自优化入侵检测报警关联系统
CN102955914A (zh) * 2011-08-19 2013-03-06 百度在线网络技术(北京)有限公司 一种源文件安全漏洞的检测方法及检测装置

Also Published As

Publication number Publication date
CN104462981A (zh) 2015-03-25

Similar Documents

Publication Publication Date Title
CN104462981B (zh) 漏洞检测方法及装置
CN104077140B (zh) 用于持续集成的自动化编译方法和编译装置
US8875110B2 (en) Code inspection executing system for performing a code inspection of ABAP source codes
CN102141956A (zh) 用于开发中的安全漏洞响应管理的方法和系统
US11307975B2 (en) Machine code analysis for identifying software defects
US11080171B2 (en) Test cycle optimization using contextual association mapping
CN105956410B (zh) 一种iec61850全模型的快速通用检测方法
CN112052172B (zh) 第三方通道的快速测试方法、装置和电子设备
US20200005089A1 (en) System and method for enrichment of ocr-extracted data
CN109857641A (zh) 对程序源文件进行缺陷检测的方法及装置
Mariani et al. Semantic matching of gui events for test reuse: are we there yet?
CN112416778A (zh) 测试用例推荐方法、装置和电子设备
CN112069069A (zh) 缺陷自动定位分析方法、设备及可读存储介质
CN109471637B (zh) 电路图的审查脚本调试方法
EP4170504A1 (en) Method and system for identifying static analysis alarms based on semantics of changed source code
CN112464237B (zh) 一种静态代码安全诊断方法及装置
CN111881055B (zh) 军用软件评测规范的Simulink模型设计方法
US11526775B2 (en) Automatically evaluating application architecture through architecture-as-code
Tsoukalas et al. An ontology-based approach for automatic specification, verification, and validation of software security requirements: Preliminary results
CN113672512A (zh) 代码检查规则生成方法、代码检查方法、装置、介质
WO2022122174A1 (en) Methods and apparatuses for troubleshooting a computer system
US20230244595A1 (en) Methods and systems for automated software testing
CN114185797A (zh) 前端代码检查方法、装置、电子设备及可读存储介质
CN116795700A (zh) 一种接口程序的异常故障的前置定位方法和装置
Mustafa et al. A New Consistency Validation Approach to Enhance the Quality of Functional Security Requirements for Secure Software

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant