CN114626068B - 基于java函数调用序列的高精度第三方库漏洞模块检测方法 - Google Patents

基于java函数调用序列的高精度第三方库漏洞模块检测方法 Download PDF

Info

Publication number
CN114626068B
CN114626068B CN202210173072.0A CN202210173072A CN114626068B CN 114626068 B CN114626068 B CN 114626068B CN 202210173072 A CN202210173072 A CN 202210173072A CN 114626068 B CN114626068 B CN 114626068B
Authority
CN
China
Prior art keywords
vulnerability
library
java
party library
party
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
Application number
CN202210173072.0A
Other languages
English (en)
Other versions
CN114626068A (zh
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.)
Nankai University
Original Assignee
Nankai 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 Nankai University filed Critical Nankai University
Priority to CN202210173072.0A priority Critical patent/CN114626068B/zh
Publication of CN114626068A publication Critical patent/CN114626068A/zh
Application granted granted Critical
Publication of CN114626068B publication Critical patent/CN114626068B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/23Clustering techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Evolutionary Computation (AREA)
  • Evolutionary Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

一种基于JAVA函数调用序列的高精度第三方库漏洞模块检测方法。其包括爬取第三方库组件数据;获得补丁信息;找到漏洞源函数;生成第三方库代码文件的函数调用图,寻找出被漏洞污染的程序接口模块;建立JAVA第三方库与被漏洞污染的程序接口模块之间的映射关系,搭建漏洞模块关系数据库;识别程序项目当前使用的JAVA第三方库以及库版本号;识别程序接口模块;判断第三方库是否存在漏洞等步骤。本发明效果:可为后续开发人员选择第三方库及相关程序接口模块提供指导,使用更少的资源让开发人员知晓使用的第三方库的程序接口模块有无漏洞情况;避免在开发过程中选择有安全隐患的程序接口模块,可有效提高开发效率,减少后续测试成本。

Description

