CN103164331B - 一种应用程序的漏洞检测方法和装置 - Google Patents
一种应用程序的漏洞检测方法和装置 Download PDFInfo
- Publication number
- CN103164331B CN103164331B CN201110421457.6A CN201110421457A CN103164331B CN 103164331 B CN103164331 B CN 103164331B CN 201110421457 A CN201110421457 A CN 201110421457A CN 103164331 B CN103164331 B CN 103164331B
- Authority
- CN
- China
- Prior art keywords
- function
- dirty
- variable
- vulnerability
- risk
- 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
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 57
- 238000000034 method Methods 0.000 claims abstract description 103
- 230000008569 process Effects 0.000 claims abstract description 55
- 238000004140 cleaning Methods 0.000 claims abstract description 48
- 230000006870 function Effects 0.000 claims description 306
- 238000012546 transfer Methods 0.000 claims description 14
- 230000014759 maintenance of location Effects 0.000 claims description 8
- 206010033799 Paralysis Diseases 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 241000208340 Araliaceae Species 0.000 description 2
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 2
- 235000003140 Panax quinquefolius Nutrition 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 235000008434 ginseng Nutrition 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本申请提供了一种应用程序的漏洞检测方法及装置,包括:编译器将待检测的PHP应用程序的源代码编译为虚拟执行代码;虚拟执行器在执行所述虚拟执行代码的过程中进行漏洞检测:依据存储器中存储的脏变量集合、脏函数集合保留函数规则库和清理函数规则库,虚拟执行器识别当前生成的脏变量;依据所述脏变量和所述存储器中的漏洞规则库,虚拟执行器检测当前需调用的PHP函数是否存在漏洞。采用本申请实例公开的方法或者装置,可以使PHP源代码的漏洞检测更完全和准确,也避免了PHP应用程序在实际执行时导致执行应用程序的计算机系统被入侵或者瘫痪等。
Description
技术领域
本申请涉及网络数据处理领域,特别涉及一种应用程序的漏洞检测方法和装置。
背景技术
应用程序是指为了完成某项或某几项特定任务而被开发运行于操作系统之上的计算机程序。PHP(超级文本预处理语言,HypertextPreprocessor)应用程序是众多应用程序中的一种,PHP是一种HTML(超文本标记语言,HypertextMarkupLanguage)内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言。PHP是将应用程序嵌入HTML文档中去执行,因为在执行过程中需要保证正确无误,所以对PHP应用程序的漏洞检测就十分必要。
现有技术中有一种对应用程序进行漏洞检测的方法,以PHP应用程序为例,主要基于对应用程序源代码进行静态分析来实现的。根据输入的PHP源代码,先根据语法与语义抽象出足够多的信息得到抽象语法树,再根据规则库分析程序的结构与关键特征,从而获得程序的安全风险,再参照规则库的相关语法与语义进行比对,将最终确定的漏洞提交给用户。
但是现有技术因为是对源代码进行静态分析的,即是分析过程中不会执行该源代码,所以有些在源代码运行时才会产生的运行流程是无法捕捉到的,这就导致源代码中的有些必须要执行才能产生的漏洞无法全部检测得到,而源代码的漏洞如果检测不完全,就会导致应用程序在实际执行时导致执行应用程序的计算机系统被入侵或者瘫痪。
发明内容
本申请提供一种应用程序的漏洞检测方法,用以解决现有技术中由于源代码的漏洞检测不完全,导致的应用程序在实际执行时,影响执行应用程序的计算机系统运行性能,甚至会导致瘫痪的问题。
本申请还提供了一种应用程序的漏洞检测装置,用以保证上述方法在实际中的实现及应用。
为了解决上述问题,本申请公开了一种应用程序的漏洞检测方法,包括:
编译器将待检测的应用程序的源代码编译为虚拟执行代码;
虚拟执行器在执行所述虚拟执行代码的过程中进行漏洞检测,所述漏洞检测的过程包括:
依据存储器中存储的脏变量集合、脏函数集合、保留函数规则库和清理函数规则库,虚拟执行器识别当前生成的脏变量;所述脏函数的返回值为脏变量;
依据所述脏变量和所述存储器中的漏洞规则库,虚拟执行器检测当前调用函数的过程是否存在漏洞,所述漏洞规则库用于保存漏洞规则。
本申请公开了一种应用程序的漏洞检测装置,包括:
该装置包括编译器和虚拟执行器,所述虚拟执行器包括脏变量识别模块和漏洞检测模块;所述编译器,用于将待检测的应用程序的源代码编译为虚拟执行代码;
所述脏变量识别模块,用于依据存储器中存储的初始脏变量集合、脏函数集合、保留函数规则库和清理函数规则库,识别当前生成的脏变量;所述脏函数的返回值为脏变量;
所述漏洞检测模块,用于依据所述脏变量和所述存储器中的漏洞规则库,检测当前调用函数的过程是否存在漏洞,所述漏洞规则库用于保存漏洞规则。
与现有技术相比,本申请包括以下优点:
本申请实施例因为在虚拟执行过程中对漏洞进行检测,所以可以将源代码的漏洞检测的更完全,这样就会避免应用程序在实际执行时给执行应用程序的计算机系统带来更大的影响,也会借此而提升计算机系统运行的性能,避免执行应用程序的计算机系统的被入侵或者瘫痪。
进一步的,因为根据实际应用场景的不同,或者根据每次漏洞检测时待检测的漏洞情况不同,后续还可以通过对脏变量集合和脏函数集合的调整而使得每一次都能识别出符合实际场景需求的脏变量,并且进一步通过对漏洞规则的调整也能够使得检测出的漏洞及漏洞类型更能符合场景需求。
进一步的,本实施例中检测出的漏洞类型还能够更有利于调整漏洞规则,以及后续对源代码的调整。当然,实施本申请的任一产品并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请的一种超级文本预处理语言PHP应用程序的漏洞检测方法实施例1的流程图;
图2是在本申请方法实施例1中识别脏变量的流程图;
图3是本申请方法实施例1中步骤103的流程图;
图4本申请的一种超级文本预处理语言PHP应用程序的漏洞检测方法实施例2的流程图;
图5本申请的一种超级文本预处理语言PHP应用程序的漏洞检测方法实施例3的流程图;
图6是本申请的一种超级文本预处理语言PHP应用程序的漏洞检测装置实施例1的结构框图;
图7是本申请装置实施例1中识别模块621的结构框图;
图8是本申请装置实施例1中检测模块622的结构框图;
图9是本申请的一种超级文本预处理语言PHP应用程序的漏洞检测装置实施例2的结构框图;
图10是本申请的一种超级文本预处理语言PHP应用程序的漏洞检测装置实施例3的结构框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请可用于众多通用或专用的计算装置环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器装置、包括以上任何装置或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本申请的主要思想之一可以包括,因为对于应用程序的源代码来讲,一些漏洞只有在其执行的时候才会发现,所以本申请实施例采用虚拟执行的技术来检测源代码中存在的漏洞,具体可通过预先设置脏变量集合、脏函数集合、保留函数规则库和清理函数规则库的方式先识别出虚拟执行代码中的脏变量,再看在调用函数的过程是否这些脏变量作为实际参数传递给函数的风险形参,并结合风险形参与脏变量的逻辑与运算结果确定一个函数在调用过程中是否产生漏洞。可见本申请实施例因为在虚拟执行过程中对漏洞进行检测,所以可以将源代码的漏洞检测的更完全,这样就会避免应用程序在实际执行时给执行应用程序的计算机系统带来更大的影响,也会借此而提升计算机系统运行的性能,避免计算机系统的被入侵或者瘫痪。
参考图1,其示出了本申请一种超级文本预处理语言PHP应用程序的漏洞检测方法实施例1的流程图,所述方法可以应用于虚拟执行器上,可以包括以下步骤:
步骤101:编译器将待检测的应用程序的源代码编译为虚拟执行代码。
编译器(compiler)可以将源代码编译成一种精简语言,该语言作为一种中间语言,屏蔽了安全无关的代码部分,并将复杂的源代码中的语句拆分成多个精简指令,称为虚拟执行代码(VECODE,Virtual-executingCode),VECODE表示与实际的源代码并不对等,而是一种简化后的语义与实际代码相似的中间代码。但是,在安全漏洞扫描方面,VECODE又保留了安全相关的因素。
VECODE将复杂的源代码语句拆分成一条一条简化指令,但VECODE仍然是一种文本,虽然指令相比源代码已经精简了,但是语法仍然类似于源代码,即屏蔽了与漏洞评估无关的源代码中的指令,又保存了源代码行号与指令间的对应关系。VECODE包含了原有代码的每行的行号,因此,当后面的Executor执行到任一地方时,都能对应找到源代码相对应的代码片段。因为VECODE的执行目的只是为了漏洞检测,而不需要虚拟执行所有代码中的运算符,因此,与源代码相比,仅具有更少的运算符。本申请实施例所述的虚拟执行是以一种模拟的方式解释执行源代码。
在本申请实施例中,为了便于本领域技术人员更好的了解本申请的实施,均以PHP应用程序为例进行说明,但是本申请并不限于PHP应用程序。
在编译虚拟执行代码之后,虚拟执行器在执行所述虚拟执行代码的过程中,可以进行漏洞检测,所述漏洞检测的过程包括如下步骤102~步骤103。
步骤102:虚拟执行器依据存储器中存储的脏变量集合、脏函数集合、保留函数规则库和清理函数规则库,识别当前生成的脏变量;所述脏函数的返回值为脏变量。
本申请实施例中所提到的虚拟执行器可以是在开发PHP代码漏洞扫描中产生的工具,该工具称为PHPCHECK,可以通过虚拟执行PHP源代码来找出隐藏在源代码中的漏洞。
PHP源代码中的变量如果受污染,则该变量就成为一个脏变量(DirtyVariable),这里所述的受污染指的是该变量受到用户输入的影响,可由用户控制。脏变量包含用户输入内容或其他非安全的变量(例如数据库和文件中读出的数据)。而本实施例中在进行虚拟执行之前,就预置了脏变量集合脏函数集合,这些预定义的脏变量(PredefinedDirtyVariable)是某种语言或者某种运行环境下的用户输入变量,这些变量是语言和运行环境本生就具备的,而脏函数(DirtyFunction)指返回脏变量,即是返回值是脏变量的函数。因为这些脏变量和脏函数是预先知道的,所以需要预置出来,以供后续执行虚拟执行代码的时候识别出其中的脏变量。
在本申请实施例中,一个变量是不是脏变量可以通过该变量的描述符的值来识别。脏变量的描述符(DirtyDescriptor)是描述变量或者形参的脏变量属性集,在本实施例中假设将其设置为8位,则脏变量描述符就是一个8位数字。可以参考表1所示:
表1
Reserved | Reserved | Reserved | Reserved | Reserved | Reserved | SQLINJ_FIELD | XSS_FIELD |
从表1的左侧到右侧依次是从高位到低位的分布,表1的前6个字段均为保留字段,可以后续另行设置,而如果第7字段的值为1,则表示出现了“SQLINJ_FIELD”类型的漏洞,那么这个脏变量如果作为实际参数传递给PHP函数“SQLINJ”的风险形参,则表示出现了一个漏洞。同理,第8个字段的值如果为1,则表示出现了“XSS_FIELD”类型的漏洞,那么这个脏变量如果作为实际参数传递给PHP函数“XSS”的风险形参,则表示出现了一个漏洞。
在VEcode中包含一系列进行脏属性传递的运算符,例如“mov”和“join”。其中,“mov”类似PHP中的赋值运算符,不仅传递dirty属性,而且拷贝值。具体的,假设令$a的dirtydescriptor为da,$b的dirtydescriptor为db,则是否产生了脏变量则需要依据采用表2所示的计算方式计算得到的脏变量描述符来判断。
表2
VE code | Dirty Descriptor的运算公式,“|”表示位或 |
mov$a,$b | da=db |
而“join”类似于PHP的“=”,指的是连接两个字符串并赋值给第一个字符串参数,在连接字符串的过程中,两个变量的dirty属性可以组合而成返回值的dirty属性。在“joinoperator”的执行过程中,假设令$a的dirtydescriptor为da,$b的dirtydescriptor为db,则脏变量的描述符的运算如表3所示:
表3
VE code | Dirty Descriptor的运算公式″,”|”表示位或 |
join$a,$b | da=da|db |
为了使本领域技术人员更进一步的了解预置脏变量和脏函数,在本实施例中,所述预置的脏变量举例如下:
$_GET,$_POST,$_REQUEST,$_COOKIE,$_FILES,$HTTP_RAW_POST_DATA,$argc,$argv。
在实际应用中,这些变量名可以放在名为“dirty.conf”的规则文件中,并保存在存储器中,以便后续使用的时候从存储器的规则文件中获取。这些脏变量的描述符的值均为256,即是8位字段全为1。
其中,预置的脏函数是可以取得用户输入及其他安全边界以外的数据(例如可能被攻击者污染的数据库数据、文件数据)的函数,因此可以定义一份脏函数列表,例如:fread,mysql_query,fgets等,这些脏函数的返回值的dirtydescriptor也是256。
在调用函数过程中,如果当前调用函数是用户自定义的函数,则需要虚拟执行器跳入该函数进行执行,才能判断是否会产生脏变量,而如果当前调用函数既不是用户自定义函数,也不是保留函数、清理函数或者脏函数,则虚拟执行器的返回值就清理一切脏属性,返回一个干净变量。因为这些并不是识别脏变量的过程,是现有技术中已有的,因此本申请在此不再详述。
在具体识别脏变量的过程中,所述保留函数规则库中的保留函数规则包括:相互对应的保留函数和风险形参,所述清理函数规则库中的清理函数规则包括:相互对应的清理函数和风险形参,以及清理脏属性的域(例如XSS域、SQLInjection域),则参考图2,所述识别当前生成的脏变量,具体包括以下步骤:
步骤201:如果当前调用函数是保留函数,则虚拟执行器获取与所述保留函数规则的风险形参对应的实参。
其中,所述保留函数规则库中的保留函数规则包括了相互对应的保留函数和风险形参,如果当前调用的函数与保留函数规则中的保留函数相同,则认为当前调用函数是保留函数,虚拟执行器就去获取与风险形参对应的实参。
步骤202:至少根据所述脏变量集合判断该实参是否为脏变量,如果是,则进入步骤207;
在本申请初始执行时,可以根据预定义的脏变量集合中定义的脏变量来判断该实参是否为脏变量,但是,在后续确定了新的脏变量之后,也需要还根据新识别的脏变量也判断实参是否为脏变量。而如果该实参是干净变量,则说明当前调用函数的返回值也是干净变量。
步骤203:如果当前调用函数是清理函数,则虚拟执行器获取与所述清理函数规则的形参对应的实参。
在本申请实施例中,一些脏变量在经过脏变量清理函数(dirtycleanfunction)之后,其脏属性就不复存在了,因此,虽然一个变量具有脏属性而被认为是脏变量,但是经过脏变量清理函数处理后,如果其脏属性已经不在了,则不认为该脏变量会后续产生漏洞。
这里所说的脏变量清理函数可以消除变量的部分dirty属性。例如,PHP中的“htmlspecialchars”可以消除前述脏变量描述符中“XSS_FIELD”的dirty位,因此,经过“htmlspecialchars”处理后的变量再显示到页面上不会产生漏洞。又如“mysql_escape_real_string”可以消除“SQLINJ_FIELD”的dirty位,因此经过“mysql_escape_real_string”处理后的变量再交由“mysql_query”函数调用不会产生“sqlinjection”漏洞。
在实际应用中,可以定义一份dirtycleanfunction的函数列表,例如表4所示:
表4
其中,第一个字段表示“dirtycleanfunction”的名称,第二个字段XSS和SQLINJ表示消除的dirty类型
具体的,对于表1中脏变量描述符来说,如果第7和第8个字段为1,说明其是一个脏变量,但是,如果这个脏变量被“mysql_escape_string”处理过,则该脏变量描述的字段“SQLINJ_FIELD”位的值就被置为0,如果再经过“htmlspecialchars”处理过,则字段“XSS_FIELD”位也被置为0,而最后调用“mysql_query”函数的时候,因为“$name”经过“mysql_escape_string”处理过,因此“SQLINJ_FIELD”位是0,所以“$sql”的dirtydescriptor也是0xFD,当调用“mysql_query”的时候,因为“$sql”的“SQLINJ_FIELD”已经是0,所以就不会产生没有漏洞。其中,“mysql_escape_string”,“htmlspecialchars”都称为dirtycleanfunction。
步骤204:至少根据所述脏变量集合判断该实参是否为脏变量,如果是,则进入步骤205。
步骤205:在所述清理函数的返回值清理所述实参的脏属性域之后,判断该脏变量是否存在至少一个脏属性域具有脏属性,如果是,则进入步骤207。
清理函数的返回值会清理该实参在所述清理函数规则中定义的脏属性域,而清理后的脏属性域就是干净的,如果脏变量的所有脏属性域都被清理了,则说明该脏变量就不再是脏变量了,就是干净变量,但是只要其脏属性域至少有一个具有脏属性,那么清理函数即便清理过,也说明当前调用函数的返回值为脏变量。而如果该实参是干净变量,则说明当前调用函数的返回值也是干净变量。
步骤206:判断当前需调用的函数是否与所述脏函数集合中的脏函数相同,如果是,则进入步骤207;
同时在执行虚拟执行代码的过程中,如果当前调用的一个PHP函数与脏函数集合中的脏函数相同,则认为这个PHP函数是一个脏函数。
步骤207:确定所述PHP函数的返回值为脏变量。
此时就需要将该PHP函数的返回值确定为脏变量。可见,从步骤201~步骤207重点介绍了如何在虚拟执行过程中识别出脏变量。
步骤103:依据所述脏变量和所述存储器中的漏洞规则库,检测当前调用PHP函数的过程是否存在漏洞,所述漏洞规则库用于保存漏洞规则。
在识别出脏变量之后,需要依据该脏变量和漏洞规则库(Riskfunctionrulelibrary)中保存的漏洞规则来检测需调用的PHP函数是否存在漏洞。其中,所述漏洞规则可以包括:相互对应的风险函数和风险形参。其中,风险函数(RiskFunction)是漏洞规则库中的函数,这类函数一旦其风险形参被传入了受污染变量,则会产生漏洞。风险函数指一个函数它有一些风险形参,如果这些风险形参被传入了脏变量作为实参,那么这个风险函数在运行中会产生漏洞。这类函数通常是语言自身和公用的运行库所带的。而风险形参则是一类风险函数的形参,一旦传入脏变量(DirtyVariable)后,便形成漏洞。风险形参往往是写入文件的内容、打开文件的路径或执行的命令等关键参数。
具体的,参考图3所示,所述依据所述脏变量和所述存储器中的漏洞规则库,检测当前调用PHP函数的过程是否存在漏洞,具体可以包括:
步骤301:判断所述PHP函数是否为所述风险函数;如果是,则进入步骤302;
首先看当前调用的PHP函数是否为风险函数,需要说明的是,这里PHP函数分为两种,一种就是PHP应用程序中可以直接调用的函数,一种就是类方法中的PHP函数。如果调用的PHP函数与漏洞规则库中的风险函数匹配,例如名称相同,则认为该PHP函数是一个风险函数。
具体的,漏洞规则中定义的风险函数及风险函数相关的风险形参列表,可以如下所示:
上述的伪代码中每一行都是一条漏洞规则,其中,在每一条漏洞规则中,第一个字段是风险函数“risk_function”的名称,即是PHP函数名或者类方法名中的PHP函数名。例如“mysql_query”或者“Zend_Db_Adapter_Pdo_Abstract::query”。第二个字段是风险形参“params_mask”表示PHP函数中的哪些参数是风险形参,它是一个数组,每个元素8位(同DirtyDescriptor),称为param_mask。param_mask是表示一个形参的dirty情况,例如,对于[0xFF,0,1]来讲,表示第一个字段所述的PHP函数的第一个参数和第三个参数是风险形参,而“0xFF”和“1”是第1、3个形参的param_mask的值。假设Pi表明第i个形参的param_mask值,第二个字段表示的含义就是[P1,P2,...,Pn]。
需要说明的是,如果PHP函数是程序自定义的函数则需要进入这个函数继续执行,而如果函数是系统函数时则会执行本步骤以根据漏洞规则库来判定是否存在一个漏洞。
步骤302:从漏洞规则库中获取与所述风险函数对应的风险形参;
确定了风险函数之后,就可以依据确定的风险函数从漏洞规则库中的漏洞规则中获取与该风险函数对应的风险形参。
步骤303:在调用所述PHP函数的过程中,判断所述脏变量是否作为所述PHP函数的实际参数传递给所述风险形参,如果是,则进入步骤304;
判断在调用PHP函数的过程中,已经识别出的脏变量是否作为该PHP函数的实参传递给风险形参,例如赋值给风险形参。
步骤304:根据所述脏变量的描述符与所述风险形参的值的逻辑运算结果,检测调用PHP函数的过程是否会产生漏洞。
如果是的话,再看脏变量的描述符(即是实参的值)与相应的风险形参(param_mask)位与结果是否大于0,如果大于0则说明此处调用的PHP函数会在调用过程中产生漏洞。
具体的,举例如下,假设已经从漏洞规则库中找出函数名与当前调用的系统函数名相同的规则,令规则的params_mask为m,令传入的实参为A0,A1,A2,....,则执行如下步骤:
令实参集合A=(A0,A1,A2,...An),Ai表示第i个参数的dirtydescriptor;并且,若Ai&m[i]>0,则该处调用的PHP函数就是一个漏洞。
采用本申请实施例,通过虚拟执行的方式,可以在虚拟执行PHP源代码时,通过脏变量描述符的定义及后续运算,可以检测出更多的漏洞,而且因为漏洞检测更准确,所以通过对PHP源代码的后续修改及调整,也能够避免PHP应用程序在执行时影响计算机系统响应能力和处理性能的情况,更不会使得计算机系统出现系统崩溃的情况。
参考图4,其示出了本申请一种超级文本预处理语言PHP应用程序的漏洞检测方法实施例2的流程图,可以包括以下步骤:
步骤401:编译器将待检测的PHP应用程序的源代码编译为虚拟执行代码。
步骤402:依据存储器中存储的脏变量集合、脏函数集合、保留函数规则库和清理函数规则库,虚拟执行器识别当前生成的脏变量;所述脏函数的返回值为脏变量。
步骤403:依据所述脏变量和所述存储器中的漏洞规则库,检测当前调用PHP函数的过程是否存在漏洞,所述漏洞规则库用于保存漏洞规则。
步骤401~步骤403的详细描述可以参见实施例1。在本实施例中,所述漏洞规则还可以包括漏洞类型,则进入步骤404。
步骤404:依据所述漏洞规则中的漏洞类型来判断产生漏洞的PHP函数所存在的漏洞类型。
在检测出一个PHP函数是否会产生漏洞的情况下,还能够通过漏洞规则中预置的漏洞类型来判断当前产生的漏洞是何种类型。此时漏洞规则可以示例如下:
其中,一条漏洞规则中的第三个字段漏洞类型(risk_category)表示当出现漏洞时找出的漏洞类型。仍以实施例1中的例子为例:
假设已经从漏洞规则库中找出函数名与当前调用的系统函数名相同的规则,那么令规则的risk_category字段为category,params_mask为m,令传入的实参为A0,A1,A2,....,继续执行如下步骤:
令实参集合A=(A0,A1,A2,...An),Ai表示第i个参数的dirtydescriptor;并且若Ai&m[i]>0,则该处调用的PHP函数产生的漏洞类型是category。
步骤405:对所述存储器中的脏变量集合、脏函数集合及预置的漏洞规则库、保留函数规则库和清理函数规则库进行更新。
在本实施例中,还包括一个对存储器中存储的脏变量集合、脏函数集合以及漏洞规则库中的漏洞规则、保留函数规则库和清理函数规则库进行更新的步骤,因为根据实际应用场景的不同,或者根据每次漏洞检测时待检测的漏洞情况不同,所以后续可以通过对脏变量集合和脏函数集合的调整而使得每一次都能识别出符合实际场景需求的脏变量,并且进一步通过对漏洞规则的调整也能够使得检测出的漏洞及漏洞类型更能符合场景需求。进一步的,本实施例中检测出的漏洞类型还能够更有利于调整漏洞规则,以及后续对PHP源代码的调整。
参考图5,示出了本申请一种超级文本预处理语言PHP应用程序的漏洞检测方法实施例3的流程图,在本实施例中,可以包括以下步骤:
步骤501:虚拟执行器将待检测的PHP应用程序的源代码编译为虚拟执行代码。
步骤502:依据存储器中存储的脏变量集合、脏函数集合、保留函数规则库和清理函数规则库,识别当前生成的脏变量;所述脏函数的返回值为脏变量。
步骤503:依据所述脏变量和所述存储器中的漏洞规则库,检测当前调用PHP函数的过程是否存在漏洞,所述漏洞规则库用于保存漏洞规则。
步骤504:依据所述漏洞规则中的漏洞类型来判断产生漏洞的PHP函数所存在的漏洞类型。
步骤505:依据所述漏洞在虚拟执行代码中的位置信息检测出PHP源代码中出现漏洞的位置。
在本实施例中,还可以依据所述漏洞在虚拟执行代码中的位置检测出PHP源代码中出现漏洞的位置。因为虚拟执行代码中保存了源代码中的行号信息,所以一旦检测出虚拟执行代码中某个PHP函数会产生漏洞,那么根据行号信息就可以追溯到源代码中的位置信息,这样也能更方便对源代码进行调整,更能节省出调整源代码的调整时间。
步骤506:依据所述漏洞获取所述脏变量在所述PHP函数调用过程中的传递信息。
在本实施例中还能够根据检测出得漏洞来获取脏变量在PHP函数调用过程中的传递信息。这里所述的传递信息指的是脏变量在虚拟执行过程中的传递过程,具体实施时,可以在检测出漏洞的时候,获取作为PHP函数的实参的脏变量信息,再根据产生该脏变量的过程信息从而确定脏变量的传递信息。
步骤507:依据检测出的漏洞在所述PHP源代码中的位置和/或传递信息,调整所述PHP源代码。
再检测出漏洞之后,依据漏洞在PHP源代码中的位置可以适应性调整源代码,也可以根据脏变量的传递信息来对产生的漏洞的脏变量进行清除等操作。例如,可以在源代码中加一个清理函数,具有脏属性的风险实参用清理函数清理一下再传递给脏函数就不会产生漏洞了。例如对于源代码中的“FCAf(a)”,可以调整为“FCAf(c(a))”,其中,c是清理函数,f为脏函数,a为脏变量。经过调整的PHP源代码在实际执行过程中,就不会再产生漏洞,就能够保证在计算机系统上的顺利执行。
需要说明的是,在实际应用中,通过分析控制流和数据流也可以找出部分源代码中的漏洞,这会涉及到多次回溯查找数据来源,在有些场景下是无法实现回朔数据来源的,因此不如本申请实施例中的虚拟执行方式更为顺利。而如果不分析变量的dirty属性在运行中的传递,而仅仅简单的分析预定义的dirty变量,也能找出一部分漏洞,只是漏洞会非常多,通常使用比较简单的PHP词法语法分析,再加上基于函数的调用就可以实现。当然,也可以通过完全等同实际代码运行的方法找出漏洞,但是这种方案会依赖于运行环境的搭建和实际的用户操作,使用起来比较麻烦。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
与上述本申请一种超级文本预处理语言PHP应用程序的漏洞检测方法实施例1所提供的方法相对应,参见图6,本申请还提供了一种超级文本预处理语言PHP应用程序的漏洞检测装置实施例1,在本实施例中,该装置可以包括编译器60和虚拟执行器61,所述虚拟执行器61可以包括脏变量识别模块62和漏洞检测模块63;其中,
所述编译器60,用于将待检测的PHP应用程序的源代码编译为虚拟执行代码;
所述脏变量识别模块62,用于依据存储器中存储的初始脏变量集合、脏函数集合、保留函数规则库和清理函数规则库,识别当前生成的脏变量;所述脏函数的返回值为脏变量;
其中,所述保留函数规则库中的保留函数规则包括:相互对应的保留函数和风险形参,所述清理函数规则库中的清理函数规则包括:相互对应的清理函数和风险形参,以及清理脏属性的域,则参考图7所示,所述脏变量识别模块62具体可以包括:
第一获取子模块701,用于如果当前调用函数是保留函数,获取与所述保留函数规则的风险形参对应的实参;
第三判断子模块702,用于至少根据所述脏变量集合判断该实参是否为脏变量;
第二获取子模块703,用于如果当前调用函数是清理函数,则获取与所述清理函数规则的形参对应的实参;
第四判断子模块704,用于至少根据所述脏变量集合判断该实参是否为脏变量;
第五判断子模块705,用于则在所述清理函数的返回值清理所述实参的脏属性域之后,判断该脏变量是否存在至少一个脏属性域具有脏属性;
第六判断子模块706,用于判断当前需调用的函数是否与所述脏函数集合中的脏函数相同;
确定子模块707,用于在所述第三判断子模块、第五判断子模块或者第六判断子模块的结果为是的情况下,确定所述当前调用函数的返回值为脏变量。
其中,所述第三判断子模块702,或者第四判断子模块704具体用于:
根据预定义的脏变量集合以及所述第一确定子模块、第二确定子模块和第三确定子模块所识别的脏变量,来判断该实参是否为脏变量。所述漏洞检测模块63,用于依据所述脏变量和所述存储器中的漏洞规则库,检测当前调用PHP函数的过程是否存在漏洞,所述漏洞规则库用于保存漏洞规则。
其中,所述漏洞规则具体可以包括:相互对应的风险函数和风险形参,则参考图8所示,所述检测模块63具体可以包括:
第一判断子模块801,用于判断所述函数是否为所述风险函数;
获取风险形参子模块,用于在所述第一判断子模块的结果为是的情况下,从漏洞规则库中获取与所述风险函数对应的风险形参;
第二判断子模块802,用于在调用所述函数的过程中,判断所述脏变量是否作为所述函数的实际参数传递给所述风险形参;
检测子模块803,用于在所述第二判断子模块的结果为是的情况下,根据所述脏变量的描述符与所述风险形参的值的逻辑运算结果,检测调用所述函数的过程是否会产生漏洞。
采用本实施例公开的漏洞检测装置,通过虚拟执行的方式,可以在虚拟执行器执行PHP源代码时,通过脏变量描述符的定义及后续运算,可以检测出更多的漏洞,而且因为漏洞检测更准确,所以通过对PHP源代码的后续修改及调整,也能够避免PHP应用程序在执行时影响计算机系统响应能力和处理性能的情况,更不会使得计算机系统出现系统崩溃的情况。
与上述本申请一种超级文本预处理语言PHP应用程序的漏洞检测方法实施例2所提供的方法相对应,参见图9,本申请还提供了一种超级文本预处理语言PHP应用程序的漏洞检测装置实施例2,在本实施例中,该装置可以包括编译器60和虚拟执行器61,所述虚拟执行器61可以包括脏变量识别模块62和漏洞检测模块63;其中,
所述编译器60,用于将待检测的PHP应用程序的源代码编译为虚拟执行代码;
所述脏变量识别模块62,用于依据存储器中存储的初始脏变量集合、脏函数集合、保留函数规则库和清理函数规则库,识别当前生成的脏变量;所述脏函数的返回值为脏变量;
所述漏洞检测模块63,用于依据所述脏变量和所述存储器中的漏洞规则库,检测当前调用PHP函数的过程是否存在漏洞,所述漏洞规则库用于保存漏洞规则。
所述漏洞规则还可以包括漏洞类型,则所述检测模块63还可以用于:依据所述漏洞规则中的漏洞类型来判断产生漏洞的函数所存在的漏洞类型。
更新模块901,用于对所述存储器中的脏变量集合、脏函数集合及预置的漏洞规则库、保留函数规则库和清理函数规则库进行更新。
本实施例公开的漏洞检测装置还包括一个对存储器中存储的脏变量集合、脏函数集合以及漏洞规则库中的漏洞规则进行更新的更新模块901,因为根据实际应用场景的不同,或者根据每次漏洞检测时待检测的漏洞情况不同,所以后续可以通过对脏变量集合和脏函数集合的调整而使得每一次都能识别出符合实际场景需求的脏变量,并且进一步通过对漏洞规则的调整也能够使得检测出的漏洞及漏洞类型更能符合场景需求。进一步的,本实施例中检测出的漏洞类型还能够更有利于调整漏洞规则,以及后续对PHP源代码的调整。
与上述本申请一种超级文本预处理语言PHP应用程序的漏洞检测方法实施例3所提供的方法相对应,参见图10,本申请还提供了一种超级文本预处理语言PHP应用程序的漏洞检测装置实施例3,在本实施例中,该装置可以包括编译器60和虚拟执行器61,所述虚拟执行器61可以包括脏变量识别模块62和漏洞检测模块63;其中,
所述编译器60,用于将待检测的PHP应用程序的源代码编译为虚拟执行代码;
所述脏变量识别模块62,用于依据存储器中存储的初始脏变量集合、脏函数集合、保留函数规则库和清理函数规则库,识别当前生成的脏变量;所述脏函数的返回值为脏变量;
所述漏洞检测模块63,用于依据所述脏变量和所述存储器中的漏洞规则库,检测当前调用PHP函数的过程是否存在漏洞,所述漏洞规则库用于保存漏洞规则。
所述漏洞检测模块63还可以用于:依据所述漏洞规则中的漏洞类型来判断产生漏洞的PHP函数所存在的漏洞类型。
确定位置模块1001,用于依据所述漏洞在虚拟执行代码中的位置信息确定PHP源代码中出现漏洞的位置;
获取传递信息模块1002,用于依据所述漏洞获取所述脏变量在所述PHP函数调用过程中的传递信息。
需要说明的是,确定位置模块1001和获取传递信息模块1002不一定需要同时存在,在实际应用中可以根据检测需求只确定漏洞位置,或者仅仅获取传递信息均可。
另外,本实施例在实际应用中还可以包括:
调整模块1003,用于依据检测出的漏洞在所述PHP源代码中的位置和/或传递信息,调整所述PHP源代码。
本实施例中的调整模块1003依据漏洞在PHP源代码中的位置可以适应性调整源代码,也可以根据脏变量的传递信息来对产生的漏洞的脏变量进行清除等操作。经过调整的PHP源代码在实际执行过程中,就不会再产生漏洞,就能够保证在计算机系统上的顺利执行。
本实施例所述的装置可以集成到第三方交易平台的服务器上,也可以单独作为一个实体与第三方交易平台的服务器相连,另外,需要说明的是,当本申请所述的方法采用软件实现时,可以作为第三方交易平台的服务器新增的一个功能,也可以单独编写相应的程序,本申请不限定所述方法或装置的实现方式。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本申请所提供的一种超级文本预处理语言PHP应用程序的漏洞检测方法及装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (7)
1.一种应用程序的漏洞检测方法,其特征在于,包括:
编译器将待检测的应用程序的源代码编译为虚拟执行代码;所述虚拟执行代码能够屏蔽与漏洞评估无关的源代码功能的指令和保存源代码行号与指令间的对应关系;
虚拟执行器在执行所述虚拟执行代码的过程中进行漏洞检测,所述漏洞检测的过程包括:
依据存储器中存储的脏变量集合、脏函数集合、保留函数规则库和清理函数规则库,虚拟执行器识别当前生成的脏变量;所述脏函数的返回值为脏变量;所述脏变量是指可由用户控制的变量;所述脏函数是指返回值是脏变量的函数;所述保留函数规则库中的保留函数规则包括:相互对应的保留函数和风险形参,所述保留函数是指变量具有保留原有脏数据不变性的函数;所述清理函数规则库中的清理函数规则包括:相互对应的清理函数和风险形参,以及脏属性域,清理函数用于消除变量的脏属性域的脏属性;则所述识别当前生成的脏变量,包括:
如果当前调用函数是保留函数,则虚拟执行器获取与所述保留函数规则的风险形参对应的实参,并至少根据所述脏变量集合判断该实参是否为脏变量,如果是,则确定当前调用函数的返回值为脏变量;
如果当前调用函数是清理函数,则虚拟执行器获取与所述清理函数规则的风险形参对应的实参,并至少根据所述脏变量集合判断该实参是否为脏变量,如果是,则在所述清理函数的返回值清理所述实参的脏属性域之后,判断该脏变量是否存在至少一个脏属性域具有脏属性,如果是,则确定当前调用函数的返回值为脏变量;
判断当前需调用的函数是否与所述脏函数集合中的脏函数相同,如果是,则确定所述函数的返回值为脏变量;依据所述脏变量和所述存储器中的漏洞规则库,所述漏洞规则库用于保存漏洞规则;所述漏洞规则包括:相互对应的风险函数和风险形参,所述风险函数是指具有风险形参的函数,该风险函数在风险形参被传入了脏变量作为实参时,能够产生漏洞;风险形参是一类风险函数的形参;虚拟执行器检测当前调用函数的过程是否存在漏洞,包括:
判断所述函数是否为所述风险函数;如果是,则从漏洞规则库中获取与所述风险函数对应的风险形参;
在调用所述函数的过程中,判断所述脏变量是否作为所述函数的实际参数传递给所述风险形参,如果是,则根据所述脏变量的描述符与所述风险形参的值的逻辑运算结果,检测调用所述函数的过程是否会产生漏洞,包括:判断所述脏变量的描述符与相应的风险形参的值的位与结果是否大于0,如果大于0,则表明调用所述函数的过程会产生漏洞。
2.根据权利要求1所述的方法,其特征在于,所述漏洞规则还包括漏洞类型,则所述方法还包括:
依据所述漏洞规则中的漏洞类型来判断产生漏洞的函数所存在的漏洞类型。
3.根据权利要求1所述的方法,其特征在于,所述至少根据所述脏变量集合判断该实参是否为脏变量,包括:
根据预定义的脏变量集合以及权利要求1所识别的脏变量来判断该实参是否为脏变量。
4.根据权利要求1所述的方法,其特征在于,还包括:
对所述存储器中的脏变量集合、脏函数集合及预置的漏洞规则库、保留函数规则库和清理函数规则库进行更新。
5.根据权利要求1所述的方法,其特征在于,还包括:
依据所述漏洞在虚拟执行代码中的位置信息检测出源代码中出现漏洞的位置,和/或,
依据所述漏洞获取所述脏变量在所述函数调用过程中的传递信息;所述传递信息是指脏变量在虚拟执行过程产生的信息。
6.根据权利要求5所述的方法,其特征在于,还包括:
依据检测出的漏洞在所述源代码中的位置和/或所述脏变量在所述函数调用过程中的传递信息,调整所述源代码。
7.一种应用程序的漏洞检测装置,其特征在于,该装置包括编译器和虚拟执行器,所述虚拟执行器包括脏变量识别模块和漏洞检测模块;所述编译器,用于将待检测的应用程序的源代码编译为虚拟执行代码;所述虚拟执行代码能够屏蔽与漏洞评估无关的源代码功能的指令和保存源代码行号与指令间的对应关系;
所述脏变量识别模块,用于依据存储器中存储的脏变量集合、脏函数集合、保留函数规则库和清理函数规则库,识别当前生成的脏变量;所述脏函数的返回值为脏变量;所述脏变量是指可由用户控制的变量;所述脏函数是指返回值是脏变量的函数;所述保留函数规则库中的保留函数规则包括:相互对应的保留函数和风险形参,所述保留函数是指变量具有保留原有脏数据不变性的函数;所述清理函数规则库中的清理函数规则包括:相互对应的清理函数和风险形参,以及脏属性域,清理函数用于消除变量的脏属性;所述脏变量识别模块,包括:第一获取子模块,用于如果当前调用函数是保留函数,获取与所述保留函数规则的风险形参对应的实参;第三判断子模块,用于至少根据所述脏变量集合判断该实参是否为脏变量;第二获取子模块,用于如果当前调用函数是清理函数,则获取与所述清理函数规则的形参对应的实参;第四判断子模块,用于至少根据所述脏变量集合判断该实参是否为脏变量;第五判断子模块,用于则在所述清理函数的返回值清理所述实参的脏属性域之后,判断该脏变量是否存在至少一个脏属性域具有脏属性;第六判断子模块,用于判断当前需调用的函数是否与所述脏函数集合中的脏函数相同;确定子模块,用于在所述第三判断子模块、第五判断子模块或者第六判断子模块的结果为是的情况下,确定所述当前调用函数的返回值为脏变量;
所述漏洞检测模块,用于依据所述脏变量和所述存储器中的漏洞规则库,检测当前调用函数的过程是否存在漏洞,所述漏洞规则库用于保存漏洞规则;所述漏洞规则包括:相互对应的风险函数和风险形参,所述风险函数是指具有风险形参的函数,该风险函数在风险形参被传入了脏变量作为实参时,能够产生漏洞;风险形参是一类风险函数的形参;所述漏洞检测模块包括:第一判断子模块,用于判断所述函数是否为所述风险函数;获取风险形参子模块,用于在所述第一判断子模块的结果为是的情况下,从漏洞规则库中获取与所述风险函数对应的风险形参;第二判断子模块,用于在调用所述函数的过程中,判断所述脏变量是否作为所述函数的实际参数传递给所述风险形参;检测子模块,用于在所述第二判断子模块的结果为是的情况下,根据所述脏变量的描述符与所述风险形参的值的逻辑运算结果,检测调用所述函数的过程是否会产生漏洞,包括:判断所述脏变量的描述符与相应的风险形参的值的位与结果是否大于0,如果大于0,则表明调用所述函数的过程会产生漏洞。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110421457.6A CN103164331B (zh) | 2011-12-15 | 2011-12-15 | 一种应用程序的漏洞检测方法和装置 |
HK13109560.6A HK1182463A1 (zh) | 2011-12-15 | 2013-08-16 | 種應用程序的漏洞檢測方法和裝置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110421457.6A CN103164331B (zh) | 2011-12-15 | 2011-12-15 | 一种应用程序的漏洞检测方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103164331A CN103164331A (zh) | 2013-06-19 |
CN103164331B true CN103164331B (zh) | 2016-03-30 |
Family
ID=48587436
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110421457.6A Active CN103164331B (zh) | 2011-12-15 | 2011-12-15 | 一种应用程序的漏洞检测方法和装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN103164331B (zh) |
HK (1) | HK1182463A1 (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104462983B (zh) * | 2013-09-22 | 2019-04-26 | 深圳市腾讯计算机系统有限公司 | 一种php源代码处理方法及系统 |
CN106156630A (zh) * | 2015-04-23 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 一种应用程序安装包的漏洞检测方法和装置 |
CN106412067B (zh) * | 2016-09-30 | 2019-02-15 | 广东电网有限责任公司电力科学研究院 | 基于工控协议模糊测试的数据分层生成方法 |
CN107038115B (zh) * | 2016-11-14 | 2018-05-04 | 平安科技(深圳)有限公司 | 应用软件安全漏洞检测方法和系统 |
CN109508981A (zh) * | 2017-09-15 | 2019-03-22 | 富士通株式会社 | 用于测试智能合约的方法和装置 |
CN108984708B (zh) * | 2018-07-06 | 2022-02-01 | 蔚来(安徽)控股有限公司 | 脏数据识别方法及装置、数据清洗方法及装置、控制器 |
CN110765455A (zh) * | 2018-09-04 | 2020-02-07 | 哈尔滨安天科技集团股份有限公司 | 基于属性域异常调用的恶意文档检测方法、装置及系统 |
CN110222512B (zh) * | 2019-05-21 | 2021-04-20 | 华中科技大学 | 一种基于中间语言的软件漏洞智能检测与定位方法与系统 |
CN110188544A (zh) * | 2019-05-30 | 2019-08-30 | 北京百度网讯科技有限公司 | 漏洞检测方法及装置、设备及存储介质 |
CN111309589A (zh) * | 2019-11-29 | 2020-06-19 | 中国电力科学研究院有限公司 | 一种基于代码动态分析的代码安全扫描系统及方法 |
CN111752570B (zh) * | 2020-06-29 | 2024-06-14 | 重庆小雨点小额贷款有限公司 | 一种编译方法、装置、终端及计算机可读存储介质 |
CN113010899B (zh) * | 2021-04-16 | 2022-06-07 | 上海交通大学 | 一种php反序列化漏洞利用链检测方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101923510A (zh) * | 2010-04-13 | 2010-12-22 | 张克东 | 软件探测方法和应用该方法的软件探测器及软件探测系统 |
CN101937395A (zh) * | 2010-09-20 | 2011-01-05 | 南京大学 | 一种用于漏洞检测的检测对象程序特征提取方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6311327B1 (en) * | 1998-03-02 | 2001-10-30 | Applied Microsystems Corp. | Method and apparatus for analyzing software in a language-independent manner |
-
2011
- 2011-12-15 CN CN201110421457.6A patent/CN103164331B/zh active Active
-
2013
- 2013-08-16 HK HK13109560.6A patent/HK1182463A1/zh unknown
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101923510A (zh) * | 2010-04-13 | 2010-12-22 | 张克东 | 软件探测方法和应用该方法的软件探测器及软件探测系统 |
CN101937395A (zh) * | 2010-09-20 | 2011-01-05 | 南京大学 | 一种用于漏洞检测的检测对象程序特征提取方法 |
Non-Patent Citations (1)
Title |
---|
基于程序分析的软件安全漏洞检测技术研究;管铭;《中国优秀硕士学位论文全文数据库》;20070615(第6期);第8-25页 * |
Also Published As
Publication number | Publication date |
---|---|
HK1182463A1 (zh) | 2013-11-29 |
CN103164331A (zh) | 2013-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103164331B (zh) | 一种应用程序的漏洞检测方法和装置 | |
US11657154B2 (en) | System and method for securing applications through an application-aware runtime agent | |
CN109426722B (zh) | Sql注入缺陷检测方法、系统、设备及存储介质 | |
Alhanahnah et al. | Scalable analysis of interaction threats in iot systems | |
US11314863B2 (en) | Behavioral threat detection definition and compilation | |
Arzt et al. | Using targeted symbolic execution for reducing false-positives in dataflow analysis | |
He et al. | Sofi: Reflection-augmented fuzzing for javascript engines | |
US20210326435A1 (en) | Behavioral threat detection definition and compilation | |
Nica et al. | On the use of mutations and testing for debugging | |
Mitropoulos et al. | Fatal injection: A survey of modern code injection attack countermeasures | |
Kim et al. | Automatic and lightweight grammar generation for fuzz testing | |
Gauthier et al. | Fast detection of access control vulnerabilities in php applications | |
Nam et al. | A bug finder refined by a large set of open-source projects | |
Hua et al. | Rupair: towards automatic buffer overflow detection and rectification for Rust | |
Tang et al. | Automated evolution of feature logging statement levels using git histories and degree of interest | |
Yang et al. | Silent compiler bug de-duplication via three-dimensional analysis | |
Livshits et al. | SecuriFly: Runtime protection and recovery from Web application vulnerabilities | |
Laghari et al. | Localising faults in test execution traces | |
Letarte et al. | Security model evolution of PHP web applications | |
Liu et al. | PF-Miner: A practical paired functions mining method for Android kernel in error paths | |
CN111666216B (zh) | 一种智能合约分析方法及装置 | |
Rosero et al. | Software regression testing in industrial settings: Preliminary findings from a literature review | |
CN110321130A (zh) | 基于系统调用日志的不可重复编译定位方法 | |
Jakobs et al. | diffDP: Using Data Dependencies and Properties in Difference Verification with Conditions | |
Zhao | FProbe: The Flow-Centric Detection and a Large-Scale Measurement of Browser Fingerprinting |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1182463 Country of ref document: HK |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: GR Ref document number: 1182463 Country of ref document: HK |