CN117272331B - 基于代码疫苗的跨线程漏洞分析方法、装置、设备及介质 - Google Patents

基于代码疫苗的跨线程漏洞分析方法、装置、设备及介质 Download PDF

Info

Publication number
CN117272331B
CN117272331B CN202311569441.9A CN202311569441A CN117272331B CN 117272331 B CN117272331 B CN 117272331B CN 202311569441 A CN202311569441 A CN 202311569441A CN 117272331 B CN117272331 B CN 117272331B
Authority
CN
China
Prior art keywords
propagation
point function
asynchronous
function
synchronous
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
CN202311569441.9A
Other languages
English (en)
Other versions
CN117272331A (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 Anpro Information Technology Co ltd
Original Assignee
Beijing Anpro Information Technology Co ltd
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 Anpro Information Technology Co ltd filed Critical Beijing Anpro Information Technology Co ltd
Priority to CN202311569441.9A priority Critical patent/CN117272331B/zh
Publication of CN117272331A publication Critical patent/CN117272331A/zh
Application granted granted Critical
Publication of CN117272331B publication Critical patent/CN117272331B/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
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1433Vulnerability analysis
    • 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)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明实施例提供基于代码疫苗的跨线程漏洞分析方法、装置、设备及介质,涉及网络安全技术领域。所述基于代码疫苗的跨线程漏洞分析方法包括:在被测程序中安装探针,通过探针进行预插桩;根据截取的请求的请求信息,建立请求的污点池;分别根据监控的每一污点源函数,在污点池创建根节点;分别根据监控的每一传播点函数,在污点池创建传播子节点;分别根据监控的每一汇聚点函数,在污点池创建汇聚子节点;基于所有根节点、所有传播子节点和所有汇聚子节点的层级关系,生成污点传播路径。本发明实施例能够实现跨线程追踪污点传播路径,有效避免出现漏报问题的技术效果。

Description

