CN109643346A - 控制流完整性 - Google Patents

控制流完整性 Download PDF

Info

Publication number
CN109643346A
CN109643346A CN201780053793.5A CN201780053793A CN109643346A CN 109643346 A CN109643346 A CN 109643346A CN 201780053793 A CN201780053793 A CN 201780053793A CN 109643346 A CN109643346 A CN 109643346A
Authority
CN
China
Prior art keywords
address
tip
cfg
grouping
destination address
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.)
Granted
Application number
CN201780053793.5A
Other languages
English (en)
Other versions
CN109643346B (zh
Inventor
S.苏尔塔纳
S.布拉塔诺夫
D.M.德拉姆
B.C.斯特朗
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of CN109643346A publication Critical patent/CN109643346A/zh
Application granted granted Critical
Publication of CN109643346B publication Critical patent/CN109643346B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30061Multi-way branch instructions, e.g. CASE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

一个实施例提供了一种装置。所述装置包括收集器电路,其用于从PT驱动器捕获处理器追踪(PT)数据。所述PT数据包括第一目标指令指针(TIP)分组,所述第一目标指令指针(TIP)分组包括在执行的目标应用的间接分支指令的第一运行时目标地址。所述装置此外包括解码器电路,其用于从PT数据中提取第一TIP分组,并且用于对第一TIP分组进行解码以产生第一运行时目标地址。所述装置此外包括控制流验证器电路,其用于至少部分地基于控制流图(CFG)来确定向第一运行时目标地址的控制流转移是否对应于控制流违反。所述CFG包括多个节点,每个节点包括第一基本块的起始地址、第一基本块的结束地址以及第二基本块的下一个可能的地址,或“没有找到”标签。

Description

控制流完整性
技术领域
本公开内容涉及控制流,具体地涉及控制流完整性。
背景技术
返回定向编程(ROP)和跳跃定向编程(JOP)各自是一种形式的控制流挟持型攻击(hijacking attack)。这些攻击利用存储器劣化漏洞,例如缓冲器溢出,用于将控制流重定向到存储器中所存储的已经存在的可执行代码。攻击依赖于短指令序列,其被称为“小工具(gadget)”,结束于间接分支指令(例如返回、跳跃*、调用*,其中*对应于间接寻址)并且执行攻击者所选择的操作。控制流完整性(CFI)验证技术可以提供对抗控制流挟持性攻击的防御。CFI验证技术被配置成确保应用中的合法控制流转移。现存CFI验证技术可能需要源代码修改和/或二进制重仪表化(re-instrumentation)来在应用二进制中***运行时CFI检查。此外,现存CFI验证技术可引发性能惩罚和/或仅可以提供有限的历史,因而限制准确性。
附图说明
所要求保护的主题的特征和优点从与其一致的实施例的以下详细描述中将是显而易见的,所述描述应当参考附图来被考虑,其中:
图1图示了与本公开内容的若干实施例一致的、包括控制流完整性电路的***的功能性框图;
图2是根据本公开内容的各种实施例的预处理操作的流程图;并且
图3是根据本公开内容的各种实施例的控制流完整性操作的流程图。
尽管以下详细描述将参考说明性实施例而进行,但是对于本领域技术人员而言,许多可替换方案、修改及其变型将是显而易见的。
具体实施方式
指令追踪工具(PT电路)、例如从英特尔公司可得到的英特尔处理器追踪(PT)可以被配置成捕获与目标应用的执行、多个应用、所选存储器范围和/或整个***有关的信息(即PT数据)。PT数据被收集在数据分组中并且可以包括例如定时信息、程序流信息(例如分支目标、分支被采取/不被采取的指示符、函数返回地址)等等。数据分组可以由PT电路临时存储,并且然后可以被提供到存储器和/或其它存储装置以用于分析。PT数据然后可以被利用以用于控制流分析操作,例如用以重构程序流。
控制流图(CFG)是通过使用图记号来对控制流、即执行路径的表示,所述路径可以在应用的执行期间通过应用来被遍历。在控制流图中,图中的每个节点对应于基本块。基本块是指令的序列,其中控制仅仅在序列的开始处进入并且控制仅仅在序列的结束时离开。在基本块的中间不存在任何分支进或出。例如,目的地地址可以对应于基本块的起始,并且间接分支指令可以对应于块的结束。间接分支指令的地址可以对应于源地址。间接分支指令的目标地址可以对应于CFG中的下一个基本块的下一个可能的地址,即可以对应于CFG中下一个/可达到的基本块的开始地址。在两个基本块(例如第一块和第二块)之间的边表示从第一块的结束向第二块的开始的控制流转移。节点因而可以包括基本块的起始地址、基本块的结束地址以及下一个基本块的下一个可能的起始地址,即下一个/可达到的基本块的开始地址。可以通过例如源代码分析、二进制分析、静态二进制分析、执行剖析等等来生成控制流图。控制流图于是可以包括多个合法执行路径。每个合法执行路径可以包括通过一个或多个边被连接的多个节点。
控制流完整性(CFI)验证技术被配置成施行CFI安全性策略,即应用的执行遵循CFG的合法路径。CFI验证技术因而可以用于缓和控制流挟持性攻击。一般而言,CFI验证被配置成验证在间接或条件分支处的控制流转移和/或执行路径,其在运行时被确定,对照合法CFT,在运行时之前被确定。如本文中所使用的,间接分支指令包括但不限于跳跃指令、函数调用、函数返回、中断等等,其涉及更新来自寄存器或存储器位置的指令指针。某些CFI验证技术依赖于源代码修改或二进制重仪表化来将运行时CFI检查***到应用二进制中。
CFI验证技术可以被分类为粗粒度或细粒度的。一般而言,粗粒度的控制流完整性技术被配置成仅仅验证与间接分支指令相关联的目标(即目的地)地址。换言之,可以不检查从源地址(即其包括源地址)到目标目的地地址的路径。细粒度的控制流完整性技术被配置成验证在间接分支指令的源与分支的目标地址之间的路径。细粒度的控制完整性技术还可以包括验证在前间接分支指令的目标地址与当前间接分支指令的源地址之间的执行路径。粗粒度的控制流完整性技术实现起来可以相对较容易,但是可能不检测所有控制流攻击。细粒度的控制流完整性技术通常可以检测大多数控制流攻击,但是实现起来可能相对更困难,和/或可导致性能惩罚。
间接分支指令的目标地址可以是可标识或不可标识的。可标识的目标地址可以在运行时之前、根据应用二进制(即应用二进制代码)来被确定。不可标识的目标地址可不在运行时之前被标识。可标识的目标地址可以唯一地可标识或可以不是唯一可标识的。唯一可标识的目标地址对应于具有一个接下来可能的地址的分支指令。因而,针对所选节点的下一个可能的地址可以对应于下一个基本块的那个接下来可能的地址。不是唯一地可标识的可标识目标地址对应于多个被标识的接下来可能的地址,其可以在运行时之前、例如在静态分析期间被标识,如本文中所描述的那样。因而,所选节点的间接分支指令的目标地址可以对应于一组接下来可能的地址中的任一个。因而,被包括在CFG中的每个节点可以包括下一个基本块的下一个可能的地址,或“没有找到”标签。
一般而言,此公开内容涉及控制流完整性(CFI)。一种装置、方法和/或***被配置成利用从PT电路所捕获的处理器追踪(PT)数据和控制流图(CFG)来实时地确定在正执行的目标应用中是否存在控制流违反。PT电路和PT数据被配置成提供运行时控制流信息(即执行追踪),其然后可以被利用来施行控制流完整性。利用执行追踪的控制流完整性被配置成检测通过使用基于逻辑的技术检测起来可能相对更困难的恶意软件。CFG可以在目标应用的执行之前、在预处理操作、例如静态分析期间被确定,和/或可以在目标应用、例如动态分析的良性执行(即训练)期间被更新。
所述装置、方法和/或***被配置成实时地检测控制流完整性违反,例如在发动恶意应用之前。至少在最初,攻击者小工具可能是相对良性的,从而提供一窗口,其中可以标识控制流违反,并且因而可以检测攻击,这在发动恶意应用之前。
控制流完整性电路包括收集器电路、解码器电路、和控制流验证器电路,如在以下将更详细地被描述的。收集器电路被配置成从PT驱动器捕获处理器追踪(PT)数据,所述PT驱动器被配置成从PT电路捕获PT分组。PT数据可以包括目标指令指针(TIP)分组,所述目标指令指针(TIP)分组包括在执行的目标应用的间接分支指令的运行时目标地址。解码器电路被配置成从PT数据提取TIP分组,并且对TIP分组进行解码以产生分支指令的运行时目标地址。控制流验证器电路被配置成至少部分地基于控制流图(CFG)来确定向运行时目标地址的控制流转移是否对应于控制流违反。
如本文中所使用的,运行时目标地址是在运行时期间、至少部分地基于PT数据而被确定的目标地址。静态目标地址是被包括在CFG中的目标地址。每个静态目标地址可已经由CFG生成器电路在CFG生成操作期间确定,和/或由PT电路在当前运行时之前、例如在预处理操作期间确定。因而,可以在预处理器操作期间、在目标应用的多个运行之上确定所述多个静态目标地址。在控制完整性验证操作期间,静态目标地址可以至少部分地基于CFG而被静态地确定,即可以被检索自CFG。
例如,PT数据可以包含第一目标指令指针(TIP)分组,所述第一目标指令指针(TIP)分组包括在执行的目标应用的间接分支指令的第一运行时目标地址。解码器电路可以从PT数据中提取第一TIP分组,并且对第一TIP分组进行解码以产生第一运行时目标地址。控制流验证器电路然后可以至少部分地基于控制流图(CFG)来确定向第一运行时目标地址的控制流转移是否对应于控制流违反。CFG可以包括多个节点。每个节点可以包括第一基本块的起始地址、第一基本块的结束地址以及第二基本块的下一个可能的地址,或“没有找到”标签。
在另一示例中,PT数据可以此外包括第二TIP分组,所述第二TIP分组包括第二运行时目标地址。第一TIP分组和第二TIP分组可以在PT数据中是顺序的。解码器电路可以此外被配置成对第二TIP分组进行解码以产生第二运行时目标地址。确定向第一运行时目标地址的控制流转移是否对应于控制流违反可以包括确定第一静态目标地址是否对应于第一运行时目标地址以及第二静态目标地址是否对应于第二运行时目标地址。控制流验证器电路可以此外被配置成如果CFG包括第一静态目标地址和第二静态目标地址则确定在第一静态目标地址与第二静态目标地址之间的CFG中是否存在合法执行路径,或如果CFG不包括第一静态目标地址或第二静态目标地址则用信号通知控制流违反。
因而,控制流完整性电路可以被配置成利用从PT电路所捕获的PT数据和CFG来实时地确定在正执行的目标应用中是否存在控制流违反。
图1图示了与本公开内容的若干实施例一致的、包括控制流完整性电路102的***100的功能性框图。***100可以此外包括处理器110、存储器112、通信接口114、操作***(OS)116、目标应用118和库119。例如,处理器110可以对应于单核或多核通用处理器,诸如由Intel公司提供的那些等等。在实施例中,处理器110可以包括处理器追踪(PT)电路124,如将在以下更详细地描述的。通信接口114可以被配置成将***100有线地和/或无线地耦合到一个或多个通信合作伙伴(未被示出)。通信接口114可以遵从一个或多个通信协议和/或与一个或多个通信协议兼容。例如,库119可以对应于程序库,其包括被配置成由目标应用118利用的一个或多个库功能。
***100可以包括但不限于:移动电话,所述移动电话包括但不限于智能电话(例如iPhone®、基于Android®的电话、 Blackberry®、基于Symbian®的电话、基于Palm®的电话等等);可穿戴设备(例如可穿戴计算机、“智能”手表、智能眼镜、智能衣着等等)和/或***;物联网(IoT)联网的设备,包括但不限于传感器***(例如环境的、定位、运动等等)和/或传感器网络(有线和/或无线的);计算***(例如服务器、工作站计算机、台式计算机、膝上型计算机、平板计算机(例如iPad®、GalaxyTab®等等)、超便携计算机、超移动计算机、上网本计算机和/或次笔记本型计算机;等等。
***100可以此外包括控制流图(CFG)生成器电路120,以及CFG存贮器122。在一些实施例中,***100可以包括反汇编器(DA)逻辑121。DA逻辑121被配置成将二进制代码转换(即反汇编)成汇编代码,即汇编语言指令。CFG生成器电路120被配置成至少部分地基于应用汇编代码来为目标应用118生成应用CFG、例如应用CFG 128。CFG生成器电路120可以此外被配置成至少部分地基于库二进制代码来为库119生成库CFG、例如库CFG 129。包括库CFG129被配置成增强控制流完整性验证操作。例如,CFG生成器电路120被配置成为目标应用二进制代码(即可执行代码)以及由目标应用二进制代码所使用的任何库二进制代码生成CFG。当应用执行的时候,应用指令和相关联的库函数等等执行。换言之,在应用执行期间,控制流转移可发生在应用以及库指令中。
因而,CFG生成器电路120被配置成为应用118以及由应用118所使用的库、例如库119生成控制流图。CFG 128、129然后可以被存储到CFG存贮器122。可以经由对应用二进制代码和库二进制代码的静态分析来生成CFG(即应用CFG 128以及库CFG 129)。一般可以在离线过程中生成CFG 128、129。从对二进制的静态分析所提取的间接分支目标地址是关于二进制代码的静态开始地址。在运行时,应用二进制代码和库二进制可以被加载到与在静态分析期间所使用的静态开始地址不同的地址。因而,运行时模块(图)加载信息可以被用于将运行时间接分支目标转化成被静态地确定和存储的间接分支目标地址,因为所计算的目标 = 运行时地址 - 运行时模块加载地址 + 静态模块开始地址。因而,CFG生成器电路120可以被配置成至少部分地基于目标应用118二进制代码和/或库119二进制代码而生成每个CFG。
CFG生成器电路120被配置成从DA逻辑121接收汇编代码。DA逻辑121被配置成接收分别与目标应用118和/或库119对应的目标应用二进制代码和/或库二进制代码。DA逻辑121此外被配置成将二进制代码转换、即反汇编成汇编语言。例如,DA逻辑121可以包括但不限于从比利时SA的Hex-Rays可得到的IDA Pro和/或IDA Starter交互式反汇编器。当然,在本文中等同地设想不同的和/或开发后反汇编器。
CFG生成器电路120被配置成至少部分地基于与目标应用118和库119相对应的汇编代码来生成CFG。CFG生成器电路120被配置成至少部分地基于汇编指令来标识基本块以及标识基本块之间的连接,以便生成CFG。例如,可以静态地标识一个或多个可标识的目标地址。在另一示例中,可以为具有相关联的可标识的但是不是唯一可标识的目标地址的每个间接分支指令确定一组可能的可标识的目标地址。因而,对于每个分支指令,一个可标识的目标地址可以被标识,一组可标识的目标地址可以被标识,或者可以用“没有找到”标签来为分支指令加标签,如本文中所述的那样。
例如,唯一可标识的目标地址可以对应于恒定值。在另一示例中,不是唯一可标识的目标地址可以对应于用算术方法计算的值。可以在运行时计算用算术方法计算的值。在另一示例中,不可标识的目标地址可以包括但不限于用算术方法计算的值、库调用、异常处置机等等。可以利用例如“没有找到”标签来为包括具有不可标识的目标地址的间接分支指令的节点加标签。“没有找到”标签被配置成向控制流验证器电路134指示:尚未标识对应的间接分支指令的目标地址。控制流验证器电路134然后可以被配置成实现严格或宽松的默认策略。例如,严格默认策略可以对应于用信号通知针对不可标识的目标地址的控制流违反,并且宽松的默认策略可以对应于允许向任何目标地址的控制流转移。宽松的默认策略可以此外包括监控返回地址,以例如检测ROP攻击。
在实施例中,控制流验证器电路134可以被配置成执行对二进制、例如目标应用118二进制代码和/或库119二进制代码的静态分析。静态分析可以包括标识每个基本块,标识每个基本块的相应起始地址,标识每个基本块的相应结束地址,以及标识下一个可达到的基本块,如果可能的话。静态分析可以此外包括但不限于监控恒定值往处理器寄存器中的传播,监控函数调用以及相关联的返回指令,监控切换和/或情况指令,监控C++构造函数和虚拟表地址等等。
例如,下一个可达到的基本块的起始地址可以对应于当前基本块的最后的分支指令的目标地址。在另一示例中,可以监控恒定值向处理器寄存器和/或变量的传播。控制流验证器电路134可以此外被配置成确定每个常量和/或变量是否被用作间接分支指令的操作数地址。因而,可以标识间接分支指令、例如间接调用和/或间接跳跃的一个或多个目标地址。在另一示例中,控制流验证器电路134可以被配置成监控函数调用。控制流验证器电路134可以此外被配置成更新以来自函数调用的返回指令而结束的当前基本块的下一个可达到的目标。在另一示例中,切换和/或情况指令可以被监控,并且每个情况块的起始可以被标识。因而,如果间接跳跃指令由于切换和/或情况而执行,则间接跳跃指令的一组可能的目标中的至少一些可以被标识。在另一示例中,对于用C++实现的目标应用,C++构造函数可以被监控以标识一个或多个虚拟表地址。因而,一个或多个虚拟函数地址可以被标识并且一组可能的目标地址可以被标识(即可标识但是不是唯一可标识的目标地址可以被标识)。以此方式,该组可能的目标地址的大小可受约束,并且受约束的该组可以被用于与虚拟函数调用有关的控制流完整性验证操作。
***100可以此外包括PT电路124和PT驱动器126。PT电路124是指令追踪工具,例如从英特尔公司可得到的英特尔处理器追踪,其被配置成捕获与例如目标应用118的执行有关的PT数据。PT数据可以包括多个数据分组,所述数据分组可以包括定时信息和/或程序流信息。PT数据可以包括目标指令指针(TIP)分组、TNT(被采取/不被采取)分组流更新分组(FUP)和/或模式分组。FUP被配置成为异步事件、例如中断和异常、以及其中可不根据二进制代码来确定源地址的其它情形提供源IP(指令指针)地址。TIP分组被配置成包含TIP,所述TIP对应于间接分支指令、异常、中断和/或其它分支或事件的目标地址。例如,TIP分组可以包含与间接分支指令相关联的运行时目标地址,例如与函数调用指令相关联的返回地址(即RET)。
TNT分组可以被配置成追踪确定性的分支指令的“方向”(例如被采取或不被采取)。例如,TNT分组可以包含与确定性的(即直接)分支指令相关联的TNT指示符(即位)。确定性的分支指令是其中条件目标地址在运行时之前已知的分支指令。在运行时、基于条件来确定所选的分支。因而,目标地址和TNT指示符足以确定所述确定性的分支指令的合法目标地址。
TNT分组可以此外被用于为相关联的函数调用指令提供“经压缩的”返回目标指示符。例如,被包括在TNT分组中的TNT指示符(例如与“被采取”相对应的TNT指示符)可以被用于指示:函数调用指令返回目标对应于跟随在函数调用指令之后的指令。因而,TNT指示符可以由控制流完整性电路102用于确定是否存在控制流违反。
PT驱动器126被配置成提供PT电路124与PT数据消费者之间的接口。例如,PT驱动器126可以被配置成从PT电路124捕获PT数据、例如PT分组。PT驱动器126可以经由从PT驱动器126到PT电路124的一个或多个命令来配置PT电路124的追踪操作。例如,PT驱动器126可以配置PT电路124来获取可能的PT数据分组的仅仅一部分,例如仅仅TIP分组。限制对TIP分组的获取被配置成减小与获取PT数据相关联的开销,并且因而可以促进获取相对更多的TIP分组,例如更经常地。
控制流完整性(CFI)电路102包括收集器电路130、解码器电路132、控制流验证器电路134和策略存贮器136。CFI电路102被配置成监控目标应用118的执行,以便检测控制流违反,如果有任何违反的话。换言之,CFI电路102被配置成确定至少部分地基于从PT电路124所捕获的PT数据而被确定的向运行时目标地址的控制流转移是否对应于控制流违反。所述确定可以此外至少部分地基于控制流图、例如CFG 128和/或129。当攻击者、小工具相对良性的时候并且在发动相关联的恶意应用之前,CFI电路102被配置成实时地执行确定。
在操作中,在执行目标应用118之前,***100可以被配置成执行预处理操作,例如静态分析。预处理操作包括通过CFG生成器电路120来生成与目标应用118对应的应用CFG128。预处理操作可以此外包括通过CFG生成器电路120来生成与库119对应的库CFG 129。例如,CFG生成器电路120可以被配置成利用静态二进制分析技术来生成CFG 128、129。应用CFG 128和库CFG 129然后可以被组合并且存储到CFG存贮器122。
在一些实施例中,PT电路124可以被用于促进CFG 128、129的生成。在这些实施例中,可以为具有可标识的目标地址的间接分支指令中的至少一些确定可能的可标识的目标地址中的至少一子集。例如,如本文中所描述的,通过使用静态分析所确定的CFG可以利用可标识的目标地址来被增强,所述可标识的目标地址检索自与目标应用118的多个训练运行相关联的所捕获的PT数据。换言之,每个训练运行可对应于目标应用118的良性执行。如本文中所使用的,良性意指不易有攻击。如本文中所使用的,动态分析可以对应于利用PT电路124和训练运行来标识可能的目标地址,所述可能的目标地址然后可以被用于更新CFG128、129。
例如,CFI电路102可以被配置成标识一个或多个可能的可标识的目标地址。可能的可标识的目标地址然后可以被存储到CFG 128和/或129。例如,在预处理操作期间,目标应用118可以被发动,并且PT电路124的操作可以被发起。控制器电路130然后可以被配置成从PT驱动器126捕获一个或多个PT分组。PT数据可以包含TIP分组,所述TIP分组然后可以由解码器电路132提取自PT数据。解码器电路132可以此外被配置成对每个TIP分组进行解码以产生对应的运行时目标地址。控制流验证器电路134然后可以被配置成向CFG 128和/或129提供每个运行时目标地址,作为对应的静态目标地址。控制流验证器电路134可以此外被配置成关联每个静态目标地址与被存储到CFG存贮器122的应用CFG 128和/或库CFG 129中的对应分支指令。
CFI电路102可以被配置成重复这些操作多次。在这些预处理操作期间被标识的静态目标地址可以对应于间接分支指令的所有可标识的可能的目标地址的至少一子集。被包括在所述子集中的所有可标识的可能的目标地址的分数的大小可以随着运行的数目和/或随着在执行的应用的操纵而增大,例如用以触发各种可能的控制流路径。然后可以在正常操作期间使用所标识的静态目标地址。如本文中所使用的,正常操作意指非训练运行。换言之,在正常操作期间,目标应用118可易有攻击。
因而,可以在预处理操作期间、通过利用静态和/或动态分析来生成CFG 128、129。在一个实施例中,可以在CFG生成期间、通过分析汇编指令、即静态分析来标识可标识的可能的目标地址的至少一子集。在另一实施例中,可以在预处理操作期间、通过利用PT电路124和CFI电路102、即动态分析来标识可标识的可能的目标地址的至少一子集。
因而,可以执行预处理操作,所述预处理操作被配置成生成和/或增强所生成的CFG 128、129,其然后可以被存储到CFG存贮器122。预处理操作可以包括通过利用CFG生成器电路120来生成CFG 128、129。预处理操作可以此外包括通过DA逻辑121来反汇编目标应用和/或库二进制代码。在一些实施例中,预处理操作可以包括捕获PT数据以及解码TIP分组,用于产生(多个)运行时目标地址。(多个)运行时目标地址然后可以用于增强CFG 128、129。
在***100的正常操作的起始处,目标应用118可以被发动,并且PT电路124操作可以被发起。收集器电路130然后可以被配置成从PT驱动器126捕获PT分组(PT数据)。PT数据可以包含TIP分组,所述TIP分组然后可以由解码器电路132提取自PT数据。解码器电路132可以此外被配置成对每个TIP分组进行解码以产生间接分支指令的对应的运行时目标地址。控制流验证器电路134然后可以被配置成至少部分地基于CFG、例如应用CFG 128和/或库CFG 129来确定是否存在控制流违反,即向运行时目标地址的控制流转移是否对应于控制流违反。
在一个实施例中,解码器电路132可以被配置成对被包括在PT数据中的所有分组进行解码。这样的分组可以包括但不限于TNT分组、TIP分组、FUP和/或模式分组。TIP分组被配置成包括间接分支目标IP地址,如本文中所描述的。可以通过使PT数据与CFG数据相互关联来确定间接分支的源。FUP被配置成包括源IP地址。例如,当源地址不可被标识、例如或异步事件、诸如中断的时候,可以在FUP中报告源地址。在该实施例中,可以是以增大的解码开销为代价来标识间接分支指令的源和目的地。在(当前源、当前目的地)与(最后的目的地、当前源)之间的控制流路径可以被验证。提取(并且解码)所有PT分组可允许重构整个执行流。PT数据可以促进标识与运行时目标地址相关联的每个分支指令,以及因而细粒度的控制流完整性验证。
在另一实施例中,解码器电路132可以被配置成对TIP分组和/或TNT分组进行解码。仅仅对TIP和/或TNT分组进行解码被配置成引发与解码所有分组相比相对较低的开销。在该实施例中,解码TIP分组对应于仅仅解码分支目标地址、即运行时目标地址。因而,在该实施例中,控制流验证器电路134被配置成(至少部分地基于CFG)确定在当前TIP目标(即当前运行时目标地址)中的最后的TIP目标(即最后的运行时目标地址)之间是否存在合法控制流路径。
例如,通过利用来自PT电路124的PT数据,可以标识最后找到的运行时目标地址和当前运行时目标地址。控制流验证器电路134于是可以被配置成利用运行时目标地址和CFG128、129来确定在两个运行时目标地址之间是否存在合法控制流路径。
例如,PT数据可以包含第一目标指令指针(TIP)分组,所述第一目标指令指针(TIP)分组包括在执行的目标应用的间接分支指令的第一运行时目标地址。解码器电路可以从PT数据中提取第一TIP分组,并且对第一TIP分组进行解码以产生第一运行时目标地址。控制流验证器电路然后可以至少部分地基于控制流图(CFG)来确定向第一运行时目标地址的控制流转移是否对应于控制流违反。CFG可以包括多个节点。每个节点可以包括第一基本块的起始地址、第一基本块的结束地址以及第二基本块的下一个可能的地址,或“没有找到”标签。
在另一示例中,PT数据可以此外包括第二TIP分组,所述第二TIP分组包括第二运行时目标地址。第一TIP分组和第二TIP分组可以在PT数据中是顺序的。解码器电路可以此外被配置成对第二TIP分组进行解码以产生第二运行时目标地址。确定向第一运行时目标地址的控制流转移是否对应于控制流违反可以包括确定第一静态目标地址是否对应于第一运行时目标地址以及第二静态目标地址是否对应于第二运行时目标地址。控制流验证器电路可以此外被配置成如果CFG包括第一静态目标地址和第二静态目标地址则确定在第一静态目标地址与第二静态目标地址之间的CFG中是否存在合法执行路径,或如果CFG不包括第一静态目标地址或第二静态目标地址则用信号通知控制流违反。例如,控制流验证器电路134可以被配置成向例如管理员通知控制流违反,并且然后可以停止目标应用118的执行。如果在第一静态目标地址和第二静态目标地址之间的CFG中存在合法执行路径,于是可能不存在控制流违反,并且可以允许目标应用118的操作继续。
在一些情形中,CFG 128和/或129可能不包括与分支指令对应的静态目标地址,相反CFG 128和/或129可包括“没有找到”标签,如本文中所述的。在这样的情形中,可以至少部分地基于策略来确定CFI电路102的操作。策略可以例如被存储到策略存贮器136,例如作为预处理操作的部分。例如,策略可以是严格的,使得没有合法静态目标地址的间接分支指令的执行可导致控制流违反。在该示例中,控制流违反可被触发,无论是否实际存在控制流违反。换言之,严格的策略可导致假阳性。在另一示例中,策略可以是宽松的,使得具有“没有找到”标签的间接分支指令的执行可不导致控制流违反。在该示例中,虽然可避免假阳性,但是控制流违反以及因而影响间接分支目标的恶意攻击可能不被检测。
在一些实施例中,例如,对于宽松的策略,控制流验证器电路134可以被配置成监控函数调用返回地址。在该示例中,间接分支指令可对应于函数调用,并且TIP分组可包括运行时返回地址(RET)。控制流验证器电路134可以被配置成从与函数调用相对应的CFG128和/或129中检索静态返回地址。类似于确定向第一运行时目标地址的控制流转移是否对应于控制流违反,运行时返回地址不对应于静态返回地址,于是可存在控制流违反,并且控制流验证器电路134可以被配置成通知控制流违反并且停止目标应用118的执行。
在一些实施例中,控制流验证器电路134可以被配置成至少部分地基于PT数据本身来确定是否存在控制流违反。在该实施例中,间接分支指令可对应于函数调用,并且PT数据可包括TNT分组中的位以代替于包含返回目标地址的TIP分组。如果PT数据包括TNT分组(即经压缩的RET)以及TNT指示符,即对应于TIP分组、对应于被采取的TNT分组中的位,那么可不存在控制流违反。换言之,与被采取相对应的TNT指示符意味着:PT电路已经确定了函数调用返回地址匹配跟在函数调用地址之后的下一个地址。因而,PT数据可以由控制流验证器电路134用于确定是否存在控制流违反。
在实施例中,收集器电路130可以被配置成命令PT驱动器126来配置PT电路124,以仅仅捕获TIP分组。收集器电路130可以此外被配置成命令PT驱动器126来配置PT电路124,以仅仅捕获所选的TIP分组。例如,所选TIP分组可以对应于与间接调用和/或跳跃、函数返回和/或中断相关联的目标地址。换言之,PT电路124可以捕获各种PT数据以及对应的PT分组,如本文中所描述的。PT电路124的这样的操作可贡献于与例如处理器110相关联的开销,并且可导致性能惩罚。配置PT电路124以选择性地捕获TIP分组可减小开销和对应的性能惩罚。减小的开销和性能惩罚可以支持相对更经常地捕获PT数据,并且使得因而增强控制流完整性操作。
因而,从PT电路所捕获的处理器追踪(PT)数据和控制流图(CFG)可以被用于实时地确定在正执行的目标应用中是否存在控制流违反。换言之,从PT电路所捕获的PT数据和CFG可以用于确定向运行时目标地址的控制流转移是否对应于控制流违反。可以在执行目标应用之前确定CFG。可以至少部分地基于在预处理操作期间所捕获的PT数据来生成CFG,如本文中所述的那样。在发动恶意应用之前,可以实时地检测控制流完整性违反。
图2是根据本公开内容的各种实施例的预处理操作的流程图200。特别地,流程图200图示了预处理操作,所述预处理操作被配置成增强控制流违反检测的准确性。可以例如由图1的控制流完整性电路102(例如收集器电路130、解码器电路132和/或控制流验证器电路134)、CFG生成器电路120、DA逻辑121、PT电路124和/或PT驱动器126来执行操作。
该实施例的操作可以开始于在操作202处生成目标应用的控制流图并且将应用CFG存储到CFG存贮器。在一些实施例中,在操作204处可以生成库的CFG,并且库CFG被存储到CFG存贮器。在操作206处可以发动目标应用并且可以发起处理器追踪(PT)操作。在操作208处可以从PT驱动器捕获PT分组(PT数据)。可以从PT数据提取TIP分组是在操作210处。在操作212处,TIP分组可以被解码以产生运行时目标地址。在一些实施例中,在操作214处,静态目标地址可以相关联于控制流图(CFG)中的对应分支指令。例如,静态目标地址可以对应于运行时目标地址,其在预处理操作期间被确定,如本文中所述的那样。在一些实施例中,操作206直到212和操作214可以被重复多次。在操作218处,程序流可以继续。
因而,预处理操作可以被执行,其被配置成生成和/或增强CFG。
图3是根据本公开内容的各种实施例的控制流完整性操作的流程图300。特别地,流程图300图示了被配置成标识控制流违反的操作。可以例如由图1的控制流完整性电路102、例如收集器电路130、解码器电路132和/或控制流验证器电路134来执行操作。
该实施例的操作可以开始于起始302。在一些实施例中,在操作304处,可以命令PT驱动器来配置PT电路以仅仅捕获TIP分组。在操作306处可以发动目标应用并且可以发起PT电路操作。在操作308处可以从PT驱动器检索PT分组(PT数据)。在操作310处可以从PT数据提取TIP分组。在操作312处,TIP分组可以被解码以产生分支指令的运行时目标地址。在操作314处,可以至少部分地基于控制流图(CFG)来确定是否存在控制流违反。例如,可以确定向运行时目标地址的控制流转移是否对应于控制流违反。如果不存在任何控制流违反,那么在操作316处程序流可以继续。如果存在控制流违反,那么在操作318处可以通知控制流违反。在操作320处,程序流于是可以结束。
因而,可以至少部分地基于PT数据以及至少部分地基于CFG来标识控制流违反。
虽然图2和3的流程图图示了根据各种实施例的操作,但是要理解的是,不是图2和3中所描绘的所有操作对于其它实施例而言都是必要的。另外,在本文中充分设想的是,在本公开内容的其它实施例中,图2和/或图3中描绘的操作和/或本文中所述的其它操作可以用没有在任何附图中特别示出的方式被组合,并且这样的实施例可以包括比图2和图3中所图示的更少或更多的操作。因而,指向没有在一个附图中确切示出的特征和/或操作的权利要求被视为在本公开内容的范围和内容内。
一种装置、方法和/或***被配置成利用从PT电路所捕获的处理器追踪(PT)数据和控制流图(CFG)来实时地确定向运行时目标的控制流转移是否对应于在执行的目标应用中的控制流违反。可以在执行目标应用之前确定CFG。可以至少部分地基于在预处理操作期间所捕获的PT数据来生成CFG,如本文中所述的那样。所述装置、方法和/或***被配置成实时地检测控制流完整性违反,例如在发动恶意应用之前。
如在本文中任何实施例中所使用的,术语“逻辑”可以是指被配置成执行先前提及的操作中任一个的app(应用)、软件、固件和/或电路。软件可以被具体化为软件包、代码、指令、指令集和/或数据,其被记录在非暂时性计算机可读存储介质上。固件可以被具体化为代码、指令或指令集和/或数据,其在存储器设备中被硬编码(例如非易失性)。
“电路”,如本文中任何实施例中所使用的,可以例如单个地或以任何组合地包括硬连线的电路、可编程电路、状态机电路、逻辑和/或固件,其存储由可编程电路所执行的指令。电路可以被具体化为集成电路,诸如集成电路芯片。在一些实施例中,电路可以至少部分地由处理器110形成,所述处理器110执行与本文中所述的功能性相对应的代码和/或指令集(例如软件、固件等等),因而将通用处理器变换成专用处理环境,用以执行本文中所述的操作中的一个或多个。
前文提供了示例***架构和方法,然而,对本公开内容的修改是可能的。处理器可以包括一个或多个处理器核,并且可以被配置成执行***软件。***软件可以包括例如操作***。设备存储器可以包括I/O存储器缓冲器,所述I/O存储器缓冲器被配置成存储一个或多个数据分组,所述数据分组将由网络接口传送或由网络接口接收。
操作***(OS)可以被配置成管理***资源以及控制在例如***100上运行的任务。例如,OS可以通过使用Microsoft® Windows®、HP-UX®、Linux®或UNIX®被实现,尽管可以使用其它操作***。在另一示例中,OS可以通过使用AndroidTM、 iOS、Windows Phone® 或BlackBerry®来被实现。在一些实施例中,OS可以被虚拟机监控器(或超级监督器)取代,所述虚拟机监控器可以将用于底层硬件的抽象层提供给在一个或多个处理单元上运行的各种操作***(虚拟机)。操作***和/或虚拟机可以实现一个或多个协议栈。协议栈可以执行一个或多个程序以处理分组。协议栈的示例是TCP/IP(输送控制协议/因特网协议)协议栈,其包括一个或多个程序用于处置(例如处理或生成)分组,用以通过网络来传送和/或接收。
存储器112可以包括以下类型的存储器中的一个或多个:半导体固件存储器、可编程存储器、非易失性存储器、只读存储器、电可编程存储器、随机访问存储器、闪速存储器、磁盘存储器、和/或光学盘存储器。附加地或可替换地,***存储器可以包括其它和/或稍后开发的类型的计算机可读存储器。
本文中所述的操作的实施例可以被实现在计算机可读存储设备中,所述计算机可读存储设备已经在其上存储了指令,所述指令当被一个或多个处理器执行的时候履行所述方法。处理器可以包括例如处理单元和/或可编程电路。存储设备可以包括机器可读存储设备,其包括任何类型的有形、非暂时性存储设备,例如任何类型的盘,包括软盘、光学盘、光盘只读存储器(CD-ROM)、光盘可重写(CD-RW)、以及磁光盘、半导体器件、诸如只读存储器(ROM)、随机访问存储器(RAM)、诸如动态和静态RAM、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、闪速存储器、磁性或光学卡、或适合用于存储电子指令的任何类型的存储设备。
在一些实施例中,硬件描述语言(HDL)可以用于指定针对本文中所述的各种逻辑和/或电路的(多个)电路和/或逻辑实现方式。例如,在一个实施例中,硬件描述语言可以遵从非常高速集成电路(VHSIC)硬件描述语言(VHDL)或与之兼容,所述非常高速集成电路(VHSIC)硬件描述语言(VHDL)可以使能实现本文中所述的一个或多个电路和/或逻辑的半导体制造。VHDL可以遵从以下各项或与之兼容:IEEE标准1076-1987、IEEE标准1076.2、IEEE1076.1、VHDL-2006的IEEE草案3.0、VHDL-2008的IEEE草案4.0和/或IEEE VHDL标准的其它版本和/或其它硬件描述标准。
在一些实施例中,Verilog硬件描述语言(HDL)可以用于指定针对本文中所述的各种逻辑和/或电路的(多个)电路和/或逻辑实现方式。例如,在一个实施例中,HDL可以遵从以下各项或与之兼容:IEEE标准62530-2011:SystemVerilog统一的硬件设计、规范和验证语言,日期为2011年7月07日;IEEE Std 1800TM-2012:针对SystemVerilog统一的硬件设计、规范和验证语言的IEEE标准,发布于2013年2月21日;IEEE标准1364-2005:针对Verilog硬件描述语言的IEEE标准,其日期为2006年4月18日,和/或其它版本的Verilog HDL和/或***Verilog标准。
示例
本公开内容的示例包括与控制流完整性有关的题材,诸如方法、用于执行方法的动作的构件、设备、或者装置或***,如以下所讨论的。
示例1.根据此示例,提供有一种装置。所述装置包括收集器电路,其用于从PT驱动器捕获处理器追踪(PT)数据。所述PT数据包括第一目标指令指针(TIP)分组,所述第一目标指令指针(TIP)分组包括在执行的目标应用的间接分支指令的第一运行时目标地址。所述装置此外包括解码器电路,其用于从PT数据中提取第一TIP分组,用于对第一TIP分组进行解码以产生第一运行时目标地址。所述装置此外包括控制流验证器电路,其用于至少部分地基于控制流图(CFG)来确定向第一运行时目标地址的控制流转移是否对应于控制流违反,所述CFG包括多个节点,每个节点包括第一基本块的起始地址、第一基本块的结束地址、以及第二基本块的下一个可能的地址或“没有找到”标签。
示例2.此示例包括示例1的元素,其中所述PT数据此外包括第二TIP分组,所述第二TIP分组包括第二运行时目标地址,所述第一TIP分组和第二TIP分组在PT数据中是顺序的,所述解码器电路此外用于对第二TIP分组进行解码以产生第二运行时目标地址,并且确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定第一静态目标地址是否对应于第一运行时目标地址以及第二静态目标地址是否对应于第二运行时目标地址。
示例3.此示例包括示例2的元素,其中所述控制流验证器电路此外用于如果CFG包括第一静态目标地址和第二静态目标地址则确定在第一静态目标地址与第二静态目标地址之间的CFG中是否存在合法执行路径,或如果CFG不包括第一静态目标地址或第二静态目标地址则用信号通知控制流违反。
示例4.此示例包括根据示例1或2中任一项的元素,其中至少一个节点包括多个下一个可能的地址。
示例5.此示例包括根据示例1或2中任一项的元素,其中至少一个节点包括相应一个可能的地址。
示例6.此示例包括根据示例1或2中任一项的元素,其中所述第一运行时目标地址对应于运行时返回地址,并且确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定运行时返回地址是否对应于静态返回地址,所述运行时返回地址和静态返回地址相关联于间接分支指令。
示例7.此示例包括根据示例1或2中任一项的元素,其中所述收集器电路用于命令PT驱动器配置PT电路以将PT数据限制到TIP分组。
示例8.此示例包括根据示例1或2中任一项的元素,其中所述CFG包括库CFG,该库相关联于目标应用。
示例9.此示例包括根据示例1或2中任一项的元素,其中确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定PT数据是否包括与间接分支指令相关联的TNT(被采取/不被采取)分组。
示例10.此示例包括根据示例1或2中任一项的元素,其中所述控制流违反对应于检测到控制流挟持性攻击。
示例11.根据此示例,提供有一种控制流完整性方法。所述方法包括由收集器电路从PT驱动器捕获处理器追踪(PT)数据,所述PT数据包括第一目标指令指针(TIP)分组,所述第一目标指令指针(TIP)分组包括在执行的目标应用的间接分支指令的第一运行时目标地址。所述方法此外包括由解码器电路从PT数据中提取第一TIP分组,并且由解码器电路对第一TIP分组进行解码以产生第一运行时目标地址。所述方法此外包括由控制流验证器电路来至少部分地基于控制流图(CFG)来确定向第一运行时目标地址的控制流转移是否对应于控制流违反,所述CFG包括多个节点,每个节点包括第一基本块的起始地址、第一基本块的结束地址、以及第二基本块的下一个可能的地址或“没有找到”标签。
示例12.此示例包括示例11的元素,其中所述PT数据此外包括第二TIP分组,所述第二TIP分组包括第二运行时目标地址,所述第一TIP分组和第二TIP分组在PT数据中是顺序的,此外包括由解码器电路来对第二TIP分组进行解码以产生第二运行时目标地址,并且确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定第一静态目标地址是否对应于第一运行时目标地址以及第二静态目标地址是否对应于第二运行时目标地址。
示例13.此示例包括示例12的元素,并且此外包括如果CFG包括第一静态目标地址和第二静态目标地址则由控制流验证器电路来确定在第一静态目标地址与第二静态目标地址之间的CFG中是否存在合法执行路径,或如果CFG不包括第一静态目标地址或第二静态目标地址则由控制流验证器电路来用信号通知控制流违反。
示例14.此示例包括根据示例11或12中任一项的元素,其中至少一个节点包括多个下一个可能的地址。
示例15.此示例包括根据示例11或12中任一项的元素,其中至少一个节点包括相应一个可能的地址。
示例16.此示例包括根据示例11或12中任一项的元素,其中所述第一运行时目标地址对应于运行时返回地址,并且确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定运行时返回地址是否对应于静态返回地址,所述运行时返回地址和静态返回地址相关联于间接分支指令。
示例17.此示例包括根据示例11或12中任一项的元素,并且此外包括由收集器电路来命令PT驱动器配置PT电路以将PT数据限制到TIP分组。
示例18.此示例包括根据示例11或12中任一项的元素,其中所述CFG包括库CFG,该库相关联于目标应用。
示例19.此示例包括根据示例11或12中任一项的元素,其中确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定PT数据是否包括与间接分支指令相关联的TNT(被采取/不被采取)分组。
示例20.此示例包括根据示例11或12中任一项的元素,其中所述控制流违反对应于检测到控制流挟持性攻击。
示例21.根据此示例,提供有一种控制流完整性***。所述***包括处理器、存储器和控制流图(CFG)。所述CFG包括多个节点,每个节点包括第一基本块的起始地址、第一基本块的结束地址以及第二基本块的下一个可能的地址,或“没有找到”标签。所述***此外包括收集器电路,其用于从PT驱动器捕获处理器追踪(PT)数据,所述PT数据包括第一目标指令指针(TIP)分组,所述第一目标指令指针(TIP)分组包括在执行的目标应用的间接分支指令的第一运行时目标地址。所述***此外包括解码器电路,其用于从PT数据中提取第一TIP分组,并且用于对第一TIP分组进行解码以产生第一运行时目标地址。所述***此外包括控制流验证器电路,其用于至少部分地基于CFG来确定向第一运行时目标地址的控制流转移是否对应于控制流违反。
示例22.此示例包括示例21的元素,其中所述PT数据此外包括第二TIP分组,所述第二TIP分组包括第二运行时目标地址,所述第一TIP分组和第二TIP分组在PT数据中是顺序的,所述解码器电路此外用于对第二TIP分组进行解码以产生第二运行时目标地址,并且确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定第一静态目标地址是否对应于第一运行时目标地址以及第二静态目标地址是否对应于第二运行时目标地址。
示例23.此示例包括示例22的元素,其中所述控制流验证器电路此外用于如果CFG包括第一静态目标地址和第二静态目标地址则确定在第一静态目标地址与第二静态目标地址之间的CFG中是否存在合法执行路径,或如果CFG不包括第一静态目标地址或第二静态目标地址则用信号通知控制流违反。
示例24.此示例包括根据示例21或22中任一项的元素,其中至少一个节点包括多个下一个可能的地址。
示例25.此示例包括根据示例21或22中任一项的元素,其中至少一个节点包括相应一个可能的地址。
示例26.此示例包括根据示例21或22中任一项的元素,其中所述第一运行时目标地址对应于运行时返回地址,并且确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定运行时返回地址是否对应于静态返回地址,所述运行时返回地址和静态返回地址相关联于间接分支指令。
示例27.此示例包括根据示例21或22中任一项的元素,其中所述收集器电路用于命令PT驱动器配置PT电路以将PT数据限制到TIP分组。
示例28.此示例包括根据示例21或22中任一项的元素,其中所述CFG包括库CFG,该库相关联于目标应用。
示例29.此示例包括根据示例21或22中任一项的元素,其中确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定PT数据是否包括与间接分支指令相关联的TNT(被采取/不被采取)分组。
示例30.此示例包括根据示例21或22中任一项的元素,其中所述控制流违反对应于检测到控制流挟持性攻击。
示例31.根据此示例,提供有一种计算机可读存储设备。所述设备已经在其上存储了指令,所述指令当被一个或多个处理器执行的时候导致以下操作,包括:从PT驱动器捕获处理器追踪(PT)数据,所述PT数据包括第一目标指令指针(TIP)分组,所述第一目标指令指针(TIP)分组包括在执行的目标应用的间接分支指令的第一运行时目标地址;从PT数据中提取第一TIP分组,并且对第一TIP分组进行解码以产生第一运行时目标地址;以及至少部分地基于控制流图(CFG)来确定向第一运行时目标地址的控制流转移是否对应于控制流违反,所述CFG包括多个节点,每个节点包括第一基本块的起始地址、第一基本块的结束地址以及第二基本块的下一个可能的地址,或“没有找到”标签。
示例32.此示例包括示例31的元素,其中所述PT数据此外包括第二TIP分组,所述第二TIP分组包括第二运行时目标地址,所述第一TIP分组和第二TIP分组在PT数据中是顺序的,其中所述指令当被一个或多个处理器执行的时候导致以下附加的操作,包括:对第二TIP分组进行解码以产生第二运行时目标地址,并且确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定第一静态目标地址是否对应于第一运行时目标地址以及第二静态目标地址是否对应于第二运行时目标地址。
示例33.此示例包括示例32的元素,并且其中所述指令当由一个或多个处理器执行的时候导致以下附加的操作,包括:如果CFG包括第一静态目标地址和第二静态目标地址则确定在第一静态目标地址与第二静态目标地址之间的CFG中是否存在合法执行路径,或如果CFG不包括第一静态目标地址或第二静态目标地址则由控制流验证器电路来用信号通知控制流违反。
示例34.此示例包括根据示例31或32中任一项的元素,其中至少一个节点包括多个下一个可能的地址。
示例35.此示例包括根据示例31或32中任一项的元素,其中至少一个节点包括相应一个可能的地址。
示例36.此示例包括根据示例31或32中任一项的元素,其中所述第一运行时目标地址对应于运行时返回地址,并且确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定运行时返回地址是否对应于静态返回地址,所述运行时返回地址和静态返回地址相关联于间接分支指令。
示例37.此示例包括根据示例31或32中任一项的元素,并且其中所述指令当由一个或多个处理器执行的时候导致以下附加操作,包括由收集器电路来命令PT驱动器配置PT电路以将PT数据限制到TIP分组。
示例38.此示例包括根据示例31或32中任一项的元素,其中所述CFG包括库CFG,该库相关联于目标应用。
示例39.此示例包括根据示例31或32中任一项的元素,其中确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定PT数据是否包括与间接分支指令相关联的TNT(被采取/不被采取)分组。
示例40.此示例包括根据示例31或32中任一项的元素,其中所述控制流违反对应于检测到控制流挟持性攻击。
示例41.根据此示例,提供有一种设备。所述设备包括用于由收集器电路从PT驱动器捕获处理器追踪(PT)数据的构件,所述PT数据包括第一目标指令指针(TIP)分组,所述第一目标指令指针(TIP)分组包括在执行的目标应用的间接分支指令的第一运行时目标地址。所述设备此外包括用于由解码器电路从PT数据中提取第一TIP分组的构件,以及用于由解码器电路对第一TIP分组进行解码以产生第一运行时目标地址的构件。所述设备此外包括用于由控制流验证器电路来至少部分地基于控制流图(CFG)来确定向第一运行时目标地址的控制流转移是否对应于控制流违反的构件,所述CFG包括多个节点,每个节点包括第一基本块的起始地址、第一基本块的结束地址、以及第二基本块的下一个可能的地址或“没有找到”标签。
示例42.此示例包括示例41的元素,其中所述PT数据此外包括第二TIP分组,所述第二TIP分组包括第二运行时目标地址,所述第一TIP分组和第二TIP分组在PT数据中是顺序的,此外包括用于由解码器电路来对第二TIP分组进行解码以产生第二运行时目标地址的构件,并且确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定第一静态目标地址是否对应于第一运行时目标地址以及第二静态目标地址是否对应于第二运行时目标地址。
示例43.此示例包括示例42的元素,并且此外包括用于进行以下的构件:如果CFG包括第一静态目标地址和第二静态目标地址则由控制流验证器电路来确定在第一静态目标地址与第二静态目标地址之间的CFG中是否存在合法执行路径,或如果CFG不包括第一静态目标地址或第二静态目标地址则由控制流验证器电路来用信号通知控制流违反。
示例44.此示例包括根据示例41或42中任一项的元素,其中至少一个节点包括多个下一个可能的地址。
示例45.此示例包括根据示例41或42中任一项的元素,其中至少一个节点包括相应一个可能的地址。
示例46.此示例包括根据示例41或42中任一项的元素,其中所述第一运行时目标地址对应于运行时返回地址,并且确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定运行时返回地址是否对应于静态返回地址,所述运行时返回地址和静态返回地址相关联于间接分支指令。
示例47.此示例包括根据示例41或42中任一项的元素,并且此外包括用于由收集器电路来命令PT驱动器配置PT电路以将PT数据限制到TIP分组的构件。
示例48.此示例包括根据示例41或42中任一项的元素,其中所述CFG包括库CFG,该库相关联于目标应用。
示例49.此示例包括根据示例41或42中任一项的元素,其中确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定PT数据是否包括与间接分支指令相关联的TNT(被采取/不被采取)分组。
示例50.此示例包括根据示例41或42中任一项的元素,其中所述控制流违反对应于检测到控制流挟持性攻击。
示例51.根据该示例,提供有一种***。所述***包括被布置成执行根据示例11至20中任一项的控制流完整性方法的至少一个设备。
示例52.根据此示例,提供有一种设备。所述设备包括用于执行根据示例11至20中任一项的控制流完整性方法的构件。
示例53.根据此示例,提供有一种计算机可读存储设备。所述设备已经在其上存储了指令,所述指令当由一个或多个处理器执行的时候导致以下操作,包括:根据示例11直到20中的任一个的控制流完整性方法。
在本文中已经采用的术语和表述被用作描述术语而不是限制术语,并且在这样的术语和表述的使用中没有任何意图排除所示出和所描述的特征(或其部分)的任何等同物,并且认识到,在权利要求的范围内,各种修改是可能的。因此,权利要求意图覆盖所有这样的等同物。
在本文中已经描述了各种特征、方面和实施例。如本领域技术人员将理解的,所述特征、方面和实施例易与彼此组合以及易受变型和修改。因此,本公开内容应当被视为包含这样的组合、变型和修改。

Claims (24)

1.一种装置,包括:
收集器电路,其用于从PT驱动器捕获处理器追踪(PT)数据,所述PT数据包括第一目标指令指针(TIP)分组,所述第一目标指令指针(TIP)分组包括在执行的目标应用的间接分支指令的第一运行时目标地址;
解码器电路,其用于从PT数据中提取第一TIP分组,并且对第一TIP分组进行解码以产生第一运行时目标地址;以及
控制流验证器电路,其用于至少部分地基于控制流图(CFG)来确定向第一运行时目标地址的控制流转移是否对应于控制流违反,所述CFG包括多个节点,每个节点包括第一基本块的起始地址、第一基本块的结束地址、以及第二基本块的下一个可能的地址或“没有找到”标签。
2.根据权利要求1所述的装置,其中所述PT数据此外包括第二TIP分组,所述第二TIP分组包括第二运行时目标地址,所述第一TIP分组与第二TIP分组在PT数据中是顺序的,所述解码器电路此外用于对第二TIP分组进行解码以产生第二运行时目标地址,并且确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定第一静态目标地址是否对应于第一运行时目标地址以及第二静态目标地址是否对应于第二运行时目标地址。
3.根据权利要求2所述的装置,其中所述控制流验证器电路此外用于如果CFG包括第一静态目标地址和第二静态目标地址则确定在第一静态目标地址与第二静态目标地址之间的CFG中是否存在合法执行路径,或如果CFG不包括第一静态目标地址或第二静态目标地址则用信号通知控制流违反。
4.根据权利要求1或权利要求2中任一项所述的装置,其中至少一个节点包括多个下一个可能的地址。
5.根据权利要求1或权利要求2中任一项所述的装置,其中所述第一运行时目标地址对应于运行时返回地址,并且确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定运行时返回地址是否对应于静态返回地址,所述运行时返回地址和静态返回地址相关联于间接分支指令。
6.根据权利要求1或权利要求2中任一项所述的装置,其中所述收集器电路用于命令PT驱动器配置PT电路以将PT数据限制到TIP分组。
7.根据权利要求1或权利要求2中任一项所述的装置,其中所述CFG包括库CFG,该库相关联于目标应用。
8.根据权利要求1或权利要求2中任一项所述的装置,其中确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定PT数据是否包括与间接分支指令相关联的TNT(被采取/不被采取)分组。
9.一种控制流完整性***,包括:
处理器;
存储器;
控制流图(CFG),其包括多个节点,每个节点包括第一基本块的起始地址、第一基本块的结束地址以及第二基本块的下一个可能的地址,或“没有找到”标签;
收集器电路,其用于从PT驱动器捕获处理器追踪(PT)数据,所述PT数据包括第一目标指令指针(TIP)分组,所述第一目标指令指针(TIP)分组包括在执行的目标应用的间接分支指令的第一运行时目标地址;
解码器电路,其用于从PT数据中提取第一TIP分组,并且对第一TIP分组进行解码以产生第一运行时目标地址;以及
控制流验证器电路,其用于至少部分地基于CFG来确定向第一运行时目标地址的控制流转移是否对应于控制流违反。
10.根据权利要求9所述的控制流完整性***,其中所述PT数据此外包括第二TIP分组,所述第二TIP分组包括第二运行时目标地址,所述第一TIP分组与第二TIP分组在PT数据中是顺序的,所述解码器电路此外用于对第二TIP分组进行解码以产生第二运行时目标地址,并且确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定第一静态目标地址是否对应于第一运行时目标地址以及第二静态目标地址是否对应于第二运行时目标地址。
11.根据权利要求10所述的控制流完整性***,其中所述控制流验证器电路此外用于如果CFG包括第一静态目标地址和第二静态目标地址则确定在第一静态目标地址与第二静态目标地址之间的CFG中是否存在合法执行路径,或如果CFG不包括第一静态目标地址或第二静态目标地址则用信号通知控制流违反。
12.根据权利要求9或权利要求10中任一项所述的控制流完整性***,其中至少一个节点包括多个下一个可能的地址。
13.根据权利要求9或权利要求10中任一项所述的控制流完整性***,其中所述第一运行时目标地址对应于运行时返回地址,并且确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定运行时返回地址是否对应于静态返回地址,所述运行时返回地址和静态返回地址相关联于间接分支指令。
14.根据权利要求9或权利要求10中任一项所述的控制流完整性***,其中所述收集器电路用于命令PT驱动器配置PT电路以将PT数据限制到TIP分组。
15.根据权利要求9或权利要求10中任一项所述的控制流完整性***,其中所述CFG包括库CFG,该库相关联于目标应用。
16.根据权利要求9或权利要求10中任一项所述的控制流完整性***,其中确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定PT数据是否包括与间接分支指令相关联的TNT(被采取/不被采取)分组。
17.一种已经在其上存储了指令的计算机可读存储设备,所述指令当被一个或多个处理器执行的时候导致以下操作,包括:
从PT驱动器捕获处理器追踪(PT)数据,所述PT数据包括第一目标指令指针(TIP)分组,所述第一目标指令指针(TIP)分组包括在执行的目标应用的间接分支指令的第一运行时目标地址;
从PT数据中提取第一TIP分组;
对第一TIP分组进行解码以产生第一运行时目标地址,并且
至少部分地基于控制流图(CFG)来确定向第一运行时目标地址的控制流转移是否对应于控制流违反,所述CFG包括多个节点,每个节点包括第一基本块的起始地址、第一基本块的结束地址、以及第二基本块的下一个可能的地址或“没有找到”标签。
18.根据权利要求17所述的设备,其中所述PT数据此外包括第二TIP分组,所述第二TIP分组包括第二运行时目标地址,所述第一TIP分组与第二TIP分组在PT数据中是顺序的,其中所述指令当被一个或多个处理器执行的时候导致以下附加的操作,包括:对第二TIP分组进行解码以产生第二运行时目标地址,并且确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定第一静态目标地址是否对应于第一运行时目标地址以及第二静态目标地址是否对应于第二运行时目标地址。
19.根据权利要求18所述的设备,其中所述指令当由一个或多个处理器执行的时候导致以下附加的操作,包括:如果CFG包括第一静态目标地址和第二静态目标地址则确定在第一静态目标地址与第二静态目标地址之间的CFG中是否存在合法执行路径,或如果CFG不包括第一静态目标地址或第二静态目标地址则用信号通知控制流违反。
20.根据权利要求17或权利要求18中任一项所述的设备,其中至少一个节点包括多个下一个可能的地址。
21.根据权利要求17或权利要求18中任一项所述的设备,其中所述第一运行时目标地址对应于运行时返回地址,并且确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定运行时返回地址是否对应于静态返回地址,所述运行时返回地址和静态返回地址相关联于间接分支指令。
22.根据权利要求17或权利要求18中任一项所述的设备,其中所述指令当由一个或多个处理器执行的时候导致以下附加操作,包括命令PT驱动器来配置PT电路以将PT数据限制到TIP分组。
23.根据权利要求17或权利要求18中任一项所述的设备,其中所述CFG包括库CFG,该库相关联于目标应用。
24.根据权利要求17或权利要求18中任一项所述的设备,其中确定向第一运行时目标地址的控制流转移是否对应于控制流违反包括确定PT数据是否包括与间接分支指令相关联的TNT(被采取/不被采取)分组。
CN201780053793.5A 2016-10-01 2017-08-30 控制流完整性 Active CN109643346B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/283370 2016-10-01
US15/283,370 US10248424B2 (en) 2016-10-01 2016-10-01 Control flow integrity
PCT/US2017/049499 WO2018063727A1 (en) 2016-10-01 2017-08-30 Control flow integrity

Publications (2)

Publication Number Publication Date
CN109643346A true CN109643346A (zh) 2019-04-16
CN109643346B CN109643346B (zh) 2024-01-02

Family

ID=61758789

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780053793.5A Active CN109643346B (zh) 2016-10-01 2017-08-30 控制流完整性

Country Status (4)

Country Link
US (1) US10248424B2 (zh)
CN (1) CN109643346B (zh)
DE (1) DE112017004962T5 (zh)
WO (1) WO2018063727A1 (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10896253B2 (en) * 2017-02-06 2021-01-19 Huawei Technologies Co., Ltd. Processor trace-based enforcement of control flow integrity of a computer system
US10372902B2 (en) 2017-03-06 2019-08-06 Intel Corporation Control flow integrity
US11004003B2 (en) * 2017-06-14 2021-05-11 Intel Corporation Machine learning based exploit detection
US10915631B2 (en) 2017-12-28 2021-02-09 Intel Corporation Deep learning on execution trace data for exploit detection
US10558794B2 (en) * 2018-05-09 2020-02-11 Cody Myers Indexable authentication system and method
US11416603B2 (en) 2018-11-16 2022-08-16 Intel Corporation Methods, systems, articles of manufacture and apparatus to detect process hijacking
US11016773B2 (en) 2019-09-27 2021-05-25 Intel Corporation Processor trace extensions to facilitate real-time security monitoring
WO2021162439A1 (en) 2020-02-14 2021-08-19 Samsung Electronics Co., Ltd. Electronic device performing restoration on basis of comparison of constant value and control method thereof

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101763291A (zh) * 2009-12-30 2010-06-30 中国人民解放军国防科学技术大学 一种程序控制流错误检测方法
CN102479356A (zh) * 2010-11-30 2012-05-30 金蝶软件(中国)有限公司 一种穿行测试方法和装置
US20130024676A1 (en) * 2011-07-19 2013-01-24 Glew Andrew F Control flow integrity
CN104951274A (zh) * 2014-03-27 2015-09-30 英特尔公司 用于控制流安全性的二进制转换机制的指令和逻辑
US20150370560A1 (en) * 2014-06-09 2015-12-24 Lehigh University Methods for enforcing control flow of a computer program
US20160110545A1 (en) * 2014-10-17 2016-04-21 Qualcomm Incorporated Code pointer authentication for hardware flow control
CN105608003A (zh) * 2015-12-17 2016-05-25 西安电子科技大学 基于控制流分析和数据流分析的Java程序静态分析方法
CN105701368A (zh) * 2014-12-16 2016-06-22 恩智浦有限公司 通过根据校验和计算目标地址的代码完整性保护
CN105868641A (zh) * 2016-04-01 2016-08-17 北京理工大学 基于虚函数表劫持的防御方法
CN105868626A (zh) * 2016-03-25 2016-08-17 中国人民解放军信息工程大学 基于控制流粗粒度完整性的监控软件业务行为的方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080034350A1 (en) * 2006-04-05 2008-02-07 Conti Gregory R System and Method for Checking the Integrity of Computer Program Code
EP2141587A1 (en) 2008-06-27 2010-01-06 Siemens Aktiengesellschaft Method and system for generating of a control flow graph for representing a program code
US8904189B1 (en) * 2010-07-15 2014-12-02 The Research Foundation For The State University Of New York System and method for validating program execution at run-time using control flow signatures
US20130055221A1 (en) 2011-08-26 2013-02-28 Fujitsu Limited Detecting Errors in Javascript Software Using a Control Flow Graph
US8914262B2 (en) 2011-11-08 2014-12-16 The Mathworks, Inc. Visualization of data dependency in graphical models
US9262163B2 (en) 2012-12-29 2016-02-16 Intel Corporation Real time instruction trace processors, methods, and systems
US9448909B2 (en) 2013-10-15 2016-09-20 Advanced Micro Devices, Inc. Randomly branching using performance counters
US9569613B2 (en) * 2014-12-23 2017-02-14 Intel Corporation Techniques for enforcing control flow integrity using binary translation
US10007784B2 (en) 2015-03-27 2018-06-26 Intel Corporation Technologies for control flow exploit mitigation using processor trace
WO2016164080A1 (en) 2015-04-08 2016-10-13 Fractal Antenna Systems, Inc. Fractal plasmonic surface reader antennas

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101763291A (zh) * 2009-12-30 2010-06-30 中国人民解放军国防科学技术大学 一种程序控制流错误检测方法
CN102479356A (zh) * 2010-11-30 2012-05-30 金蝶软件(中国)有限公司 一种穿行测试方法和装置
US20130024676A1 (en) * 2011-07-19 2013-01-24 Glew Andrew F Control flow integrity
CN104951274A (zh) * 2014-03-27 2015-09-30 英特尔公司 用于控制流安全性的二进制转换机制的指令和逻辑
US20150370560A1 (en) * 2014-06-09 2015-12-24 Lehigh University Methods for enforcing control flow of a computer program
US20160110545A1 (en) * 2014-10-17 2016-04-21 Qualcomm Incorporated Code pointer authentication for hardware flow control
CN105701368A (zh) * 2014-12-16 2016-06-22 恩智浦有限公司 通过根据校验和计算目标地址的代码完整性保护
CN105608003A (zh) * 2015-12-17 2016-05-25 西安电子科技大学 基于控制流分析和数据流分析的Java程序静态分析方法
CN105868626A (zh) * 2016-03-25 2016-08-17 中国人民解放军信息工程大学 基于控制流粗粒度完整性的监控软件业务行为的方法
CN105868641A (zh) * 2016-04-01 2016-08-17 北京理工大学 基于虚函数表劫持的防御方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
柳童等: "代码重用攻击与防御机制综述", 《信息安全学报》 *
柳童等: "代码重用攻击与防御机制综述", 《信息安全学报》, no. 02, 30 April 2016 (2016-04-30), pages 15 - 27 *

Also Published As

Publication number Publication date
WO2018063727A1 (en) 2018-04-05
CN109643346B (zh) 2024-01-02
US10248424B2 (en) 2019-04-02
DE112017004962T5 (de) 2019-06-19
US20180095764A1 (en) 2018-04-05

Similar Documents

Publication Publication Date Title
CN109643346A (zh) 控制流完整性
Tann et al. Towards safer smart contracts: A sequence learning approach to detecting security threats
Cheng et al. Orpheus: Enforcing cyber-physical execution semantics to defend against data-oriented attacks
KR101921052B1 (ko) 바이너리에 대한 보안 취약점 및 그 원인 위치의 식별 방법 및 그 장치
CN109508536B (zh) 一种篡改程序流攻击的检测方法和装置
Pewny et al. EvilCoder: automated bug insertion
Brooks Survey of automated vulnerability detection and exploit generation techniques in cyber reasoning systems
US10650147B2 (en) Method and apparatus for ensuring control flow integrity
US10395033B2 (en) System, apparatus and method for performing on-demand binary analysis for detecting code reuse attacks
EP3404572B1 (en) Attack code detection device, attack code detection method, and attack code detection program
US9715377B1 (en) Behavior based code recompilation triggering scheme
US11004003B2 (en) Machine learning based exploit detection
CN104732152A (zh) 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法
JPWO2018066516A1 (ja) 攻撃コード検知装置、攻撃コード検知方法及び攻撃コード検知プログラム
Fu et al. A critical-path-coverage-based vulnerability detection method for smart contracts
WO2021146649A1 (en) System for detecting malicious programmable logic controller code
Zhao et al. Haepg: An automatic multi-hop exploitation generation framework
KR102635965B1 (ko) 마이크로 프로세서의 프론트 엔드 및 이를 이용한 컴퓨터 구현 방법
US9495138B1 (en) Scheme for verifying the effects of program optimizations
CN106295322A (zh) 一种针对缓冲区溢出攻击的硬件保护模型
US20220335135A1 (en) Vulnerability analysis and reporting for embedded systems
WO2023067665A1 (ja) 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム
KR20190055776A (ko) 바이너리에 대한 보안 취약점 및 그 원인 위치의 식별 방법 및 그 장치
WO2023067668A1 (ja) 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム
RU168346U1 (ru) Устройство выявления уязвимостей

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