CN114462043A - 基于强化学习的Java反序列化漏洞检测系统及方法 - Google Patents
基于强化学习的Java反序列化漏洞检测系统及方法 Download PDFInfo
- Publication number
- CN114462043A CN114462043A CN202111629096.4A CN202111629096A CN114462043A CN 114462043 A CN114462043 A CN 114462043A CN 202111629096 A CN202111629096 A CN 202111629096A CN 114462043 A CN114462043 A CN 114462043A
- Authority
- CN
- China
- Prior art keywords
- fuzzy
- vulnerability
- seed
- calling
- java
- 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
Links
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
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/23—Clustering techniques
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/043—Architecture, e.g. interconnection topology based on fuzzy logic, fuzzy membership or fuzzy inference, e.g. adaptive neuro-fuzzy inference systems [ANFIS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N7/00—Computing arrangements based on specific mathematical models
- G06N7/02—Computing arrangements based on specific mathematical models using fuzzy logic
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Data Mining & Analysis (AREA)
- Computer Hardware Design (AREA)
- Artificial Intelligence (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Biomedical Technology (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Biophysics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Fuzzy Systems (AREA)
- Automation & Control Theory (AREA)
- Computational Linguistics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Bioinformatics & Computational Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Algebra (AREA)
- Virology (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于强化学习的Java反序列化漏洞检测系统及方法,包括:漏洞数据采集;构建序列化感知的代码属性图SCPG,挖掘潜在漏洞调用链;利用强化学习对模糊测试的种子调度过程进行建模,训练模糊决策模型;对待检测的JAVA文件进行静态分析,构建序列化感知的代码属性图SCPG并识别潜在漏洞调用链,使用模糊决策模型对潜在漏洞调用链进行验证,输出存在利用风险的反序列化漏洞调用链。本发明可以一定程度上解决传统JAVA反序列化漏洞调用链挖掘方法中人工开销大、精度不高的问题;并且相较于基于变量可控性分析的JAVA反序列化漏洞调用链自动挖掘方法,本发明可以通过模糊测试对挖掘得到的潜在漏洞调用链进行验证,使得实际应用领域更广、精度更高。
Description
技术领域
本发明属于软件安全领域,特别涉及一种基于强化学习的Java反序列化漏洞检测系统及方法。
背景技术
JAVA反序列化作为一种动态捕获程序状态的机制,常常会导致诸如远程代码执行、表达式注入和系统资源访问等一系列恶性漏洞,被列为OWASP 2018年TOP 10最严重的漏洞之一。JAVA反序列化漏洞广泛存在于许多大型开源项目中,威胁着软件安全,如何准确高效地检测出潜在的JAVA反序列化漏洞调用链俨然成为一项具有挑战性的工作。现有的JAVA反序列化漏洞挖掘工作多采用静态检测方法来对JAVA程序进行建模,分析程序中潜在的危险调用站点以及调用方法间的变量可控性,通过图遍历算法等方法挖掘潜在的漏洞调用链。然而由于JAVA语言的动态特性,如反射、多态、动态类加载等,大多数静态分析方法所构造的调用图大多是不可靠的,使得对于调用链的分析本身存在许多误报以及漏报。此外,目前大多采用手工检验的方法来对挖掘出的调用链进行验证,人工开销较大。
目前已有一些工作使用动静态结合的混合分析方法来检测JAVA反序列化漏洞,如文献《杜笑宇,叶何,文伟平.基于字节码搜索的Java反序列化漏洞调用链挖掘方法[J].信息网络安全,2020,20(07):19-29.》采用污点分析与符号执行技术生成从反序列化漏洞入口点到危险函数的调用树,利用深度优先搜索算法搜索调用树并生成相关调用链。也有一些工作开始利用模糊测试的方法来自动化验证调用链挖掘的准确性,如文献《ShawnRasheed,and Jens Dietrich.2020.A Hybrid Analysis to Detect Java SerialisationVulnerabilities.In 35th IEEE/ACM International Conference on AutomatedSoftware Engineering(ASE'20).IEEE,Melbourne,Australia,2020.》通过静态分析来检测连接反序列化调用站点和危险调用的调用链,同时通过堆访问路径寻找从反序列化对象到危险调用站点的数据流,并通过模糊测试来构造实际输入以验证调用链的可利用性。但是以上方法仍存在JAVA动态特性考虑不完全、调用链构造不完整和动态分析开销大的问题,使得方法的准确性难以保障、扩展性较差。
发明内容
发明目的:针对上述现有技术存在的问题,本发明提供一种具有应用领域更广、精度更高等特点的基于强化学习的Java反序列化漏洞检测系统及方法。
技术方案:为实现上述发明目的,本发明具体采用了如下技术方案:
本发明提供了一种基于强化学习的Java反序列化漏洞检测系统,包括:漏洞数据采集模块,用以对漏洞数据进行采集得到漏洞数据集;漏洞调用链挖掘模块,用以通过构建序列化感知的代码属性图SCPG来挖掘所述漏洞数据集中的潜在漏洞调用链,得到漏洞调用链集合;模糊策略学习模块,用以从所述漏洞调用链集合中生成模糊种子,使用强化学习引导的模糊测试对所述模糊种子的调度过程进行模糊测试并根据测试结果构建模糊决策模型;漏洞检测模块,用以对待检测的JAVA文件进行静态分析并构建序列化感知的代码属性图SCPG,来挖掘该文件中的潜在漏洞调用链,得到文件漏洞调用链集合,并使用所述模糊决策模型对所述文件漏洞调用链集合进行检测,输出存在利用风险的反序列化漏洞调用链。
进一步的,在漏洞数据采集模块中,
从存在反序列化漏洞的JAVA基准漏洞库和开源漏洞库中收集漏洞相关信息,该漏洞相关信息包括:漏洞项目代码、漏洞调用链和漏洞利用POC;使用JAVA静态分析框架Soot对漏洞项目代码进行编译,转化为通用的代码中间表示IR。
进一步的,在漏洞调用链挖掘模块中,
根据代码中间表示IR,通过指针分析构造序列化感知的代码属性图SCPG,该属性图包括:类关系图、方法别名图和方法调用图;根据漏洞调用链提取危险调用站点,并构建危险调用库,检查已构建的序列化感知的代码属性图SCPG中是否存在危险调用库中的危险调用站点;根据数据流分析与危险调用站点存在关联的类方法,判断该类方法的参数是否可控,若该类方法的参数与返回值无关,则表明返回结果不可控,无法构造漏洞调用链;若该类方法的参数与返回值有关,则表明返回结果可控,并将该类方法纳入可利用中转点集合中;以反序列化过程中的魔术方法或实现了该魔术方法并且还自动调用了其他方法的可序列化JDK类为入口点,以反序列化危险调用站点为终点,在序列化感知的代码属性图SCPG中利用深度优先算法搜索所有由“入口点->可利用中转点->危险调用站点”构成的漏洞调用链,并得到漏洞调用链集合。
进一步的,在模糊策略学习模块中,
随机从漏洞调用链集合中选取入口点,并根据入口点的类属性生成注入对象,该注入对象为模糊种子,扫描所有与该入口点存在调用关系的类方法的属性,作为候选属性集,引导模糊测试中模糊种子的生成与变异;使用增量聚类算法对候选的模糊种子池中的模糊种子进行聚类,构建多级种子树,树上第i层的每个节点表示由覆盖度量表示的一个簇,第i+1层的孩子节点表示子簇,种子树的叶子节点与候选模糊种子池中的模糊种子相关联;
对于一个在第t轮被用于模糊测试的模糊种子s,计算它关于覆盖度量Cl的模糊奖励SeedReward(s,l,t):
将模糊奖励传播到上层调度的种子簇来计算当前种子簇的奖励:
式中,<a1,L,an,an+1>表示在第t轮被选择的种子树中的节点序列,an+1为模糊种子s的种子节点;
评估节点a的模糊性能FuzzPerf(a):
FuzzPerf(a)=Q(a)+U(a)
式中,Q(a)为节点a在t轮模糊测试后的平均奖励,通过如下公式计算得到:
其中,N(a,t)表示节点a在第t轮测试结束时到累计被选中的次数,t′为节点a被选中的最后一轮,w为折扣因子,p为累加运算变量;
U(a)是选择节点a次数的估计半径因子,通过如下公式计算得到:
式中,a′是节点a的父节点,Y[a]表示节点a的簇中模糊种子的数量,N[a]表示到累计选择节点a的次数,C是一个预定义参数,用来评估本轮模糊测试是尝试从模糊种子池中选择从未使用的模糊种子还是在先前的模糊测试中达到更高的覆盖率或调用链深度的高质量模糊种子;
聚集模糊种子所覆盖的特征的稀缺性来计算模糊种子的稀有度Rareness(al):
式中,P为待测试的JAVA程序,rareness[F]为程序特征F的稀缺性,Cl为覆盖度量;
通过得到的稀有度Rareness(al)和模糊性能FuzzPerf(a)计算模糊种子池中模糊种子的优先级得分Score(a),选择优先级得分最高的模糊种子进行本轮模糊测试:
Score(a)=Rareness(a)×FuzzPerf(a)
对漏洞项目代码进行模糊测试,判断本轮模糊测试选择的高优先级模糊种子输入能否到达危险调用站点,若可达,则终止模糊测试,并构建模糊决策模型;若不可达,则进一步对本轮模糊测试输入的模糊种子的质量进行评估;如果本轮模糊测试使得分支覆盖率得到提高或调用链遍历触发的可利用中转点更多,则将该模糊种子加进模糊种子池中,否则,丢弃该模糊种子。
进一步的,在漏洞检测模块中,
利用Soot静态分析框架编译待检测的JAVA文件,并构建序列化感知的代码属性图SCPG;根据序列化感知的代码属性图SCPG以及已有的危险调用库,检查待检测JAVA文件是否存在变量可控且与危险调用站点存在关联的类方法,若存在,则将该关联方法纳入可利用中转点集合中;若不存在,则不再进行漏洞调用链挖掘;在序列化感知的代码属性图SCPG中,利用深度优先算法搜索所有由“入口点->可利用中转点->危险调用站点”构成的漏洞调用链,得到文件漏洞调用链集合;使用模糊决策模型,从入口点开始,重新生成注入对象,该注入对象为新的模糊种子,然后对文件漏洞调用链集合进行模糊测试,输出存在利用风险的反序列化漏洞调用链。
另外,本发明提供了一种基于强化学习的Java反序列化漏洞检测方法,包括:步骤1,对漏洞数据进行采集得到漏洞数据集;步骤2,通过构建序列化感知的代码属性图SCPG来挖掘所述漏洞数据集中的潜在漏洞调用链,得到漏洞调用链集合;步骤3,从所述漏洞调用链集合中生成模糊种子,使用强化学习引导的模糊测试对所述模糊种子的调度过程进行模糊测试并根据测试结果构建模糊决策模型;步骤4,对待检测的JAVA文件进行静态分析并构建序列化感知的代码属性图SCPG,来挖掘该文件中的潜在漏洞调用链,得到文件漏洞调用链集合,并使用所述模糊决策模型对所述文件漏洞调用链集合进行检测,输出存在利用风险的反序列化漏洞调用链。
进一步的,在步骤1中,
从存在反序列化漏洞的JAVA基准漏洞库和开源漏洞库中收集漏洞相关信息,该漏洞相关信息包括:漏洞项目代码、漏洞调用链和漏洞利用POC;使用JAVA静态分析框架Soot对漏洞项目代码进行编译,转化为通用的代码中间表示IR。
进一步的,在步骤2中,
根据代码中间表示IR,通过指针分析构造序列化感知的代码属性图SCPG,该属性图包括:类关系图、方法别名图和方法调用图;根据漏洞调用链提取危险调用站点,并构建危险调用库,检查已构建的序列化感知的代码属性图SCPG中是否存在危险调用库中的危险调用站点;根据数据流分析与危险调用站点存在关联的类方法,判断该类方法的参数是否可控,若该类方法的参数与返回值无关,则表明返回结果不可控,无法构造漏洞调用链;若该类方法的参数与返回值有关,则表明返回结果可控,并将该类方法纳入可利用中转点集合中;以反序列化过程中的魔术方法或实现了该魔术方法并且还自动调用了其他方法的可序列化JDK类为入口点,以反序列化危险调用站点为终点,在序列化感知的代码属性图SCPG中利用深度优先算法搜索所有由“入口点->可利用中转点->危险调用站点”构成的漏洞调用链,并得到漏洞调用链集合。
进一步的,在步骤3中,
随机从漏洞调用链集合中选取入口点,并根据入口点的类属性生成注入对象,该注入对象为模糊种子,扫描所有与该入口点存在调用关系的类方法的属性,作为候选属性集,引导模糊测试中模糊种子的生成与变异;使用增量聚类算法对候选的模糊种子池中的模糊种子进行聚类,构建多级种子树,树上第i层的每个节点表示由覆盖度量表示的一个簇,第i+1层的孩子节点表示子簇,种子树的叶子节点与候选模糊种子池中的模糊种子相关联;
对于一个在第t轮被用于模糊测试的模糊种子s,计算它关于覆盖度量Cl的模糊奖励SeedReward(s,l,t):
将模糊奖励传播到上层调度的种子簇来计算当前种子簇的奖励:
式中,<a1,L,an,an+1>表示在第t轮被选择的种子树中的节点序列,an+1为模糊种子s的种子节点;
评估节点a的模糊性能FuzzPerf(a):
FuzzPerf(a)=Q(a)+U(a)
式中,Q(a)为节点a在t轮模糊测试后的平均奖励,通过如下公式计算得到:
其中,N(a,t)表示节点a在第t轮测试结束时到累计被选中的次数,t′为节点a被选中的最后一轮,w为折扣因子,p为累加运算变量;
U(a)是选择节点a次数的估计半径因子,通过如下公式计算得到:
式中,a′是节点a的父节点,Y[a]表示节点a的簇中模糊种子的数量,N[a]表示到累计选择节点a的次数,C是一个预定义参数,用来评估本轮模糊测试是尝试从模糊种子池中选择从未使用的模糊种子还是在先前的模糊测试中达到更高的覆盖率或调用链深度的高质量模糊种子;
聚集模糊种子所覆盖的特征的稀缺性来计算模糊种子的稀有度Rareness(al):
式中,P为待测试的JAVA程序,rareness[F]为程序特征F的稀缺性,Cl为覆盖度量;
通过得到的稀有度Rareness(al)和模糊性能FuzzPerf(a)计算模糊种子池中模糊种子的优先级得分Score(a),选择优先级得分最高的模糊种子进行本轮模糊测试:
Score(a)=Rareness(a)×FuzzPerf(a)
对漏洞项目代码进行模糊测试,判断本轮模糊测试选择的高优先级模糊种子输入能否到达危险调用站点,若可达,则终止模糊测试,并构建模糊决策模型;若不可达,则进一步对本轮模糊测试输入的模糊种子的质量进行评估;如果本轮模糊测试使得分支覆盖率得到提高或调用链遍历触发的可利用中转点更多,则将该模糊种子加进模糊种子池中,否则,丢弃该模糊种子。
进一步的,在步骤4中,
利用Soot静态分析框架编译待检测的JAVA文件,并构建序列化感知的代码属性图SCPG;根据序列化感知的代码属性图SCPG以及已有的危险调用库,检查待检测JAVA文件是否存在变量可控且与危险调用站点存在关联的类方法,若存在,则将该关联方法纳入可利用中转点集合中;若不存在,则不再进行漏洞调用链挖掘;在序列化感知的代码属性图SCPG中,利用深度优先算法搜索所有由“入口点->可利用中转点->危险调用站点”构成的漏洞调用链,得到文件漏洞调用链集合;使用模糊决策模型,从入口点开始,重新生成注入对象,该注入对象为新的模糊种子,然后对文件漏洞调用链集合进行模糊测试,输出存在利用风险的反序列化漏洞调用链。
有益效果:
(1)从图的角度对JAVA反序列化漏洞调用链进行建模,通过构造序列化感知的代码属性图SCPG(包含类关系图、方法别名图和方法调用图),充分挖掘反序列化类方法的类属性、调用关系等与反序列化漏洞密切相关的特性;
(2)提出基于强化学习的模糊测试方法来验证潜在的漏洞调用链,相较于直接使用模糊测试来验证调用链的真实可达性,本发明通过在已知调用链的漏洞项目上训练决策模型,来引导每次模糊测试的种子生成与变异,优化模糊测试过程;
(3)不同于传统的JAVA反序列化漏洞自动挖掘方法,本方法可以通过模糊测试自动生成注入对象,便于开发者对漏洞的理解与重现。
附图说明
图1是本发明基于强化学习的Java反序列化漏洞检测方法的流程图。
图2是本发明中对XStream反序列化利用链CVE-2021-21346生成的序列化感知的代码属性图SCPG。
图3是本发明中使用的模糊测试的框架流程图。
具体实施方式
以下结合附图对本发明的具体实施方式进行说明。
实施例一
如图1所示,本实施例公开一种基于强化学习的Java反序列化漏洞检测系统,包括:漏洞数据采集模块,用以对漏洞数据进行采集得到漏洞数据集;漏洞调用链挖掘模块,用以通过构建序列化感知的代码属性图SCPG来挖掘所述漏洞数据集中的潜在漏洞调用链,得到漏洞调用链集合;模糊策略学习模块,用以从所述漏洞调用链集合中生成模糊种子,使用强化学习引导的模糊测试对所述模糊种子的调度过程进行模糊测试并根据测试结果构建模糊决策模型;漏洞检测模块,用以对待检测的JAVA文件进行静态分析并构建序列化感知的代码属性图SCPG,来挖掘该文件中的潜在漏洞调用链,得到文件漏洞调用链集合,并使用所述模糊决策模型对所述文件漏洞调用链集合进行检测,输出存在利用风险的反序列化漏洞调用链。
进一步的,在漏洞数据采集模块中,
从存在反序列化漏洞的JAVA基准漏洞库和开源漏洞库中收集漏洞相关信息,该漏洞相关信息包括:漏洞项目代码、漏洞调用链和漏洞利用POC;使用JAVA静态分析框架Soot对漏洞项目代码进行编译,转化为通用的代码中间表示IR。
进一步的,在漏洞调用链挖掘模块中,
根据代码中间表示IR,通过指针分析构造序列化感知的代码属性图SCPG,如图2所示,该属性图包括:类关系图、方法别名图和方法调用图;根据漏洞调用链提取危险调用站点(如Runtime.exec(),Method.invoke()等可被用于执行恶意代码的方法),并构建危险调用库,检查已构建的序列化感知的代码属性图SCPG中是否存在危险调用库中的危险调用站点;根据数据流分析与危险调用站点存在关联的类方法,判断该类方法的参数是否可控,若该类方法的参数与返回值无关,则表明返回结果不可控,无法构造漏洞调用链;若该类方法的参数与返回值有关,则表明返回结果可控,并将该类方法纳入可利用中转点集合中;以反序列化过程中的魔术方法(如Object.readObject、Object.finalize等)或实现了该魔术方法并且还自动调用了其他方法的可序列化JDK类(如Object.hashCode、Object.equals等)为入口点,以反序列化危险调用站点为终点,在序列化感知的代码属性图SCPG中利用深度优先算法搜索所有由“入口点->可利用中转点->危险调用站点”构成的漏洞调用链,并得到漏洞调用链集合。
进一步的,如图3所示,在模糊策略学习模块中,
随机从漏洞调用链集合中选取入口点,并根据入口点的类属性生成注入对象,该注入对象为模糊种子,扫描所有与该入口点存在调用关系的类方法的属性,作为候选属性集,引导模糊测试中模糊种子的生成与变异;使用增量聚类算法对候选的模糊种子池中的模糊种子进行聚类,构建多级种子树,树上第i层的每个节点表示由覆盖度量表示的一个簇,第i+1层的孩子节点表示子簇,种子树的叶子节点与候选模糊种子池中的模糊种子相关联;
对于一个在第t轮被用于模糊测试的模糊种子s,计算它关于覆盖度量Cl的模糊奖励SeedReward(s,l,t):
将模糊奖励传播到上层调度的种子簇来计算当前种子簇的奖励:
式中,<a1,L,an,an+1>表示在第t轮被选择的种子树中的节点序列,an+1为模糊种子s的种子节点;
评估节点a的模糊性能FuzzPerf(a):
FuzzPerf(a)=Q(a)+U(a)
式中,Q(a)为节点a在t轮模糊测试后的平均奖励,通过如下公式计算得到:
其中,N(a,t)表示节点a在第t轮测试结束时到累计被选中的次数,t′为节点a被选中的最后一轮,w为折扣因子,p为累加运算变量;
U(a)是选择节点a次数的估计半径因子,通过如下公式计算得到:
式中,a′是节点a的父节点,Y[a]表示节点a的簇中模糊种子的数量,N[a]表示到累计选择节点a的次数,C是一个预定义参数,用来评估本轮模糊测试是尝试从模糊种子池中选择从未使用的模糊种子还是在先前的模糊测试中达到更高的覆盖率或调用链深度的高质量模糊种子;
聚集模糊种子所覆盖的特征的稀缺性来计算模糊种子的稀有度Rareness(al):
式中,P为待测试的JAVA程序,rareness[F]为程序特征F的稀缺性,Cl为覆盖度量;
通过得到的稀有度Rareness(al)和模糊性能FuzzPerf(a)计算模糊种子池中模糊种子的优先级得分Score(a),选择优先级得分最高的模糊种子进行本轮模糊测试:
Score(a)=Rareness(a)×FuzzPerf(a)
对漏洞项目代码进行模糊测试,判断本轮模糊测试选择的高优先级模糊种子输入能否到达危险调用站点,若可达,则终止模糊测试,并构建模糊决策模型;若不可达,则进一步对本轮模糊测试输入的模糊种子的质量进行评估;如果本轮模糊测试使得分支覆盖率得到提高或调用链遍历触发的可利用中转点更多,则将该模糊种子加进模糊种子池中,否则,丢弃该模糊种子。
进一步的,在漏洞检测模块中,
利用Soot静态分析框架编译待检测的JAVA文件,并构建序列化感知的代码属性图SCPG,如图2所示;根据序列化感知的代码属性图SCPG以及已有的危险调用库,检查待检测JAVA文件是否存在变量可控且与危险调用站点存在关联的类方法,若存在,则将该关联方法纳入可利用中转点集合中;若不存在,则不再进行漏洞调用链挖掘;在序列化感知的代码属性图SCPG中,利用深度优先算法搜索所有由“入口点->可利用中转点->危险调用站点”构成的漏洞调用链,得到文件漏洞调用链集合;使用模糊决策模型,从入口点开始,重新生成注入对象,该注入对象为新的模糊种子,然后对文件漏洞调用链集合进行模糊测试,输出存在利用风险的反序列化漏洞调用链。
实施例二
如图1所示,本实施例提供一种基于强化学习的Java反序列化漏洞检测方法,包括:步骤1,对漏洞数据进行采集得到漏洞数据集;步骤2,通过构建序列化感知的代码属性图SCPG来挖掘所述漏洞数据集中的潜在漏洞调用链,得到漏洞调用链集合;步骤3,从所述漏洞调用链集合中生成模糊种子,使用强化学习引导的模糊测试对所述模糊种子的调度过程进行模糊测试并根据测试结果构建模糊决策模型;步骤4,对待检测的JAVA文件进行静态分析并构建序列化感知的代码属性图SCPG,来挖掘该文件中的潜在漏洞调用链,得到文件漏洞调用链集合,并使用所述模糊决策模型对所述文件漏洞调用链集合进行检测,输出存在利用风险的反序列化漏洞调用链。
进一步的,在步骤1中,
从存在反序列化漏洞的JAVA基准漏洞库和开源漏洞库中收集漏洞相关信息,该漏洞相关信息包括:漏洞项目代码、漏洞调用链和漏洞利用POC;使用JAVA静态分析框架Soot对漏洞项目代码进行编译,转化为通用的代码中间表示IR。
进一步的,在步骤2中,
根据代码中间表示IR,通过指针分析构造序列化感知的代码属性图SCPG,如图2所示,该属性图包括:类关系图、方法别名图和方法调用图;根据漏洞调用链提取危险调用站点(如Runtime.exec(),Method.invoke()等可被用于执行恶意代码的方法),并构建危险调用库,检查已构建的序列化感知的代码属性图SCPG中是否存在危险调用库中的危险调用站点;根据数据流分析与危险调用站点存在关联的类方法,判断该类方法的参数是否可控,若该类方法的参数与返回值无关,则表明返回结果不可控,无法构造漏洞调用链;若该类方法的参数与返回值有关,则表明返回结果可控,并将该类方法纳入可利用中转点集合中;以反序列化过程中的魔术方法(如Object.readObject、Object.finalize等)或实现了该魔术方法并且还自动调用了其他方法的可序列化JDK类(如Object.hashCode、Object.equals等)为入口点,以反序列化危险调用站点为终点,在序列化感知的代码属性图SCPG中利用深度优先算法搜索所有由“入口点->可利用中转点->危险调用站点”构成的漏洞调用链,并得到漏洞调用链集合。
进一步的,如图3所示,在步骤3中,
随机从漏洞调用链集合中选取入口点,并根据入口点的类属性生成注入对象,该注入对象为模糊种子,扫描所有与该入口点存在调用关系的类方法的属性,作为候选属性集,引导模糊测试中模糊种子的生成与变异;使用增量聚类算法对候选的模糊种子池中的模糊种子进行聚类,构建多级种子树,树上第i层的每个节点表示由覆盖度量表示的一个簇,第i+1层的孩子节点表示子簇,种子树的叶子节点与候选模糊种子池中的模糊种子相关联;
对于一个在第t轮被用于模糊测试的模糊种子s,计算它关于覆盖度量Cl的模糊奖励SeedReward(s,l,t):
将模糊奖励传播到上层调度的种子簇来计算当前种子簇的奖励:
式中,<a1,L,an,an+1>表示在第t轮被选择的种子树中的节点序列,an+1为模糊种子s的种子节点;
评估节点a的模糊性能FuzzPerf(a):
FuzzPerf(a)=Q(a)+U(a)
式中,Q(a)为节点a在t轮模糊测试后的平均奖励,通过如下公式计算得到:
其中,N(a,t)表示节点a在第t轮测试结束时到累计被选中的次数,t′为节点a被选中的最后一轮,w为折扣因子,p为累加运算变量;
U(a)是选择节点a次数的估计半径因子,通过如下公式计算得到:
式中,a′是节点a的父节点,Y[a]表示节点a的簇中模糊种子的数量,N[a]表示到累计选择节点a的次数,C是一个预定义参数,用来评估本轮模糊测试是尝试从模糊种子池中选择从未使用的模糊种子还是在先前的模糊测试中达到更高的覆盖率或调用链深度的高质量模糊种子;
聚集模糊种子所覆盖的特征的稀缺性来计算模糊种子的稀有度Rareness(al):
式中,P为待测试的JAVA程序,rareness[F]为程序特征F的稀缺性,Cl为覆盖度量;
通过得到的稀有度Rareness(al)和模糊性能FuzzPerf(a)计算模糊种子池中模糊种子的优先级得分Score(a),选择优先级得分最高的模糊种子进行本轮模糊测试:
Score(a)=Rareness(a)×FuzzPerf(a)
对漏洞项目代码进行模糊测试,判断本轮模糊测试选择的高优先级模糊种子输入能否到达危险调用站点,若可达,则终止模糊测试,并构建模糊决策模型;若不可达,则进一步对本轮模糊测试输入的模糊种子的质量进行评估;如果本轮模糊测试使得分支覆盖率得到提高或调用链遍历触发的可利用中转点更多,则将该模糊种子加进模糊种子池中,否则,丢弃该模糊种子。
进一步的,在步骤4中,
利用Soot静态分析框架编译待检测的JAVA文件,并构建序列化感知的代码属性图SCPG,如图2所示;根据序列化感知的代码属性图SCPG以及已有的危险调用库,检查待检测JAVA文件是否存在变量可控且与危险调用站点存在关联的类方法,若存在,则将该关联方法纳入可利用中转点集合中;若不存在,则不再进行漏洞调用链挖掘;在序列化感知的代码属性图SCPG中,利用深度优先算法搜索所有由“入口点->可利用中转点->危险调用站点”构成的漏洞调用链,得到文件漏洞调用链集合;使用模糊决策模型,从入口点开始,重新生成注入对象,该注入对象为新的模糊种子,然后对文件漏洞调用链集合进行模糊测试,输出存在利用风险的反序列化漏洞调用链。
本发明具体实现该技术方案的方法和途径很多,以上仅是本发明的优选实施方式。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
Claims (10)
1.一种基于强化学习的Java反序列化漏洞检测系统,其特征在于,包括:
漏洞数据采集模块,用以对漏洞数据进行采集得到漏洞数据集;
漏洞调用链挖掘模块,用以通过构建序列化感知的代码属性图SCPG来挖掘所述漏洞数据集中的潜在漏洞调用链,得到漏洞调用链集合;
模糊策略学习模块,用以从所述漏洞调用链集合中生成模糊种子,使用强化学习引导的模糊测试对所述模糊种子的调度过程进行模糊测试并根据测试结果构建模糊决策模型;
漏洞检测模块,用以对待检测的JAVA文件进行静态分析并构建序列化感知的代码属性图SCPG,来挖掘该文件中的潜在漏洞调用链,得到文件漏洞调用链集合,并使用所述模糊决策模型对所述文件漏洞调用链集合进行检测,输出存在利用风险的反序列化漏洞调用链。
2.根据权利要求1所述的基于强化学习的Java反序列化漏洞检测系统,其特征在于:在漏洞数据采集模块中,
从存在反序列化漏洞的JAVA基准漏洞库和开源漏洞库中收集漏洞相关信息,该漏洞相关信息包括:漏洞项目代码、漏洞调用链和漏洞利用POC;
使用JAVA静态分析框架Soot对漏洞项目代码进行编译,转化为通用的代码中间表示IR。
3.根据权利要求2所述的基于强化学习的Java反序列化漏洞检测系统,其特征在于:在漏洞调用链挖掘模块中,
根据代码中间表示IR,通过指针分析构造序列化感知的代码属性图SCPG,该属性图包括:类关系图、方法别名图和方法调用图;
根据漏洞调用链提取危险调用站点,并构建危险调用库,检查已构建的序列化感知的代码属性图SCPG中是否存在危险调用库中的危险调用站点;
根据数据流分析与危险调用站点存在关联的类方法,判断该类方法的参数是否可控,若该类方法的参数与返回值无关,则表明返回结果不可控,无法构造漏洞调用链;若该类方法的参数与返回值有关,则表明返回结果可控,并将该类方法纳入可利用中转点集合中;
以反序列化过程中的魔术方法或实现了该魔术方法并且还自动调用了其他方法的可序列化JDK类为入口点,以反序列化危险调用站点为终点,在序列化感知的代码属性图SCPG中利用深度优先算法搜索所有由“入口点->可利用中转点->危险调用站点”构成的漏洞调用链,并得到漏洞调用链集合。
4.根据权利要求3所述的基于强化学习的Java反序列化漏洞检测系统,其特征在于:在模糊策略学习模块中,
随机从漏洞调用链集合中选取入口点,并根据入口点的类属性生成注入对象,该注入对象为模糊种子,扫描所有与该入口点存在调用关系的类方法的属性,作为候选属性集,引导模糊测试中模糊种子的生成与变异;
使用增量聚类算法对候选的模糊种子池中的模糊种子进行聚类,构建多级种子树,树上第i层的每个节点表示由覆盖度量表示的一个簇,第i+1层的孩子节点表示子簇,种子树的叶子节点与候选模糊种子池中的模糊种子相关联;
对于一个在第t轮被用于模糊测试的模糊种子s,计算它关于覆盖度量Cl的模糊奖励SeedReward(s,l,t):
将模糊奖励传播到上层调度的种子簇来计算当前种子簇的奖励:
式中,<a1,L,an,an+1>表示在第t轮被选择的种子树中的节点序列,an+1为模糊种子s的种子节点;
评估节点a的模糊性能FuzzPerf(a):
FuzzPerf(a)=Q(a)+U(a)
式中,Q(a)为节点a在t轮模糊测试后的平均奖励,通过如下公式计算得到:
其中,N(a,t)表示节点a在第t轮测试结束时到累计被选中的次数,t′为节点a被选中的最后一轮,w为折扣因子,p为累加运算变量;
U(a)是选择节点a次数的估计半径因子,通过如下公式计算得到:
式中,a′是节点a的父节点,Y[a]表示节点a的簇中模糊种子的数量,N[a]表示到累计选择节点a的次数,C是一个预定义参数,用来评估本轮模糊测试是尝试从模糊种子池中选择从未使用的模糊种子还是在先前的模糊测试中达到更高的覆盖率或调用链深度的高质量模糊种子;
聚集模糊种子所覆盖的特征的稀缺性来计算模糊种子的稀有度Rareness(al):
式中,P为待测试的JAVA程序,rareness[F]为程序特征F的稀缺性,Cl为覆盖度量;
通过得到的稀有度Rareness(al)和模糊性能FuzzPerf(a)计算模糊种子池中模糊种子的优先级得分Score(a),选择优先级得分最高的模糊种子进行本轮模糊测试:
Score(a)=Rareness(a)×FuzzPerf(a)
对漏洞项目代码进行模糊测试,判断本轮模糊测试选择的高优先级模糊种子输入能否到达危险调用站点,若可达,则终止模糊测试,并构建模糊决策模型;若不可达,则进一步对本轮模糊测试输入的模糊种子的质量进行评估;如果本轮模糊测试使得分支覆盖率得到提高或调用链遍历触发的可利用中转点更多,则将该模糊种子加进模糊种子池中,否则,丢弃该模糊种子。
5.根据权利要求4所述的基于强化学习的Java反序列化漏洞检测系统,其特征在于:在漏洞检测模块中,
利用Soot静态分析框架编译待检测的JAVA文件,并构建序列化感知的代码属性图SCPG;
根据序列化感知的代码属性图SCPG以及已有的危险调用库,检查待检测JAVA文件是否存在变量可控且与危险调用站点存在关联的类方法,若存在,则将该关联方法纳入可利用中转点集合中;若不存在,则不再进行漏洞调用链挖掘;
在序列化感知的代码属性图SCPG中,利用深度优先算法搜索所有由“入口点->可利用中转点->危险调用站点”构成的漏洞调用链,得到文件漏洞调用链集合;
使用模糊决策模型,从入口点开始,重新生成注入对象,该注入对象为新的模糊种子,然后对文件漏洞调用链集合进行模糊测试,输出存在利用风险的反序列化漏洞调用链。
6.一种基于强化学习的Java反序列化漏洞检测方法,包括:
步骤1,对漏洞数据进行采集得到漏洞数据集;
步骤2,通过构建序列化感知的代码属性图SCPG来挖掘所述漏洞数据集中的潜在漏洞调用链,得到漏洞调用链集合;
步骤3,从所述漏洞调用链集合中生成模糊种子,使用强化学习引导的模糊测试对所述模糊种子的调度过程进行模糊测试并根据测试结果构建模糊决策模型;
步骤4,对待检测的JAVA文件进行静态分析并构建序列化感知的代码属性图SCPG,来挖掘该文件中的潜在漏洞调用链,得到文件漏洞调用链集合,并使用所述模糊决策模型对所述文件漏洞调用链集合进行检测,输出存在利用风险的反序列化漏洞调用链。
7.根据权利要求6所述的基于强化学习的Java反序列化漏洞检测方法,其特征在于:在步骤1中,
从存在反序列化漏洞的JAVA基准漏洞库和开源漏洞库中收集漏洞相关信息,该漏洞相关信息包括:漏洞项目代码、漏洞调用链和漏洞利用POC;
使用JAVA静态分析框架Soot对漏洞项目代码进行编译,转化为通用的代码中间表示IR。
8.根据权利要求7所述的基于强化学习的Java反序列化漏洞检测方法,其特征在于:在步骤2中,
根据代码中间表示IR,通过指针分析构造序列化感知的代码属性图SCPG,该属性图包括:类关系图、方法别名图和方法调用图;
根据漏洞调用链提取危险调用站点,并构建危险调用库,检查已构建的序列化感知的代码属性图SCPG中是否存在危险调用库中的危险调用站点;
根据数据流分析与危险调用站点存在关联的类方法,判断该类方法的参数是否可控,若该类方法的参数与返回值无关,则表明返回结果不可控,无法构造漏洞调用链;若该类方法的参数与返回值有关,则表明返回结果可控,并将该类方法纳入可利用中转点集合中;
以反序列化过程中的魔术方法或实现了该魔术方法并且还自动调用了其他方法的可序列化JDK类为入口点,以反序列化危险调用站点为终点,在序列化感知的代码属性图SCPG中利用深度优先算法搜索所有由“入口点->可利用中转点->危险调用站点”构成的漏洞调用链,并得到漏洞调用链集合。
9.根据权利要求8所述的基于强化学习的Java反序列化漏洞检测方法,其特征在于:在步骤3中,
随机从漏洞调用链集合中选取入口点,并根据入口点的类属性生成注入对象,该注入对象为模糊种子,扫描所有与该入口点存在调用关系的类方法的属性,作为候选属性集,引导模糊测试中模糊种子的生成与变异;
使用增量聚类算法对候选的模糊种子池中的模糊种子进行聚类,构建多级种子树,树上第i层的每个节点表示由覆盖度量表示的一个簇,第i+1层的孩子节点表示子簇,种子树的叶子节点与候选模糊种子池中的模糊种子相关联;
对于一个在第t轮被用于模糊测试的模糊种子s,计算它关于覆盖度量Cl的模糊奖励SeedReward(s,l,t):
将模糊奖励传播到上层调度的种子簇来计算当前种子簇的奖励:
式中,<a1,L,an,an+1>表示在第t轮被选择的种子树中的节点序列,an+1为模糊种子s的种子节点;
评估节点a的模糊性能FuzzPerf(a):
FuzzPerf(a)=Q(a)+U(a)
式中,Q(a)为节点a在t轮模糊测试后的平均奖励,通过如下公式计算得到:
其中,N(a,t)表示节点a在第t轮测试结束时到累计被选中的次数,t′为节点a被选中的最后一轮,w为折扣因子,p为累加运算变量;
U(a)是选择节点a次数的估计半径因子,通过如下公式计算得到:
式中,a′是节点a的父节点,Y[a]表示节点a的簇中模糊种子的数量,N[a]表示到累计选择节点a的次数,C是一个预定义参数,用来评估本轮模糊测试是尝试从模糊种子池中选择从未使用的模糊种子还是在先前的模糊测试中达到更高的覆盖率或调用链深度的高质量模糊种子;
聚集模糊种子所覆盖的特征的稀缺性来计算模糊种子的稀有度Rareness(al):
式中,P为待测试的JAVA程序,rareness[F]为程序特征F的稀缺性,Cl为覆盖度量;
通过得到的稀有度Rareness(al)和模糊性能FuzzPerf(a)计算模糊种子池中模糊种子的优先级得分Score(a),选择优先级得分最高的模糊种子进行本轮模糊测试:
Score(a)=Rareness(a)×FuzzPerf(a)
对漏洞项目代码进行模糊测试,判断本轮模糊测试选择的高优先级模糊种子输入能否到达危险调用站点,若可达,则终止模糊测试,并构建模糊决策模型;若不可达,则进一步对本轮模糊测试输入的模糊种子的质量进行评估;如果本轮模糊测试使得分支覆盖率得到提高或调用链遍历触发的可利用中转点更多,则将该模糊种子加进模糊种子池中,否则,丢弃该模糊种子。
10.根据权利要求9所述的基于强化学习的Java反序列化漏洞检测方法,其特征在于:在步骤4中,
利用Soot静态分析框架编译待检测的JAVA文件,并构建序列化感知的代码属性图SCPG;
根据序列化感知的代码属性图SCPG以及已有的危险调用库,检查待检测JAVA文件是否存在变量可控且与危险调用站点存在关联的类方法,若存在,则将该关联方法纳入可利用中转点集合中;若不存在,则不再进行漏洞调用链挖掘;
在序列化感知的代码属性图SCPG中,利用深度优先算法搜索所有由“入口点->可利用中转点->危险调用站点”构成的漏洞调用链,得到文件漏洞调用链集合;
使用模糊决策模型,从入口点开始,重新生成注入对象,该注入对象为新的模糊种子,然后对文件漏洞调用链集合进行模糊测试,输出存在利用风险的反序列化漏洞调用链。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111629096.4A CN114462043A (zh) | 2021-12-28 | 2021-12-28 | 基于强化学习的Java反序列化漏洞检测系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111629096.4A CN114462043A (zh) | 2021-12-28 | 2021-12-28 | 基于强化学习的Java反序列化漏洞检测系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114462043A true CN114462043A (zh) | 2022-05-10 |
Family
ID=81406752
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111629096.4A Pending CN114462043A (zh) | 2021-12-28 | 2021-12-28 | 基于强化学习的Java反序列化漏洞检测系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114462043A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116049834A (zh) * | 2023-01-11 | 2023-05-02 | 安芯网盾(北京)科技有限公司 | 一种php反序列化漏洞利用链检测方法及装置 |
-
2021
- 2021-12-28 CN CN202111629096.4A patent/CN114462043A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116049834A (zh) * | 2023-01-11 | 2023-05-02 | 安芯网盾(北京)科技有限公司 | 一种php反序列化漏洞利用链检测方法及装置 |
CN116049834B (zh) * | 2023-01-11 | 2023-07-21 | 安芯网盾(北京)科技有限公司 | 一种php反序列化漏洞利用链检测方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109426722B (zh) | Sql注入缺陷检测方法、系统、设备及存储介质 | |
CN110543421B (zh) | 基于测试用例自动生成算法的单元测试自动执行方法 | |
TWI553503B (zh) | 產生候選鈎點以偵測惡意程式之方法及其系統 | |
US20080155335A1 (en) | Graphical analysis to detect process object anomalies | |
Junjin | An approach for SQL injection vulnerability detection | |
Le Goues et al. | Specification mining with few false positives | |
CN111460450A (zh) | 一种基于图卷积网络的源代码漏洞检测方法 | |
Baluda et al. | Bidirectional symbolic analysis for effective branch testing | |
KR101640479B1 (ko) | 소스코드기반 소프트웨어 취약점 공격행위 분석시스템 | |
CN115270131A (zh) | 一种Java反序列化漏洞检测方法及系统 | |
Velioğlu et al. | An automated code smell and anti-pattern detection approach | |
CN112765031A (zh) | 一种群智化漏洞挖掘任务的分解方法 | |
CN115659335A (zh) | 基于混合模糊测试的区块链智能合约漏洞检测方法及装置 | |
CN116383833A (zh) | 软件程序代码的测试方法及其装置、电子设备、存储介质 | |
CN114462043A (zh) | 基于强化学习的Java反序列化漏洞检测系统及方法 | |
Burrows et al. | Reasoning about faults in aspect-oriented programs: a metrics-based evaluation | |
Pozza et al. | Comparing lexical analysis tools for buffer overflow detection in network software | |
CN115310095A (zh) | 一种区块链智能合约混合形式化验证方法及系统 | |
CN114153447B (zh) | 一种自动化生成ai训练代码的方法 | |
Ding et al. | Detecting infeasible branches based on code patterns | |
CN113688403A (zh) | 一种基于符号执行验证的智能合约漏洞检测方法及装置 | |
CN114138669A (zh) | 一种基于函数级选择符号化混合执行的软件自动测试方法 | |
WO2021104027A1 (zh) | 代码性能检测方法、装置、设备及存储介质 | |
CN112631944A (zh) | 基于抽象语法树的源码检测方法及装置、计算机存储介质 | |
Jiang et al. | An exploitability analysis technique for binary vulnerability based on automatic exception suppression |
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 |