CN109992970B - Java反序列化漏洞检测系统和方法 - Google Patents

Java反序列化漏洞检测系统和方法 Download PDF

Info

Publication number
CN109992970B
CN109992970B CN201910006129.6A CN201910006129A CN109992970B CN 109992970 B CN109992970 B CN 109992970B CN 201910006129 A CN201910006129 A CN 201910006129A CN 109992970 B CN109992970 B CN 109992970B
Authority
CN
China
Prior art keywords
java
gadget
entry point
item
information
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
CN201910006129.6A
Other languages
English (en)
Other versions
CN109992970A (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.)
Beijing Jingdong Shangke Information Technology Co Ltd
JD com American Technologies Corp
Original Assignee
Beijing Jingdong Shangke Information Technology Co Ltd
JD com American Technologies Corp
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 Beijing Jingdong Shangke Information Technology Co Ltd, JD com American Technologies Corp filed Critical Beijing Jingdong Shangke Information Technology Co Ltd
Publication of CN109992970A publication Critical patent/CN109992970A/zh
Application granted granted Critical
Publication of CN109992970B publication Critical patent/CN109992970B/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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • 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/556Detecting local intrusion or implementing counter-measures involving covert channels, i.e. data leakage between processes
    • 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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

一种生成Java项目的反序列化漏洞报告的方法包括:由计算设备确定Java项目的内部知识是否可用,当Java项目的内部知识不可用时,执行黑盒分析以生成反序列化漏洞报告;以及当Java项目的内部知识可用时,由计算设备确定Java项目的源代码是否可访问,当Java项目的源代码可访问时,执行白盒分析以生成反序列化漏洞报告,并且当Java项目的源代码不可访问时,执行灰盒分析以生成反序列化漏洞报告。

Description