基于JAVA函数调用序列的高精度第三方库漏洞模块检测方法
技术领域
本发明属于程序项目开发技术领域,特别涉及一种基于JAVA函数调用序列的高精度第三方库漏洞模块检测方法。
背景技术
目前,程序开发人员会经常调用第三方库(Third Party Library)中的功能模块来帮助自身程序项目的开发,以节省时间和精力,然而却忽略了第三方库中可能存在的漏洞,使得程序处于不安全的环境中。尽管第三方库会随着发现漏洞而不断进行补丁修复,但由于程序在从第三方库中调用后,在程序项目中并不会实时将其更新到最新版本,并且也不会显示引入库的当前版本号,因此被程序项目引入的第三方库在没有被及时更新的情况下依然是可能存在漏洞的。另外,在多数情况下,漏洞往往仅由一个或几个函数引入到第三方库中。因此,也就可能存在以下情况:虽然程序开发人员使用了具有漏洞的第三方库,但如果没有直接/间接使用到该库的引入漏洞的函数时,即使在第三方库中的漏洞没有被修复的情况下,该程序项目也是不存在该漏洞的。
现有识别第三方库的方法主要分有以下几类:
1)基于权限和程序接口模块(API)等特性,采用机器学习算法,由训练分类器来区分广告库和非广告库,但该技术是个二分类的解决方案,仅限于识别第三方库是否为广告库,无法识别库的详细信息,因此也就无法识别出其他类型的库,比如:开发辅助工具、UI插件等。
2)基于聚类算法来识别第三方库,但该方法可能会发现不完整的第三方库,并且或多或少依赖包名和包结构,然而包名与包结构很容易被现有的混淆器混淆;此外,该方法由于是通过现有的库进行聚类后来分析,所以只能识别出常用的库,无法识别出新出现的库,并且无法精确识别出库的版本信息。因而更加无法确定第三方库的漏洞情况以及含有漏洞的模块情况。
3)基于包依赖图(Package Dependency Graph,PDG)来分离第三方库,但它不能识别特定的库,只是将第三方库解耦到宿主应用程序的不同部分;往往是作为其他第三方库识别的步骤之一来进行进一步的识别。
4)基于相似度匹配对第三方库进行检测,利用类依赖作为代码特性,将其散列作为唯一标识查找第三方库,使用模糊类匹配方法将其与构建的数据库中的库进行比较。当待测库与数据库中的库相似度超过一定的阈值时,则认为该库与数据库中存储的库相同。然而,此比较过程一般是两两比较,很耗时。虽然目前最高效的方法能识别出程序项目使用的第三方库是否包含漏洞,但是无法细粒度识别出是否使用了含有漏洞的模块。
总之,尽管上述方法已实现了对第三方库的识别以及第三方库中是否具有漏洞的检测,但不足之处在于,其对第三方库中是否具有漏洞的检测是粗粒度的,以至于无法判断程序项目是否被第三方库中的漏洞直接污染,即是否真正调用了第三方库中含有漏洞的代码模块。
发明内容
为了解决上述问题,本发明的目的在于提供一种基于JAVA函数调用序列的高精度第三方库漏洞模块检测方法。
为了达到上述目的,本发明提供的基于JAVA函数调用序列的高精度第三方库漏洞模块检测方法包括按顺序进行的下列步骤:
1)在Snyk、Maven在内的权威漏洞网站上爬取记载的含有CVE、CWE漏洞的第三方库的组件数据,所述组件数据包括:漏洞所属的库名称;受漏洞影响的库版本号;库的最新版本号;漏洞的风险等级;分配给漏洞的SNYK_ID、CVE_ID、CWE_ID和Snyk上记载的漏洞补丁参考链接,并从所有第三方库中过滤出JAVA第三方库;
2)从上述漏洞补丁参考链接的信息中提取出补丁修复前后版本的差异,由此获得补丁信息;
3)针对每个具有特定版本的JAVA第三方库,根据上述补丁信息的前后修改对比,定位出修复相应漏洞所需要更新的函数,并过滤出其中引入的测试代码或者与漏洞修复无关的代码,之后找到引入漏洞的一个或多个函数,即漏洞源函数,表示为V<v1,v2,…vn>,其中n为漏洞源函数的个数;
4)利用Java字节码分析工具Soot对JAVA第三方库程序进行静态分析,生成第三方库代码文件的函数调用图;然后基于上述函数调用图,从某一漏洞源函数vi出发,采用逆向回溯数据流分析方法,对上述漏洞源函数V<v1,v2,…vn>进行遍历,寻找出被漏洞污染的程序接口模块,表示为A<A1,A2,…An>。
5)以步骤1)获得的分配给漏洞的SNYK_ID、CVE_ID、CWE_ID、漏洞所属的库名称、库的最新版本号、受漏洞影响的库版本号、漏洞的风险等级以及步骤4)获得的被漏洞污染的程序接口模块作为字段,建立JAVA第三方库与被漏洞污染的程序接口模块之间的映射关系,表示为“Lib—A<A1,A2,…An>”;然后基于上述映射关系,搭建漏洞模块关系数据库;
6)利用第三方库检测工具ATVHunter或现有的第三方包识别工具LibPecker,识别出程序项目当前使用的JAVA第三方库以及库版本号;
7)通过程序接口模块提取,识别出程序项目中导入的当前版本的JAVA第三方库使用到的程序接口模块;
8)检索上述步骤5)中搭建的漏洞模块关系数据库,判断当前版本的JAVA第三方库是否存在漏洞;如果有,则基于JAVA第三方库与被漏洞污染的程序接口模块之间的映射关系,继续判断程序项目使用到的JAVA第三方库中的程序接口模块是否被漏洞污染;若程序项目调用的程序接口模块存在漏洞,则证明程序项目确实因为JAVA第三方库而引入了漏洞;若调用的程序接口模块并没有被漏洞污染,则证明,即使当前JAVA第三方库是含有漏洞的,但对于该程序项目来说,依旧是安全的。
在步骤2)中,所述漏洞补丁参考链接的信息为Github在内的平台上的commit信息。
在步骤3)中,所述与漏洞修复无关的代码为增删空行代码。
本发明提供的基于JAVA函数调用序列的高精度第三方库漏洞模块检测方法具有如下有益效果:通过程序数据流分析和函数调用图分析技术,可精确、细粒度地识别出JAVA第三方库中的漏洞模块所污染的程序接口模块,后续便可通过查询关键程序接口模块的调用,快速、细粒度地判断程序项目是否使用了具有漏洞的模块。本方法可以为后续开发人员选择第三方库及相关程序接口模块提供指导,使用更少的资源让开发人员知晓使用的第三方库的程序接口模块有无漏洞情况;避免在开发过程中选择有安全隐患的程序接口模块,有效地提高了开发效率,减少了后续的测试成本。
附图说明
图1为本发明提供的基于JAVA函数调用序列的高精度第三方库漏洞模块检测方法中构建漏洞模块数据库流程图。
图2为本发明提供的基于JAVA函数调用序列的高精度第三方库漏洞模块检测方法中基于函数调用图寻找不安全程序接口模块流程图。
图3为本发明提供的基于JAVA函数调用序列的高精度第三方库漏洞模块检测方法中判断当前JAVA第三方库是否存在漏洞流程图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。
如图1-图3所示,本发明提供的基于JAVA函数调用序列的高精度第三方库漏洞模块检测方法包括按顺序进行的下列步骤:
1)在Snyk、Maven在内的权威漏洞网站上爬取记载的含有CVE、CWE漏洞的第三方库的组件数据,所述组件数据包括:漏洞所属的库名称;受漏洞影响的库版本号;库的最新版本号;漏洞的风险等级;分配给漏洞的SNYK_ID、CVE_ID、CWE_ID和Snyk上记载的漏洞补丁参考链接,并从所有第三方库中过滤出JAVA第三方库;
2)从上述漏洞补丁参考链接的信息(如Github等平台上的commit信息)中提取出补丁修复前后版本的差异,由此获得补丁信息;
3)针对每个具有特定版本的JAVA第三方库,根据上述补丁信息的前后修改对比,定位出修复相应漏洞所需要更新的函数,并过滤出其中引入的测试代码或者与漏洞修复无关的代码(如增删空行等代码),之后找到引入漏洞的一个或多个函数,即漏洞源函数,表示为V<v1,v2,…vn>,其中n为漏洞源函数的个数;
4)利用Java字节码分析工具Soot对JAVA第三方库程序进行静态分析,生成第三方库代码文件的函数调用图;函数调用图是静态分析的关键,是包含整个函数调用的关系图。然后基于上述函数调用图,从某一漏洞源函数vi出发,采用逆向回溯数据流分析方法,对上述漏洞源函数V<v1,v2,…vn>进行遍历,寻找出被漏洞污染的程序接口模块,表示为A<A1,A2,…An>。
5)以步骤1)获得的分配给漏洞的SNYK_ID、CVE_ID、CWE_ID、漏洞所属的库名称、库的最新版本号、受漏洞影响的库版本号、漏洞的风险等级以及步骤4)获得的被漏洞污染的程序接口模块作为字段,建立JAVA第三方库与被漏洞污染的程序接口模块之间的映射关系,表示为“Lib—A<A1,A2,…An>”,以便于后续快速识别程序项目是否调用了含有漏洞的模块;然后基于上述映射关系,搭建漏洞模块关系数据库;
6)利用第三方库检测工具ATVHunter或现有的第三方包识别工具LibPecker,识别出程序项目当前使用的JAVA第三方库以及库版本号;本步骤需要将JAVA第三方库及其版本信息精确识别出来,以便后续排查特定版本的JAVA第三方库是否存在漏洞,以及确定是否调用了漏洞模块;
7)通过程序接口模块提取,识别出程序项目中导入的当前版本的JAVA第三方库使用到的程序接口模块;
8)检索上述步骤5)中搭建的漏洞模块关系数据库,判断当前版本的JAVA第三方库是否存在漏洞;如果有,则基于JAVA第三方库与被漏洞污染的程序接口模块之间的映射关系,继续判断程序项目使用到的JAVA第三方库中的程序接口模块是否被漏洞污染;若程序项目调用的程序接口模块存在漏洞,则证明程序项目确实因为JAVA第三方库而引入了漏洞;若调用的程序接口模块并没有被漏洞污染,则证明,即使当前JAVA第三方库是含有漏洞的,但对于该程序项目来说,依旧是安全的。