基于代码疫苗的跨线程漏洞分析方法、装置、设备及介质
技术领域
本发明涉及网络安全技术领域,具体而言,涉及基于代码疫苗的跨线程漏洞分析方法、装置、设备及介质。
背景技术
用户在交易网站上进行交易时,需要多次向交易网站的服务端发起单向请求,比如请求获取商品信息、请求提交交易订单、请求提供支付入口等,且交易网站的服务端需要同时处理多个用户发起的单向请求。为了提高服务端的响应速度和吞吐量,通常采用多线程,即将多个单向请求放在多个线程异步处理。
目前,主要是针对单服务,在处理单线程污点追踪和安全防护的场景下,根据入参识别,信息传递,通过在java的threadlocal类来存储线程私有的变量,在入口处识别放入threadlocal,在后续使用时直接从threadlocal中获取即可实现该线程相关联的污点传播追踪,从而实现安全防护的需求。但是在多请求多线程处理同一业务逻辑的场景下,在处理过程中使用了线程池或者新建了子线程,就无法直接通过threadlocal来追踪数据流,因为新建的线程的threadlocalmap中并未存储对应的值。在使用线程池执行任务或者重新创建线程的时候,当把一些参数存储到threadlocal中时,新的线程就无法访问到原有线程持有的threadlocal数据,threadlocal变量中存储的内容会丢失,此时无法获取各线程之间的关联关系,即如果在请求中启动了其它线程,则会出现污点丢失,表现为污点传播中断,无法进行污点追踪和漏洞防护。显然,现有的污点传播追踪方法仅是针对单服务单线程的分析过程,未考虑到污点的跨线程传播情况,容易出现漏报问题。
发明内容
本发明实施例的目的在于提供基于代码疫苗的跨线程漏洞分析方法、装置、设备及介质,用以实现跨线程追踪污点传播路径,有效避免出现漏报问题的技术效果。
第一方面,本发明实施例提供一种基于代码疫苗的跨线程漏洞分析方法,包括:
在被测程序中安装探针,通过所述探针进行预插桩;
根据截取的请求的请求信息,建立所述请求的污点池;
分别根据监控的每一污点源函数,在所述污点池创建根节点;
分别根据监控的每一传播点函数,在所述污点池创建传播子节点;
分别根据监控的每一汇聚点函数,在所述污点池创建汇聚子节点;
基于所有所述根节点、所有所述传播子节点和所有所述汇聚子节点的层级关系,生成污点传播路径。
在上述实现过程中,通过在被测程序中安装探针进行预插桩,监控污点源函数、传播点函数、汇聚点函数,在污点池创建根节点、传播子节点、汇聚子节点,构建出树状的污点传播结构来生成污点传播路径,能够跨线程追踪污点传播路径,有效避免出现漏报问题。
进一步地,在所述根据截取的请求的请求信息,建立所述请求的污点池之前,还包括:
当获取到所述请求的请求信息时,将所述请求的请求信息存储在threadcontext类。
在上述实现过程中,通过将请求的请求信息存储在threadcontext类,能够采用跨线程复制等方式跨线程追踪污点传播路径,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
进一步地,所述分别根据监控的每一污点源函数,在所述污点池创建根节点,具体包括:
对于每一所述污点源函数,获取所述污点源函数的参数,以及获取所述污点源函数的函数信息;
在所述污点池的污点传播结构中创建所述根节点,使所述根节点对应所述污点源函数的参数,所述根节点的节点信息包括所述污点源函数的函数信息;
将所述污点源函数的入参和出参写入所述污点池的哈希表;其中,所述污点源函数的函数信息包括所述污点源函数的入参和出参。
在上述实现过程中,通过分别根据监控的每一污点源函数,在污点池创建根节点,能够针对请求的各个污点源在污点池的污点传播结构中对应建立各个根节点,结合所有根节点完整构建出树状的污点传播结构来生成污点传播路径,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
进一步地,所述分别根据监控的每一传播点函数,在所述污点池创建传播子节点,具体包括:
对于每一所述传播点函数,判断所述传播点函数是否为异步任务的传播点函数;
若否,则将所述传播点函数作为同步传播点函数,根据所述同步传播点函数,在所述污点池创建同步传播子节点;
若是,则将所述传播点函数作为异步传播点函数,根据所述异步传播点函数,在所述污点池创建异步传播子节点。
在上述实现过程中,通过判断监控的传播点函数是否为异步任务的传播点函数,根据判断结果在污点池创建同步/异步传播子节点,结合同步/异步传播子节点构建出树状的污点传播结构来生成污点传播路径,能够在污点池区分创建同步传播子节点和异步传播子节点,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
进一步地,所述判断所述传播点函数是否为异步任务的传播点函数,具体包括:
在监控到线程池提交的传播任务时,将所述污点池复制到执行所述传播任务的线程;
当所述传播任务未使用所述请求的参数或上一传播点函数的出参,且所述污点池的哈希表中有所述传播点函数的入参时,判定所述传播点函数为同步任务的传播点函数;
当所述传播任务使用所述请求的参数或所述上一传播点函数的出参,且所述污点池的哈希表中有所述传播点函数的入参时,判定所述传播点函数为异步任务的传播点函数。
在上述实现过程中,通过判断传播点函数是否为异步任务的传播点函数,能够准确区分同步/异步传播点函数,保证后续准确地在污点池创建同步/异步传播子节点,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
进一步地,所述根据所述同步传播点函数,在所述污点池创建同步传播子节点,具体包括:
获取所述同步传播点函数的参数,以及获取所述同步传播点函数的函数信息;
在所述污点池的污点传播结构中创建所述根节点对应的子节点作为所述同步传播子节点,使所述同步传播子节点对应所述同步传播点函数的参数,所述同步传播子节点的节点信息包括所述同步传播点函数的函数信息;
将所述同步传播点函数的出参写入所述污点池的哈希表;其中,所述同步传播点函数的函数信息包括所述同步传播点函数的出参。
在上述实现过程中,通过根据同步传播点函数,在污点池的污点传播结构中创建同步传播子节点,能够结合同步传播子节点构建出树状的污点传播结构来生成污点传播路径,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
进一步地,所述根据所述异步传播点函数,在所述污点池创建异步传播子节点,具体包括:
获取所述异步传播点函数的参数、所述异步传播点函数的函数信息,以及获取所述传播任务使用的参数;
当所述传播任务使用的参数为所述请求的参数时,在所述污点池的污点传播结构中创建所述根节点对应的子节点作为所述异步传播子节点,使所述异步传播子节点对应所述异步传播点函数的参数,所述异步传播子节点的节点信息包括所述异步传播点函数的函数信息和异步信息;
当所述传播任务使用的参数为所述上一传播点函数的出参时,在所述污点池的污点传播结构中创建上一异步传播子节点对应的子节点作为所述异步传播子节点,使所述异步传播子节点对应所述异步传播点函数的参数,所述异步传播子节点的节点信息包括所述异步传播点函数的函数信息和异步信息;
将所述异步传播点函数的出参写入所述污点池的哈希表;其中,所述异步传播点函数的函数信息包括所述异步传播点函数的出参。
在上述实现过程中,通过根据异步传播点函数,在污点池的污点传播结构中创建异步传播子节点,能够结合异步传播子节点构建出树状的污点传播结构来生成污点传播路径,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
进一步地,所述分别根据监控的每一汇聚点函数,在所述污点池创建汇聚子节点,具体包括:
对于每一所述汇聚点函数,判断所述汇聚点函数是否为异步任务的汇聚点函数;
若否,则将所述汇聚点函数作为同步汇聚点函数,根据所述同步汇聚点函数,在所述污点池创建同步汇聚子节点;
若是,则将所述汇聚点函数作为异步汇聚点函数,根据所述异步汇聚点函数,在所述污点池创建异步汇聚子节点。
在上述实现过程中,通过判断监控的汇聚点函数是否为异步任务的汇聚点函数,根据判断结果在污点池创建同步/异步汇聚子节点,结合同步/异步汇聚子节点构建出树状的污点传播结构来生成污点传播路径,能够在污点池区分创建同步汇聚子节点和异步汇聚子节点,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
进一步地,所述判断所述汇聚点函数是否为异步任务的汇聚点函数,具体包括:
在监控到线程池提交的汇聚任务时,将所述污点池复制到执行所述汇聚任务的线程;
当所述汇聚任务未使用所述请求的参数或任一所述传播点函数的参数,且所述污点池的哈希表中有所述汇聚点函数的入参时,判定所述汇聚点函数为同步任务的汇聚点函数;
当所述汇聚任务使用所述请求的参数或任一所述传播点函数的参数,且所述污点池的哈希表中有所述汇聚点函数的入参时,判定所述汇聚点函数为异步任务的汇聚点函数。
在上述实现过程中,通过判断汇聚点函数是否为异步任务的汇聚点函数,能够准确区分同步/异步汇聚点函数,保证后续准确地在污点池创建同步/异步汇聚子节点,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
进一步地,所述根据所述同步汇聚点函数,在所述污点池创建同步汇聚子节点,具体包括:
获取所述同步汇聚点函数的参数,以及获取所述同步汇聚点函数的函数信息;
在所述污点池的污点传播结构中创建所述传播子节点对应的子节点作为所述同步汇聚子节点,使所述同步汇聚子节点对应所述同步汇聚点函数的参数,所述同步汇聚子节点的节点信息包括所述同步汇聚点函数的函数信息。
在上述实现过程中,通过根据同步汇聚点函数,在污点池的污点传播结构中创建同步汇聚子节点,能够结合同步汇聚子节点构建出树状的污点传播结构来生成污点传播路径,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
进一步地,所述根据所述异步汇聚点函数,在所述污点池创建异步汇聚子节点,具体包括:
获取所述异步汇聚点函数的参数,以及获取所述异步汇聚点函数的函数信息;
在所述污点池的污点传播结构中创建所述传播子节点对应的子节点作为所述异步汇聚子节点,使所述异步汇聚子节点对应所述异步汇聚点函数的参数,所述异步汇聚子节点的节点信息包括所述异步汇聚点函数的函数信息和异步信息。
在上述实现过程中,通过根据异步汇聚点函数,在污点池的污点传播结构中创建异步汇聚子节点,能够结合异步汇聚子节点构建出树状的污点传播结构来生成污点传播路径,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
进一步地,所述异步信息包括异步标记信息和异步线程信息。
在上述实现过程中,通过在污点池的污点传播结构中创建异步传播/汇聚子节点的过程中,使异步传播/汇聚子节点的节点信息包括异步标记信息和异步线程信息,能够在树状的污点传播结构中快速定位异步传播流流程,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
第二方面,本发明实施例提供一种基于代码疫苗的跨线程漏洞分析装置,包括:
探针预插桩模块,用于在被测程序中安装探针,通过所述探针进行预插桩;
污点池建立模块,用于根据截取的请求的请求信息,建立所述请求的污点池;
根节点创建模块,用于分别根据监控的每一污点源函数,在所述污点池创建根节点;
传播子节点创建模块,用于分别根据监控的每一传播点函数,在所述污点池创建传播子节点;
汇聚子节点创建模块,用于分别根据监控的每一汇聚点函数,在所述污点池创建汇聚子节点;
污点传播追踪模块,用于基于所有所述根节点、所有所述传播子节点和所有所述汇聚子节点的层级关系,生成污点传播路径。
第三方面,本发明实施例提供一种电子设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序;所述存储器与所述处理器耦接,且所述处理器执行所述计算机程序时实现如上所述的基于代码疫苗的跨线程漏洞分析方法。
第四方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序;其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如上所述的基于代码疫苗的跨线程漏洞分析方法。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明第一实施例提供的一种基于代码疫苗的跨线程漏洞分析方法的流程示意图;
图2为本发明第一实施例中一可选实施例示例的污点传播流程的数据流图;
图3为本发明第一实施例中一可选实施例示例的污点传播结构的示意图;
图4为本发明第二实施例提供的一种基于代码疫苗的跨线程漏洞分析装置的结构示意图;
图5为本发明第三实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
应注意到:在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。同时,文中的步骤编号,仅为了方便本发明实施例的解释,不作为限定步骤执行先后顺序的作用。本发明实施例提供的方法可以由相关的终端设备执行,且下文均以服务端作为执行主体为例进行说明。
请参看图1,图1为本发明第一实施例提供的一种基于代码疫苗的跨线程漏洞分析方法的流程示意图。本发明第一实施例提供一种基于代码疫苗的跨线程漏洞分析方法,包括步骤S101~S106:
S101、在被测程序中安装探针,通过探针进行预插桩;
S102、根据截取的请求的请求信息,建立请求的污点池;
S103、分别根据监控的每一污点源函数,在污点池创建根节点;
S104、分别根据监控的每一传播点函数,在污点池创建传播子节点;
S105、分别根据监控的每一汇聚点函数,在污点池创建汇聚子节点;
S106、基于所有根节点、所有传播子节点和所有汇聚子节点的层级关系,生成污点传播路径。
作为示例性地,在客户端向交易网站的服务端发送请求时,服务端为了能够快速响应请求,保证交易顺利进行,将请求的多个参数放在多个线程异步处理,实现快速渲染,此时多个异步线程会向线程池提交任务,服务端无法追踪这种异步场景下的污点传播路径。
对于污点传播,当应用程序从HTTP(HyperText Transfer Protocol,超文本传输协议)请求、RPC(Remote Procedure Call Protocol,远程过程调用协议)请求、文件、消息队列等外部输入获取数据时,这些数据被标记为初始污点,数据在应用程序的各个方法/对象之间传递、通信,污点出现流动,在污点流动过程中,污点的复制、变化等操作构成了污点的传播,当污点传播至危险函数使危险函数触发危险动作时,会出现漏洞。
出于此考虑,为了保障网络的安全性,需要在异步场景下跨线程追踪污点传播路径,避免出现异步场景下污点丢失、污点传播中断、异步传播关系混乱等导致的漏报问题。
根据实际的测试需求,在被测程序运行之前,在被测程序中安装探针,通过探针预插桩至少一个字节码,以实现对相关函数的监控。
插桩是指在保证被测程序原有逻辑完整性的基础上,通过被测程序中的探针***字节码,即检测逻辑代码,使得后续在被测程序运行过程中可以执行检测逻辑代码捕获到程序运行数据,分析程序运行数据得到被测程序的控制流和数据流,进而得到逻辑覆盖等动态信息,从而达到测试目的的方法。
根据实际的测试需求,确定被测程序中的至少一个插桩点,以及分别考虑在每一插桩点上所需捕获的程序运行数据,设计一个具有相应捕获功能的字节码,通过被测程序中的探针分别在每一插桩点上***对应的字节码,以实现通过探针预插桩的各个字节码捕获所需的程序运行数据。
根据实际的测试需求,可以通过探针仅在被测程序中的一个插桩点预插桩一个字节码,也可以通过探针在被测程序中的多个不同的插桩点预插桩多个不同的字节码。
插桩点的位置包括原生线程相关的方法、线程池提交任务相关的方法、并发流forkjoin框架(java提供的一个用于并行执行任务的框架)相关的方法、定时任务框架相关的方法。
其中,原生线程相关的方法包括:Thread的start方法;线程池提交任务相关的方法包括:ThreadPoolExecutor的execute方法,ThreadPoolExecutor的submit方法;并发流forkjoin框架相关的方法包括:ForkJoinPool的execute方法,ForkJoinPool的submit方法;定时任务框架相关的方法包括:ScheduledThreadPool的schedule方法,ScheduledThreadPool的scheduleAtFixedRate方法,ScheduledThreadPool的scheduleWithFixedDelay方法,ScheduledThreadPool的execute方法,ScheduledThreadPool的submit方法。
插桩的对象包括请求相关的函数、同步/异步传播点相关的方法、同步/异步汇聚点相关的方法。
其中,请求相关的函数包括:HTTP请求处理的入口方法,Request对象获取外部参数的相关方法,Response对象设置返回数据的相关方法;同步/异步传播相关的方法包括字符串拼接、字符串截取、字符串反转等字符串操作,Java集合类型的操作,Java 文件IO/网络IO操作,Base64加解密、AES/DES加解密、RSA加解密等加解密操作;同步/异步汇聚相关的方法包括:SMTP操作方法,发送HTTP请求相关方法,XML解码相关方法,执行***命令的相关方法,执行LDAP查询相关的方法,执行XPATH查询相关的方法,文件操作相关的方法,JSON反序列化相关的方法等。
服务端当接收到请求时,利用探针在被测程序中的请求相关的函数处***的字节码,可以截取该请求的请求信息,该请求的请求信息包括请求的各个参数。服务端根据该请求的请求信息,建立该请求的污点池,其中,污点池包括初始化的污点传播结构和初始化的哈希表。
服务端当获取到该请求的请求信息时,将该请求的各个参数均作为污点源,比如将该请求的query、form、path、form-data、body等参数均作为污点源,利用探针在被测程序中的污点源函数处***的字节码,可以监控污点源函数,分别根据监控的每一污点源函数,在污点池创建根节点。
服务端利用探针在被测程序中的传播点函数处***的字节码,可以监控传播点函数,分别根据监控的每一传播点函数,在污点池创建传播子节点。
服务端利用探针在被测程序中的汇聚点函数处***的字节码,可以监控汇聚点函数,分别根据监控的每一汇聚点函数,在污点池创建汇聚子节点。
结合所有根节点、所有传播子节点和所有汇聚子节点,构建树状的污点传播结构,基于所有根节点、所有传播子节点和所有汇聚子节点的层级关系,生成污点传播路径。
其中,树状的污点传播结构是:每一根节点下连接有至少一个传播子节点,每一传播子节点下连接有至少一个传播子节点和/或至少一个汇聚子节点。基于污点池,按照树状的污点传播结构中由汇聚子节点到传播子节点再到根节点的从下往上的顺序,从所有传播子节点和所有汇聚子节点中的最底层子节点回溯至连接的根节点,生成污点传播路径。
本发明实施例通过在被测程序中安装探针进行预插桩,监控污点源函数、传播点函数、汇聚点函数,在污点池创建根节点、传播子节点、汇聚子节点,构建出树状的污点传播结构来生成污点传播路径,能够跨线程追踪污点传播路径,有效避免出现漏报问题。
在可选的实施例当中,在所述根据截取的请求的请求信息,建立请求的污点池之前,还包括:当获取到请求的请求信息时,将请求的请求信息存储在threadcontext类。
作为示例性地,java中线程上下文(请求、响应)由threadlocal类统一管理,并进行命名(threadlocal类可以有多个),但threadlocal类仅支持thread下的跨线程,无法支持线程池或者其他特殊方式生成的异步线程,且在复杂场景下,threadlocal类还会引发内存泄漏。
出于此考虑,不采用threadlocal类的默认处理来支持跨线程,新建一个threadcontext类,将所有threadlocal类全部替换为threadcontext类,通过threadcontext类来统一全局管理IAST(交互式应用程序安全测试)的上下文信息,实现跨线程复制支持、当前数据拷贝等。
创建一个threadcontext类,由于threadcontext类的职责是统一全局管理IAST的所有上下文信息,为了防止恶意修改,threadcontext类中的所有变量都是final修饰的。在请求开始的时候,会使用threadcontext类对检测环境进行初始化,具体包括:获取请求和响应相关信息,初始化污点池。可以理解的是,统一的全局上下文避免了多个threadlocal类的分散,也让后续的跨线程复制更易于实现。
服务端将探针截取的请求信息存储在threadcontext类,即IAST上下文信息。后续跨线程复制主要是在当进入跨线程传播点的时候,分为以下几种情况:
1、原生线程启动:
原生线程启动后,在构造thread的过程中利用asm注入字节码进行threadcontext类的快照复制,将其更改为thread的局部变量,然后拦截thread的start方法,将其局部变量的指针加入到threadlocal类,调用threadcontext快照的recovery方法将污点池复制到异步线程。
采用上述方式,避免了大量的变量复制,几乎等于零开销。
2、线程池提交:
java的线程池提交一般借助一些submit方法,有些是FutureTask,有些是Callable、Runable,在线程池执行提交异步任务的方法的时候,将FutureTask、Callable和Runnable更换为重构之后的自定义类IastFutureTask、IastCallable和IastRunnable,在这些类的内部复制threadcontext快照,然后拦截其get、call、run等方法。在方法执行之前恢复其快照内容到threadlocal类,然后在方法执行之后进行快照的清理。
为解决自定义类加载器兼容问题,跨线程技术需要操作jdk的***类,但这需要考虑各种各样的复杂场景去达到对用户完全的无侵入以及适配,难以在agent(代理)的插桩技术下完成。由于用户的类和jdk的***类可能以各种类加载器被处理,因此使用桥接技术,将跨线程追踪的类放入一个iast-async-track-support包中,让这个支持包以jvm的c++加载器,也就是jvm的根加载器进行加载,保证agent和用户代码中,跨线程追踪的类都是一定可见的。同样地,对于Forkjoin框架也是如此。
服务端当通过探针截取到请求的请求信息时,将请求的请求信息存储在threadcontext类,通过threadcontext类采用跨线程复制等方式跨线程追踪污点传播路径。
本发明实施例通过将请求的请求信息存储在threadcontext类,能够采用跨线程复制等方式跨线程追踪污点传播路径,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
在可选的实施例当中,所述分别根据监控的每一污点源函数,在污点池创建根节点,具体包括:对于每一污点源函数,获取污点源函数的参数,以及获取污点源函数的函数信息;在污点池的污点传播结构中创建根节点,使根节点对应污点源函数的参数,根节点的节点信息包括污点源函数的函数信息;将污点源函数的入参和出参写入污点池的哈希表;其中,污点源函数的函数信息包括污点源函数的入参和出参。
作为示例性地,服务端通过利用探针在被测程序中的污点源函数处***的字节码来监控污点源函数,对于每一污点源函数,获取污点源函数的参数,以及获取污点源函数的函数信息。其中,污点源函数的函数信息包括污点的数据类型为源、污点源函数的函数名称、污点源函数的入参和出参、堆栈跟踪信息等。
服务端在污点池的污点传播结构中创建根节点,使根节点对应污点源函数的参数,根节点的节点信息包括所有污点源函数的函数信息。
服务端将污点源函数的入参和出参的地址哈希写入污点池的哈希表。可以理解的是,哈希表是为了确定后续传播点的出口和入口是否发生了污点传播,比如若判定入参命中哈希表,则可以确定出参也是一个污点片段,这一段代码就被标记为一个有效的传播点。
本发明实施例通过分别根据监控的每一污点源函数,在污点池创建根节点,能够针对请求的各个污点源在污点池的污点传播结构中对应建立各个根节点,结合所有根节点完整构建出树状的污点传播结构来生成污点传播路径,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
在可选的实施例当中,所述分别根据监控的每一传播点函数,在污点池创建传播子节点,具体包括:对于每一传播点函数,判断传播点函数是否为异步任务的传播点函数;若否,则将传播点函数作为同步传播点函数,根据同步传播点函数,在污点池创建同步传播子节点;若是,则将传播点函数作为异步传播点函数,根据异步传播点函数,在污点池创建异步传播子节点。
作为示例性地,服务端通过利用探针在被测程序中的传播点函数处***的字节码来监控传播点函数,对于监控的每一传播点函数,判断传播点函数是否为异步任务的传播点函数,若传播点函数为同步任务的传播点函数,则将传播点函数作为同步传播点函数,根据同步传播点函数,在污点池创建同步传播子节点;若传播点函数为异步任务的传播点函数,则将传播点函数作为异步传播点函数,根据异步传播点函数,在污点池创建异步传播子节点。
本发明实施例通过判断监控的传播点函数是否为异步任务的传播点函数,根据判断结果在污点池创建同步/异步传播子节点,结合同步/异步传播子节点构建出树状的污点传播结构来生成污点传播路径,能够在污点池区分创建同步传播子节点和异步传播子节点,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
在可选的实施例当中,所述判断传播点函数是否为异步任务的传播点函数,具体包括:在监控到线程池提交的传播任务时,将污点池复制到执行传播任务的线程;当传播任务未使用请求的参数或上一传播点函数的出参,且污点池的哈希表中有传播点函数的入参时,判定传播点函数为同步任务的传播点函数;当传播任务使用请求的参数或上一传播点函数的出参,且污点池的哈希表中有传播点函数的入参时,判定传播点函数为异步任务的传播点函数。
作为示例性地,服务端对于监控的每一传播点函数,通过利用探针在被测程序中的线程池提交任务相关的方法处***的字节码来监控线程池提交的传播任务,在监控到传播任务时,将污点池复制到执行传播任务的线程,以保证后续可查找污点池中的数据,并判断传播任务是否使用请求的参数或上一传播点函数的出参(可以在污点池的哈希表中查找),以及判断污点池的哈希表中是否有传播点函数的入参的地址哈希,若传播任务未使用请求的参数或上一传播点函数的出参,且污点池的哈希表中有传播点函数的入参的地址哈希,则判定传播点函数为同步任务的传播点函数;若传播任务有使用请求的参数或上一传播点函数的出参,且污点池的哈希表中有传播点函数的入参的地址哈希,则判定传播点函数为异步任务的传播点函数。
其中,在监控到线程池提交的传播任务时,为了保证后续可查找污点池中的数据,可以对线程池提交的任务对象进行代理,单独写一个jar包,jar包内包括自定义的代理类。
在代理过程中,首先需要先解决双亲委派带来的插桩问题。由于jdk存在双亲委派机制:***类加载器->扩展类加载器->根加载器,且thread相关的处理以及线程池的逻辑均是由根加载器加载的,所以除非加入-Xbootclasspath\p:当前jar包,否则是没有办法操作线程类的。而如果直接注入到根加载器下,根加载器对于所有加载器均是可见的,所有业务代码均可以访问这段插桩逻辑,那么仍然会存在一定的业务隐患。考虑到这一点,在异步支持的jar包内仅保留了一些IastRunable、IastCallable以及IastFutureTask等桥接类,在核心代码中对桥接类进行具体的代码实现,这样就可以达到不借助-Xbootclasspath\p依然可以支持跨线程复制。
对jar包的改进具体是将FutureTask、Callable和Runnable更换为重构之后的自定义类IastFutureTask、IastCallable和IastRunnable,在这些类的内部复制threadcontext快照,然后拦截其get、call、run等方法,在方法执行之前恢复threadcontext快照内容到threadlocal内,然后在方法执行之后清理threadcontext快照。
在任务对象被构造时,目前还在同一线程内,复制污点池到本地变量作为执行传播任务的线程中的污点池(因为后续异步执行访问不到),使得任务对象在异步线程被执行时,可以通过插桩的方式访问本地变量,将快照重新还原到threadcontext,将threadcontext标记为正在执行异步操作,记录当前异步线程的名称和id,具体是通过java的请求标识码traceId获取。
上述通过插桩的方式访问本地变量的主要过程是,首先获取当前线程的快照,将污点池和当前线程执行上下文进行复制(包括设置异步标记等),比如:
“ThreadContextSnapshot snapshot = ThreadContext.createSnapshot()
Snapshot.markCurrentThread(asyncThread)”,
然后在异步线程将其恢复,比如:
“ThreadContext.recoverySnapshot(snapshot)”。
后续在污点池创建传播子节点后,退出异步传播逻辑,清空本地变量,比如:“ThreadContext.clearSnapshot()”。
当进入异步传播逻辑,即线程池提交的传播任务为异步任务时,可能使用传播点的污点片段,也可能直接使用请求内的部分参数作为拼接。例如,线程池提交的传播任务是异步发送短信,当传播任务执行时,发送方发送的短信内容和指定的接收方可能是在请求内传递过来的,也可能是经过逻辑处理后传递过来的,比如传过来的是id,通过id匹配出目标短信模板,填充请求数据到目标短信模板中异步发送短信。
出于此考虑,如果线程池提交的传播任务未使用请求的参数或上一传播点函数的出参,且污点池的哈希表中有传播点函数的入参的地址哈希,那么认为进入同步传播逻辑,将传播点函数作为同步传播点函数,根据同步传播点函数,在污点池创建同步传播子节点;如果线程池提交的传播任务使用请求的参数或上一传播点函数的出参,且污点池的哈希表中有传播点函数的入参的地址哈希,那么认为进入异步传播逻辑,将传播点函数作为异步传播点函数,根据异步传播点函数,在污点池创建异步传播子节点。
本发明实施例通过判断传播点函数是否为异步任务的传播点函数,能够准确区分同步/异步传播点函数,保证后续准确地在污点池创建同步/异步传播子节点,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
在可选的实施例当中,所述根据同步传播点函数,在污点池创建同步传播子节点,具体包括:获取同步传播点函数的参数,以及获取同步传播点函数的函数信息;在污点池的污点传播结构中创建根节点对应的子节点作为同步传播子节点,使同步传播子节点对应同步传播点函数的参数,同步传播子节点的节点信息包括同步传播点函数的函数信息;将同步传播点函数的出参写入污点池的哈希表;其中,同步传播点函数的函数信息包括同步传播点函数的出参。
作为示例性地,服务端在判定传播点函数为同步传播点函数时,获取同步传播点函数的参数,以及获取同步传播点函数的函数信息,在污点池建立根节点对应的子节点作为同步传播子节点,使同步传播子节点对应同步传播点函数的参数,同步传播子节点的节点信息包括同步传播点函数的函数信息。其中,同步传播点函数的函数信息包括污点的数据类型为传播、传播点函数的名称、传播点函数的入参和出参、堆栈跟踪信息等。
服务端还将同步传播点函数的出参写入污点池的哈希表。
本发明实施例通过根据同步传播点函数,在污点池的污点传播结构中创建同步传播子节点,能够结合同步传播子节点构建出树状的污点传播结构来生成污点传播路径,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
在可选的实施例当中,所述根据异步传播点函数,在污点池创建异步传播子节点,具体包括:获取异步传播点函数的参数、异步传播点函数的函数信息,以及获取传播任务使用的参数;当传播任务使用的参数为请求的参数时,在污点池的污点传播结构中创建根节点对应的子节点作为异步传播子节点,使异步传播子节点对应异步传播点函数的参数,异步传播子节点的节点信息包括异步传播点函数的函数信息和异步信息;当传播任务使用的参数为上一传播点函数的出参时,在污点池的污点传播结构中创建上一异步传播子节点对应的子节点作为异步传播子节点,使异步传播子节点对应异步传播点函数的参数,异步传播子节点的节点信息包括异步传播点函数的函数信息和异步信息;将异步传播点函数的出参写入污点池的哈希表;其中,异步传播点函数的函数信息包括异步传播点函数的出参。
作为示例性地,服务端在判定传播点函数为异步传播点函数时,获取异步传播点函数的参数、异步传播点函数的函数信息,以及获取传播任务使用的参数。
在污点传播过程中,根据传播任务使用的参数是请求的参数还是上一传播点的出参,来选择是在根节点还是上一异步传播子节点下创建异步传播子节点。
当传播任务使用的参数为请求的参数时,在污点池的污点传播结构中创建根节点对应的子节点作为异步传播子节点,使异步传播子节点对应异步传播点函数的参数,异步传播子节点的节点信息包括异步传播点函数的函数信息和异步信息。
当传播任务使用的参数为上一传播点函数的出参时,在污点池的污点传播结构中创建上一异步传播子节点对应的子节点作为异步传播子节点,使异步传播子节点对应异步传播点函数的参数,异步传播子节点的节点信息包括异步传播点函数的函数信息和异步信息。其中,异步传播点函数的函数信息包括污点的数据类型为传播、传播点函数的名称、传播点函数的入参和出参、堆栈跟踪信息等。
服务端还将异步传播点函数的出参写入污点池的哈希表。
由于异步操作同时可以有多个,所以一个父节点会出现多个子节点。例如,污点传播流程的数据流图如图2所示,污点传播结构的示意图如图3所示。
本发明实施例通过根据异步传播点函数,在污点池的污点传播结构中创建异步传播子节点,能够结合异步传播子节点构建出树状的污点传播结构来生成污点传播路径,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
在可选的实施例当中,所述分别根据监控的每一汇聚点函数,在污点池创建汇聚子节点,具体包括:对于每一汇聚点函数,判断汇聚点函数是否为异步任务的汇聚点函数;若否,则将汇聚点函数作为同步汇聚点函数,根据同步汇聚点函数,在污点池创建同步汇聚子节点;若是,则将汇聚点函数作为异步汇聚点函数,根据异步汇聚点函数,在污点池创建异步汇聚子节点。
作为示例性地,服务端通过利用探针在汇聚点函数处***的字节码来监控汇聚点函数,对于每一汇聚点函数,判断汇聚点函数是否为异步任务的汇聚点函数,若汇聚点函数为同步任务的汇聚点函数,则将汇聚点函数作为同步汇聚点函数,根据同步汇聚点函数,在污点池创建同步汇聚子节点;若汇聚点函数为异步任务的汇聚点函数,则将汇聚点函数作为异步汇聚点函数,根据异步汇聚点函数,在污点池创建异步汇聚子节点。
本发明实施例通过判断监控的汇聚点函数是否为异步任务的汇聚点函数,根据判断结果在污点池创建同步/异步汇聚子节点,结合同步/异步汇聚子节点构建出树状的污点传播结构来生成污点传播路径,能够在污点池区分创建同步汇聚子节点和异步汇聚子节点,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
在可选的实施例当中,所述判断汇聚点函数是否为异步任务的汇聚点函数,具体包括:在监控到线程池提交的汇聚任务时,将污点池复制到执行汇聚任务的线程;当汇聚任务未使用请求的参数或任一传播点函数的参数,且污点池的哈希表中有汇聚点函数的入参时,判定汇聚点函数为同步任务的汇聚点函数;当汇聚任务使用请求的参数或任一传播点函数的参数,且污点池的哈希表中有汇聚点函数的入参时,判定汇聚点函数为异步任务的汇聚点函数。
作为示例性地,服务端对于监控的每一汇聚点函数,通过利用探针在被测程序中的线程池提交任务相关的方法处***的字节码来监控线程池提交的汇聚任务,在监控到汇聚任务时,将污点池复制到执行汇聚任务的线程,以保证后续可查找污点池中的数据,并判断汇聚任务是否使用请求的参数或任一传播点函数的参数(可以在污点池的哈希表中查找),以及判断污点池的哈希表中是否有汇聚点函数的入参的地址哈希,若汇聚任务未使用请求的参数或任一传播点函数的参数,且污点池的哈希表中有汇聚点函数的入参的地址哈希,则判定汇聚点函数为同步任务的汇聚点函数;若汇聚任务有使用请求的参数或任一传播点函数的参数,且污点池的哈希表中有汇聚点函数的入参的地址哈希,则判定汇聚点函数为异步任务的汇聚点函数。
其中,在监控到线程池提交的汇聚任务时,为了保证后续可查找污点池中的数据,可以对线程池提交的任务对象进行代理,单独写一个jar包,jar包内包括自定义的代理类。代理过程可参考上文,在此不做赘述。
在任务对象被构造时,目前还在同一线程内,复制污点池到本地变量作为执行汇聚任务的线程中的污点池(因为后续异步执行访问不到),使得任务对象在异步线程被执行时,通过插桩的方式访问本地变量,通过特定接口执行任务逻辑(java的异步均有其特定接口),将快照重新还原到threadcontext,实际是修改threadcontext的指针,实现0开销。
对threadcontext的指针的修改具体是:利用ASM技术访问java的字节码,提取本地变量threadcontext对应的指针, 然后通过更改指针位置重新设置到当前线程内实现跨线程复制。
例如,对于一个同步执行代码,threadcontext被设置在当前线程的threadlocal内,在异步传播的时候,这个threadcontext就会断开,所以需要先创建一个快照snapshot,然后将snapshot的指针重新设置到当前线程内。
将threadcontext标记为正在执行异步操作,记录当前异步线程的名称和id,通过java的请求标识码traceId获取。
后续的异步汇聚逻辑与异步传播逻辑类似,可参考上文,在此不做赘述。
本发明实施例通过判断汇聚点函数是否为异步任务的汇聚点函数,能够准确区分同步/异步汇聚点函数,保证后续准确地在污点池创建同步/异步汇聚子节点,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
在可选的实施例当中,所述根据同步汇聚点函数,在污点池创建同步汇聚子节点,具体包括:获取同步汇聚点函数的参数,以及获取同步汇聚点函数的函数信息;在污点池的污点传播结构中创建传播子节点对应的子节点作为同步汇聚子节点,使同步汇聚子节点对应同步汇聚点函数的参数,同步汇聚子节点的节点信息包括同步汇聚点函数的函数信息。
作为示例性地,服务端在判定汇聚点函数为同步汇聚点函数时,获取同步汇聚点函数的参数,以及获取同步汇聚点函数的函数信息,在污点池建立传播子节点对应的子节点作为同步汇聚子节点,使同步汇聚子节点对应同步汇聚点函数的参数,同步汇聚子节点的节点信息包括同步汇聚点函数的函数信息。其中,同步汇聚点函数的函数信息包括污点的数据类型为汇聚、汇聚点函数的名称、汇聚点函数的入参和出参、堆栈跟踪信息等。
本发明实施例通过根据同步汇聚点函数,在污点池的污点传播结构中创建同步汇聚子节点,能够结合同步汇聚子节点构建出树状的污点传播结构来生成污点传播路径,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
在可选的实施例当中,所述根据异步汇聚点函数,在污点池创建异步汇聚子节点,具体包括:获取异步汇聚点函数的参数,以及获取异步汇聚点函数的函数信息;在污点池的污点传播结构中创建传播子节点对应的子节点作为异步汇聚子节点,使异步汇聚子节点对应异步汇聚点函数的参数,异步汇聚子节点的节点信息包括异步汇聚点函数的函数信息和异步信息。
作为示例性地,服务端在判定汇聚点函数为异步汇聚点函数时,获取异步汇聚点函数的参数,以及获取异步传播点函数的函数信息,在污点池的污点传播结构中创建传播子节点对应的子节点作为异步汇聚子节点,使异步汇聚子节点对应异步汇聚点函数的参数,异步汇聚子节点的节点信息包括异步汇聚点函数的函数信息和异步信息。其中,异步汇聚点函数的函数信息包括污点的数据类型为汇聚、汇聚点函数的名称、汇聚点函数的入参和出参、堆栈跟踪信息等。
本发明实施例通过根据异步汇聚点函数,在污点池的污点传播结构中创建异步汇聚子节点,能够结合异步汇聚子节点构建出树状的污点传播结构来生成污点传播路径,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
在可选的实施例当中,异步信息包括异步标记信息和异步线程信息。
作为示例性地,异步信息包括异步标记信息和异步线程信息。
异步标记信息是在当前传播/汇聚子节点信息中表明线程是否为异步的标记。在判定跨线程的时候可以通过一个特殊标记follow来标识当前传播/汇聚子节点。
考虑到同步追踪一定有顺序性,异步追踪时线程任务执行的先后顺序是不受控制的,所以将当前传播/汇聚子节点定义为follow子节点,使得在同一个父节点下,跨线程异步追踪的节点标签会以并排的方式挂载在这些节点的父节点上。
如果不区分异步追踪节点数据和同步追踪节点数据,那么就会产生一个数据显示混乱的问题。假设当前传播子节点a下有b、c、d三个节点,若没有follow标记,则b、c、d三个节点有时候以a→b→c→d顺序出现,有时候又以b→d没有c的形式出现,这是相当混乱的,而添加这个follow标记来标识异步子节点,有利于准确定位异步传播流程。
异步线程信息包括当前异步线程的名称、id、优先级和运行状态等,方便快速获取当前传播/汇聚节点处理的异步线程的详细情况。
本发明实施例通过在污点池的污点传播结构中创建异步传播/汇聚子节点的过程中,使异步传播/汇聚子节点的节点信息包括异步标记信息和异步线程信息,能够在树状的污点传播结构中快速定位异步传播流流程,更好地实现跨线程追踪污点传播路径,有效避免出现漏报问题。
请参看图4,图4为本发明第二实施例提供的一种基于代码疫苗的跨线程漏洞分析方法的结构示意图。本发明第二实施例提供一种基于代码疫苗的跨线程漏洞分析装置,包括:探针预插桩模块201,用于在被测程序中安装探针,通过探针进行预插桩;污点池建立模块202,用于根据截取的请求的请求信息,建立请求的污点池;根节点创建模块203,用于分别根据监控的每一污点源函数,在污点池创建根节点;传播子节点创建模块204,用于分别根据监控的每一传播点函数,在污点池创建传播子节点;汇聚子节点创建模块205,用于分别根据监控的每一汇聚点函数,在污点池创建汇聚子节点;污点传播追踪模块206,用于基于所有根节点、所有传播子节点和所有汇聚子节点的层级关系,生成污点传播路径。
在可选的实施例当中,污点池建立模块202,还用于在所述根据截取的请求的请求信息,建立请求的污点池之前,当获取到请求的请求信息时,将请求的请求信息存储在threadcontext类。
在可选的实施例当中,所述分别根据监控的每一污点源函数,在污点池创建根节点,具体包括:对于每一污点源函数,获取污点源函数的参数,以及获取污点源函数的函数信息;在污点池的污点传播结构中创建根节点,使根节点对应污点源函数的参数,根节点的节点信息包括污点源函数的函数信息;将污点源函数的入参和出参写入污点池的哈希表;其中,污点源函数的函数信息包括污点源函数的入参和出参。
在可选的实施例当中,所述分别根据监控的每一传播点函数,在污点池创建传播子节点,具体包括:对于每一传播点函数,判断传播点函数是否为异步任务的传播点函数;若否,则将传播点函数作为同步传播点函数,根据同步传播点函数,在污点池创建同步传播子节点;若是,则将传播点函数作为异步传播点函数,根据异步传播点函数,在污点池创建异步传播子节点。
在可选的实施例当中,所述判断传播点函数是否为异步任务的传播点函数,具体包括:在监控到线程池提交的传播任务时,将污点池复制到执行传播任务的线程;当传播任务未使用请求的参数或上一传播点函数的出参,且污点池的哈希表中有传播点函数的入参时,判定传播点函数为同步任务的传播点函数;当传播任务使用请求的参数或上一传播点函数的出参,且污点池的哈希表中有传播点函数的入参时,判定传播点函数为异步任务的传播点函数。
在可选的实施例当中,所述根据同步传播点函数,在污点池创建同步传播子节点,具体包括:获取同步传播点函数的参数,以及获取同步传播点函数的函数信息;在污点池的污点传播结构中创建根节点对应的子节点作为同步传播子节点,使同步传播子节点对应同步传播点函数的参数,同步传播子节点的节点信息包括同步传播点函数的函数信息;将同步传播点函数的出参写入污点池的哈希表;其中,同步传播点函数的函数信息包括同步传播点函数的出参。
在可选的实施例当中,所述根据异步传播点函数,在污点池创建异步传播子节点,具体包括:获取异步传播点函数的参数、异步传播点函数的函数信息,以及获取传播任务使用的参数;当传播任务使用的参数为请求的参数时,在污点池的污点传播结构中创建根节点对应的子节点作为异步传播子节点,使异步传播子节点对应异步传播点函数的参数,异步传播子节点的节点信息包括异步传播点函数的函数信息和异步信息;当传播任务使用的参数为上一传播点函数的出参时,在污点池的污点传播结构中创建上一异步传播子节点对应的子节点作为异步传播子节点,使异步传播子节点对应异步传播点函数的参数,异步传播子节点的节点信息包括异步传播点函数的函数信息和异步信息;将异步传播点函数的出参写入污点池的哈希表;其中,异步传播点函数的函数信息包括异步传播点函数的出参。
在可选的实施例当中,所述分别根据监控的每一汇聚点函数,在污点池创建汇聚子节点,具体包括:对于每一汇聚点函数,判断汇聚点函数是否为异步任务的汇聚点函数;若否,则将汇聚点函数作为同步汇聚点函数,根据同步汇聚点函数,在污点池创建同步汇聚子节点;若是,则将汇聚点函数作为异步汇聚点函数,根据异步汇聚点函数,在污点池创建异步汇聚子节点。
在可选的实施例当中,所述判断汇聚点函数是否为异步任务的汇聚点函数,具体包括:在监控到线程池提交的汇聚任务时,将污点池复制到执行汇聚任务的线程;当汇聚任务未使用请求的参数或任一传播点函数的参数,且污点池的哈希表中有汇聚点函数的入参时,判定汇聚点函数为同步任务的汇聚点函数;当汇聚任务使用请求的参数或任一传播点函数的参数,且污点池的哈希表中有汇聚点函数的入参时,判定汇聚点函数为异步任务的汇聚点函数。
在可选的实施例当中,所述根据同步汇聚点函数,在污点池创建同步汇聚子节点,具体包括:获取同步汇聚点函数的参数,以及获取同步汇聚点函数的函数信息;在污点池的污点传播结构中创建传播子节点对应的子节点作为同步汇聚子节点,使同步汇聚子节点对应同步汇聚点函数的参数,同步汇聚子节点的节点信息包括同步汇聚点函数的函数信息。
在可选的实施例当中,所述根据异步汇聚点函数,在污点池创建异步汇聚子节点,具体包括:获取异步汇聚点函数的参数,以及获取异步汇聚点函数的函数信息;在污点池的污点传播结构中创建传播子节点对应的子节点作为异步汇聚子节点,使异步汇聚子节点对应异步汇聚点函数的参数,异步汇聚子节点的节点信息包括异步汇聚点函数的函数信息和异步信息。
在可选的实施例当中,异步信息包括异步标记信息和异步线程信息。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
请参看图5,图5为本发明第三实施例提供的一种电子设备的结构示意图。本发明第三实施例提供一种电子设备30,包括处理器301、存储器302以及存储在存储器302中且被配置为由处理器301执行的计算机程序;存储器302与处理器301耦接,且处理器301执行计算机程序时实现如本发明第一实施例所述的基于代码疫苗的跨线程漏洞分析方法,且能达到与之相同的有益效果。
其中,处理器301通过总线303从存储器302读取计算机程序并执行所述计算机程序时可实现如本发明第一实施例所述的基于代码疫苗的跨线程漏洞分析方法包括的任意实施例的方法。
处理器301可以处理数字信号,可以包括各种计算结构。例如复杂指令集计算机结构、结构精简指令集计算机结构或者一种实行多种指令集组合的结构。在一些示例中,处理器301可以是微处理器。
存储器302可以用于存储由处理器301执行的指令或指令执行过程中相关的数据。这些指令和/或数据可以包括代码,用于实现本发明实施例描述的一个或多个模块的一些功能或者全部功能。本公开实施例的处理器301可以用于执行存储器302中的指令以实现如本发明第一实施例所述的基于代码疫苗的跨线程漏洞分析方法。存储器302包括动态随机存取存储器、静态随机存取存储器、闪存、光存储器或其它本领域技术人员所熟知的存储器。
本发明第四实施例提供一种计算机可读存储介质,计算机可读存储介质包括存储的计算机程序;其中,在计算机程序运行时控制计算机可读存储介质所在设备执行如本发明第一实施例所述的基于代码疫苗的跨线程漏洞分析方法,且能达到与之相同的有益效果。
综上所述,本发明实施例提供基于代码疫苗的跨线程漏洞分析方法、装置、设备及介质,所述基于代码疫苗的跨线程漏洞分析方法包括:在被测程序中安装探针,通过探针进行预插桩;根据截取的请求的请求信息,建立请求的污点池;分别根据监控的每一污点源函数,在污点池创建根节点;分别根据监控的每一传播点函数,在污点池创建传播子节点;分别根据监控的每一汇聚点函数,在污点池创建汇聚子节点;基于所有所述根节点、所有所述传播子节点和所有所述汇聚子节点的层级关系,生成污点传播路径。本发明实施例通过在被测程序中安装探针进行预插桩,监控污点源函数、传播点函数、汇聚点函数,在污点池创建根节点、传播子节点、汇聚子节点,构建出树状的污点传播结构来生成污点传播路径,能够跨线程追踪污点传播路径,有效避免出现漏报问题。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (13)