JAVA反序列化漏洞检测系统和方法
交叉引用
可能包括专利、专利申请及各种出版物在内的一些参考文献在描述本发明时被引用和讨论。对这些参考文献的引用和/或讨论只是用来使对于本发明的描述变得清楚,而并非承认这些参考文献是在此描述的发明的“现有技术”。本说明书中引用和讨论的所有参考文献通过引用全部合并于此,就如同各参考文献单独通过引用而合并于此。
技术领域
本发明一般地涉及软件鲁棒性,更具体地,涉及能够以大覆盖范围自动执行的Java反序列化(deserialization)漏洞检测。
背景技术
在此提供的背景技术描述旨在一般性地给出本发明的背景。在此,既非明确承认也非暗示署名发明人的工作(如果在本背景技术部分描述的话)以及在本申请递交之时可能并非是现有技术的所描述方面是针对本发明的现有技术。
是太阳(Sun)微系统公司的商标,目前由甲骨文(Oracle)公司所有。为简洁起见,下文中将/>称作“Java”。Java提供了称作“对象序列化(objectserialization)”的机制,使得对象能够被表示为字节序列。反序列化是逆过程。更具体地,反序列过程接收序列化的字节,并开始循环过程以重构类实例(class instance)并获取其内容。
Java反序列化漏洞自2015年来已成为java程序的公知问题。这使得攻击者能够对有漏洞的应用实现伤害,例如随意远程代码执行(RCE)。对此问题已经有了一些研究工作。然而,现有工作主要是java反序列化漏洞的背景研究,并没有定位并处理这种漏洞的自动和全面方法。
因此,存在对于解决前述缺点和不足的需求。
发明内容
在一些方面中,本发明涉及一种生成Java项目的反序列化漏洞报告的方法。在一些实施例中,该方法包括:
由计算设备确定Java项目的内部知识是否可用,当Java项目的内部知识不可用时,执行黑盒分析以生成反序列化漏洞报告;以及
当Java项目的内部知识可用时,由计算设备确定Java项目的源代码是否可访问,当Java项目的源代码可访问时,执行白盒分析以生成反序列化漏洞报告,并且当Java项目的源代码不可访问时,执行灰盒分析以生成反序列化漏洞报告。
在一些实施例中,白盒分析通过以下步骤来执行:分析源代码以获得入口点的信息;扫描Java项目的配置文件以生成利用载荷;以及针对入口点执行利用载荷以生成反序列化漏洞报告。
在一些实施例中,分析源代码以获得入口点的信息的步骤包括:从源代码收集源信息和汇信息,其中源信息包括接受外部数据的源入口点,并且汇信息包括执行反序列化的汇点;对源信息和汇信息执行污点分析,以生成源入口点和汇点之间的污点路径;以及对污点路径进行解析以提取入口点的信息,其中,入口点的信息包括馈送数据至源入口点以触发汇点的途径。
在一些实施例中,汇信息包括反序列化应用编程接口(API)。
在一些实施例中,扫描Java项目的配置文件以生成利用载荷的步骤包括:对配置文件进行解析以获得Java项目所依赖的库文件;扫描库文件和源代码以获得与来自gadget模式数据库(DB)的gadget相匹配的gadget;以及使用所获得的gadget生成利用载荷。在一些实施例中,gadget模式DB包括在反序列化时导致风险的gadget模式,并且gadget模式包括文件写许可、代码执行许可、Java反射信息和打开套接字信息中至少之一。
在一些实施例中,针对入口点执行利用载荷以生成反序列化漏洞报告的步骤包括:确定入口点和利用载荷之间的关系以生成用于概念验证(POC)测试的单元测试用例;以及在Java项目的相应环境下执行单元测试用例,以生成反序列化漏洞报告。
在一些实施例中,灰盒分析通过以下步骤来执行:通过使来自gadget载荷数据库的gadget载荷进入到入口点规范中规定的入口点来利用Java项目,并基于所述利用来生成反序列化漏洞报告。在一些实施例中,所述利用由模糊器执行。
在一些实施例中,黑盒分析包括:识别服务器上被视为Java项目的候选Java服务;通过来自gadget载荷数据库的已知gadget载荷来利用候选Java服务;以及基于所述利用来生成反序列化漏洞报告。在一些实施例中,所述利用由模糊器执行。
在一些实施例中,识别服务器上的候选Java服务的步骤包括:在服务器上扫描开放端口和服务信息;以及将端口之一上运行的Java服务识别为候选Java服务。
在一些实施例中,该方法还包括:将所生成的利用载荷累积在gadget载荷DB中。
在一些方面中,本发明涉及一种生成Java程序的反序列化漏洞报告的方法。在一些实施例中,该方法包括:
由计算设备解析Java程序的配置文件以发现Java程序所依赖的库jar文件的集合;
由计算设备在库jar文件的集合和Java程序中搜索在反序列化时可能导致风险的模式;
由计算设备基于搜索到的模式生成利用载荷;以及
由计算设备基于利用载荷来利用Java程序。
在一些实施例中,基于存储gadget模式的gadget模式数据库(DB)来执行搜索。在一些实施例中,gadget模式包括Runtime.exe()、文件写、Java反射或打开套接字中的一项或多项。
在一些实施例中,基于利用载荷来利用Java程序的步骤包括:生成涉及向入口点输入利用载荷的概念验证(POC)测试用例;以及在Java程序上评估POC测试用例。
在一些实施例中,该方法还包括:在gadget载荷DB中累积作为所述利用的结果而被识别为gadget的所生成的利用载荷。
在一些方面中,本发明涉及一种计算设备。在一些实施例中,该计算设备包括处理器和存储计算机可执行代码的存储设备。计算机可执行代码在处理器上执行时被配置为:
通过分析Java程序的源代码以发现从Java程序的数据源到数据汇的可能漏洞路径的入口点,来对Java程序执行静态分析;
基于Java程序所依赖的库jar文件的集合以及Java程序中存在的可能gadget模式,生成利用载荷;以及
通过基于所生成的利用载荷和入口点来利用Java程序,对Java程序执行动态分析。
在一些实施例中,计算机可执行代码在处理器上执行时被配置为:基于数据流分析和污点分析来发现入口点,并解析Java程序的配置文件以得出库jar文件的集合。
在一些实施例中,计算机可执行代码在处理器上执行时被配置为通过以下步骤来执行动态分析:生成涉及向入口点输入利用载荷的概念验证(POC)测试用例;以及在Java程序上评估POC测试用例。
在一些方面中,本发明涉及一种存储计算机可执行代码的非暂时性计算机可读介质。计算机可执行代码在计算设备的处理器上执行时被配置为执行上述方法。
本发明的这些和其他方面将在以下结合附图及其标注对优选实施例的描述中变得清楚,但是在不脱离本发明的新颖构思的精神和范围的前提下,可以在其中做出各种修改和改变。
附图说明
根据详细描述和附图,将更全面地理解本发明。这些附图与书面描述一起示出了本发明的一个或多个实施例,用来解释本发明的原理。相同的附图标记贯穿附图尽可能用来表示相同或相似的实施例元素,附图中:
图1示意性示出了根据本发明一些实施例的Java漏洞检测方法的概览。
图2示意性示出了根据本发明一些实施例的混合方法。
图3示意性示出了根据本发明一些实施例的静态分析器。
图4示意性示出了Java源文件的示例。
图5示意性示出了根据本发明一些实施例的利用载荷发生器引擎的示例。
图6示意性示出了配置文件的示例。
图7示意性示出了根据本发明一些实施例的gadget扫描器的示例。
图8示意性示出了利用载荷的示例。
图9示意性示出了根据本发明一些实施例的概念验证(POC)发生器的示例。
图10示意性示出了示例测试用例。
图11示意性示出了根据本发明一些实施例的灰盒分析引擎。
图12示意性示出了根据本发明一些实施例的黑盒分析引擎。
图13示意性示出了根据本发明一些实施例的计算设备。
图14至16示意性示出了根据本发明一些实施例的处理Java项目以生成漏洞报告的示例过程,其中Java项目的内部知识和源代码可用。
具体实施方式
在以下示例中更详细地描述本发明,这些示例仅是示例性的,因为本领域技术人员将清楚对此的各种修改和改变。现在将详细地描述本发明的各种实施例。参照附图,相同的附图标记(如果存在的话)贯穿附图表示相同的部件。在说明书以及所附权利要求书中使用的“一”、“一个”和“该”的含义包括复数形式,除非上下文另外明确指出。此外,在说明书以及所附权利要求书中使用的“在…中”的含义包括“在…中”和“在…上”,除非上下文另外明确指出。此外,在说明书中为了方便读者起见可能使用标题或副标题,这对于本发明的范围并无任何影响。另外,说明书中使用的一些术语将在下面更具体地进行定义。
说明书中使用的术语在本发明的上下文内以及在各术语使用的具体上下文中通常具有其在本领域的常规含义。用来描述本发明的一些术语将在下文中描述,或者在说明书中其他之处描述,以向实施方提供关于本发明描述的额外引导。为方便起见,某些术语可能被突出,例如使用斜体和/或引号。这种突出对于术语的范围和含义并无影响;同一术语的范围和含义在相同上下文中是相同的,无论其是否被突出。应认识到,同一事物可以被不同地描述。因此,针对在此讨论的一个或多个术语,可能使用替代语言和同义词,重点不在于在此是否对某一术语进行了解释或讨论。提供了对于某些术语的同义词。对一个或多个同义词的提及并非排除使用其他同义词。说明书中任何地方对于示例的使用,包括在此讨论的任何术语的示例,仅是示例性的,而绝不是限制本发明或者任何例示术语的范围和含义。同样,本发明不限于说明书中给出的各种实施例。
除非另外定义,在此使用的所有科技术语的含义与本发明所属领域的普通技术人员通常所理解的含义相同。在冲突的情况下,以包括定义在内的本文档为准。
在此使用的“约”、“大约”或“近似”一般地意味着在20%以内,优选地在10%以内,更优选地在5%或给定值或范围之内。在此给出的数值是近似的,意味着术语“约”、“大约”或“近似”在没有明确给出的情况下可以推断。
在此使用的“多个”意味着两个或更多。
在此使用的术语“包括”、“包含”、“携带”、“具有”、“含”、“涉及”等应被理解为开放式的,即,意味着包括但不限于。
在此使用的短语“A、B和C中至少之一”应被解释为意味着逻辑表达(A或B或C),其中使用非排除性逻辑符“或”。应理解,一个方法内的一个或多个步骤可以在不改变本发明原理的前提下按不同顺序(或同时)执行。
在此使用的术语“模块”可以是指如下各项,或如下各项的一部分,或者包括如下各项:专用集成电路(ASIC),电子电路,组合逻辑电路,现场可编程门阵列(FPGA),执行代码的处理器(共享、专用或群组),提供所描述功能的其他合适硬件组件;或者上述各项中的一部分或全部的组合,例如在系统级芯片中。术语“模块”可以包括存储处理器执行的代码的存储器(共享、专用或群组)。
在此使用的术语“代码”可以包括软件、固件和/或微代码,并可以是指程序、例程、函数、类和/或对象。上面使用的术语“共享”表示来自多个模块的一些或全部代码可以使用单个(共享)处理器来执行。另外,来自多个模块的一些或全部代码可以由单个(共享)存储器来存储。上面使用的术语“群组”表示来自单个模块的一些或全部代码可以使用处理器群组来执行。另外,来自单个模块的一些或全部代码可以使用存储器群组来存储。
在此使用的术语“接口”一般地是指组件之间的交互点之处的通信协议或工具,用于在这些组件之间进行数据通信。一般而言,接口可以在硬件和软件级别上适用,并可以是单向或双向接口。物理硬件接口的示例可以包括电子连接器、总线、端口、缆线、端子和/或其他I/O设备或组件。与接口通信的组件可以是例如计算机系统的多个组件或外围设备。
本发明涉及计算机系统。如附图中所示,计算机组件可以包括被示出为实线框的物理硬件组件以及被示出为虚线框的虚拟软件组件。本领域普通技术人员应认识到,除非另外指明,否则这些计算机组件可以但不限于以软件、固件或硬件组件或其组合的形式来实现。
在此描述的装置、系统和方法可以通过一个或多个处理器执行的一个或多个计算机程序来实现。计算机程序包括存储在非暂时性有形计算机可读介质上的处理器可执行指令。计算机程序还可以包括所存储的数据。非暂时性有形计算机可读介质的非限制性示例是非易失性存储器、磁存储装置和光存储装置。
在一个方面,本发明涉及自动Java反序列化漏洞检测。在一些实施例中,可以应用组合了静态分析和动态分析的混合方法。根据实施例,可以自动地充分发现Java反序列化漏洞。
图1示意性示出了根据本发明一些实施例的Java漏洞检测方法的概览。该检测方法可以通过图13所示的计算设备来完成。
如图1所示,该方法100在101接收候选Java项目作为输入。候选Java项目可以包括例如方法100的使用者开发的Java程序、来自第三方开发者的Java包或者由服务提供商提供的Java服务。候选Java项目可以存储在本地存储装置如硬盘(HDD)中,记录在可读介质如光盘(CD)或数字多功能盘(DVD)中,或者通过网络如互联网分发(有线或无线方式)。候选Java项目可以具有序列化过程和反序列化过程,并因此可能具有反序列化漏洞。
根据一些实施例,候选Java项目可以基于其源代码是否可访问以及是否存在关于该Java项目的内部知识而根据不同策略或以不同方式来分析。
更具体地,如图1所示,如果既有关于该Java项目的内部知识(例如,如下所述的关于该Java项目包括入口点(entry point)规范的一些规范)且具有对其源代码(例如,该Java项目的.java文件和/或.jar文件)的访问(103处“是”且105处“是”),那么可以在200对该Java项目进行白盒分析。否则,如果仅具有内部知识但不具有对源代码的访问(103处“是”且105处“否”),则可以在300对该Java项目进行灰盒分析。否则,如果既没有内部知识也没有对源代码的访问(103处“否”且105处“否”),则可以在400对该Java项目进行黑盒分析。根据这些分析中的任一项或多项,可以在107得到关于该候选Java项目的漏洞报告。所有这些分析和漏洞报告的生成可以自动进行,而无需用户的人工干预。
在此应注意,内部知识可以根据源代码导出。因此,如果具有对源代码的访问,则具有内部知识。
下文中将更详细地描述不同类型的分析。
根据一些实施例,如果存在关于候选Java项目的充足信息,则可以对该Java项目进行全面分析。这种全面分析在此称作“白盒分析”。在白盒分析中,可以采用包括静态分析和动态分析二者的混合方法。静态分析基于Java项目的源代码。例如,可以在源代码中扫描可能的漏洞程序点。动态分析基于Java项目的运行,并有助于从找到的可能漏洞程序点中排除假阳性。因此,这种混合方法就覆盖范围(至少是因为通过静态分析进行的大范围扫描)和准确性(至少是因为通过动态分析进行的假阳性去除)而言是有利的。
图2示意性示出了根据本发明一些实施例的混合方法。
如图2所示,该方法200以候选Java项目作为输入。更具体地,该Java项目的源代码如.java文件和/或.jar文件可以输入到方法200。
代码可以在210进行静态分析。在反序列化漏洞的情况下,风险可能在于来自攻击者的伪造数据和/或恶意代码。这种伪造数据和/或恶意代码可能从数据源引入,然后沿从数据源到数据汇的数据路径流动,并导致不希望的后果。这种数据路径可以称作“漏洞路径”。静态分析可以通过分析源代码以发现全部源代码中至少一些甚至全部漏洞路径来进行。例如,可以对源代码进行解析以发现各种数据源和数据汇并因此发现源和汇之间的路径,可以从这些路径中识别可能的漏洞路径。静态分析可以通过例如数据流分析来进行。因此,识别了Java项目中存在的(所有)可能漏洞路径以及它们们各自的入口点(或者相关联的数据源)。
然后,可以对Java项目进行利用(exploit)以确定所有这些可能的漏洞路径是否是真正的漏洞。为了利用Java项目,可以在220生成一些利用载荷(exploit payload)。在反序列化漏洞的情况下,载荷可以基于gadget而生成。“gadget”是指可以用来使攻击者执行恶意功能如随意代码执行、文件读/写、套接字(socket)操作等的反序列化程序。例如,可以在Java项目所依赖的Java库集合(可以从源代码中识别)以及该Java项目中扫描其中可能存在的gadget模式(pattern)。在此,gadget模式是指可能导致gadget或恶意操作如文件读/写、代码执行、套接字操作等的模式。例如,gadget模式可以包括Runtime.exec()、文件写(File Write)、Java反射(reflection)、打开套接字(Open socket)等。然后,可以基于发现的gadget模式生成利用载荷。
该Java项目可以在230进行动态分析。例如,可以将该Java项目或其至少一部分(例如,涉及可能的漏洞路径的部分)编译为可执行形式,然后由计算设备(例如,将代码加载到其存储器中的通用计算机)执行。该项目在运行时可以基于利用载荷和入口点来利用。例如,载荷可以从相应的入口点注入到可能的漏洞路径中,并评估攻击是否成功。如果攻击在一条路径中成功,则该路径可以被识别为“漏洞路径”(或“阳性”);否则,如果攻击失败,则该路径可以被识别为“非漏洞路径”(或“阴性”)。作为动态分析的结果,识别出漏洞路径及相应入口点的汇总。基于该漏洞路径及相应入口点的汇总,可以生成漏洞报告。
图3示意性示出了根据本发明一些实施例的静态分析器的示例。
如图3所示,静态分析器210包括源和汇信息收集器211、污点(taint)分析器213和污点信息处理器215。
源和汇信息收集器211被配置为基于Java项目的源代码(.java文件和/或.jar文件)提取数据源和数据汇。在反序列化漏洞的情况下,数据源可以是指非信任数据入口点,数据汇可以是指Java反序列化API。图4示意性示出了Java源文件的示例Main.java。如图4所示,该文件具有在第4行中示出的入口点(这将被识别为数据源),并且具有在第7行中示出的反序列化点(这将被识别为数据汇)。
数据源和汇(以及源代码)可以馈送到污点分析器213。污点分析器213被配置为通过例如污点分析(taint analysis)来发现数据源和数据汇之间的可能漏洞路径或“污点”路径。污点路径可以从非信任源点延伸到反序列化点。存在多种方式来设计污点分析器。例如,可以使用一些现有静态分析框架如Argus-SAF。在图4所示的示例中,可以发现如下污点路径:File(″/attacker/controllable/dir/data.obj″)@第4行(源)→f@第4行→FileInputStream(f)@第5行→fis@第5行→ObjectInputStream(fis)@第6行→ois@第6行→ois.readObject()@第7行(汇)。
污点信息处理器215被配置为对污点路径进行解析以提取关于如何馈送数据以触发数据汇的入口点信息。例如,入口点信息可以包括各污点路径的入口点或数据源的列表。在图4所示的示例中,可以发现如下入口点:File(″/attacker/controllable/dir/data.obj″)@第4行。
图5示意性示出了根据本发明一些实施例的利用载荷发生器引擎的示例。
如图5所示,利用载荷发生器引擎220包括程序依赖性解析器221和gadget扫描器240。
程序依赖性解析器221以Java项目的源代码尤其是其配置文件为输入。配置文件可以包括该Java项目对一些库的依赖关系。程序依赖性解析器221被配置为对配置文件进行解析以发现该Java项目所依赖的库jar文件的集合。例如,配置文件可以是pom.xml、*.sbt或*.gradle的格式。因此,程序依赖性解析器221可以包括针对pom.txt格式的配置文件的Maven解析器、针对*.sbt格式的配置文件的SBT解析器或者针对*.gradle格式的配置文件的Gradle解析器。图6示意性示出了pom.xml格式的配置文件的示例。根据该示例配置文件,可以发现如下库jar文件:commons-collections3.1.jar以及slf4j-api1.7.21.jar。
gadget扫描器240被配置为扫描库jar文件的集合和该Java项目的源代码(例如,该Java项目的程序jar文件)以发现其中是否存在gadget,并且在存在gadget的情况下生成利用载荷。所生成的载荷可以用于动态分析,如上所述。
图7示意性示出了根据本发明一些实施例的gadget扫描器的示例。
如图7所示,gadget扫描器240包括模式扫描器243和利用载荷发生器245。
模式扫描器243被配置为在Java项目包括其程序jar文件和该Java项目所依赖的库jar文件中扫描可能的gadget模式。该扫描可以基于来自gadget模式提供方241的已知gadget模式进行。gadget模式提供方241可以是存储(所有)已知gadget模式的数据库(DB)的形式。如上所述,gadget模式可以包括Runtime.exec()、文件写(File Write)、Java反射(reflection)、打开套接字(Open socket)等。模式扫描器243可以被配置为发现与来自gadget模式提供方241中的模式相匹配的一些模式。在图6的示例中,假设jar文件commons-collections3.1.jar是Java反射类型,并涉及例如ChainedTransformer、ConstantTransformer和Invoker Transformer类。该jar文件将被识别为匹配模式。
利用载荷发生器245被配置为基于匹配模式生成利用载荷。例如,根据匹配模式,可以识别所涉及的gadget类。利用载荷发生器245然后可以基于匹配类构建利用载荷。在图6所示的示例中,commons-collections3.1.jar文件中存在的匹配模式指示Java反射类型以及所涉及的ChainedTransformer、ConstantTransformer和Invoker Transformer类。在这种情况下,可以生成如图8所示的利用载荷。所生成的载荷可以用于动态分析,动态分析例如通过概念验证(POC)发生器来实现。
图9示意性示出了根据本发明一些实施例的POC发生器的示例。
如图9所示,POC发生器500包括POC测试套件(testsuite)发生器501和POC评估器503。
POC测试套件发生器501被配置为基于入口点信息和所生成的利用载荷来生成关于POC攻击的单元测试用例(unit test case)。图10示意性示出了示例测试用例。所示出的测试用例涉及将所生成的载荷写入如上所述识别的入口点(File(″/attacker/controllable/dir/data.obj″)),然后调用或运行该Java程序。
POC评估器503被配置为评估Java项目上的单元测试用例,并基于评估来生成漏洞报告。例如,漏洞报告可以包括关于漏洞的信息,包括漏洞的位置(或入口点)及相关gadget。
根据一些实施例,如果只有关于Java项目的有限知识,例如关于该项目的一些内部知识,而没有到其源代码的访问,也可以对该Java项目进行反序列化漏洞分析。这种分析称作“灰盒分析”。例如,可以从开发方购买Java项目,并希望对该Java项目进行一些进一步开发。开发方应给出关于该Java项目的规范以指示项目详情。这种规范可以包括指示数据入口点的入口点规范。或者,数据入口点可以通过分析程序例如其二进制代码来得出。然后,可以通过使已知gadget载荷进入在入口点规范中指示或者通过程序分析得出的入口点来利用该Java项目。漏洞报告可以基于利用的结果来生成。
图11示意性示出了根据本发明一些实施例的灰盒分析引擎。
如图11所示,灰盒分析引擎300包括模糊器(fuzzer)305。模糊器305被配置为基于入口点规范301中指示的入口点以及来自gadget载荷DB 303的已知gadget载荷,对Java项目执行模糊(fuzzing)测试。例如,gadget载荷可以输入到入口点。gadget载荷DB 303累积(所有)已知gadget载荷,甚至包括如上所述生成且被评估为gadget的载荷。
根据一些实施例,即使没有关于Java项目的具体知识,也可以进行反序列化漏洞分析。因为没有关于Java项目的具体知识,所以这种分析可以称作“黑盒分析”。例如,知道可能提供Java(web)服务的服务器(例如,其IP地址),但并没有关于该服务的任何知识。可以识别该Java服务,然后可以通过基于已知gadget载荷对其进行利用来对其进行评估。可以基于评估结果生成漏洞报告。
图12示意性示出了根据本发明一些实施例的黑盒分析引擎。
如图12所示,黑盒分析引擎400包括服务器信息扫描器401、候选服务检测器405和模糊器407。服务器信息扫描器401被配置为扫描目标服务器的开放端口和服务信息。候选服务检测器405被配置为识别哪个扫描到的开放端口正在运行Java(web)服务并将其标记为候选者。模糊器407被配置为基于来自gadget载荷DB 403的已知gadget载荷,对候选Java(web)服务执行模糊测试。gadget载荷DB 403累积(所有)已知gadget载荷,甚至包括如上所述生成且被评估为gadget的载荷。
图13示意性示出了根据本发明一些实施例的计算设备。
如图13所示,计算设备600包括中央处理单元(CPU)601。CPU 601被配置为根据只读存储器(ROM)602中存储或者从存储装置608加载到随机访问存储器(RAM)603中的程序,执行各种动作和处理。RAM603具有计算设备600的操作所需的各种程序和数据。CPU 601、ROM602和RAM 603通过总线604彼此互连。另外,I/O接口605连接到总线604。
在一些实施例中,计算设备600还包括输入设备606如键盘或鼠标,输出设备607如液晶显示器(LCD)、发光二极管(LED)、有机发光二极管(OLED)或扬声器,存储装置608如硬盘(HDD)以及通信接口609如LAN卡或调制解调器中的至少一项或多项,它们连接到I/O接口605。通信接口609通过网络如互联网执行通信。在一些实施例中,驱动器610也连接到I/O接口605。可拆除介质611如HDD、光盘或半导体存储器可以安装到驱动器610上,使得上面存储的程序可以安装到存储装置608中。
在一些实施例中,在此描述的处理流程可以实现为软件。这种软件可以通过通信接口609从网络下载或者从可拆除介质611读取,然后安装在计算设备中。计算设备600在运行该软件时将执行处理流程。
在另一方面中,本发明涉及一种存储计算机可执行代码的非暂时性计算机可读介质。代码在系统的一个或多个处理器上执行时可以执行上述方法。在一些实施例中,非暂时性计算机可读介质可以包括但不限于物理或虚拟存储介质。
图14至16示意性示出了根据本发明一些实施例的处理Java项目以生成漏洞报告的示例过程,其中Java项目的内部知识和源代码可用。
图14是处理Java项目的过程的总体结构。如图14所示,输入Java项目140作为候选Java项目,该Java项目140包括源文件和配置文件。当该过程分析或读取该Java项目并确定该Java项目140包括内部知识时,进一步确定该Java项目140是否具有源代码。当该过程确定Java项目140的源代码可访问时,Java项目140被用作执行白盒分析的输入。
图15是白盒分析的执行。如图15所示,Java项目140用作Java程序源代码的输入。输入包括*.Java文件/程序jar文件;pom.xml、*.sbt或*.gradle格式的配置文件;以及库jar文件。src/(源文件)被用作如图3所示的Java静态分析器的输入,配置文件被用作程序依赖性解析器的输入。
再参考图3和图4,源代码用作Java静态分析器的输入,且通过污点信息处理器生成入口点。
如图15所示并参考图5至7,在一个示例中,如图6所示的pom.xml文件用作程序依赖性解析器如Maven解析器的输入。Maven解析器从pom.xml文件收集信息,以生成jar文件,如commons-collections3.1.jar和slf4j-api1.7.21jar。使用jar文件和src/(源文件)作为输入,gadget扫描器生成利用载荷。所生成的利用的示例可以如图8所示。
如图16所示并参考图9,使用入口点信息和所生成的利用载荷,POC发生器生成关于POC攻击的单元测试用例。然后,POC评估器运行POC测试用例,并提供漏洞报告。
总而言之,本发明的一些实施例主要具有以下优点。
首先,该方法提供了全面和自动的检测系统。
其次,基于Java项目的内部知识和源代码的可访问性,该方法分别使用白盒分析、灰盒分析和黑盒分析来生成漏洞报告。因此,该方法不仅提供了评估反序列化风险的自动且快速方式,还处理了Java项目目标的不同情形。
第三,该方法使用混合分析,混合分析采用了静态分析的覆盖范围和动态分析,从而提供了高度准确的检测。在静态分析中,对多个入口点信息和多个利用载荷进行交叉检查以测试每个入口点和每个利用载荷的组合的风险。在动态分析中,该方法在Java项目的环境中针对入口点利用多个载荷。静态和动态分析的组合使得所生产的漏洞报告是全面和准确的。另外,该方法提供了用于生产利用载荷的可扩展gadget数据库。gadget数据库不仅能够容纳任何新发现的gadget模式,还可以容纳用户特定Java程序配置,这使得分析是充分的且是用户友好的。
以上对本发明示例实施例的描述仅仅是为了说明和描述的目的,而并非是穷尽式的或者是将本发明限制为所公开的具体形式。根据以上教导,可以进行多种修改和改变。
选择和描述这些实施例是为了解释本发明的原理及其实际应用,从而使得本领域技术人员能够利用本发明和各种实施例,并且对于所设想的具体使用具有合适的修改。本发明所属领域的技术人员在不脱离本发明的精神和范围的前提下,将清楚替代实施例。因此,本发明的范围由所附权利要求而非之前的描述及在此描述的示例实施例来限定。
参考文献:
1.A.Munoz and O.Mirosh,″A Journey From JNDI/LDAP ManipulationToRemote Code Execution Dream Land,″in Black Hat,Las Vegas,2016.
2.G.Lawrence and C.Frohoff,″Marshalling Pickles,″in AppSecCali,SantaMonica,2015.
3.A.Munoz and C.Schneider,″Surviving the Java DeserializationApocalypse,″in OWASP AppSecEU,Tel Aviv,2016.
4.L.Carettoni,″Defending against Java DeserializationVulnerabilities,″2016.
5.A.Munoz,″The perils of Java deserialization,″Hewlett PackardEnterprise,2016.
6.M.Kaiser,″Pwning Your Java Messaging With DeserializationVulnerabilities,″Code White,2016.
7.O.Peles and R.Hat,″One Class to Rule Them All:0-Day DeserializationVulnerabilities in Android,″in 9th USENIX Workshop on Offensive Technologies,Washington,D.C.,2015.
8.ysoserial.[Online].Available:https://github.com/frohoff/ysoserial.
9.marshalsec.[Online].Available:
https://github.com/mbechler/marshalsec.
10.inspector-gadget.[Online].Available:
https://github.com/frohoff/inspector-gadget.
11.Argus-SAF.[Online].Available:
https://github.com/arguSlab/Argus-SAF.
12.soot.[Online].Available:https://github.com/Sable/soot.
13.nmap.[Online].Available:https://nmap.org/.

