漏洞检测方法及装置制造方法

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

【技术领域】
[0001]本发明涉及计算机领域,还涉及信息安全技术,尤其涉及一种漏洞检测方法及装置。

【背景技术】
[0002]随着Web应用如社交网站、电子商城、门户网站、论坛的普及和迅速发展,Web应用的安全问题也备受关注。由于承载web应用的硬件设备、软件系统、通信协议等的具体实现或系统安全策略上存在缺陷,web应用在开发过程中也会不可避免地存在漏洞。
[0003]目前常见的检测Web漏洞的方法主要是动态黑盒测试和静态白盒扫描;动态黑盒测试是通过构造大量畸形的测试用例,访问Web页面,然后判断返回Web页面的内容;根据返回的Web页面中存在的数据,检测该Web页面是否存在漏洞。静态白盒扫描是通过深入程序内部代码结构,利用PHP (Profess1nal Hypertext Preprocessor,服务器端编程语言)代码审计工具并结合设定的检测规则进行检查。动态黑盒测试过于依赖测试用例,因此很容易造成漏报;而现有的静态白盒通过审计工具进行扫描来检测漏洞的方式,对漏洞的误报率也很高。


【发明内容】

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

【专利附图】

【附图说明】
[0015]图1是本发明漏洞检测方法第一实施例流程示意图;
[0016]图2是本发明漏洞检测方法第二实施例流程示意图;
[0017]图3是本发明漏洞检测装置第一实施例功能模块示意图;
[0018]图4是本发明漏洞检测装置第二实施例功能模块示意图。
[0019]本发明实施例目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