1.一种基于代码疫苗的跨线程漏洞分析方法,其特征在于,包括:
在被测程序中安装探针,通过所述探针进行预插桩;
根据截取的请求的请求信息,建立所述请求的污点池;
分别根据监控的每一污点源函数,在所述污点池创建根节点;
分别根据监控的每一传播点函数,在所述污点池创建传播子节点;
所述分别根据监控的每一传播点函数,在所述污点池创建传播子节点,具体包括:对于每一所述传播点函数,判断所述传播点函数是否为异步任务的传播点函数;若否,则将所述传播点函数作为同步传播点函数,根据所述同步传播点函数,在所述污点池创建同步传播子节点;若是,则将所述传播点函数作为异步传播点函数,根据所述异步传播点函数,在所述污点池创建异步传播子节点;
所述根据所述同步传播点函数,在所述污点池创建同步传播子节点,具体包括:获取所述同步传播点函数的参数,以及获取所述同步传播点函数的函数信息;在所述污点池的污点传播结构中创建所述根节点对应的子节点作为所述同步传播子节点,使所述同步传播子节点对应所述同步传播点函数的参数,所述同步传播子节点的节点信息包括所述同步传播点函数的函数信息;将所述同步传播点函数的出参写入所述污点池的哈希表;其中,所述同步传播点函数的函数信息包括所述同步传播点函数的出参;
分别根据监控的每一汇聚点函数,在所述污点池创建汇聚子节点;
基于所有所述根节点、所有所述传播子节点和所有所述汇聚子节点的层级关系,生成污点传播路径。
2.根据权利要求1所述的基于代码疫苗的跨线程漏洞分析方法,其特征在于,在所述根据截取的请求的请求信息,建立所述请求的污点池之前,还包括:
当获取到所述请求的请求信息时,将所述请求的请求信息存储在threadcontext类。
3.根据权利要求1所述的基于代码疫苗的跨线程漏洞分析方法,其特征在于,所述分别根据监控的每一污点源函数,在所述污点池创建根节点,具体包括:
对于每一所述污点源函数,获取所述污点源函数的参数,以及获取所述污点源函数的函数信息;
在所述污点池的污点传播结构中创建所述根节点,使所述根节点对应所述污点源函数的参数,所述根节点的节点信息包括所述污点源函数的函数信息;
将所述污点源函数的入参和出参写入所述污点池的哈希表;其中,所述污点源函数的函数信息包括所述污点源函数的入参和出参。
4.根据权利要求1所述的基于代码疫苗的跨线程漏洞分析方法,其特征在于,所述判断所述传播点函数是否为异步任务的传播点函数,具体包括:
在监控到线程池提交的传播任务时,将所述污点池复制到执行所述传播任务的线程;
当所述传播任务未使用所述请求的参数或上一传播点函数的出参,且所述污点池的哈希表中有所述传播点函数的入参时,判定所述传播点函数为同步任务的传播点函数;
当所述传播任务使用所述请求的参数或所述上一传播点函数的出参,且所述污点池的哈希表中有所述传播点函数的入参时,判定所述传播点函数为异步任务的传播点函数。
5.根据权利要求4所述的基于代码疫苗的跨线程漏洞分析方法,其特征在于,所述根据所述异步传播点函数,在所述污点池创建异步传播子节点,具体包括:
获取所述异步传播点函数的参数、所述异步传播点函数的函数信息,以及获取所述传播任务使用的参数;
当所述传播任务使用的参数为所述请求的参数时,在所述污点池的污点传播结构中创建所述根节点对应的子节点作为所述异步传播子节点,使所述异步传播子节点对应所述异步传播点函数的参数,所述异步传播子节点的节点信息包括所述异步传播点函数的函数信息和异步信息;
当所述传播任务使用的参数为所述上一传播点函数的出参时,在所述污点池的污点传播结构中创建上一异步传播子节点对应的子节点作为所述异步传播子节点,使所述异步传播子节点对应所述异步传播点函数的参数,所述异步传播子节点的节点信息包括所述异步传播点函数的函数信息和异步信息;
将所述异步传播点函数的出参写入所述污点池的哈希表;其中,所述异步传播点函数的函数信息包括所述异步传播点函数的出参。
6.根据权利要求1所述的基于代码疫苗的跨线程漏洞分析方法,其特征在于,所述分别根据监控的每一汇聚点函数,在所述污点池创建汇聚子节点,具体包括:
对于每一所述汇聚点函数,判断所述汇聚点函数是否为异步任务的汇聚点函数;
若否,则将所述汇聚点函数作为同步汇聚点函数,根据所述同步汇聚点函数,在所述污点池创建同步汇聚子节点;
若是,则将所述汇聚点函数作为异步汇聚点函数,根据所述异步汇聚点函数,在所述污点池创建异步汇聚子节点。
7.根据权利要求6所述的基于代码疫苗的跨线程漏洞分析方法,其特征在于,所述判断所述汇聚点函数是否为异步任务的汇聚点函数,具体包括:
在监控到线程池提交的汇聚任务时,将所述污点池复制到执行所述汇聚任务的线程;
当所述汇聚任务未使用所述请求的参数或任一所述传播点函数的参数,且所述污点池的哈希表中有所述汇聚点函数的入参时,判定所述汇聚点函数为同步任务的汇聚点函数;
当所述汇聚任务使用所述请求的参数或任一所述传播点函数的参数,且所述污点池的哈希表中有所述汇聚点函数的入参时,判定所述汇聚点函数为异步任务的汇聚点函数。
8.根据权利要求6所述的基于代码疫苗的跨线程漏洞分析方法,其特征在于,所述根据所述同步汇聚点函数,在所述污点池创建同步汇聚子节点,具体包括:
获取所述同步汇聚点函数的参数,以及获取所述同步汇聚点函数的函数信息;
在所述污点池的污点传播结构中创建所述传播子节点对应的子节点作为所述同步汇聚子节点,使所述同步汇聚子节点对应所述同步汇聚点函数的参数,所述同步汇聚子节点的节点信息包括所述同步汇聚点函数的函数信息。
9.根据权利要求7所述的基于代码疫苗的跨线程漏洞分析方法,其特征在于,所述根据所述异步汇聚点函数,在所述污点池创建异步汇聚子节点,具体包括:
获取所述异步汇聚点函数的参数,以及获取所述异步汇聚点函数的函数信息;
在所述污点池的污点传播结构中创建所述传播子节点对应的子节点作为所述异步汇聚子节点,使所述异步汇聚子节点对应所述异步汇聚点函数的参数,所述异步汇聚子节点的节点信息包括所述异步汇聚点函数的函数信息和异步信息。
10.根据权利要求5或9所述的基于代码疫苗的跨线程漏洞分析方法,其特征在于,所述异步信息包括异步标记信息和异步线程信息。
11.一种基于代码疫苗的跨线程漏洞分析装置,其特征在于,包括:
探针预插桩模块,用于在被测程序中安装探针,通过所述探针进行预插桩;
污点池建立模块,用于根据截取的请求的请求信息,建立所述请求的污点池;
根节点创建模块,用于分别根据监控的每一污点源函数,在所述污点池创建根节点;
传播子节点创建模块,用于分别根据监控的每一传播点函数,在所述污点池创建传播子节点;
所述分别根据监控的每一传播点函数,在所述污点池创建传播子节点,具体包括:对于每一所述传播点函数,判断所述传播点函数是否为异步任务的传播点函数;若否,则将所述传播点函数作为同步传播点函数,根据所述同步传播点函数,在所述污点池创建同步传播子节点;若是,则将所述传播点函数作为异步传播点函数,根据所述异步传播点函数,在所述污点池创建异步传播子节点;
所述根据所述同步传播点函数,在所述污点池创建同步传播子节点,具体包括:获取所述同步传播点函数的参数,以及获取所述同步传播点函数的函数信息;在所述污点池的污点传播结构中创建所述根节点对应的子节点作为所述同步传播子节点,使所述同步传播子节点对应所述同步传播点函数的参数,所述同步传播子节点的节点信息包括所述同步传播点函数的函数信息;将所述同步传播点函数的出参写入所述污点池的哈希表;其中,所述同步传播点函数的函数信息包括所述同步传播点函数的出参;
汇聚子节点创建模块,用于分别根据监控的每一汇聚点函数,在所述污点池创建汇聚子节点;
污点传播追踪模块,用于基于所有所述根节点、所有所述传播子节点和所有所述汇聚子节点的层级关系,生成污点传播路径。
12.一种电子设备,其特征在于,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序;所述存储器与所述处理器耦接,且所述处理器执行所述计算机程序时实现根据权利要求1至10任一项所述的基于代码疫苗的跨线程漏洞分析方法。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括存储的计算机程序;其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行根据权利要求1至10任一项所述的基于代码疫苗的跨线程漏洞分析方法。
CN202311569441.9A 2023-11-23 2023-11-23 基于代码疫苗的跨线程漏洞分析方法、装置、设备及介质 Active CN117272331B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311569441.9A CN117272331B (zh) 2023-11-23 2023-11-23 基于代码疫苗的跨线程漏洞分析方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311569441.9A CN117272331B (zh) 2023-11-23 2023-11-23 基于代码疫苗的跨线程漏洞分析方法、装置、设备及介质