Claims (3)

1.一种基于JAVA函数调用序列的高精度第三方库漏洞模块检测方法,其特征在于:所述高精度第三方库漏洞模块检测方法包括按顺序进行的下列步骤:
1)在Snyk、Maven在内的权威漏洞网站上爬取记载的含有CVE、CWE漏洞的第三方库的组件数据,所述组件数据包括:漏洞所属的库名称;受漏洞影响的库版本号;库的最新版本号;漏洞的风险等级;分配给漏洞的SNYK_ID、CVE_ID、CWE_ID和Snyk上记载的漏洞补丁参考链接,并从所有第三方库中过滤出JAVA第三方库;
2)从上述漏洞补丁参考链接的信息中提取出补丁修复前后版本的差异,由此获得补丁信息;
3)针对每个具有特定版本的JAVA第三方库,根据上述补丁信息的前后修改对比,定位出修复相应漏洞所需要更新的函数,并过滤出其中引入的测试代码或者与漏洞修复无关的代码,之后找到引入漏洞的一个或多个函数,即漏洞源函数,表示为V<v1,v2,…vn>,其中n为漏洞源函数的个数;
4)利用Java字节码分析工具Soot对JAVA第三方库程序进行静态分析,生成第三方库代码文件的函数调用图;然后基于上述函数调用图,从某一漏洞源函数vi出发,采用逆向回溯数据流分析方法,对上述漏洞源函数V<v1,v2,…vn>进行遍历,寻找出被漏洞污染的程序接口模块,表示为A<A1,A2,…An>。
5)以步骤1)获得的分配给漏洞的SNYK_ID、CVE_ID、CWE_ID、漏洞所属的库名称、库的最新版本号、受漏洞影响的库版本号、漏洞的风险等级以及步骤4)获得的被漏洞污染的程序接口模块作为字段,建立JAVA第三方库与被漏洞污染的程序接口模块之间的映射关系,表示为“Lib—A<A1,A2,…An>”;然后基于上述映射关系,搭建漏洞模块关系数据库;
6)利用第三方库检测工具ATVHunter或现有的第三方包识别工具LibPecker,识别出程序项目当前使用的JAVA第三方库以及库版本号;
7)通过程序接口模块提取,识别出程序项目中导入的当前版本的JAVA第三方库使用到的程序接口模块;
8)检索上述步骤5)中搭建的漏洞模块关系数据库,判断当前版本的JAVA第三方库是否存在漏洞;如果有,则基于JAVA第三方库与被漏洞污染的程序接口模块之间的映射关系,继续判断程序项目使用到的JAVA第三方库中的程序接口模块是否被漏洞污染;若程序项目调用的程序接口模块存在漏洞,则证明程序项目确实因为JAVA第三方库而引入了漏洞;若调用的程序接口模块并没有被漏洞污染,则证明,即使当前JAVA第三方库是含有漏洞的,但对于该程序项目来说,依旧是安全的。
2.根据权利要求1所述的基于JAVA函数调用序列的高精度第三方库漏洞模块检测方法,其特征在于:在步骤2)中,所述漏洞补丁参考链接的信息为Github在内的平台上的commit信息。
3.根据权利要求1所述的基于JAVA函数调用序列的高精度第三方库漏洞模块检测方法,其特征在于:在步骤3)中,所述与漏洞修复无关的代码为增删空行代码。
CN202210173072.0A 2022-02-24 2022-02-24 基于java函数调用序列的高精度第三方库漏洞模块检测方法 Active CN114626068B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210173072.0A CN114626068B (zh) 2022-02-24 2022-02-24 基于java函数调用序列的高精度第三方库漏洞模块检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210173072.0A CN114626068B (zh) 2022-02-24 2022-02-24 基于java函数调用序列的高精度第三方库漏洞模块检测方法

