CN116541022A - 一种基于语义状态图的php二阶漏洞的自动化挖掘方法 - Google Patents

一种基于语义状态图的php二阶漏洞的自动化挖掘方法 Download PDF

Info

Publication number
CN116541022A
CN116541022A CN202310551060.1A CN202310551060A CN116541022A CN 116541022 A CN116541022 A CN 116541022A CN 202310551060 A CN202310551060 A CN 202310551060A CN 116541022 A CN116541022 A CN 116541022A
Authority
CN
China
Prior art keywords
function
request
php
log
state diagram
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.)
Pending
Application number
CN202310551060.1A
Other languages
English (en)
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.)
Beihang University
Original Assignee
Beihang University
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 Beihang University filed Critical Beihang University
Priority to CN202310551060.1A priority Critical patent/CN116541022A/zh
Publication of CN116541022A publication Critical patent/CN116541022A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/951Indexing; Web crawling techniques
    • 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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于语义状态图的PHP二阶漏洞的自动化挖掘方法,包括基于动态日志和污点分析的语义状态图模型和基于语义状态图的自动化漏洞挖掘方法。构建语义状态图包含两部分,一方面通过爬虫和搭建运行时监控程序,使用粗粒度的动态污点分析对持久化存储进行建模,在语义状态图上设置服务端状态节点;另一方面通过静态分析法来发现脆弱函数,并对脆弱函数的参数进行回溯,在语义状态图上设置源代码语义节点。自动化挖掘方法首先对语义状态图中的疑似二阶漏洞路径求解,根据攻击向量库和基于模糊测试的方法验证二阶漏洞的存在性。利用上述方法实现二阶漏洞的自动化挖掘,可以快速地定位疑似二阶漏洞所在位置,获取请求间的关联关系,同时自动化完成疑似二阶漏洞的验证。通过该方法能够提高二阶漏洞的挖掘效率,并且提高二阶漏洞挖掘的全面性。

Description