Publications (2)

Publication Number Publication Date
CN117272331A CN117272331A (zh) 2023-12-22
CN117272331B true CN117272331B (zh) 2024-02-02

Family

ID=89206763

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311569441.9A Active CN117272331B (zh) 2023-11-23 2023-11-23 基于代码疫苗的跨线程漏洞分析方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN117272331B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111966346A (zh) * 2020-09-09 2020-11-20 支付宝(杭州)信息技术有限公司 应用***的污点分析方法及装置
CN114077737A (zh) * 2022-01-19 2022-02-22 南京明博互联网安全创新研究院有限公司 基于污点分析的Android组件间通信数据流检测方法
CN114880673A (zh) * 2022-04-28 2022-08-09 上海交通大学 针对小程序源代码进行隐私数据泄露检测的方法及***
CN116167058A (zh) * 2023-04-23 2023-05-26 北京安普诺信息技术有限公司 一种基于代码疫苗的运行时漏洞分析方法及装置
CN116451228A (zh) * 2023-04-23 2023-07-18 北京安普诺信息技术有限公司 动态污点追踪方法、装置及相关在线污点传播分析***
CN116541855A (zh) * 2023-07-06 2023-08-04 北京大学 跨协程运行时漏洞分析方法、装置、电子设备及存储介质
CN116842531A (zh) * 2023-08-28 2023-10-03 北京安普诺信息技术有限公司 基于代码疫苗的漏洞实时验证方法、装置、设备及介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8844046B2 (en) * 2012-09-26 2014-09-23 International Business Machines Corporation Method and apparatus for paralleling and distributing static source code security analysis using loose synchronization
US10915639B2 (en) * 2018-04-05 2021-02-09 Oracle International Corporation Staged dynamic taint flow inference

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111966346A (zh) * 2020-09-09 2020-11-20 支付宝(杭州)信息技术有限公司 应用***的污点分析方法及装置
CN114077737A (zh) * 2022-01-19 2022-02-22 南京明博互联网安全创新研究院有限公司 基于污点分析的Android组件间通信数据流检测方法
CN114880673A (zh) * 2022-04-28 2022-08-09 上海交通大学 针对小程序源代码进行隐私数据泄露检测的方法及***
CN116167058A (zh) * 2023-04-23 2023-05-26 北京安普诺信息技术有限公司 一种基于代码疫苗的运行时漏洞分析方法及装置
CN116451228A (zh) * 2023-04-23 2023-07-18 北京安普诺信息技术有限公司 动态污点追踪方法、装置及相关在线污点传播分析***
CN116541855A (zh) * 2023-07-06 2023-08-04 北京大学 跨协程运行时漏洞分析方法、装置、电子设备及存储介质
CN116842531A (zh) * 2023-08-28 2023-10-03 北京安普诺信息技术有限公司 基于代码疫苗的漏洞实时验证方法、装置、设备及介质