【具体实施方式】
[0020]以下结合说明书附图及具体实施例进一步说明本发明的技术方案。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0021]图1是本发明漏洞检测方法第一实施例流程示意图;如图1所示,本发明漏洞检测方法包括以下步骤:
[0022]步骤S01、接收需进行漏洞检测的源代码;
[0023]漏洞检测程序接收需进行漏洞检测的源代码;本实施例中,漏洞检测程序接收需进行漏洞检测的源代码的方式包括但不限于:《eb页面提交的源代码,脚本批量提交的源代码以及由SVN (subvers1n,版本管理)工具定期提交的源代码。在实际的应用场景中,web页面提交的源代码通常是由PHP (Profess1nal Hypertext Preprocessor,超级文本预处理语言)语言开发的源代码。脚本批量提交的源代码,支持脚本使用CURL的方式提交;其中,QJRL是利用URL (Uniform Resource Locator,统一资源定位符)语法在命令行方式下工作的文件传输工具。SVN定期提交是在将SVN项目名称和路径存储在数据库中,每次定期扫描数据进行漏洞检测时,漏洞检测程序从数据库里取SVN项目路径,进行扫描,从而检测是否存在漏洞。
[0024]步骤S02、对接收的源代码进行词法语法分析并配置漏洞检测的检测点,得到对应的语法树信息;
[0025]漏洞检测程序通过编译原理的词法和语法分析过程,将需检测的源代码转成AST(Abstract Syntax Tree,抽象语法树);在转换的过程中,每个源文件对应一个AST文件,该AST文件可以为XML (XExrensible Markup Language,可扩展标记语言)格式的文件;而每个源文件中的源码语句将对应转换为AST的一个节点。比如,漏洞检测程序会将if O {}这一源码语句转成一个ifStmt的节点;if里面的子语句则对应转换到ifStmt下对应的子节点;其中,AST中的每个节点中保存了对应的源码信息,比如行信息等。在词法和语法的分析过程中,漏洞检测程序设置该源代码的触发点,即检测点。
[0026]本实施例中,对源代码进行词法、语法分析可以理解为:词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序可以使用Lex等工具自动生成。语法分析则是编译过程的一个逻辑阶段;语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”、“语句”、“表达式”等等。语法分析程序判断源程序在结构上是否正确,源程序的结构由上下文无关文法描述,语法分析程序可以用YACC (Yet Another Compiler,编译器编译器)等工具自动生成。
[0027]步骤S03、解析语法树信息中配置的各检测点,获取与各检测点相关联的变量,并通过解析获取的变量得到该变量的初始值;
[0028]步骤S04、分析获取的变量的初始值为外部可控输入时,检测出源代码存在漏洞。
[0029]漏洞检测程序读取AST信息,解析语法数信息中配置的各检测点;比如,获取各检测点与哪些变量相关,即哪些变量能够控制该检测点的行为,然后开始回溯这些变量从哪里来、被其他什么变量所影响等;漏洞检测程序按照上述规则一直回溯到该变量的最原始的起头,即获取到该变量的初始值。如果发现变量的初始值为外部可控输入,即该变量的初始值能够被使用者控制输入时,则认为存在漏洞。漏洞检测程序分析获取的该变量的初始值为外部可控输入,可以理解为:分析得出该变量的初始值能够被除了该源代码合法更改者之外的其他使用控制输入。比如,在web页面上输入用户名这一操作,设置的规则为输入的用户名只能为阿拉伯数字和英文字母;若能够被输入除阿拉伯数字和英文字母之外的其他字符作为用户名,则识别该web页面存在漏洞。
[0030]本实施例中,漏洞检测程序接收需进行漏洞检测的源代码包括:
[0031]漏洞检测程序接收到需进行漏洞检测的源代码后,将接收到的所有源代码按照预设过滤规则进行过滤;该预设过滤规则可以根据具体检测的源代码的类型进行设定,也可以由后台维护人员或者检测人员根据具体的代码检测需求进行设置;比如,设置该预设过滤规则为,将仅在企业内部使用而不外发的代码进行过滤;或者,设置某一类型的代码不进行过滤等;本实施例对预设过滤规则的具体内容不做限定。在具体的应用场景中,比如在某企业内部,对于确认的内部项目,将不进行后续的扫描,直接将内部项目所涉及的所有代码进行过滤,提升了代码的检测效率,节省了代码开发的处理时间。
[0032]本发明实施例接收需进行漏洞检测的源代码;对接收的所述源代码进行词法语法分析并配置漏洞检测的检测点,得到对应的语法树信息;解析所述语法树信息中配置的各检测点,获取与各检测点相关联的变量,并通过解析获取的所述变量得到所述变量的初始值;分析获取的所述变量的初始值为外部可控输入时,检测出所述源代码存在漏洞;相较于现有技术中,过于依赖测试用例的动态黑盒测试,以及通过审计工具进行扫描检测的静态白盒测试,本发明实施例具体提高漏洞检测准确率的有益效果,降低了对源代码进行检测时的漏洞误报率。
[0033]请继续参照图1,如图1所示,步骤S03中,漏洞检测程序解析语法树信息中配置的各检测点,获取与各检测点相关联的变量及变量的初始值的过程中,当漏洞检测程序获取到与某一检测点相关联的变量后,在回溯该检测点相关联的变量的初始值的过程中,若存在与预设安全规则匹配的操作,则识别该变量对应的检测点不存在漏洞,并停止回溯即停止继续获取所述变量的初始值的操作。比如,漏洞检测程序在回溯该检测点相关联变量的初始值的过程的同时,参考安全API (Applicat1n Programming Interface,应用程序接口)过滤规则,如果回溯过程中检测到某一中间环节有经过安全API过滤,则停止回溯,识别该变量对应的检测点不存在漏洞。
[0034]由于本实施例漏洞检测程序在回溯检测点变量的初始值的过程中,识别到存在与预设安全规则匹配的操作,并立刻停止继续获取该变量初始值的操作,因此在提高漏洞检测准确率的同时,进一步提高了漏洞检测的效率。
[0035]图2是本发明漏洞检测方法第二实施例流程示意图;本实施例与图1所述实施例的区别是,在步骤S04之后,增加了步骤S05 ;本实施例仅对步骤S05进行具体描述,有关本发明漏洞检测方法所涉及的其他步骤请参照相关实施例的具体描述,在此不再赘述。
[0036]基于图1所述实施例的具体描述,如图2所示,本发明漏洞检测方法在步骤S04、分析获取的变量的初始值为外部可控输入时,检测出源代码存在漏洞,之后还包括:
[0037]步骤S05、识别检测出的存在漏洞的源代码为误报时,将误报为存在漏洞的源代码进行标记,得到被标记为误报的漏洞数据。
[0038]漏洞检测程序分析获取的变量的初始值为外部可控输入,并检测出源代码存在漏洞后,将得到的漏洞数据进行上报。当检测人员得到上报的漏洞数据后,对所有漏洞数据进行核查,当识别检测出的存在漏洞的源代码为误报时,对误报的漏洞数据做出标识。漏洞检测程序响应检测人员的操作,识别检测人员检测出的误报漏洞数据,并将误报为存在漏洞的源代码进行标记,得到被标记为误报的漏洞数据。当该漏洞检测程序接收到需进行漏洞检测的源代码时,识别该源代码中是否存在有与预设过滤规则匹配的代码的同时,识别接收的源代码中是否存在被标记为误报的漏洞数据,并将识别出的被标记为误报的漏洞数据剔除后,再对剩余的源代码进行漏洞检测。
[0039]进一步地,本实施例漏洞检测装置可以将进行漏洞检测后存在漏洞的源代码存储在数据库中,并自行对存在漏洞的源代码进行修复;在修后可对已修复漏洞后的源代码再次进行漏洞检测,如此循环,直至该源代码中不存在漏洞。
[0040]本实施例中漏洞检测程序识别需进行漏洞检测的源代码中是否存在被标记为误报的漏洞数据,并将识别出的被标记为误报的漏洞数据进行剔除,同样达到了降低漏洞误报率的有益效果;同时,提高了漏洞检测的效率。
[0041]基于上述实施例的具体描述,在具体的应用场景中,比如,用户A在开发完项目代码后,想验证项目代码是否存在安全漏洞,则将代码提交至漏洞检测程序,漏洞检测程序的检测结果为发现有几个漏洞;则漏洞检测程序根据提交代码测试时登记的负责人的信息,将检测出的漏洞结果发给该用户A。用户A仔细对每个漏洞结果进行确认,对于确定是系统误报的漏洞结果,进行误报标记,对于确定是漏洞的结果,可以根据提供的漏洞修复方案,对漏洞结果进行修复,修复完成后,再次将新的代码提交到至漏洞检测程序中,则此时漏洞检测程序检测出该项目代码的漏洞结果变成0,排除了代码安全隐患。
[0042]又比如,用户B是负责某个部门的项目代码的质检人员,想了解目前该部门所有项目的项目代码安全性,则可以根据该漏洞检测程序对应提交方式比如脚本提交方式,根据提供的脚步模板,编写简单的脚本,则漏洞检测程序便会定期对该部门所有项目的项目代码进行批量提交检测,对检测出有漏洞结果的项目,将结果推送给相关开发负责人,开发负责人对漏洞结果进行确认和标记,并完成修复,下一次定期扫描时,修复过和标记误报的结果将不再报出,系统误报率降低。
[0043]图3是本发明漏洞检测装置第一实施例功能模块示意图;如图3所示,本发明漏洞检测装置包括:代码接收模块01和漏洞检测模块02。
[0044]代码接收模块01,用于接收需进行漏洞检测的源代码;
[0045]代码接收模块01接收需进行漏洞检测的源代码;本实施例中,代码接收模块01接收需进行漏洞检测的源代码的方式包括但不限于:《eb页面提交的源代码,脚本批量提交的源代码以及由SVN工具定期提交的源代码。在实际的应用场景中,web页面提交的源代码通常是由PHP语言开发的源代码。脚本批量提交的源代码,支持脚本使用CURL的方式提交;其中,CURL是利用URL语法在命令行方式下工作的文件传输工具。SVN定期提交是在将SVN项目名称和路径存储在数据库中,每次定期扫描数据进行漏洞检测时,漏洞检测程序从数据库里取SVN项目路径,进行扫描,从而检测是否存在漏洞。
[0046]漏洞检测模块02,用于:接收的所述源代码进行词法语法分析并配置漏洞检测的检测点,得到对应的语法树信息;解析所述语法树信息中配置的各检测点,获取与各检测点相关联的变量及所述变量的初始值;分析获取的所述变量的初始值为外部可控输入时,检测出所述源代码存在漏洞。
[0047]漏洞检测模块02通过编译原理的词法和语法分析过程,将需检测的源代码转成AST ;在转换的过程中,每个源文件对应一个AST文件,该AST文件可以为XML格式的文件;而每个源文件中的源码语句将对应转换为AST的一个节点。比如,漏洞检测模块02会将if O {}这一源码语句转成一个ifStmt的节点;if里面的子语句则对应转换到if Stmt下对应的子节点;其中,AST中的每个节点中保存了对应的源码信息,比如行信息等。在词法和语法的分析过程中,漏洞检测模块02设置该源代码的触发点,即检测点。
[0048]本实施例中,漏洞检测模块02对源代码进行词法、语法分析可以理解为:词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序可以使用Lex等工具自动生成。语法分析则是编译过程的一个逻辑阶段;语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”、“语句”、“表达式”等等。语法分析程序判断源程序在结构上是否正确,源程序的结构由上下文无关文法描述,语法分析程序可以用YACCXYet Another Compiler,编译器编译器)等工具自动生成。
[0049]漏洞检测模块02读取AST信息,解析语法数信息中配置的各检测点;比如,漏洞检测模块02获取各检测点与哪些变量相关,即哪些变量能够控制该检测点的行为,然后开始回溯这些变量从哪里来、被其他什么变量所影响等;漏洞检测模块02按照上述规则一直回溯到该变量的最原始的起头,即获取到该变量的初始值。如果发现变量的初始值为外部可控输入,即该变量的初始值能够被使用者控制输入时,漏洞检测模块02则认为存在漏洞。漏洞检测模块02分析获取的该变量的初始值为外部可控输入,可以理解为:分析得出该变量的初始值能够被除了该源代码合法更改者之外的其他使用控制输入。比如,在web页面上输入用户名这一操作,设置的规则为输入的用户名只能为阿拉伯数字和英文字母;若能够被输入除阿拉伯数字和英文字母之外的其他字符作为用户名,漏洞检测模块02则识别该web页面存在漏洞。
[0050]本实施例中,代码接收模块01接收需进行漏洞检测的源代码包括:
[0051]代码接收模块01接收到需进行漏洞检测的源代码后,将接收到的所有源代码按照预设过滤规则进行过滤;该预设过滤规则可以根据具体检测的源代码的类型进行设定,也可以由后台维护人员或者检测人员根据具体的代码检测需求进行设置;比如,代码接收模块01设置该预设过滤规则为,将仅在企业内部使用而不外发的代码进行过滤;或者,代码接收模块01设置某一类型的代码不进行过滤等;本实施例对预设过滤规则的具体内容不做限定。在具体的应用场景中,比如在某企业内部,对于确认的内部项目,将不进行后续的扫描,代码接收模块01直接将内部项目所涉及的所有代码进行过滤,提升了代码的检测效率,节省了代码开发的处理时间。
[0052]本发明实施例接收需进行漏洞检测的源代码;对接收的所述源代码进行词法语法分析并配置漏洞检测的检测点,得到对应的语法树信息;解析所述语法树信息中配置的各检测点,获取与各检测点相关联的变量及所述变量的初始值;分析获取的所述变量的初始值为外部可控输入时,检测出所述源代码存在漏洞;相较于现有技术中,过于依赖测试用例的动态黑盒测试,以及通过审计工具进行扫描检测的静态白盒测试,本发明实施例具体提高漏洞检测准确率的有益效果,降低了对源代码进行检测时的漏洞误报率。
[0053]请继续参照图3,如图3所示,漏洞检测模块02解析语法树信息中配置的各检测点,获取与各检测点相关联的变量及变量的初始值的过程中,当漏洞检测模块02获取到与某一检测点相关联的变量后,在回溯该检测点相关联的变量的初始值的过程中,若存在与预设安全规则匹配的操作,则识别该变量对应的检测点不存在漏洞,并停止回溯即停止继续获取所述变量的初始值的操作。比如,漏洞检测模块02在回溯该检测点相关联变量的初始值的过程的同时,参考安全API过滤规则,如果回溯过程中检测到某一中间环节有经过安全API过滤,漏洞检测模块02则停止回溯,识别该变量对应的检测点不存在漏洞。
[0054]由于本实施例漏洞检测程序在回溯检测点变量的初始值的过程中,识别到存在与预设安全规则匹配的操作,并立刻停止继续获取该变量初始值的操作,因此在提高漏洞检测准确率的同时,进一步提高了漏洞检测的效率。
[0055]图4是本发明漏洞检测装置第二实施例功能模块示意图;本实施例与图3所述实施例的区别是,增加了误报标记模块03。本实施例仅对误报标记模块03进行具体描述,有关本发明漏洞检测装置所涉及的其他模块请参照相关实施例的具体描述,在此不再赘述。
[0056]基于图3所述实施例的具体描述,如图4所示,本发明漏洞检测装置还包括误报标记模块03 ;
[0057]误报标记模块03用于:识别检测出的存在漏洞的源代码为误报时,将误报为存在漏洞的所述源代码进行标记,得到被标记为误报的漏洞数据。
[0058]漏洞检测模块02分析获取的变量的初始值为外部可控输入,并检测出源代码存在漏洞后,将得到的漏洞数据进行上报。当检测人员得到上报的漏洞数据后,对所有漏洞数据进行核查,当识别检测出的存在漏洞的源代码为误报时,对误报的漏洞数据做出标识。误报标记模块03响应检测人员的操作,识别检测人员检测出的误报漏洞数据,并将误报为存在漏洞的源代码进行标记,得到被标记为误报的漏洞数据。当代码接收模块01接收到需进行漏洞检测的源代码时,代码接收模块01识别该源代码中是否存在有与预设过滤规则匹配的源代码的同时,识别接收的源代码中是否存在被标记为误报的漏洞数据,并将识别出的被标记为误报的漏洞数据剔除后,再对剩余的源代码进行漏洞检测。
[0059]进一步地,本实施例漏洞检测装置可以将进行漏洞检测后存在漏洞的源代码存储在数据库中,并自行对存在漏洞的源代码进行修复;在修后可对已修复漏洞后的源代码再次进行漏洞检测,如此循环,直至该源代码中不存在漏洞。
[0060]本实施例中漏洞检测程序识别需进行漏洞检测的源代码中是否存在被标记为误报的漏洞数据,并将识别出的被标记为误报的漏洞数据进行剔除,同样达到了降低漏洞误报率的有益效果;同时,提高了漏洞检测的效率。
[0061]基于上述实施例的具体描述,在具体的应用场景中,比如,用户A在开发完项目代码后,想验证项目代码是否存在安全漏洞,则将代码提交至本发明实施例所述的漏洞检测装置,漏洞检测装置的检测结果为发现有几个漏洞;则漏洞检测装置根据提交代码测试时登记的负责人的信息,将检测出的漏洞结果发给该用户A。用户A仔细对每个漏洞结果进行确认,对于确定是系统误报的漏洞结果,进行误报标记,对于确定是漏洞的结果,可以根据提供的漏洞修复方案,对漏洞结果进行修复,修复完成后,再次将新的代码提交到至漏洞检测装置中,则此时漏洞检测装置检测出该项目代码的漏洞结果变成0,排除了代码安全隐串
■/Q1、O
[0062]又比如,用户B是负责某个部门的项目代码的质检人员,想了解目前该部门所有项目的项目代码安全性,则可以根据该漏洞检测装置对应提交方式比如脚本提交方式,根据提供的脚步模板,编写简单的脚本,则漏洞检测装置便会定期对该部门所有项目的项目代码进行批量提交检测,对检测出有漏洞结果的项目,将结果推送给相关开发负责人,开发负责人对漏洞结果进行确认和标记,并完成修复,下一次定期扫描时,修复过和标记误报的结果将不再报出,系统误报率降低。
[0063]需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
[0064]上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0065]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在图3或图4所述漏洞检测装置的一个存储介质(如R0M/RAM、磁碟、光盘)中,图3或图4所述漏洞检测装置包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
[0066]以上所述仅为本发明的优选实施例,并非因此限制其专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接运用在其他相关的【技术领域】,均同理包括在本发明的专利保护范围内。
【权利要求】
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页面和/或脚本和/或版本管理程序提交的需进行漏洞检测的源代码。
【文档编号】G06F21/57GK104462981SQ201310416757
【公开日】2015年3月25日 申请日期:2013年9月12日 优先权日:2013年9月12日
【发明者】王培伟, 王金锭, 谭晓光, 陈薇婷, 王岳 申请人:深圳市腾讯计算机系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1