Claims (11)

1.一种生成Java项目的反序列化漏洞报告的方法,包括:
由计算设备确定所述Java项目的内部知识是否可用,当所述Java项目的内部知识不可用时,执行黑盒分析以生成反序列化漏洞报告;以及
当所述Java项目的内部知识可用时,由所述计算设备确定所述Java项目的源代码是否可访问,当所述Java项目的源代码可访问时,执行白盒分析以生成反序列化漏洞报告,并且当所述Java项目的源代码不可访问时,执行灰盒分析以生成反序列化漏洞报告,
其中,所述白盒分析通过以下步骤来执行:
分析所述源代码以获得入口点的信息;
扫描所述Java项目的配置文件以生成利用载荷;以及
针对所述入口点执行所述利用载荷以生成反序列化漏洞报告,
其中,扫描所述Java项目的配置文件以生成利用载荷的步骤包括:
对所述配置文件进行解析以获得所述Java项目所依赖的库文件;
扫描所述库文件和所述源代码以获得与来自gadget模式数据库DB的gadget相匹配的gadget;以及
使用所获得的gadget生成所述利用载荷。
2.根据权利要求1所述的方法,其中,分析所述源代码以获得入口点的信息的步骤包括:
从所述源代码收集源信息和汇信息,其中所述源信息包括接受外部数据的源入口点,并且所述汇信息包括执行反序列化的汇点;
对所述源信息和所述汇信息执行污点分析,以生成所述源入口点和所述汇点之间的污点路径;以及
对所述污点路径进行解析以提取所述入口点的信息,其中,所述入口点的信息包括馈送数据至源入口点以触发汇点的途径。
3.根据权利要求2所述的方法,其中,所述汇信息包括反序列化应用编程接口API。
4.根据权利要求1所述的方法,其中,所述gadget模式DB包括在反序列化时导致风险的gadget模式,并且所述gadget模式包括文件写许可、代码执行许可、Java反射信息和打开套接字信息中至少之一。
5. 根据权利要求1所述的方法,其中,针对所述入口点执行所述利用载荷以生成反序列化漏洞报告的步骤包括:
确定所述入口点和所述利用载荷之间的关系以生成用于概念验证POC测试的单元测试用例;以及
在所述Java项目的相应环境下执行所述单元测试用例,以生成反序列化漏洞报告。
6.根据权利要求1所述的方法,其中,所述灰盒分析通过以下步骤来执行:通过使来自gadget载荷数据库的gadget载荷进入到入口点规范中规定的入口点来利用所述Java项目,并基于对所述Java项目的所述利用来生成反序列化漏洞报告。
7.根据权利要求6所述的方法,其中,对所述Java项目的所述利用由模糊器执行。
8.根据权利要求1所述的方法,其中,所述黑盒分析包括:
识别服务器上被视为所述Java项目的候选Java服务;
通过来自gadget载荷数据库的已知gadget载荷来利用所述候选Java服务;以及
基于对所述候选Java服务的所述利用来生成反序列化漏洞报告。
9.根据权利要求8所述的方法,其中,对所述候选Java服务的所述利用由模糊器执行。
10. 根据权利要求8所述的方法,其中,识别服务器上的候选Java服务的步骤包括:
在服务器上扫描开放端口和服务信息;以及
将所述端口之一上运行的Java服务识别为所述候选Java服务。
11.根据权利要求1所述的方法,还包括:将所生成的利用载荷累积在gadget载荷DB中。
CN201910006129.6A 2018-01-03 2019-01-03 Java反序列化漏洞检测系统和方法 Active CN109992970B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/861,310 2018-01-03
US15/861,310 US11017094B2 (en) 2018-01-03 2018-01-03 System and method for java deserialization vulnerability detection