Publications (2)

Publication Number Publication Date
CN114626068A CN114626068A (zh) 2022-06-14
CN114626068B true CN114626068B (zh) 2024-06-07

Family

ID=81899462

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210173072.0A Active CN114626068B (zh) 2022-02-24 2022-02-24 基于java函数调用序列的高精度第三方库漏洞模块检测方法

Country Status (1)

Country Link
CN (1) CN114626068B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104021084A (zh) * 2014-06-19 2014-09-03 国家电网公司 一种Java源代码缺陷检测方法及装置
CN109829312A (zh) * 2019-01-29 2019-05-31 北京启明星辰信息安全技术有限公司 基于调用链的java漏洞检测方法及检测***
CN110232279A (zh) * 2019-06-06 2019-09-13 深圳前海微众银行股份有限公司 一种漏洞检测方法及装置
CN111625839A (zh) * 2020-05-29 2020-09-04 深圳前海微众银行股份有限公司 第三方组件漏洞检测方法、装置、设备及计算机存储介质
CN111931185A (zh) * 2020-08-11 2020-11-13 深信服科技股份有限公司 一种Java反序列化漏洞检测方法及组件
CN113139192A (zh) * 2021-04-09 2021-07-20 扬州大学 基于知识图谱的第三方库安全风险分析方法及***
CN113434870A (zh) * 2021-07-14 2021-09-24 中国电子科技网络信息安全有限公司 基于软件依赖分析的漏洞检测方法、装置、设备及介质
CN113742732A (zh) * 2020-05-27 2021-12-03 南京大学 一种代码漏洞扫描与定位方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11017094B2 (en) * 2018-01-03 2021-05-25 Beijing Jingdong Shangke Information Technology Co., Ltd. System and method for java deserialization vulnerability detection
US11481498B2 (en) * 2019-01-28 2022-10-25 Visa International Service Association Continuous vulnerability management for modern applications

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104021084A (zh) * 2014-06-19 2014-09-03 国家电网公司 一种Java源代码缺陷检测方法及装置
CN109829312A (zh) * 2019-01-29 2019-05-31 北京启明星辰信息安全技术有限公司 基于调用链的java漏洞检测方法及检测***
CN110232279A (zh) * 2019-06-06 2019-09-13 深圳前海微众银行股份有限公司 一种漏洞检测方法及装置
CN113742732A (zh) * 2020-05-27 2021-12-03 南京大学 一种代码漏洞扫描与定位方法
CN111625839A (zh) * 2020-05-29 2020-09-04 深圳前海微众银行股份有限公司 第三方组件漏洞检测方法、装置、设备及计算机存储介质
CN111931185A (zh) * 2020-08-11 2020-11-13 深信服科技股份有限公司 一种Java反序列化漏洞检测方法及组件
CN113139192A (zh) * 2021-04-09 2021-07-20 扬州大学 基于知识图谱的第三方库安全风险分析方法及***
CN113434870A (zh) * 2021-07-14 2021-09-24 中国电子科技网络信息安全有限公司 基于软件依赖分析的漏洞检测方法、装置、设备及介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
一种面向Android应用第三方库的安全性分析框架;周敏;周安民;贾鹏;;计算机应用研究;20170721(08);全文 *
基于权限控制和脚本检测的Webview漏洞防护方案研究;叶嘉羲;张权;王剑;;信息网络安全;20150310(03);全文 *
基于漏洞指纹的软件脆弱性代码复用检测方法;刘臻;武泽慧;曹琰;魏强;;浙江大学学报(工学版);20181115(11);全文 *

