一种代码审计方法、装置及存储介质与流程

文档序号:17160299发布日期:2019-03-20 00:36阅读:206来源:国知局
一种代码审计方法、装置及存储介质与流程

本申请涉及计算机安全的技术领域,尤其涉及一种代码审计方法、装置及存储介质。



背景技术:

在传统的代码审计过程中,人工挖掘是代码审计的主要方式,但随之而来的问题也很多,在测试中,安全研究人员首先需要花费大量的学习成本对源代码的编程语言以及框架做了解,然后才能进入审计阶段,其中花费的人力物力巨大,而且效率较低。

目前在实际的代码审计的工作中,一般以基于正则表达式的自动化代码审计为主,部分工具辅以语义分析辅助分析。但无论是什么类型的自动化代码审计工具,只要是基于静态源代码分析的工具,就需要在扫描分析初界定边界,当输入点为可控时,且没有被过滤函数处理时,漏洞存在。现在的普遍方式是建立基础的输入/过滤函数列表,然后再扫描过程中,当回溯到输入变量可控且没有被过滤函数处理时,漏洞存在。例如,匹配到跨站脚本攻击(xss,crosssitescripting)漏洞点,如果匹配到htmlspecialchars函数处理,则该漏洞点无效。但现在的php(hypertextpreprocessor缩写为php,是一种创建动态交互性站点的强有力的服务器端脚本语言)开发多使用php各类框架。如thinkphp框架使用input函数获取输入。对于常规的php代码静态审计工具来说,很难自适应各种各样的过滤/输入函数,会导致原来的结果大幅度的误报。因此,现有技术中存在着传统代码审计工具对现代框架适应性差的问题。



技术实现要素:

有鉴于此,本申请提供一种代码审计方法、装置及存储介质,用于解决现有技术中传统代码审计工具对现代框架适应性差的问题。

本申请提供了的一种代码审计方法,应用于服务器,包括:从项目代码中提取框架标识;从代码审计工具中提取与所述框架标识对应的多个第一输入函数,获得第一输入函数列表;从所述项目代码中提取多个第二输入函数;判断所述多个第二输入函数中每个第二输入函数是否存在于所述第一输入函数列表中;若是,则将所述第二输入函数对应的输入变量的位置判断为疑似漏洞。

可选地,在本申请实施例中,在所述将所述第二输入函数对应的输入变量的位置判断为疑似漏洞之后,还包括:从代码审计工具中提取与所述框架标识对应的多个第一过滤函数,获得第一过滤函数列表;从所述项目代码中提取多个第二过滤函数;判断所述多个第二过滤函数中每个第二过滤函数是否存在于所述第一过滤函数列表中;若否,

则将所述第二过滤函数对应的输入变量的位置判断为确认漏洞。

可选地,在本申请实施例中,在所述将所述第二过滤函数对应的输入变量的位置判断为确认漏洞之后,还包括:根据确定出的漏洞生成漏洞报告;将所述漏洞报告存储至所述服务器。

可选地,在本申请实施例中,在所述从项目代码中提取框架标识之前,还包括:从获得的框架源代码中分析和提取框架标识和至少一个第一输入函数;建立至少一个第一输入函数和框架标识的对应关系,并将至少一个第一输入函数和框架标识的对应关系、至少一个第一输入函数和框架标识存储至所述代码审计工具。

可选地,在本申请实施例中,在所述从项目代码中提取框架标识之前,还包括:从获得的框架源代码中分析和提取框架标识和至少一个第一过滤函数;建立至少一个第一过滤函数和框架标识的对应关系,并将至少一个第一过滤函数和框架标识的对应关系、至少一个第一过滤函数和框架标识存储至所述代码审计工具。