一种基于语义状态图的PHP二阶漏洞的自动化挖掘方法
技术领域
本发明涉及对PHP二阶漏洞的漏洞挖掘技术领域,更特别地说,是指一种基于语义状态图的PHP二阶漏洞的自动化挖掘方法。
背景技术
随着Web应用程序的快速发展,已有相当一部分的关键业务依托Web应用展开,Web应用已经成为现代社会中不可或缺的一部分。目前大部分网站使用PHP(HypertextPreprocessor,超文本预处理器)作为后端开发语言。
二阶漏洞(Second-Order Vulnerability,SOV)是指用户输入的数据(被污染的数据)不直接进入漏洞点,而是先存入持久化存储区,当污染的数据再次从持久化存储区(Persistent Data Store,PDS)中取出来并且没有经过适当的净化处理进入漏洞触发点导致的漏洞。根据PHP Web应用二级漏洞的形式(显式或隐式),可分为二级跨站脚本漏洞(Second-Order Cross-Site Scripting Vulnerability,SOXSSV)和二级远程代码执行漏洞(Second-Order Remote Code Execute Vulnerability,SORCEV)。
随着漏洞分析技术和入侵检测技术的完善,通过单步请求触发的漏洞攻击已得到有效的缓解。为了隐藏自己的攻击行为,攻击者追求的攻击方式越来越隐蔽,并将目光转移到PDS中。触发SOV的数据流会流经PDS,传统的流式检测方法难以分析间断的数据流,攻击者利用这种攻击方法具有较高的隐蔽性。触发SOV的数据流会永久保存在PDS中,会对Web应用造成持久化的影响,且大多数开发者并未意识到数据库中存储的数据是不安全的,以至于不会对其做任何过滤,导致SOV具有较强的攻击性。由于SOV具有高隐蔽性和高攻击性的特点,应用安全和用户隐私保护问题随之而来。用户会话被劫持、用户凭据被窃取、未授权操作被执行等一系列安全问题对Web应用的执行安全以及用户的信息安全都产生了巨大的威胁,如何应对和解决Web应用SOV挖掘日益迫切。但是,SOV检测面临着诸多不同的严峻挑战,而自动化挖掘是SOV极具挑战性的设计问题之一。如何设计并实现适用于PHP Web应用SOV自动化挖掘方法,成为迫切需要解决的问题。
静态分析技术(Static Analysis Techniques)是以人为定义的漏洞模型为指导,在源代码中进行漏洞分析的一种方法,其中污点分析技术(Taint Analysis Techniques)最为主流。该分析技术的基本思想是,构建代码的抽象语法树(Abstract Syntax Tree,AST),跟踪用户输入的数据(Source)在代码中的传递路径,并判断是否存在敏感的数据流汇点(Sink),例如数据库查询、系统调用和文件操作等。同时,该技术还会判断是否存在对用户输入的数据进行有效的过滤或验证,以便发现程序中的漏洞。
动态分析技术(Dynamic Analysis Techniques)可以记录目标程序的执行轨迹,进而分析程序在运行时的内存读写操作、函数调用关系以及内存分配/释放等信息,主要包括爬虫、日志监控和模糊测试技术。爬虫技术可以模拟用户行为,自动发现网站中的链接并进行爬取,支持JavaScript渲染,可以爬取动态网站。XDEBUG是一个用于PHP调试和分析的开源扩展,提供堆栈跟踪、代码覆盖率分析、性能分析和远程调试等功能。模糊测试技术以黑盒或灰盒测试的思想为基础,使用大量的半有效数据作为程序输入,监视程序在运行过程中是否出现异常,并记录导致异常的输入数据,以进一步定位程序中缺陷的位置,从而发现可能存在的安全漏洞。
动静态结合的分析技术(Dynamic and Static Analysis Techniques)充分利用了静态分析技术的全面性和动态分析技术的准确性,通过使用动态分析的方法对静态分析的结果进行验证,能够获得更加精确的结果,同时降低误报率。
而在SOV挖掘中,要求自动化检测方法能够对流经PDS的数据流进行建模,这就要求污点分析能够跨越PDS进行分析。传统的静态和动静态结合的分析方法主要采用静态数据流分析,通过对数据库的元数据进行建模来构建完整的数据流,但是这些方法难以应对现代Web应用的动态性,而且根据对过滤函数的判断条件会产生大量误报和漏报。传统的动态分析方法采用动态爬虫和模糊测试方法,通过向页面的所有字段进行填充,来构建不同页面之间的数据依赖关系,但是这些方法只能判断能够在页面回显信息的SOV,不能检测SORCEV等会在后台执行命令的漏洞。
综上,传统的SOV挖掘方案难以自动化挖掘PHP Web应用的二阶漏洞,而且部分方案依靠大量遍历来实现挖掘,导致整体效率较低。
为了克服上述自动化挖掘PHP Web应用的二阶漏洞中存在的缺陷,本发明提出了一种基于语义状态图的PHP二阶漏洞自动化挖掘方法。本发明方法能够使开发者用来检测开发的Web应用,并提前发现PHP二阶漏洞,以加强PHP Web应用安全和用户的隐私信息安全。本发明设计基于动态日志和静态污点分析的语义状态图(SSG)模型,并根据该模型设计构建和求解方法实现PHP二阶漏洞自动化漏洞挖掘。本发明方法可以快速地定位疑似二阶漏洞的路径,同时构建不同请求之间的关联关系,同时自动化完成疑似二阶漏洞的验证。通过该方法不仅能够提高PHP Web应用中二阶漏洞的挖掘效率,并且提高二阶漏洞挖掘的全面性。
本发明的一种基于动态日志和静态污点分析的语义状态图模型的构建方法,其包括有下列构建步骤:
构建步骤一,初始化SSG模型;
采用动态运行日志和静态污点分析相结合构建得到的语义状态图,简称为SSG模型;
初始时SSG模型为空集;
SSG模型的数学模型表示为SSG={DV,DE,DT,DR};
构建步骤二,构建PHP Web应用结构;
步骤201,获取PHP Web应用源码,部署PHP Web应用,记为TSC;
该步骤中,部署PHP Web应用的环境可选用Linux系统,使用Nginx做Web服务器,使用MySQL作为数据库支撑,使用PHP作为代码解释器;
步骤202,注册PHP Web应用的账号;
该步骤中,注册账号能够让爬虫爬取到更多的网页;
步骤203,启动爬虫,设置所爬取的PHP Web应用入口地址、账号、密码和可选COOKIES;
步骤204,输出爬虫结果,记为crawler_result,且crawler_result={ri|ri=(url,method,header,data)};其中,任意一个元素ri,url表示请求地址,method表示请求方法,header表示请求头,data表示请求内容;
该步骤中,每个元素ri都对应一个HTTP请求,ri包含的数据内容能够重建出对应网页的HTTP请求,该请求能够访问Web应用,使Web应用发生状态转移;
构建步骤三,构建动态PDS子图;
步骤301,初始化XDEBUG,开启动态日志记录功能;
该步骤可采用PHP调试工具XDEBUG,能够将每一个HTTP请求,对后端的运行代码进行记录;
步骤302,设置日志跟踪函数;
以MySQL数据库为PDS的示例,跟踪的函数保留字和正则表达式;
步骤303,引入步骤204的爬虫结果crawler_result,记录所有请求对应日志集MLOG={LOG1,LOG2,…,LOGi,…,LOGn},构建请求层和PHP文件层节点及关系;
该步骤中,首先读取crawler_result,循环遍历crawler_result中所有ri,对每一个ri重新构建成HTTP请求并发送给Web服务器,并将该HTTP请求构建请求层节点Vi REQ,根据ri中header确定请求层的具体跳转关系LINKinside、FORMinside或JAVASCRIPTinside,同时将该HTTP请求触发的日志记为LOGi
其中,构建HTTP请求时,需在GET请求或POST请求的参数中加入名为XDEBUG_TRACE的变量,来触发XDEBUG的日志记录功能;
步骤304,读取日志LOGi,向语义状态图PHP文件层、函数层和PDS结构层添加节点和关系;
该步骤中,通过步骤302的正则匹配函数匹配到跟踪函数所在日志的行号,抽取该行内容得到(path,line),构建PHP文件层节点Vj PHPFILE
拆分跟踪函数,获得数据库操作字段和数据库表字段,构建函数层节点Vi FUNC=(in),构建PDS结构层节点Vi BASE=(guestbook);记录读出文件及代码所在行号,记为select_result={sr|sr=(path,line)};最后,根据数据的流动方向,对层间关系进行构建;
步骤305,读取日志LOGi,向语义状态图PHP文件层添加内部关系;
该步骤中,使用单调栈的数据结构,从上到下依次读取日志LOGi,通过关键字判断文件包含关系,处理到的每个PHP文件的层级保证不会比栈中节点层级高,也就保证了不同文件的包含关系,通过INCLUDEinside关系来连接;
步骤306,循环步骤304和305,直到遍历完MLOG;
构建步骤四,构建静态脆弱函数子图;
步骤401,初始化脆弱函数字典,读取源代码,加载步骤304得到的select_result;
该步骤中,设置二阶漏洞的脆弱函数字典dict={echo,print,eval,assert,system,exec,passthru};
步骤402;根据脆弱函数字典,在源代码中进行全文正则匹配,获取脆弱函数所在文件以及代码行号;
步骤403,将该文件的源代码转换成抽象语法树,对脆弱函数中的所有参数进行回溯,向语义状态图FUNC层添加内部关系;直到找到最初的变量或者到达select_result中任意一个位置sri;如果匹配到select_result中所在位置sri,则向语义状态图函数层添加节点通过PROPAGATEinside构建/>与sri对应的/>的关系。
与现有技术相比本发明基于语义状态图的PHP二阶漏洞自动化挖掘方法的优点在于:
①本发明设计的SSG模型,能够建立请求和PHP文件之间的关联关系,能够将动态分析的准确性和静态分析的全面性结合。
②本发明在构建SSG过程中,通过动态分析,解决了静态分析方法难以分析PDS的数据流问题;在动态分析基础上引入静态分析,能够发现不在页面回显的二阶漏洞,能够更全面的发现二阶漏洞的触发点。
③本发明设计的基于SSG模型的PHP二阶漏洞自动化挖掘方法,采用渐进式求解的方式对SSG进行路径搜索,能够快速确定疑似二阶漏洞的注入点和触发点,避免传统方法使用大量回溯方法带来的计算量大的缺点。
④本发明在PHP二阶漏洞自动化挖掘过程中,采用了动态污染跟踪方法搜索动态疑似二阶漏洞,采用了静态脆弱函数关联方法搜索静态疑似二阶漏洞,构建二阶漏洞所在PHP文件、及其注入和触发请求的关联关系,最后基于模糊测试验证二阶漏洞,能够自动化挖掘二阶漏洞。
⑤本发明SSG模型与二阶漏洞自动化挖掘方法相结合,能够完成PHP Web二阶漏洞自动挖掘目的,提升挖掘效率同时有更高的检测率。
附图说明
图1是本发明构建SSG模型的流程图。
图2是语义状态图的结构图。
图3是基于动态日志和静态污点分析的语义状态图构建流程图。
图4是截取日志示意图。
图5是二阶漏洞自动化挖掘的技术路线图。
具体实施方式
下面将结合附图和实施例对本发明做进一步的详细说明。
第一部分,基于动态日志和静态污点分析的语义状态图模型,即SSG模型
参见图1所示,本发明采用动态运行日志和静态污点分析相结合构建得到的语义状态图,简称为SSG模型。所述SSG模型能够完整体现PHP二阶漏洞的触发过程,并且自动验证漏洞的存在性。
如图1、图2所示,构建的SSG模型有四层结构,分别是请求层、PHP文件层、函数层和PDS结构层。(1)请求层,本层对动态请求进行建模,能够体现PHP Web应用所有的和用户交互的接口,同时也能够表现页面的关系图,体现PHP Web应用程序前端状态的导航结构。(2)PHP文件层,本层为承上启下层,根据动态分析的结果和执行了PHP文件的相关代码存在强相关性,可以将更底层的代码语义通过该层和请求层关联起来。(3)函数层,本层表示能够将对持久化存储的读写函数、脆弱函数进行聚合,确定数据的流动方向。(4)PDS结构层,本层表示数据库表的逻辑信息,根据该信息对请求之间的关系进行关联。
在本发明中,SSG模型的数学模型表示为SSG={DV,DE,DT,DR}。
DV表示节点集合,且DV={V1,V2,…,Va,…,Vb,…,VX},下角标a表示节点标识号,下角标X表示节点总数。V1表示第1个节点,V2表示第2个节点,Va表示第a个节点(也称为任意一个节点),Vb表示第b个节点(也称为任意另一个节点),VX表示最后一个节点。
DE表示节点之间的连边形成的边集合。
DT表示节点身份类型,且DT={REQ,PHPFILE,FUNC,BASE}。
REQ为请求类身份节点。请求类节点REQ包括的内容有:页面唯一状态id、请求地址url、请求方法method、请求内容data和身份信息role,即REQ=(id,url,method,data,role)。
PHPFILE为PHP文件类身份节点。所述PHPFILE包含有PHP文件所在的路径,记为path。
FUNC为函数类身份节点。函数节点FUNC包括的内容有:PDS写入函数in、PDS读出函数out和脆弱函数sink,即FUNC=(in,out,sink)。
BASE为PDS结构层身份节点。所述BASE包含有PDS结构层的名称,记为name。在本发明中,name对应的是PHP Web应用的数据库表名。
所述
DR表示节点之间的层属关系。在本发明中,层属关系分为层内部关系inside和层间关系outside,即DR=[inside,outside]。
其中,层内部关系inside包含的内容有跳转关系LINKinside、表单跳转关系FORMinside、脚本跳转关系JAVASCRIPTinside、包含关系INCLUDEinside和数据传播关系PROPAGATEinside,即位于请求层内部关系的有LINKinside、FORMinside和JAVASCRIPTinside。位于PHP文件层内部关系的有INCLUDEinside。位于函数层内部关系的有PROPAGATEinside
其中,层间关系outside包含的内容有调用关系CALLoutside、包含函数关系CONTAINoutside、输入关系INoutside和输出关系OUToutside,即outside={CALLoutside,CONTAINoutside,INoutside,OUToutside}。
所述
所述
在构建SSG模型过程中,采用动态分析为主,静态分析为辅的方式对二阶漏洞进行建模。技术方案如图3所示。在本发明的基于动态日志和静态污点分析的语义状态图构建过程中,一方面通过爬虫和搭建运行时监控程序,使用粗粒度的动态污点分析对持久化存储进行建模,能够更好的表现服务端动态状态;另一方面通过静态分析方法来发现脆弱函数,并对脆弱函数的参数进行回溯,在PHP Web应用的源代码中提取语义,能够更加全面的发现二阶漏洞。
构建步骤一,初始化SSG模型;
初始时SSG模型为空集。
SSG模型的数学模型表示为SSG={DV,DE,DT,DR}。
DV表示节点集合。
DE表示节点之间的连边形成的边集合。
DT表示节点身份类型。
DR表示节点之间的层属关系。
构建步骤二,构建PHP Web应用结构;
步骤201,获取PHP Web应用源码,部署PHP Web应用,记为TSC;
该步骤中,部署PHP Web应用的环境可选用Linux系统,使用Nginx做Web服务器,使用MySQL作为数据库支撑,使用PHP作为代码解释器。
步骤202,注册PHP Web应用的账号;
该步骤中,注册账号能够让爬虫爬取到更多的网页。
步骤203,启动爬虫,设置所爬取的PHP Web应用入口地址、账号、密码和可选COOKIES;
该步骤中,首先需要建立爬虫环境,如关闭浏览器的一些影响页面内容渲染的选项,在不影响页面渲染的情况下加快爬虫速度,同时设置好浏览器的UA、开启请求拦截、注入初始化的HOOK代码,可采用开源工具crawlergo进行调用。crawlergo的下载地址:https://github.com/Qianlitp/crawlergo。
步骤204,输出爬虫结果,记为crawler_result,且crawler_result={ri|ri=(url,method,header,data)};其中,任意一个元素ri,url表示请求地址,method表示请求方法,header表示请求头,data表示请求内容。
该步骤中,每个元素ri都对应一个HTTP请求,ri包含的数据内容能够重建出对应网页的HTTP请求,该请求能够访问Web应用,使Web应用发生状态转移。
在本发明中,经构建步骤二处理得到的是输入为应用源码TSC,输出为爬虫结果crawler_result。
构建步骤三,构建动态PDS子图;
步骤301,初始化XDEBUG,开启动态日志记录功能;
该步骤可采用PHP调试工具XDEBUG,能够将每一个HTTP请求,对后端的运行代码进行记录。为了能够降低开销,采取关键字触发的模式,对请求的日志进行记录。设置方法参考https://xdebug.org/docs/profiler。
步骤302,设置日志跟踪函数;
本发明以MySQL数据库为PDS的示例,跟踪的函数保留字和正则表达式。
例如:数据库写入函数:INSERT,对应INSERT\s+INTO\s+[\d\w\.]+。
例如:数据库更新函数:UPDATE,对应UPDATE\s+[\d\w\.]+\s+SET。
例如:数据库更新函数:REPLACE,对应INSERT\s+INTO\s+[\d\w\.]+。
例如:数据库读取函数:SELECT,对应SELECT.+FROM\s+[\d\w\.]+。
步骤303,引入步骤204的爬虫结果crawler_result,记录所有请求对应的日志、以及用于构建请求层和PHP文件层节点的关系;
在本发明中,请求对应的日志集记为MLOG,且MLOG={LOG1,LOG2,…,LOGi,...,LOGn}中包含有第1个请求对应的日志LOG1、第2个请求对应的日志LOG2、第i个请求对应的日志LOGi、第n个请求对应的日志LOGn
该步骤中,首先读取crawler_result,循环遍历crawler_result中所有ri,对每一个ri重新构建成HTTP请求并发送给Web服务器,并将该HTTP请求构建请求层节点Vi REQ,根据ri中header确定请求层的具体跳转关系LINKinside、FORMinside或JAVASCRIPTinside,同时将该HTTP请求触发的日志记为LOGi
其中,构建HTTP请求时,需在GET请求或POST请求的参数中加入名为XDEBUG_TRACE的变量,来触发XDEBUG的日志记录功能。日志内容如图4所示,日志按行来记录,将日志结果表示为LOGi={l|l=(time,func,path,line)},其中,l表示日志行号,包括time表示时间、func表示调用的函数、path表示PHP文件路径,line表示执行的代码行号。
然后,根据LOGi第2行(每个LOGi都存在,且包含关键字main),构建PHP层节点Vi PHPFILE,path即最后一个字段,如图4中的/srv/http/dvwa/vulnerabilities/xss_s/index.php。再通过CALLoutside构建Vi REQ和Vi PHPFILE的关系。
步骤304,读取日志LOGi,向语义状态图PHP文件层、函数层和PDS结构层添加节点和关系;
该步骤中,通过步骤302的正则匹配函数匹配到跟踪函数所在日志的行号,抽取该行内容得到(path,line),构建PHP文件层节点Vj PHPFILE。如图3所示,跟踪到位置为蓝色选中状态,对应的path和line分别为:/srv/http/dvwa/vulnerabilities/xss_s/index.php和“19”。
拆分跟踪函数,获得数据库操作字段和数据库表字段,如操作数据库字段为INSERT,表名为guestbook,构建函数层节点Vi FUNC=(in),构建PDS结构层节点Vi BASE=(guestbook)。注意,读取函数需要额外处理,记录读出文件及代码所在行号,记为select_result={sr|sr=(path,line)}。最后,根据数据的流动方向,对层间关系进行构建,如本例中,通过INoutside构建Vi FUNC和Vi BASE的关系,通过CONTAINoutside构建和Vi FUNC的关系。
步骤305,读取日志LOGi,向语义状态图PHP文件层添加内部关系。
该步骤中,构建的是步骤304中PHP文件节点与步骤303中PHP文件节点的包含关系。如图2中PHP文件层F1和F3的关系,F1包含F2,F2包含F3。
该步骤使用单调栈的数据结构,从上到下依次读取日志LOGi,通过关键字“->”判断文件包含关系,处理到的每个PHP文件的层级保证不会比栈中节点层级高,也就保证了不同文件的包含关系,通过INCLUDEinside关系来连接。
步骤306,循环步骤304和305,直到遍历完MLOG;
构建步骤四,构建静态脆弱函数子图;
步骤401,初始化脆弱函数字典,读取源代码,加载步骤304得到的select_result;
该步骤中,设置二阶漏洞的脆弱函数字典dict={echo,print,eval,assert,system,exec,passthru}。
步骤402;根据脆弱函数字典,在源代码中进行全文正则匹配,获取脆弱函数所在文件以及代码行号。
步骤403,将该文件的源代码转换成抽象语法树,对脆弱函数中的所有参数进行回溯,向语义状态图FUNC层添加内部关系。接着抽取脆弱函数中的参数,对每个参数启动变量分析函数,变量分析函数会在抽象语法树中寻找赋值语句,将赋值语句中的右值作为新变量进行递归分析,直到找到最初的变量或者到达select_result中任意一个位置sri。如果匹配到select_result中所在位置sri,则向语义状态图函数层添加节点通过PROPAGATEinside构建/>与sri对应的/>的关系。
在本发明中,抽象语法树参考2007年第34卷增刊Ⅰ《北京化工大学学报》,“基于抽象语法树的代码静态自动测试方法研究”,作者高传平,对源代码转换成抽象语法树。
在本发明中,经构建步骤三和步骤四得到的是输入为源码TSC和爬虫结果crawler_result,输出为语义状态图。
第二部分,应用SSG模型进行PHP二阶漏洞自动化挖掘
在本发明中,应用SSG模型,对Web应用的运行信息以及源代码信息进行表示。然后,对SSG模型进行求解,自动验证二阶漏洞的存在性。本发明二阶漏洞自动化挖掘方法如图5所示。该方法首先对语义状态图中的疑似二阶漏洞路径求解,根据攻击向量库和基于模糊测试方法验证疑似二阶漏洞的可触发性。通过渐进式求解的方式来提高漏洞的挖掘效率。
步骤一,构建语义状态图,采集PHP Web应用中的动态运行日志和源代码信息;
该步骤中,按本发明第一部分,首先初始化SSG,初始化Web应用环境,初始化XDEBUG。
然后获取PHP Web应用源码,部署PHP Web应用,记为TSC。
注册用户,启动爬虫,设置所爬取的PHP Web应用入口地址、账号、密码和可选COOKIES;
记录爬虫结果crawler_result当前,重放爬虫结果crawler_result当前,记录所有请求当前对应日志集MLOG当前,构建请求层和PHP文件层节点间关系;
循环读取日志LOGi,向语义状态图PHP文件层、函数层和PDS结构层添加节点和关系。
读取源代码,根据脆弱函数字典,在源代码中进行全文正则匹配,获取脆弱函数所在文件以及代码行号,将该文件的源代码转换成抽象语法树,对脆弱函数中的所有参数进行回溯,向语义状态图FUNC层添加内部关系。
步骤二,基于模式匹配方法,发现疑似的二阶漏洞路径suspath=(REQ注入,REQ触发);
REQ注入表示能够向PDS中注入数据的请求。
REQ触发表示能够触发PDS中恶意代码的请求。
步骤2A,读取语义状态图中PDS结构层节点,搜索连接该节点属性为INoutside的所有节点,前向搜索注入点请求列表,记为list_in,且
搜索连接该节点属性为OUToutside的所有节点,后向搜索触发点请求列表,记为list_out,且
全局搜索脆弱函数请求列表,记为list_sink,且并确定和BASE的关系。
该步骤中,PDS结构层节点作为中间节点,可以在语义状态图中对数据库表名table、写入函数in、PDS读出函数out和脆弱函数sink进行搜索,能够将请求、文件、函数进行关联。
步骤2B,静态疑似路径求解;
该步骤中,如果sink函数相关数据为空,则跳过静态疑似路径求解阶段。如果sink函数相关数据不为空,将in函数相关数据中的所有请求list_in,和sink函数相关数据的所有请求list_sink进行关联,关联包括对所有的请求及其参数进行关联,加入suspath集合中。
步骤2C,动态疑似路径求解;
该步骤中,采用动态的污染跟踪来实现注入请求和读出请求的关联,首先分析in函数相关数据中的所有请求list_in,如果请求能够向该表注入信息,则识别出该请求的所有字段,向所在字段提交一个唯一的标记token。在此之后,访问out函数相关数据中的所有请求list_out,如果在响应中能够寻找到唯一的标记,则将该注入请求和该响应请求加入suspath集合中。
步骤三,基于模糊测试方法,验证疑似的二阶漏洞路径,输出漏洞报告result;
步骤3A,读取攻击向量数据库,读取步骤四得到的疑似二阶漏洞路径suspath,启动网页监控器;
该步骤中,攻击向量库可在github上寻找得到,例如:
https://github.com/payloadbox/xss-payload-list。
https://github.com/payloadbox/command-injection-payload-list。
网页监控器使用python完成,判断网页的响应是否包含弹出对话框的脚本,用于验证攻击向量是否成功触发漏洞;
步骤3B,循环向REQ注入注入攻击向量,并监控REQ触发的响应结果,输出漏洞报告。
该步骤中,随机选取并注入攻击向量,根据网页监控器来判断是否成功,如果成功则输出二阶漏洞报告result并结束验证,未成功则选取新的攻击向量,直到漏洞触发成功或达到最大的尝试次数。
实施例1
部署PHP Web应用,与BLACK WIDOW、Burp Suite Pro工具在PHP Web应用的二阶漏洞挖掘能力上进行对比。本发明方法在DVWA、PIKACHU、SCARF等PHP Web应用上进行了实验验证。实验结果显示本发明法名能够有效检测二阶漏洞,与其他工具相比能够在更短的时间内发现更多的漏洞。时间开销和漏洞数量结果如表所示:
表1检测能力对比
表2时间开销对比
在检测能力对比实验中,本发明方法在监控运行时状态的同时引入了静态分析,相比Black Widow和Burp Suite Pro来说,能够更加全面的找到PHP Web应用的脆弱函数所在位置。如表1所示,本发明方法能够找到更多的漏洞。在检测时间开销对比实验中,本发明方法不仅监控了页面的内容,还包括动态运行的日志,通过语义状态图的层次结构,将不同类型的请求通过PDS结构进行关联,大大缩减了二阶漏洞的搜索空间,而Black Widow和Burp Suite Pro只监控页面内容,导致需要大量的遍历分析。如表2所示,本发明方法能够显著降低二阶漏洞的时间开销。