Also Published As

Publication number Publication date
CN114626068A (zh) 2022-06-14

Similar Documents

Publication Publication Date Title
Pham et al. Detection of recurring software vulnerabilities
US9141806B2 (en) Mining source code for violations of programming rules
US20190342332A1 (en) Database query injection detection and prevention
CN114077741B (zh) 软件供应链安全检测方法和装置、电子设备及存储介质
CN110287704B (zh) 一种基于漏洞图谱的漏洞软件依赖关系构建方法
CN104520871A (zh) 漏洞矢量信息分析
CN103473506A (zh) 用于识别恶意apk文件的方法和装置
CN112434305B (zh) 基于补丁的漏洞检测方法、装置、存储介质和电子设备
CN114386032A (zh) 电力物联网设备的固件检测***及方法
CN112214399B (zh) 基于序列模式匹配的api误用缺陷检测***
CN101901184B (zh) 检查应用程序漏洞的方法、装置和***
CN116932406A (zh) 组件检测方法、装置、终端设备以及存储介质
CN109815697A (zh) 误报行为处理方法及装置
CN106874762B (zh) 基于api依赖关系图的安卓恶意代码检测方法
Feichtner et al. Obfuscation-resilient code recognition in Android apps
CN108171057B (zh) 基于特征匹配的Android平台恶意软件检测方法
CN114626068B (zh) 基于java函数调用序列的高精度第三方库漏洞模块检测方法
CN107341110B (zh) 一种软件测试定位补丁修改及影响范围的工具及实现方法
CN113297580A (zh) 基于代码语义分析的电力信息***安全防护方法及装置
CN109299610B (zh) 安卓***中不安全敏感输入验证识别方法
CN113901459B (zh) 固件内部二进制程序脆弱性发现方法及装置
CN113779589B (zh) 一种安卓智能手机应用误配置检测方法
CN111368305A (zh) 一种代码安全风险检测方法
Zahan et al. Shifting the Lens: Detecting Malware in npm Ecosystem with Large Language Models
CN115408700A (zh) 基于二进制程序模块化的开源组件检测方法

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