本申请还提供了一种代码审计装置,应用于服务器,所述代码审计装置包括:框架标识提取模块,用于从项目代码中提取框架标识;第一列表获得模块,用于从代码审计工具中提取与所述框架标识对应的多个第一输入函数,获得第一输入函数列表;输入函数提取模块,用于从所述项目代码中提取多个第二输入函数;输入函数判断模块,用于判断所述多个第二输入函数中每个第二输入函数是否存在于所述第一输入函数列表中;疑似漏洞判断模块,用于将所述第二输入函数对应的输入变量的位置判断为疑似漏洞。

可选地,在本申请实施例中,还包括:第二列表获得模块,用于从代码审计工具中提取与所述框架标识对应的多个第一过滤函数,获得第一过滤函数列表;过滤函数提取模块,用于从所述项目代码中提取多个第二过滤函数;过滤函数判断模块,用于判断所述多个第二过滤函数中每个第二过滤函数是否存在于所述第一过滤函数列表中;确认漏洞判断模块,用于将所述第二过滤函数对应的输入变量的位置判断为确认漏洞。

可选地,在本申请实施例中,还包括:第一分析提取模块,用于从获得的框架源代码中分析和提取框架标识和与至少一个第一输入函数;第一数据存储模块,用于建立至少一个第一输入函数和框架标识的对应关系,并将至少一个第一输入函数和框架标识的对应关系、至少一个第一输入函数和框架标识存储至所述代码审计工具。

可选地,在本申请实施例中,还包括:第二分析提取模块,用于从获得的框架源代码中分析和提取框架标识和至少一个第一过滤函数;第二数据存储模块,用于建立至少一个第一过滤函数和框架标识的对应关系,并将至少一个第一过滤函数和框架标识的对应关系、至少一个第一过滤函数和框架标识存储至所述代码审计工具。

本申请还提供了一种存储介质,该存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如上所述的方法。

本申请提供一种代码审计方法、装置及存储介质,通过从项目代码中提取框架标识后,然后从代码审计工具中提取与框架标识对应的多个第一输入函数作为第一输入函数列表,将多个第一输入函数与从项目代码中提取的多个第二输入函数进行对比;若多个第二输入函数中每个第二输入函数存在于所述第一输入函数列表中,将第二输入函数对应的输入变量的位置判断为疑似漏洞,通过使用框架标识来识别使用了框架的项目代码中的漏洞,极大地提高了对使用了框架项目代码的适应性。通过这种方式有效地解决了现有技术中传统代码审计工具对现代框架适应性差的问题。

为使本申请的上述目的和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚的说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1示出了本申请实施例提供的服务器结构示意图;

图2示出了本申请实施例提供的代码审计方法流程示意图;

图3示出了本申请实施例提供的代码审计方法步骤s150之后的流程示意图;

图4示出了本申请实施例提供的代码审计方法步骤s200之后的流程示意图;

图5示出了本申请实施例提供的代码审计方法步骤s100之前的流程示意图;

图6示出了本申请实施例提供的代码审计装置的第一视角结构示意图;

图7示出了本申请实施例提供的代码审计装置的第二视角结构示意图;

图8示出了本申请实施例提供的代码审计装置的第三视角结构示意图。

图标:101-服务器;100-代码审计装置;110-框架标识提取模块;120-第一列表获得模块;130-输入函数提取模块;140-输入函数判断模块;150-疑似漏洞判断模块;160-第二列表获得模块;170-过滤函数提取模块;180-过滤函数判断模块;190-确认漏洞判断模块;200-第一分析提取模块;210-第一数据存储模块;220-第二分析提取模块;230-第二数据存储模块;200-处理器;300-存储器;400-存储介质。

具体实施方式

本申请提供一种代码审计方法、装置及存储介质,用于解决现有技术中传统代码审计工具对现代框架适应性差的问题。其中,应用于服务器的方法和装置是基于同一创造构思的,由于方法及相应的装置和设备解决问题的原理相似,因此方法及相应的装置和设备的实施可以相互参见,重复之处不再赘述。

以下将对本申请中的部分用语进行解释说明,以便于本领域技术人员理解。