Claims (2)

1.一种基于动态日志和静态污点分析的语义状态图模型的构建方法,其特征在于包括有下列构建步骤:
构建步骤一,初始化SSG模型;
采用动态运行日志和静态污点分析相结合构建得到的语义状态图,简称为SSG模型;
初始时SSG模型为空集;
SSG模型的数学模型表示为SSG={DV,DE,DT,DR};
构建步骤二,构建PHP Web应用结构;
步骤201,获取PHP Web应用源码,部署PHP Web应用,记为TSC;
该步骤中,部署PHP Web应用的环境可选用Linux系统,使用Nginx做Web服务器,使用MySQL作为数据库支撑,使用PHP作为代码解释器;
步骤202,注册PHP Web应用的账号;
该步骤中,注册账号能够让爬虫爬取到更多的网页;
步骤203,启动爬虫,设置所爬取的PHP Web应用入口地址、账号、密码和可选COOKIES;
步骤204,输出爬虫结果,记为crawler_result,且crawler_result={ri|ri=(url,method,header,data)};其中,任意一个元素ri,url表示请求地址,method表示请求方法,header表示请求头,data表示请求内容;
该步骤中,每个元素ri都对应一个HTTP请求,ri包含的数据内容能够重建出对应网页的HTTP请求,该请求能够访问Web应用,使Web应用发生状态转移;
构建步骤三,构建动态PDS子图;
步骤301,初始化XDEBUG,开启动态日志记录功能;
该步骤可采用PHP调试工具XDEBUG,能够将每一个HTTP请求,对后端的运行代码进行记录;
步骤302,设置日志跟踪函数;
以MySQL数据库为PDS的示例,跟踪的函数保留字和正则表达式;
步骤303,引入步骤204的爬虫结果crawler_result,记录所有请求对应日志集MLOG={LOG1,LOG2,...,LOGi,...,LOGn},构建请求层和PHP文件层节点及关系;
该步骤中,首先读取crawler_result,循环遍历crawler_result中所有ri,对每一个ri重新构建成HTTP请求并发送给Web服务器,并将该HTTP请求构建请求层节点Vi REQ,根据ri中header确定请求层的具体跳转关系LINKinside、FORMinside或JAVASCRIPTinside,同时将该HTTP请求触发的日志记为LOGi
其中,构建HTTP请求时,需在GET请求或POST请求的参数中加入名为XDEBUG_TRACE的变量,来触发XDEBUG的日志记录功能;
步骤304,读取日志LOGi,向语义状态图PHP文件层、函数层和PDS结构层添加节点和关系;
该步骤中,通过步骤302的正则匹配函数匹配到跟踪函数所在日志的行号,抽取该行内容得到(path,line),构建PHP文件层节点
拆分跟踪函数,获得数据库操作字段和数据库表字段,构建函数层节点Vi FUNC=(in),构建PDS结构层节点Vi BASE=(guestbook);记录读出文件及代码所在行号,记为select_result={sr|sr=(path,line)};最后,根据数据的流动方向,对层间关系进行构建;
步骤305,读取日志LOGi,向语义状态图PHP文件层添加内部关系;
该步骤中,使用单调栈的数据结构,从上到下依次读取日志LOGi,通过关键字判断文件包含关系,处理到的每个PHP文件的层级保证不会比栈中节点层级高,也就保证了不同文件的包含关系,通过INCLUDEinside关系来连接;
步骤306,循环步骤304和305,直到遍历完MLOG;
构建步骤四,构建静态脆弱函数子图;
步骤401,初始化脆弱函数字典,读取源代码,加载步骤304得到的select_result;
该步骤中,设置二阶漏洞的脆弱函数字典dict={echo,print,eval,assert,system,exec,passthru};
步骤402;根据脆弱函数字典,在源代码中进行全文正则匹配,获取脆弱函数所在文件以及代码行号;
步骤403,将该文件的源代码转换成抽象语法树,对脆弱函数中的所有参数进行回溯,向语义状态图FUNC层添加内部关系;直到找到最初的变量或者到达select_result中任意一个位置sri;如果匹配到select_result中所在位置sri,则向语义状态图函数层添加节点通过PROPAGATEinside构建/>与sri对应的/>的关系。
2.应用权利要求1的SSG模型进行PHP二阶漏洞的自动化挖掘方法,其特征在于包括有下列挖掘步骤:
步骤一,构建语义状态图,采集PHP Web应用中的动态运行日志和源代码信息;
首先初始化SSG,初始化Web应用环境,初始化XDEBUG;
然后获取PHP Web应用源码,部署PHP Web应用,记为TSC;
注册用户,启动爬虫,设置所爬取的PHP Web应用入口地址、账号、密码和可选COOKIES;
记录爬虫结果crawler_result当前,重放爬虫结果crawler_result当前,记录所有请求当前对应日志集LOG当前,构建请求层和PHP文件层节点及关系;
循环读取日志LOGi,向语义状态图PHP文件层、函数层和PDS结构层添加节点和关系;
读取源代码,根据脆弱函数字典,在源代码中进行全文正则匹配,获取脆弱函数所在文件以及代码行号,将该文件的源代码转换成抽象语法树,对脆弱函数中的所有参数进行回溯,向语义状态图FUNC层添加内部关系;
步骤二,基于模式匹配方法,发现疑似的二阶漏洞路径suspath=(REQ注入,REQ触发);
步骤2A,读取语义状态图中PDS结构层节点,搜索连接该节点属性为INoutside的所有节点,前向搜索注入点请求列表为list_in;
搜索连接该节点属性为OUToutside的所有节点,后向搜索触发点请求列表为list_out;
全局搜索脆弱函数请求列表为list_sink,并确定和BASE的关系;
该步骤中,PDS结构层节点作为中间节点,在语义状态图中对数据库表名table、写入函数in、PDS读出函数out和脆弱函数sink进行搜索,能够将请求、文件、函数进行关联;
步骤2B,静态疑似路径求解;
该步骤中,如果sink函数相关数据为空,则跳过静态疑似路径求解阶段;如果sink函数相关数据不为空,将in函数相关数据中的所有请求list_in,和sink函数相关数据的所有请求list_sink进行关联,关联包括对所有的请求及其参数进行关联,加入suspath集合中;
步骤2C,动态疑似路径求解;
该步骤中,采用动态的污染跟踪来实现注入请求和读出请求的关联,首先分析in函数相关数据中的所有请求list_in,如果请求能够向该表注入信息,则识别出该请求的所有字段,向所在字段提交一个唯一的标记token;在此之后,访问out函数相关数据中的所有请求list_out,如果在响应中能够寻找到唯一的标记,则加入suspath集合中;
步骤三,基于模糊测试方法,验证疑似的二阶漏洞路径,输出漏洞报告result;
步骤3A,读取攻击向量数据库,读取步骤四得到的疑似二阶漏洞路径suspath,启动网页监控器;
网页监控器使用python完成,判断网页的响应是否包含弹出对话框的脚本,用于验证攻击向量是否成功触发漏洞;
步骤3B,循环向suspath的每一条记录的REQ注入注入攻击向量,并监控REQ触发的响应结果,输出漏洞报告;
该步骤中,随机选取并注入攻击向量,根据网页监控器来判断是否成功,如果成功则输出二阶漏洞报告result并结束验证,未成功则选取新的攻击向量,直到漏洞触发成功或达到最大的尝试次数。
CN202310551060.1A 2023-05-16 2023-05-16 一种基于语义状态图的php二阶漏洞的自动化挖掘方法 Pending CN116541022A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310551060.1A CN116541022A (zh) 2023-05-16 2023-05-16 一种基于语义状态图的php二阶漏洞的自动化挖掘方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310551060.1A CN116541022A (zh) 2023-05-16 2023-05-16 一种基于语义状态图的php二阶漏洞的自动化挖掘方法