Publications (2)

Publication Number Publication Date
CN109992970A CN109992970A (zh) 2019-07-09
CN109992970B true CN109992970B (zh) 2023-09-26

Family

ID=67058264

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910006129.6A Active CN109992970B (zh) 2018-01-03 2019-01-03 Java反序列化漏洞检测系统和方法

Country Status (2)

Country Link
US (1) US11017094B2 (zh)
CN (1) CN109992970B (zh)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102019211037A1 (de) 2019-07-25 2021-01-28 Robert Bosch Gmbh Verfahren zum Testen eines Systems
CN110765464B (zh) * 2019-10-30 2024-06-21 深圳前海微众银行股份有限公司 漏洞检测方法、装置、设备及计算机存储介质
CN112860224B (zh) * 2019-11-28 2023-12-12 北京达佳互联信息技术有限公司 一种函数执行环境构建方法、装置、电子设备及存储介质
US20230063382A1 (en) * 2020-02-27 2023-03-02 Nippon Telegraph And Telephone Corporation Signature generation device, signature generation method, and signature generation program
CN111680302A (zh) * 2020-06-08 2020-09-18 中国银行股份有限公司 第三方组件漏洞扫描方法及装置
CN111723380B (zh) * 2020-06-22 2022-12-16 深圳前海微众银行股份有限公司 一种检测组件漏洞的方法及装置
CN111737150B (zh) * 2020-07-24 2023-09-15 江西师范大学 面向Java EE程序SQLIA漏洞的污点分析和验证方法及装置
CN111931185A (zh) * 2020-08-11 2020-11-13 深信服科技股份有限公司 一种Java反序列化漏洞检测方法及组件
CN112580059A (zh) * 2020-12-23 2021-03-30 北京宝兰德软件股份有限公司 一种反序列化漏洞修复方法及装置
CN112631577B (zh) * 2021-03-10 2021-05-28 北京瑞莱智慧科技有限公司 一种模型的调度方法、模型调度器以及模型安全测试平台
CN112965747B (zh) * 2021-03-30 2023-06-23 建信金融科技有限责任公司 挖掘代码漏洞的方法、装置、设备和计算机可读介质
CN113158195B (zh) * 2021-04-09 2022-10-11 上海碳泽信息科技有限公司 一种基于poc脚本的分布式漏洞扫描方法及系统
CN114070580B (zh) * 2021-09-30 2024-05-07 奇安信科技集团股份有限公司 反序列化攻击检测方法、装置、电子设备、介质及程序
US11921863B2 (en) 2021-12-03 2024-03-05 Capital One Services, Llc Determining a source of a vulnerability in software
CN114626068B (zh) * 2022-02-24 2024-06-07 南开大学 基于java函数调用序列的高精度第三方库漏洞模块检测方法
CN115408272B (zh) * 2022-08-08 2024-02-06 南京航空航天大学 一种基于TOPSIS法的Java冗余代码评估方法
CN115952503B (zh) * 2023-01-30 2023-07-25 深圳海云安网络安全技术有限公司 融合黑白灰安全检测技术的应用安全测试方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
CN104462981A (zh) * 2013-09-12 2015-03-25 深圳市腾讯计算机系统有限公司 漏洞检测方法及装置
CN106650452A (zh) * 2016-12-30 2017-05-10 北京工业大学 一种Android系统内置应用漏洞挖掘方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8613080B2 (en) * 2007-02-16 2013-12-17 Veracode, Inc. Assessment and analysis of software security flaws in virtual machines
US8949992B2 (en) * 2011-05-31 2015-02-03 International Business Machines Corporation Detecting persistent vulnerabilities in web applications
US8832643B2 (en) * 2012-06-28 2014-09-09 Sap Ag Composition of non-functional concerns
US20150309813A1 (en) * 2012-08-31 2015-10-29 iAppSecure Solutions Pvt. Ltd A System for analyzing applications in order to find security and quality issues

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
CN104462981A (zh) * 2013-09-12 2015-03-25 深圳市腾讯计算机系统有限公司 漏洞检测方法及装置
CN106650452A (zh) * 2016-12-30 2017-05-10 北京工业大学 一种Android系统内置应用漏洞挖掘方法