代码审计:是指一种基于源代码的静态漏洞挖掘方法,而在常规的php静态审计工具中,目前多使用正则表达式配合语义分析或其他技术,对敏感函数做匹配,然后匹配是否有过滤函数,最后匹配参数是否可控,如果条件都满足,则漏洞有效。

tamper:是一种自定义的拓展方式,通过设置对应框架的输入/过滤函数来添加到原生输入/过滤列表中,可以对原本的扫描范围拓展。

敏感函数:在php中,有许多涉及到漏洞产生的函数,例如eval等。这类函数的参数如果可控,又没有经过合理的过滤,就会导致漏洞。

动态服务器页面(asp,activeserverpages),是微软microsoft公司开发的服务器端脚本环境,可用来创建动态交互式网页并建立强大的web应用程序。当服务器收到对asp文件的请求时,它会处理包含在用于构建发送给浏览器的超文本置标语言(html,hypertextmarkuplanguage)网页文件中的服务器端脚本代码。除服务器端脚本代码外,asp文件也可以包含文本、html(包括相关的客户端脚本)和com组件调用。

php(外文名:php:hypertextpreprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。

jsp全名为javaserverpages,中文名叫java服务器页面,其根本是一个简化的servlet设计,它是由sunmicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。

网页后门(webshell),又称网站的后门工具,webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器web目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。顾名思义,“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作权限。webshell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限。由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具。

另外,需要理解的是,在本申请的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或者暗示相对重要性,也不能理解为指示或者暗示顺序。

下面结合附图,对本申请的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。

请参见图1,图1示出了本申请实施例提供的服务器结构示意图。本申请提供了的一种服务器101,包括:处理器200和存储器300,存储器300存储有处理器200可执行的机器可读指令,机器可读指令被处理器200执行时执行如第一实施例的方法。

在具体的实施过程中,对卷积神经网络(convolutionalneuralnetwork,cnn)的相关计算可以用图形处理器(graphicsprocessingunit,gpu)进行加速,因此,该服务器还可以包括图形处理器。此外,在使用分布式计算框架时需要使用通信接口,该服务器还可以包括通讯与网络扩展卡、光纤卡或者多串口通信卡等部件,在此不再赘述。

请参见图1,本申请提供了的一种存储介质400,该存储介质400上存储有计算机程序,该计算机程序被处理器200运行时执行如第一实施例的方法。

本领域技术人员可以理解,图1中示出的服务器的结构并不构成对该设备的限定,本申请实施例提供的设备可以包括比图示更多或者更少的部件,或者不同的部件布置。

第一实施例

请参见图2,图2示出了本申请实施例提供的代码审计方法流程示意图。本申请提供了的一种代码审计方法,应用于服务器,包括:

步骤s110:从项目代码中提取框架标识。

其中,这里的项目代码可以是php源代码,也可以是其他类型的源代码,例如java源代码、asp源代码等,这里的源代码类型不应理解为对本申请的限制。

步骤s120:从代码审计工具中提取与框架标识对应的多个第一输入函数,获得第一输入函数列表。

其中,从代码审计工具中提取与框架标识对应的多个第一输入函数,php代码中有一些原生输入函数,当变量回溯到$_get、$_post、$_cookie、以及新加的request->param()时,可以认为变量可控。当然,在其他框架中也有其他框架定义的输入函数,例如,在thinkphp的开发文档中,写到开发者应使用request类param方法及input助手函数来获取变量。

步骤s130:从项目代码中提取多个第二输入函数。

其中,在从项目代码中提取多个第二输入函数之前,首先需要对目标源代码进行析,可以通过扫描关键点代码。这里举两个例子,一是wordpress的代码以及thinkphp框架的代码。

步骤s140:判断多个第二输入函数中每个第二输入函数是否存在于第一输入函数列表中。

其中,在执行判断操作时,例如,可以判断多个第二输入函数中每个第二输入函数是否存在于第一输入函数列表中,第一输入函数列表例如可以是包括esc_html函数和esc_url函数的列表。在代码审计之前,已经将esc_html函数和esc_url函数放入在第一输入函数列表中,这是因为在wordpress的插件开发官方文档中,明确写到使用esc_html、esc_url等不同位置的过滤函数过滤输入内容,才能将内容输出,否则会导致安全问题。因此,需要将esc_html函数和esc_url函数放入在第一输入函数列表中。

步骤s150:若多个第二输入函数中每个第二输入函数存在于第一输入函数列表中,将第二输入函数对应的输入变量的位置判断为疑似漏洞。

其中,这里判断为疑似漏洞的原因是,输入函数是影响扫描漏洞的范围的,只有判断输入变量是可控的才算做疑似漏洞,如果该输入变量的范围被过滤函数有效的控制了,那么就不是漏洞,相反如果没有被过滤函数有效地控制,那么就确认是漏洞。

请参见图3,图3示出了本申请实施例提供的代码审计方法步骤s150之后的流程示意图。可选地,在本申请实施例中,在将第二输入函数对应的输入变量的位置判断为疑似漏洞之后,还包括:

步骤s160:从项目代码中提取框架标识。

其中,这里获取的目标php源代码可以是任何途径的源代码,可以是工具输入的,或者是用户提交的。这里的框架标识是指wordpress的配置文件wp-config.php,或者wp-config-sample.php中带有特定标识符,能够识别该项目代码使用的框架标识,例如wordpress。

步骤s170:从代码审计工具中提取与框架标识对应的多个第一过滤函数,获得第一过滤函数列表。

其中,这里的代码审计工具用于将提交的代码进行漏洞检测和分析,代码审计工具例如开源的cobra,闭源的checkmarx等,因此,这里的代码审计工具的内容和形式不应理解为对本申请的限制。

步骤s180:从项目代码中提取多个第二过滤函数。

其中,项目代码可以先提交至版本控制管理模块;再从版本控制管理模块中获得项目代码。也可以先提交至文件管理目录下,再从文件管理目录中获得项目代码。因此,这里的项目代码获得的方式和途径不应理解为对本申请的限制。

步骤s190:判断多个第二过滤函数中每个第二过滤函数是否存在于第一过滤函数列表中。

其中,第一过滤函数列表包括但不限于:htmlspecialchars函数、esc_html函数、esc_url函数、input函数和strip_tags函数。因此,这里的第一过滤函数列表具体的内容不应理解为对本申请的限制。

步骤s200:若多个第二过滤函数中每个第二过滤函数不存在于第一过滤函数列表中,将第二过滤函数对应的输入变量的位置判断为确认漏洞。

其中,在对比之前已经将各个框架中的过滤函数,以tamper的方式放入第一过滤函数列表中,因此,这里能够得出第二过滤函数是否存在于第一过滤函数列表中的结果,也就是说,能够获知第二过滤函数对应的输入变量的位置是否为漏洞。

请参见图4,图4示出了本申请实施例提供的代码审计方法步骤s200之后的流程示意图。可选地,在本申请实施例中,在将第二过滤函数对应的输入变量的位置判断为确认漏洞之后,还包括:

步骤s210:根据确定出的漏洞生成漏洞报告。

步骤s220:将漏洞报告存储至服务器。

其中,可以获得一个漏洞,将该漏洞生成漏洞报告,也可以获得多个漏洞,并将多个漏洞生成漏洞报告;总之根据确定出的漏洞生成漏洞报告,可以将将漏洞报告存储至服务器,也可以将将漏洞报告发送给用户或者管理人员,因此,这里的将漏洞报告处理的具体方式不应理解为对本申请的限制。

请参见图5,图5示出了本申请实施例提供的代码审计方法步骤s100之前的流程示意图。可选地,在本申请实施例中,在从项目代码中提取框架标识之前,还包括:

步骤s70:从获得的框架源代码中分析和提取框架标识和至少一个第一输入函数。

步骤s80:建立至少一个第一输入函数和框架标识的对应关系,并将至少一个第一输入函数和框架标识的对应关系、至少一个第一输入函数和框架标识存储至代码审计工具。

请参见图5,可选地,在本申请实施例中,在从项目代码中提取框架标识之前,还包括:

步骤s90:从获得的框架源代码中分析和提取框架标识和至少一个第一过滤函数。

步骤s100:建立至少一个第一过滤函数和框架标识的对应关系,并将至少一个第一过滤函数和框架标识的对应关系、至少一个第一过滤函数和框架标识存储至代码审计工具。

需要说明的是,这里以wordpress框架和thinkphp框架为例进行说明,在wordpress的插件开发官方文档中,明确写到使用esc_html、esc_url等不同位置的过滤函数过滤输入内容,才能将内容输出,否则会导致安全问题。在thinkphp的开发文档中,写到开发者应使用request类param方法及input助手函数来获取变量。例如,在审计这两类的框架代码时,我们就可以直接把新的输入函数/过滤函数加入到php原生的输入/过滤列表中。例如当变量回溯到$_get、$_post、$_cookie、以及新加的request->param()时,可以认为变量可控。编写相应的拓展tamper,并添加到使用的工具插件中。

第二实施例

请参见图6,图6示出了本申请实施例提供的代码审计装置的第一视角结构示意图。本申请提供了的一种代码审计装置100,应用于服务器,代码审计装置100包括:

框架标识提取模块110,用于从项目代码中提取框架标识。

第一列表获得模块120,用于从代码审计工具中提取与框架标识对应的多个第一输入函数,获得第一输入函数列表。

输入函数提取模块130,用于从项目代码中提取多个第二输入函数。

输入函数判断模块140,用于判断多个第二输入函数中每个第二输入函数是否存在于第一输入函数列表中。

疑似漏洞判断模块150,用于将第二输入函数对应的输入变量的位置判断为疑似漏洞。

请参见图7,图7示出了本申请实施例提供的代码审计装置的第二视角结构示意图。可选地,在本申请实施例中,代码审计装置100还包括:

第二列表获得模块160,用于从代码审计工具中提取与框架标识对应的多个第一过滤函数,获得第一过滤函数列表。

过滤函数提取模块170,用于从项目代码中提取多个第二过滤函数。

过滤函数判断模块180,用于判断多个第二过滤函数中每个第二过滤函数是否存在于第一过滤函数列表中。

确认漏洞判断模块190,用于将第二过滤函数对应的输入变量的位置判断为确认漏洞。

请参见图8,图8示出了本申请实施例提供的代码审计装置的第三视角结构示意图。可选地,在本申请实施例中,代码审计装置100还包括:

第一分析提取模块200,用于从获得的框架源代码中分析和提取框架标识和与至少一个第一输入函数。

第一数据存储模块210,用于建立至少一个第一输入函数和框架标识的对应关系,并将至少一个第一输入函数和框架标识的对应关系、至少一个第一输入函数和框架标识存储至代码审计工具。

请参见图8,可选地,在本申请实施例中,代码审计装置100还包括:

第二分析提取模块220,用于从获得的框架源代码中分析和提取框架标识和至少一个第一过滤函数。

第二数据存储模块230,用于建立至少一个第一过滤函数和框架标识的对应关系,并将至少一个第一过滤函数和框架标识的对应关系、至少一个第一过滤函数和框架标识存储至代码审计工具。

本申请提供一种代码审计方法、装置及存储介质,通过从项目代码中提取框架标识后,然后从代码审计工具中提取与框架标识对应的多个第一输入函数作为第一输入函数列表,将多个第一输入函数与从项目代码中提取的多个第二输入函数进行对比;若多个第二输入函数中每个第二输入函数存在于第一输入函数列表中,将第二输入函数对应的输入变量的位置判断为疑似漏洞,通过使用框架标识来识别使用了框架的项目代码中的漏洞,极大地提高了对使用了框架项目代码的适应性。通过这种方式有效地解决了现有技术中传统代码审计工具对现代框架适应性差的问题。

以上仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1