Also Published As

Publication number Publication date
CN117272331A (zh) 2023-12-22

Similar Documents

Publication Publication Date Title
Ma et al. {MPI}: Multiple perspective attack investigation with semantic aware execution partitioning
US9160762B2 (en) Verifying application security vulnerabilities
US6981279B1 (en) Method and apparatus for replicating and analyzing worm programs
Ji et al. Enabling refinable {Cross-Host} attack investigation with efficient data flow tagging and tracking
US8448142B2 (en) Incremental runtime compliance validation of renderable objects
US9262300B1 (en) Debugging computer programming code in a cloud debugger environment
US8756577B2 (en) Collaborative software debugging in a distributed system with private debug sessions
Bai et al. Towards model checking android applications
Yu et al. ALchemist: Fusing Application and Audit Logs for Precise Attack Provenance without Instrumentation.
US7860927B2 (en) Inspecting web browser state information from a synchronously-invoked service
US9912522B2 (en) Automatic task tracking
Yoon et al. Toward detecting compromised mapreduce workers through log analysis
EP2972881A1 (en) Diagnostics of state transitions
Ji et al. Recprov: Towards provenance-aware user space record and replay
Netravali et al. Reverb: Speculative debugging for web applications
CN117272331B (zh) 基于代码疫苗的跨线程漏洞分析方法、装置、设备及介质
US20160291951A1 (en) Dynamic provision of debuggable program code
Altekar et al. Dcr: Replay debugging for the datacenter
TW201629767A (zh) 爲符合準則之資料決定保護性措施之技術
Viticchié et al. Remotely assessing integrity of software applications by monitoring invariants: Present limitations and future directions
Zhou Fault management in distributed systems
Yu et al. Senfuzzer: Detecting sgx memory corruption via information feedback and tailored interface analysis
CN117610009B (zh) 基于代码疫苗rasp探针的跨线程漏洞修复方法及装置
Yu Understanding and Debugging Complex Software Systems: A Data-Driven Perspective.
Baldassari Design and evaluation of a public resource computing framework

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