Also Published As

Publication number Publication date
US11017094B2 (en) 2021-05-25
CN109992970A (zh) 2019-07-09
US20190205543A1 (en) 2019-07-04

Similar Documents

Publication Publication Date Title
CN109992970B (zh) Java反序列化漏洞检测系统和方法
Cimitile et al. Talos: no more ransomware victims with formal methods
US8850581B2 (en) Identification of malware detection signature candidate code
US9715593B2 (en) Software vulnerabilities detection system and methods
Antunes et al. Defending against web application vulnerabilities
US9720798B2 (en) Simulating black box test results using information from white box testing
US8635602B2 (en) Verification of information-flow downgraders
US8387017B2 (en) Black box testing optimization using information from white box testing
Seifermann et al. Detecting violations of access control and information flow policies in data flow diagrams
Livshits Dynamic taint tracking in managed runtimes
Huang et al. Detecting sensitive data disclosure via bi-directional text correlation analysis
Berger et al. Extracting and analyzing the implemented security architecture of business applications
US20220391541A1 (en) Software provenance validation
Grichi et al. On the impact of interlanguage dependencies in multilanguage systems empirical case study on java native interface applications (JNI)
Amankwah et al. Bug detection in Java code: An extensive evaluation of static analysis tools using Juliet Test Suites
Bodell III et al. Proxy hunting: understanding and characterizing proxy-based upgradeable smart contracts in blockchains
Srinivasan Tp-detect: trigram-pixel based vulnerability detection for ethereum smart contracts
Okun et al. Report on the third static analysis tool exposition (sate 2010)
US11995192B2 (en) System for static analysis of binary executable code and source code using fuzzy logic and method thereof
Zahan et al. Shifting the Lens: Detecting Malware in npm Ecosystem with Large Language Models
Furda et al. A practical approach for detecting multi-tenancy data interference
Fu et al. Focus: Function clone identification on cross‐platform
Wang et al. A Systematic Literature Review on Smart Contract Vulnerability Detection by Symbolic Execution
Li et al. DepTaint: a static taint analysis method based on program dependence
US8826262B2 (en) Realtime tracking of software components

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