Publications (1)

Publication Number Publication Date
CN116541022A true CN116541022A (zh) 2023-08-04

Family

ID=87453974

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310551060.1A Pending CN116541022A (zh) 2023-05-16 2023-05-16 一种基于语义状态图的php二阶漏洞的自动化挖掘方法

Country Status (1)

Country Link
CN (1) CN116541022A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116827479A (zh) * 2023-08-29 2023-09-29 北京航空航天大学 一种低复杂度的隐蔽通信编解码方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116827479A (zh) * 2023-08-29 2023-09-29 北京航空航天大学 一种低复杂度的隐蔽通信编解码方法
CN116827479B (zh) * 2023-08-29 2023-12-05 北京航空航天大学 一种低复杂度的隐蔽通信编解码方法

Similar Documents

Publication Publication Date Title
Li et al. Two decades of Web application testing—A survey of recent advances
Zheng et al. Path sensitive static analysis of web applications for remote code execution vulnerability detection
US8943478B2 (en) Fault detection and localization in dynamic software applications
Ermuth et al. Monkey see, monkey do: Effective generation of GUI tests with inferred macro events
CN103455759B (zh) 一种页面漏洞检测装置及检测方法
US20090228871A1 (en) Managing generation of security tests
Artzi et al. Fault localization for dynamic web applications
KR20190041912A (ko) 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램
CN111695119A (zh) 一种基于细粒度静态污点分析与符号执行的web漏洞检测方法
Bossi et al. A system for profiling and monitoring database access patterns by application programs for anomaly detection
CN111694746A (zh) 面向编译型语言AS3的Flash缺陷模糊测评工具
Tonella et al. Recent advances in web testing
CN116541022A (zh) 一种基于语义状态图的php二阶漏洞的自动化挖掘方法
CN111859380A (zh) Android App漏洞的零误报检测方法
CN106845248A (zh) 一种基于状态转换图的xss漏洞检测方法
KR101696694B1 (ko) 역추적을 이용한 소스 코드 취약점 분석 방법 및 장치
Livshits et al. SecuriFly: Runtime protection and recovery from Web application vulnerabilities
Gauthier et al. Experience: Model-Based, Feedback-Driven, Greybox Web Fuzzing with BackREST
Li et al. Automatically crawling dynamic web applications via proxy-based javascript injection and runtime analysis
Gauthier et al. Backrest: A model-based feedback-driven greybox fuzzer for web applications
Zhang et al. Research on SQL injection vulnerabilities and its detection methods
Ngan et al. Nowhere to hide: Detecting obfuscated fingerprinting scripts
Paramitha et al. Static Code Analysis Tool for Laravel Framework Based Web Application
WO2021104027A1 (zh) 代码性能检测方法、装置、设备及存储介质
Mihancea et al. Jmodex: Model extraction for verifying security properties of web applications

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