CN113010899B - 一种php反序列化漏洞利用链检测方法 - Google Patents
一种php反序列化漏洞利用链检测方法 Download PDFInfo
- Publication number
- CN113010899B CN113010899B CN202110412082.0A CN202110412082A CN113010899B CN 113010899 B CN113010899 B CN 113010899B CN 202110412082 A CN202110412082 A CN 202110412082A CN 113010899 B CN113010899 B CN 113010899B
- Authority
- CN
- China
- Prior art keywords
- php
- detection
- file
- class
- deserialization
- 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.)
- Expired - Fee Related
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 113
- 238000000034 method Methods 0.000 claims abstract description 124
- 230000006870 function Effects 0.000 claims description 79
- 230000001960 triggered effect Effects 0.000 claims description 36
- 230000002159 abnormal effect Effects 0.000 claims description 8
- 238000010200 validation analysis Methods 0.000 claims 1
- 238000012550 audit Methods 0.000 abstract description 3
- 238000007726 management method Methods 0.000 abstract description 2
- 238000012360 testing method Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种PHP反序列化漏洞利用链检测方法,涉及计算机网络安全领域。本发明公开的方法包括:预定义一系列在检测过程中所需用到的各种规则;从待检测的PHP文件中获取源代码信息;根据各种规则进行反序列化漏洞利用链检测;在检测过程中依据源代码信息将其划分为三种类型;对三种类型源代码执行不同的检测流程;特别地,对三种类型中的一种CMS(Content Management System,内容管理系统)框架会将部分源码存储在本地数据库中以优化反序列化漏洞利用链的检测速率。本发明的反序列化漏洞检测方法,能够提高PHP反序列化漏洞利用链的检测准确率以及减少人工审计的劳动力。
Description
技术领域
本发明涉及计算机安全领域,尤其涉及一种PHP反序列化漏洞利用链检测方法。
背景技术
各种Web应用层次不穷,PHP作为传统的Web开发语言,用处亦是愈来愈广。然而即便是具有一定安全意识的PHP开发人员,也很少会注意到代码在执行反序列化时可能存在的安全隐患。
PHP反序列化漏洞指的是PHP代码在反序列化过程中,如果反序列化的内容可以被控制,攻击者能够通过寻找类的魔术方法调用及构造POP(Property-OrientedPrograming)链最终来实现远程代码执行(RCE)或其他可危害服务器的漏洞。
随着2018年Black Hat大会上File Operation Induced Unserialization viathe“phar://”Stream Wrapper议题的提出,实现了不通过反序列化函数unserialize(),仅通过PHP中的phar://协议对一个phar文件进行任意文件操作时,就能够触发反序列化,进而通过利用链达成RCE。
目前虽然存在少数针对于PHP代码的开源安全检测工具,但其中的绝大多数是对于代码中是否存在跨站脚本(Cross-Site Scripting,XSS)、SQL注入、命令执行等漏洞层面的扫描,而对于反序列化漏洞这一部分几乎没什么检测。
且如今很多开源PHP语言的CMS系统是基于已有框架进行开发,但诸多框架其本身就存在反序列化漏洞的利用链,基本上没有开发人员会注意到这类问题,导致在二次开发的过程中可能会出现用户对反序列化内容可控的功能,从而导致漏洞存在。
对于历史上出现的反序列化漏洞利用链,几乎都是人工审计代码发现的,十分浪费人力。如何快速出PHP代码中的反序列化漏洞利用链是本领域技术人员亟待解决的问题。
因此,本领域的技术人员致力于开发一种PHP反序列化漏洞利用链检测方法,提高PHP反序列化漏洞利用链的检测准确率以及减少人工审计的劳动力。
发明内容
有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是自动找出PHP源码中存在的反序列化漏洞利用链,提高PHP反序列化漏洞利用链的检测准确率,以及检测方案的检测力。
为实现上述目的,本发明提供了一种PHP反序列化漏洞利用链检测方法,包括以下步骤:
步骤1、预定义一系列在检测过程中所需用到的各种规则;
步骤2、从待检测的PHP文件中获取源代码信息;
步骤3、根据所述各种规则进行反序列化漏洞利用链检测;在检测过程中将源代码信息划分为三种类型;对三种类型源代码执行不同的检测流程;其中,对基于PHP的CMS项目文件的检测流程将部分源代码存储在本地数据库中。
进一步地,所述步骤1包括定义一系列反序列化可能触发的危险规则。
进一步地,所述步骤1包括设定触发类的魔术方法规则。
进一步地,所述步骤1包括设定触发类中的自定义方法规则。
进一步地,所述步骤1包括设定防止死循环规则。
进一步地,所述步骤3检测流程包括对单个PHP文件的检测流程、对多个互相包含的PHP文件的检测流程、对基于PHP的CMS项目文件的检测流程。
进一步地,所述对单个PHP文件的检测流程包括以下步骤:
步骤311、确定php源代码中是否存在类;
步骤312、确定类是否可反序列化;
步骤313、确定类是否继承了父类或实现了抽象类以找全所有可以反序列化类的调用函数;
步骤314、确定全部类中是否存在__destruct()或者__wakeup()函数,并对全部类中出现的这两个函数,确定魔术方法中是否触发了定义好的危险规则;
步骤315、若没有触发危险规则,确定魔术方法中是否调用了其他魔术方法或类的自定义函数;
步骤316、在其他魔术方法和类的自定义函数中递归地进行利用链检测;
步骤317、检测流程中有触发到定义好的危险规则,说明代码中存在反序列化漏洞利用链;若检测过程中触发了死循环异常规则或检测正常终止,说明代码中不存在反序列化漏洞利用链。
进一步地,所述对多个互相包含的PHP文件的检测流程包括以下步骤:
步骤321、确定包含文件的函数有include、require、include_once、require_once四个;
步骤322、确定提供的各个源文件是否通过包含函数互相引入;
步骤323、将所有通过函数引入的php源文件标记;
步骤324、在标记的php源文件中,任意把某一文件视为主文件,将其他所有标记后的源代码附加在主文件之后生成的新的整体代码文件;
步骤325、对整体代码文件执行所述对单个PHP文件的检测流程进行检测。
进一步地,所述对基于PHP的CMS项目文件的检测流程包括以下步骤:
步骤331、标记所有存在命名空间(namespace)的文件,即可以直接反序列化时调用的类;
步骤332、将标记文件源代码存入本地数据库中备用;
步骤333、在标记文件的数据库中搜寻各个类是否存在__destruct()或者__wakeup()函数;
步骤334、从数据库中提取当前类所在的源码,确定是否可反序列化;
步骤335、在__destruct()或__wakeup()函数中检测是否触发了危险规则;
步骤336、如果没有触发危险规则,进一步确定__destruct()或__wakeup()函数中是否调用了其他魔术方法或类的自定义函数;
步骤337、在其他魔术方法和类的自定义函数中递归地进行利用链检测;
步骤338、若检测流程中触发了危险规则,说明代码中存在反序列化漏洞利用链;
步骤339、若检测过程中触发了所述的死循环异常规则或检测正常终止,说明代码中不存在反序列化漏洞利用链。
进一步地,所述步骤3对结果进行人工分析确认。
在本发明的较佳实施方式中,本发明提供一种PHP反序列化漏洞利用链方法,其特征在于,预定义一系列在检测过程中所需用到的各种规则;从待检测的PHP文件中获取源代码信息;根据所述各种规则进行反序列化漏洞利用链检测;在所述检测过程中依据所述的源代码信息将其划分为三种类型;对所述三种类型源代码执行不同的检测流程;特别地,对所述三种类型中的一种CMS框架会将部分源码存储在本地数据库中以优化反序列化漏洞利用链的检测速率。具体方案如下:
提前定义一系列反序列化可能触发的危险规则。
若检测过程中触发了所述危险规则,说明代码中存在反序列化漏洞利用链。
进一步地,设定触发类的魔术方法规则。
进一步地,设定触发类中的自定义方法规则。
进一步地,设定防止死循环规则,预防检测过程中可能出现的死循环调用。
本发明针对不同情况提出了三种检测方法:
第一方面,本发明提供了一种对单个php源文件反序列化漏洞利用链检测方法,包括:
获取php源代码,所述php源代码指的是待检测的php源文件代码。
进一步地,确定所述单个php源代码中是否存在类。
进一步地,确定所述类是否可反序列化。
进一步地,确定所述类是否继承了父类或实现了抽象类,以找全所有可以反序列化类的调用函数。
进一步地,确定所述全部类中是否存在__destruct()或者__wakeup()函数,并对全部类中出现的这两个函数:
进一步地,确定所述魔术方法中是否触发了所述的危险规则。
若没有触发危险规则,确定所述魔术方法中是否调用了其他魔术方法或类的自定义函数。
进一步地,在所述其他魔术方法和类的自定义函数中递归地进行利用链检测。
若在上述步骤中,检测流程中有触发到所述的危险规则,说明代码中存在反序列化漏洞利用链。
若检测过程中触发了所述的死循环异常规则或检测正常终止,说明不存在代码中不存在反序列化漏洞利用链。
第二方面,本发明提供了一种对多个php源文件通过包含文件的反序列化漏洞利用链检测方法,包括:
确定包含文件的函数有include、require、include_once、require_once四个。
确定提供的各个源文件是否通过所述包含函数互相引入。
进一步地,将所有通过函数引入的php源文件标记;
进一步地,在所述标记的php源文件中,任意把某一文件视为主文件,将其他所有所述标记后的源代码附加在主文件之后生成的新的整体代码文件。
进一步地,对所述整体代码文件执行所述的第一种对单个php源文件的方法进行检测。
第三方面,本发明提供了一种对基于PHP语言实现的CMS(Content ManagementSystem,内容管理系统)框架的反序列化漏洞利用链检测方法。此方法不同于前两种,其特征是CMS框架代码中存在大量命名空间(namespace)。一般来说,CMS会为每一类功能都会用一个类来表示并生成特定的命名空间留以开发者自行调用。如’namespace think;...Class Process{...}’定义类,然后在其他文件中通过’use think\Process;newProcess(...)’即可调用此类。
针对所述CMS的反序列化漏洞利用链检测方法包括:
标记所有存在命名空间(namespace)的文件,即可以直接反序列化时调用的类。
将所述标记文件源代码存入本地数据库中备用。
在所述标记文件的数据库中搜寻各个类是否存在__destruct()或者__wakeup()函数。
以一个类存在的__destruct()或__wakeup()函数为例,具体步骤如下:
步骤101,从数据库中提取当前类所在的源码,确定此函数所在的类是否可反序列化。
步骤102,进一步地,在所述的__destruct()或__wakeup()函数中检测其中是否触发了所述的危险规则。
步骤103,如果没有触发危险规则,进一步确定所述__destruct()或__wakeup()函数中是否调用了其他魔术方法或类的自定义函数。这里魔术方法和自定义函数的调用范围为上述全部标记并存储到本地数据库中的类。
步骤104,进一步地,在所述其他魔术方法和类的自定义函数中递归地进行利用链检测。
步骤105,若在上述步骤中,检测流程中触发了危险规则,说明代码中存在反序列化漏洞利用链。
步骤106,若检测过程中触发了所述的死循环异常规则或检测正常终止,说明不存在代码中不存在反序列化漏洞利用链。
对标记到本地数据库中的代码所有的__destrcut()和__wakeup()都执行步骤101~步骤106操作。
对上述三种分支方法得到的结果最终进行人工分析确认。
本发明与现有技术相比较,具有如下显而易见的实质性特点和显著优点:
1.自动找出PHP源码中存在的反序列化漏洞利用链,提高PHP反序列化漏洞利用链的检测准确率,以及检测方案的检测力,解决现有的问题。
2.提高PHP代码中的反序列化漏洞的检测效率和速率。
3.提高PHP反序列化漏洞利用链的检测准确率以及减少人工审计的劳动力。
以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。
附图说明
图1是本发明的一个较佳实施例的检测大致流程图;
图2是本发明的一个较佳实施例的触发魔术方法的调用链图;
图3是本发明的一个较佳实施例的对单个PHP文件进行反序列化漏洞检测方法流程图;
图4是本发明的一个较佳实施例的对多个PHP源文件通过包含文件的反序列化漏洞利用链检测方法流程图;
图5是本发明的一个较佳实施例的对基于PHP语言实现的CMS的反序列化漏洞利用链检测方法流程图。
具体实施方式
以下参考说明书附图介绍本发明的多个优选实施例,使其技术内容更加清楚和便于理解。本发明可以通过许多不同形式的实施例来得以体现,本发明的保护范围并非仅限于文中提到的实施例。
在附图中,结构相同的部件以相同数字标号表示,各处结构或功能相似的组件以相似数字标号表示。附图所示的每一组件的尺寸和厚度是任意示出的,本发明并没有限定每个组件的尺寸和厚度。为了使图示更清晰,附图中有些地方适当夸大了部件的厚度。
目前,检测PHP反序列化漏洞的检测率和效率都较低。为此,本发明提供了一种PHP反序列化漏洞检测方案,能够提高PHP代码中的反序列化漏洞的检测效率和速率。
如图1所示,本发明公开了一种PHP反序列化漏洞检测方法。该方法由以下模块组成,包括:
1)设定危险规则:提前设定危险规则可以在后续检测过程中直接实施。所述危险规则指PHP源代码中各个类里可能触发到一些危险函数(比如system,proc_open,shell_exec等命令执行函数,eval、assert等能执行代码的函数,call_user_func,array_map,uasort等回调函数,file_put_contents,file_get_contents,unlink等文件操作函数以及一些其他的php自带的原生函数中可能对系统直接造成危害的函数)或者在类中出现一些特定规则的语句(例如出现了'$this->someFunction($this->argument);'或'new$this->class($this->vars);'语句,在反序列化时$this->anything这种以'$this->'开头的参数基本上都是可以控制的,所以这个语句可以把将system字符串传入$this->someFunction,因此此类语句同样也要加入到危险规则中。值得注意的是,这种语句可能会有少许变化,因为可能在代码中会存在赋值操作,如'$callback=$this->someFunction;$callback($this->argument);',这种情况都要在规则中详尽描述)。需要说明的是,检测过程中并不是一旦在源码中发现这类函数就是触发了危险规则,检测是否触发危险规则还有一个很重要的点是其危险函数的特定位置的参数是否可控。触发危险规则是反序列化漏洞检测的一个终点,在检测过程中,一旦触发了某个已定义的危险规则,直接提示输出存在反序列化漏洞利用链的结果。
如图2所示显示了一种触发魔术方法的调用链图。
2)设定触发类的魔术方法规则:提前设定触发类的魔术方法可以在后续检测过程中直接实施。所述触发类的魔术方法规则指可以通过一个类中的某些操作调用到另外一个类定义的魔术方法(比如__call()是在对象中调用一个不可访问方法时调用,如果在检测时的某个类中出现'$this->anything->test();'本意是调用$this->anything的test函数,然而$this->anything是可以控制的,所以可以传入一个可以序列化的类给$this->anything,虽然这个类中没有test函数,但是如果这个类中存在__call()函数,也可以直接在调用$this->anything->test()的时候触发__call()中的内容。同样地,此类可以利用的魔术方法还有__get():获得一个类的成员变量时调用;__set():设置一个类的成员变量时调用;__isset():当对不可访问属性调用isset()或empty()时调用;__unset():当对不可访问属性调用unset()时被调用;__toString():类被当成字符串时调用)。通过所述触发类的魔术方法规则,一个反序列化入口点可以通过此种方法实现更多的反序列化分支,能更好、全面地检测源代码中的漏洞点。
3)设定触发类中的自定义方法规则:提前设定触发类中的自定义可以在后续检测过程中直接实施。所述触发类中的自定义方法规则指可以通过一个类中的某些操作调用到另外一个类自定义的某个方法(例如在检测过程中出现了'$this->anything->test();',而且在源码中其他某个可序列化的类A的确有定义或继承test()函数,就可以将A类赋值给$this->anything,从而能够调用A类的test函数,进一步扩大反序列化分支)。这一步的具体实施还需要配合后面的本地数据库。
4)设定防止死循环规则:提前设定跳出死循环规则可以在后续检测过程中直接实施。所述跳出死循环规则是为了防止在php反序列化漏洞利用链检测过程中可能存在的死循环(比如A类的test1()函数中调用了一个'$this->anything->test2();',B类存在test2()函数,可以把B类传给$this->anything,而发现test2()函数其中存在可控的'$this->something->test1();',如果在将A类传给$this->something就可能导致检测程序一直在这个循环中)。因此为了预防出现这种情况,每一个漏洞链的检测都需要对已检测过且不会再被用到的代码内容进行已检测标记。
5)获取代码:本发明将待检测的php代码区分为三个类型,分别是:单个PHP文件,多个互相包含的PHP文件以及基于PHP的CMS项目文件(即存在大量namespace)。
6)漏洞检测分别对这三种类型实施不同的检测规则:
图3显示了一种对单个PHP文件进行反序列化漏洞检测方法流程图。
步骤S101,对单个PHP文件:首先确定此php源代码中是否存在类。优选地,确定所述类是否可反序列化。优选地,确定所述类是否继承了父类或实现了抽象类以找全所有可以反序列化类的调用方法。优选地,确定所述全部类中是否存在__destruct()或者__wakeup()函数,并对全部类中出现的这两个函数:确定所述魔术方法中是否触发了定义好的危险规则。若没有触发危险规则,确定所述魔术方法中是否调用了其他魔术方法或类的自定义函数。进一步地,在所述其他魔术方法和类的自定义函数中递归地进行利用链检测。若在上述步骤中,检测流程中有触发到所述的危险规则,说明代码中存在反序列化漏洞利用链。若检测过程中触发了所述的死循环异常规则或检测正常终止,说明代码中不存在反序列化漏洞利用链。
图4显示了一种对多个PHP源文件通过包含文件的反序列化漏洞利用链检测方法流程图;
步骤S102,对多个互相包含的PHP文件:确定包含文件的函数有include、require、include_once、require_once四个。确定提供的各个源文件是否通过所述包含函数互相引入。进一步地,将所有通过函数引入的php源文件标记;进一步地,在所述标记的php源文件中,任意把某一文件视为主文件,将其他所有所述标记后的源代码附加在主文件之后生成的新的整体代码文件。进一步地,对所述整体代码文件执行所述的第一种对单个php源文件的方法进行检测。
图5显示了一种对基于PHP语言实现的CMS的反序列化漏洞利用链检测方法流程图。
步骤S103,对基于PHP的CMS项目文件(存在大量namespace):标记所有存在命名空间(namespace)的文件,即可以直接反序列化时调用的类。将所述标记文件源代码存入本地数据库中备用。在所述标记文件的数据库中搜寻各个类是否存在__destruct()或者__wakeup()函数。以一个类存在的__destruct()或__wakeup()函数为例,具体步骤如下:步骤201,从数据库中提取当前类所在的源码,确定此函数所在的类是否可反序列化。步骤202,进一步地,在所述的__destruct()或__wakeup()函数中检测其中是否触发了所述的危险规则。步骤203,如果没有触发危险规则,进一步确定所述__destruct()或__wakeup()函数中是否调用了其他魔术方法或类的自定义函数。这里魔术方法和自定义函数的调用范围为上述全部标记并存储到本地数据库中的类。步骤204,进一步地,在所述其他魔术方法和类的自定义函数中递归地进行利用链检测。步骤205,若在上述步骤中,检测流程中触发了危险规则,说明代码中存在反序列化漏洞利用链。步骤206,若检测过程中触发了所述的死循环异常规则或检测正常终止,说明不存在代码中不存在反序列化漏洞利用链。对标记到本地数据库中的代码所有的__destrcut()和__wakeup()都执行步骤201~步骤206操作。
7)最终对上述三种分支方法得到的检测结果最终进行人工分析确认。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。
Claims (6)
1.一种PHP反序列化漏洞利用链检测方法,其特征在于,包括以下步骤:
步骤1、预定义一系列在检测过程中所需用到的各种规则;
步骤2、从待检测的PHP文件中获取源代码信息;
步骤3、根据所述各种规则进行反序列化漏洞利用链检测;在检测过程中将源代码信息划分为三种类型;对三种类型源代码执行不同的检测流程;其中,对基于PHP的CMS项目文件的检测流程将部分源代码存储在本地数据库中;
所述步骤3检测流程包括对单个PHP文件的检测流程、对多个互相包含的PHP文件的检测流程、对基于PHP的CMS项目文件的检测流程;
所述对单个PHP文件的检测流程包括以下步骤:
步骤311、确定php源代码中是否存在类;
步骤312、确定类是否可反序列化;
步骤313、确定类是否继承了父类或实现了抽象类以找全所有可以反序列化类的调用函数;
步骤314、确定全部类中是否存在__destruct()或者__wakeup()函数,并对全部类中出现的这两个函数,确定魔术方法中是否触发了定义好的危险规则;
步骤315、若没有触发危险规则,确定魔术方法中是否调用了其他魔术方法或类的自定义函数;
步骤316、在其他魔术方法和类的自定义函数中递归地进行利用链检测;
步骤317、检测流程中有触发到定义好的危险规则,说明代码中存在反序列化漏洞利用链;若检测过程中触发了死循环异常规则或检测正常终止,说明代码中不存在反序列化漏洞利用链;
所述对多个互相包含的PHP文件的检测流程包括以下步骤:
步骤321、确定包含文件的函数有include、require、include_once、require_once四个;
步骤322、确定提供的各个源文件是否通过包含函数互相引入;
步骤323、将所有通过函数引入的php源文件标记;
步骤324、在标记的php源文件中,任意把某一文件视为主文件,将其他所有标记后的源代码附加在主文件之后生成的新的整体代码文件;
步骤325、对整体代码文件执行所述对单个PHP文件的检测流程进行检测;
所述对基于PHP的CMS项目文件的检测流程包括以下步骤:
步骤331、标记所有存在命名空间(namespace)的文件,即可以直接反序列化时调用的类;
步骤332、将标记文件源代码存入本地数据库中备用;
步骤333、在标记文件的数据库中搜寻各个类是否存在__destruct()或者__wakeup()函数;
步骤334、从数据库中提取当前类所在的源码,确定是否可反序列化;
步骤335、在__destruct()或__wakeup()函数中检测是否触发了危险规则;
步骤336、如果没有触发危险规则,进一步确定__destruct()或__wakeup()函数中是否调用了其他魔术方法或类的自定义函数;
步骤337、在其他魔术方法和类的自定义函数中递归地进行利用链检测;
步骤338、若检测流程中触发了危险规则,说明代码中存在反序列化漏洞利用链;
步骤339、若检测过程中触发了所述的死循环异常规则或检测正常终止,说明代码中不存在反序列化漏洞利用链。
2.如权利要求1所述的PHP反序列化漏洞利用链检测方法,其特征在于,所述步骤1包括定义一系列反序列化可能触发的危险规则。
3.如权利要求1所述的PHP反序列化漏洞利用链检测方法,其特征在于,所述步骤1包括设定触发类的魔术方法规则。
4.如权利要求1所述的PHP反序列化漏洞利用链检测方法,其特征在于,所述步骤1包括设定触发类中的自定义方法规则。
5.如权利要求1所述的PHP反序列化漏洞利用链检测方法,其特征在于,所述步骤1包括设定防止死循环规则。
6.如权利要求1所述的PHP反序列化漏洞利用链检测方法,其特征在于,所述步骤3对结果进行人工分析确认。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110412082.0A CN113010899B (zh) | 2021-04-16 | 2021-04-16 | 一种php反序列化漏洞利用链检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110412082.0A CN113010899B (zh) | 2021-04-16 | 2021-04-16 | 一种php反序列化漏洞利用链检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113010899A CN113010899A (zh) | 2021-06-22 |
CN113010899B true CN113010899B (zh) | 2022-06-07 |
Family
ID=76388927
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110412082.0A Expired - Fee Related CN113010899B (zh) | 2021-04-16 | 2021-04-16 | 一种php反序列化漏洞利用链检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113010899B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114579969B (zh) * | 2022-05-05 | 2022-08-23 | 北京邮电大学 | 漏洞检测方法、装置、电子设备及存储介质 |
CN115577363A (zh) * | 2022-09-15 | 2023-01-06 | 华北电力科学研究院有限责任公司 | 恶意代码反序列化利用链的检测方法及装置 |
CN116049834B (zh) * | 2023-01-11 | 2023-07-21 | 安芯网盾(北京)科技有限公司 | 一种php反序列化漏洞利用链检测方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104462983A (zh) * | 2013-09-22 | 2015-03-25 | 深圳市腾讯计算机系统有限公司 | 一种php源代码处理方法及系统 |
CN107832617A (zh) * | 2017-09-15 | 2018-03-23 | 北京知道未来信息技术有限公司 | 一种php代码执行漏洞的黑盒检测方法及装置 |
CN111143851A (zh) * | 2019-12-11 | 2020-05-12 | 上海交通大学 | 适用于操作系统内核对象地址泄露的检测方法及系统 |
CN111931185A (zh) * | 2020-08-11 | 2020-11-13 | 深信服科技股份有限公司 | 一种Java反序列化漏洞检测方法及组件 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPWO2006087780A1 (ja) * | 2005-02-17 | 2008-07-03 | 富士通株式会社 | 脆弱性監査プログラム、脆弱性監査装置、脆弱性監査方法 |
CN103164331B (zh) * | 2011-12-15 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 一种应用程序的漏洞检测方法和装置 |
US9426177B2 (en) * | 2013-07-15 | 2016-08-23 | Tencent Technology (Shenzhen) Company Limited | Method and apparatus for detecting security vulnerability for animation source file |
CN108459954B (zh) * | 2017-02-22 | 2022-08-26 | 腾讯科技(深圳)有限公司 | 应用程序漏洞检测方法和装置 |
CN108418901A (zh) * | 2018-04-08 | 2018-08-17 | 上海国烨跨境电子商务有限公司 | 基于php的高性能远程过程调用方法 |
-
2021
- 2021-04-16 CN CN202110412082.0A patent/CN113010899B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104462983A (zh) * | 2013-09-22 | 2015-03-25 | 深圳市腾讯计算机系统有限公司 | 一种php源代码处理方法及系统 |
CN107832617A (zh) * | 2017-09-15 | 2018-03-23 | 北京知道未来信息技术有限公司 | 一种php代码执行漏洞的黑盒检测方法及装置 |
CN111143851A (zh) * | 2019-12-11 | 2020-05-12 | 上海交通大学 | 适用于操作系统内核对象地址泄露的检测方法及系统 |
CN111931185A (zh) * | 2020-08-11 | 2020-11-13 | 深信服科技股份有限公司 | 一种Java反序列化漏洞检测方法及组件 |
Non-Patent Citations (1)
Title |
---|
姜开达.使用Snort+BASE快速搭建校园网入侵检测平台.《中国教育网络》.2007,(第12期),77. * |
Also Published As
Publication number | Publication date |
---|---|
CN113010899A (zh) | 2021-06-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113010899B (zh) | 一种php反序列化漏洞利用链检测方法 | |
US10146532B2 (en) | Apparatus and method for detecting code cloning of software | |
CN110941528B (zh) | 一种基于故障的日志埋点设置方法、装置及系统 | |
Grieco et al. | QuickFuzz: An automatic random fuzzer for common file formats | |
CN110704306B (zh) | 测试中的断言处理方法、装置、设备及存储介质 | |
CN111144839B (zh) | 一种项目构建方法、持续集成系统及终端设备 | |
US20220207144A1 (en) | Behavioral threat detection definition and compilation | |
Gauthier et al. | AFFOGATO: runtime detection of injection attacks for node. js | |
US20230252135A1 (en) | Behavioral threat detection definition and compilation | |
Park et al. | {FUGIO}: Automatic Exploit Generation for {PHP} Object Injection Vulnerabilities | |
US20230065259A1 (en) | Method and apparatus for protecting smart contracts against attacks | |
CN112559344A (zh) | 远程mock测试方法及系统 | |
Pap et al. | Checking general safety criteria on UML statecharts | |
KR101428915B1 (ko) | 안드로이드 보안을 위한 피드백 기반 어플리케이션 재가공 프레임워크 방법과 그 시스템 | |
CN112558947B (zh) | 程序调用追踪方法、装置以及存储介质 | |
Jayasuriya et al. | Understanding Breaking Changes in the Wild | |
Laranjeiro et al. | A learning-based approach to secure web services from SQL/XPath Injection attacks | |
US8291389B2 (en) | Automatically detecting non-modifying transforms when profiling source code | |
CN110162477A (zh) | 一种第三方库版本升级的异常自动调试系统及方法 | |
Foster et al. | Improving software quality with static analysis | |
CN114417347A (zh) | 应用程序的漏洞检测方法、装置、设备、存储介质和程序 | |
KR20230025144A (ko) | 바이너리 정적 분석을 통해 얻은 타입 정보를 활용하는 윈도우 커널 퍼징 기법 | |
CN113626823A (zh) | 一种基于可达性分析的组件间交互威胁检测方法及装置 | |
Xie et al. | Automatically detecting exception handling defects in android applications | |
Delicheh et al. | Quantifying Security Issues in Reusable JavaScript Actions in GitHub Workflows |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20220607 |