CN116049835B - 汽车固件的安全漏洞检测方法、设备和存储介质 - Google Patents

汽车固件的安全漏洞检测方法、设备和存储介质 Download PDF

Info

Publication number
CN116049835B
CN116049835B CN202310212730.7A CN202310212730A CN116049835B CN 116049835 B CN116049835 B CN 116049835B CN 202310212730 A CN202310212730 A CN 202310212730A CN 116049835 B CN116049835 B CN 116049835B
Authority
CN
China
Prior art keywords
node
data
determining
assembly
syntax tree
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
CN202310212730.7A
Other languages
English (en)
Other versions
CN116049835A (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.)
Zhongqi Zhilian Technology Co ltd
Original Assignee
Zhongqi Zhilian 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 Zhongqi Zhilian Technology Co ltd filed Critical Zhongqi Zhilian Technology Co ltd
Priority to CN202310212730.7A priority Critical patent/CN116049835B/zh
Publication of CN116049835A publication Critical patent/CN116049835A/zh
Application granted granted Critical
Publication of CN116049835B publication Critical patent/CN116049835B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly
    • 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
    • Y02WCLIMATE CHANGE MITIGATION TECHNOLOGIES RELATED TO WASTEWATER TREATMENT OR WASTE MANAGEMENT
    • Y02W30/00Technologies for solid waste management
    • Y02W30/50Reuse, recycling or recovery technologies
    • Y02W30/56Reuse, recycling or recovery technologies of vehicles

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明涉及数据处理技术领域,公开了一种汽车固件的安全漏洞检测方法、设备和存储介质。该方法包括:对待检测固件的可执行机器码文件进行反汇编,根据识别到的各个函数分别构建各第一类抽象语法树中的根节点,进而通过反汇编后根节点对应的函数中的汇编指令,构建根节点下的中间节点,并通过反汇编后中间节点对应的汇编指令中关于调用函数或关于数据的代码,构建该中间节点下的叶子节点,根据各第一类抽象语法树构建第一语法树森林,并获取当前漏洞固件对应的第二语法树森林,通过相似度判断待检测固件是否存在当前漏洞固件中的安全漏洞,解决了无法获取固件源码导致检测准确性低的问题,实现了基于高维度特征的漏洞检测,提高了检测准确性。

Description

汽车固件的安全漏洞检测方法、设备和存储介质
技术领域
本发明涉及数据处理技术领域,尤其涉及一种汽车固件的安全漏洞检测方法、设备和存储介质。
背景技术
在国内物联网、车联网、智能网联汽车的发展趋势下,为应对物联网、车联网与智能网联汽车高速发展带来的迫切软件需求,设备生产商大量利用开源软件以加快软件开发速度,带来的问题便是当设备中使用的组件(软件)被曝出存在安全漏洞、安全缺陷,那么使用了这些存在漏洞组件的设备便可能存在这些漏洞,进而设备存在安全隐患。
现有技术通常采用抽象语法树来实现软件克隆检测,以检测软件是否存在安全漏洞。然而,抽象语法树仅能用于源码层面,在汽车固件这一领域中,由于无法得到固件源码的原因,导致无法使用抽象语法树构建出高维度特征进行漏洞检测,进而导致漏洞检测的准确性低。
有鉴于此,特提出本发明。
发明内容
为了解决上述技术问题,本发明提供了一种汽车固件的安全漏洞检测方法、设备和存储介质,解决由于无法获取固件源码导致漏洞检测准确性低的问题。
本发明实施例提供了一种汽车固件的安全漏洞检测方法,该方法包括:
对待检测固件中的可执行机器码文件进行反汇编,在反汇编过程中根据识别到的各个函数分别确定各第一类抽象语法树中的根节点;
针对所述第一类抽象语法树中的根节点,基于反汇编后所述根节点对应的函数中的汇编指令,构建所述根节点下的中间节点;
针对所述第一类抽象语法树中的各中间节点,基于反汇编后所述中间节点对应的汇编指令中关于调用函数或关于数据的代码,构建所述中间节点下的叶子节点,其中,所述叶子节点为数据叶子节点或调用函数叶子节点;
根据各所述第一类抽象语法树确定所述待检测固件对应的第一语法树森林,获取当前漏洞固件对应的第二语法树森林,根据所述第一语法树森林和所述第二语法树森林之间的相似度,判断所述待检测固件是否存在安全漏洞。
本发明实施例提供了一种电子设备,所述电子设备包括:
处理器和存储器;
所述处理器通过调用所述存储器存储的程序或指令,用于执行任一实施例所述的汽车固件的安全漏洞检测方法的步骤。
本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行任一实施例所述的汽车固件的安全漏洞检测方法的步骤。
本发明实施例具有以下技术效果:
对待检测固件的可执行机器码文件进行反汇编,根据识别到的各个函数分别构建各第一类抽象语法树中的根节点,针对第一类抽象语法树中的各根节点,进而通过反汇编后根节点对应的函数中的汇编指令,构建根节点下的中间节点,对于第一类抽象语法树中的各中间节点,通过反汇编后中间节点对应的汇编指令中关于调用函数或关于数据的代码,构建该中间节点下的叶子节点,进而根据各第一类抽象语法树构建待检测固件对应的第一语法树森林,获取当前漏洞固件对应的第二语法树森林,通过第一语法树森林和第二语法树森林之间的相似度,判断待检测固件是否也存在当前漏洞固件中的安全漏洞,实现了针对汽车固件的漏洞检测,解决了现有技术中由于无法获取固件源码导致漏洞检测准确性低的问题,并且,通过构建的语法树森林进行相似度识别,实现了基于高维度特征的漏洞检测,提高了漏洞检测的准确性。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种汽车固件的安全漏洞检测方法的流程图;
图2为本发明实施例提供的一种类抽象语法树的结构示意图;
图3为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行清楚、完整的描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施例,都属于本发明所保护的范围。
本发明实施例提供的汽车固件的安全漏洞检测方法,主要适用于针对无法获取源码的汽车固件,通过构建待检测固件和当前漏洞固件分别对应的语法树森林,来检测待检测固件中是否存在当前漏洞固件中的安全漏洞的情况。本发明实施例提供的汽车固件的安全漏洞检测方法可以由集成在计算机、车端处理器等电子设备中的装置执行。
图1为本发明实施例提供的一种汽车固件的安全漏洞检测方法的流程图。参见图1,该汽车固件的安全漏洞检测方法具体包括:
S110、对待检测固件中的可执行机器码文件进行反汇编,在反汇编过程中根据识别到的各个函数分别确定各第一类抽象语法树中的根节点。
其中,待检测固件可以是汽车固件。汽车固件可以是二进制固件,可以包括链接库、内核以及可执行机器码文件等内容;可执行机器码文件可以是用于运行汽车固件中应用程序的二进制代码文件。
具体的,汽车固件肩负硬件初始化、内核初始化等重要功能,目前二进制固件安全已经成为物联网设备安全的核心,源码在经过编译后,会产生汇编代码,汇编代码再经过编译即可得到机器码,汇编代码与机器码是一一对应的关系。由于源码的开发平台、目标平台、编译链接选项特性等差别,同样的源码会产生不同的编译后代码变体,即采用相同源码编译后可能导致不同固件中包含的二进制(机器码)不同。
具体的,可以对待检测固件中的可执行机器码文件进行反汇编,得到汇编代码,进而识别汇编代码中的各个函数,针对每一个函数分别构建一个根节点。
需要说明的是,每一个第一类抽象语法树仅包括一个根节点。构建类抽象语法树(Similar Abstract Syntax Tree,SAST)的目的在于:为了解决现有的抽象语法树仅能从源码层面构建数据结构,针对汽车固件中仅存在二进制的可执行机器码文件的情况,本发明实施例提供了一种类抽象语法树,通过构建类抽象语法树,可以实现从汇编代码层面构建数据结构,克服现有的抽象语法树无法适用于二进制代码的问题,进而得到高维度特征。
此外,采用一个函数构建一个根节点的目的在于:如果选用整个可执行机器码文件作为根节点,则构建出的类抽象语法树的结构过于冗余、庞大,进而在使用构建的语法树进行固件对比时,将会因为对比的对象粒度过大导致准确度降低,甚至如果在对比时阈值设置过大,会导致无法找出相似的固件文件。因此,为了保证漏洞检测的准确性,本发明实施例采用一个函数作为一个根节点,避免单个语法树的结构过于复杂。
具体的,在根据识别到的函数构建第一类抽象语法树中的根节点时,可以让根节点包含函数的绝对地址信息,即,根节点包括函数的绝对地址。
在根节点中设置对应函数的绝对地址的目的在于:反汇编过程中,函数、数据会以虚拟地址的形式在文件中,不同文件反汇编过程中,可能因为加载文件的初始地址的不同,即使是使用了同一开源组件的两个设备固件,它们之中对应开源组件的函数地址也可能不同。由于本发明实施例提供的类抽象语法树属于静态分析范畴,没有动态加载,无法保证函数地址数值可以作为函数的高维特征,但是对于静态分析,相对地址,即某数据或某调用函数到本级函数被调用的地址差值在不同固件的相同函数中,特征趋势是相同的,此特征属于静态特征。因此,为了使得类抽象语法树可以抽象出二进制汇编层面的相对地址特征,可以让根节点含有函数的绝对地址信息,以便于后续确定根节点与叶子节点的距离之差,即读取数据和调用函数的相对地址便可以体现。
在一种具体的实施方式中,在反汇编过程中根据识别到的各个函数分别确定各第一类抽象语法树中的根节点,包括:基于反汇编得到的汇编代码识别各个函数,针对每一个函数,根据随机名称或符号表中函数的名称,确定函数对应的根节点的节点名称,根据函数的绝对地址确定函数对应的根节点的节点地址。
具体的,关于根节点的节点名称,如果待检测固件中没有去除符号表,则可以直接将符号表中函数的名称,作为该函数对应的根节点的节点名称;如果待检测固件中去除符号表,则可以通过归类的方式生成函数的随机名称,进而使用随机名称作为该函数对应的根节点的节点名称。
即,根节点的数据结构可以是:{function_name::function_address},或者,也可以是:{random_function_name::function_address}。
通过上述方式,实现了对各个第一类抽象语法树中根节点的构建,得到包括函数的绝对地址的根节点的数据结构,进而便于确定叶子节点与根节点之间的相对距离,以此为高维度特征进行固件比对,保证了固件漏洞检测的准确性。
S120、针对第一类抽象语法树中的根节点,基于反汇编后根节点对应的函数中的汇编指令,构建根节点下的中间节点。
在构建出各个第一类抽象语法树中的根节点后,进一步的,可以构建该根节点下的中间节点。具体的,可以根据汇编代码中与根节点对应的函数中的各个汇编指令,构建该根节点下各个中间节点。
其中,考虑到平台多使用ARM(Advanced RISC Machine,高级精简指令集计算机)架构作为汽车零部件的计算载体,因此,可以对各个ARM指令进行归类,以根据函数中的汇编指令的类型,确定对应的中间节点的数据结构,数据结构可以包括中间节点的标识,即,中间节点可以包括中间节点的节点标识,该节点标识用于反应对应的汇编指令的指令类型。
在一种具体的实施方式中,基于反汇编后根节点对应的函数中的汇编指令,构建根节点下的中间节点,包括:若反汇编后根节点对应的函数中的汇编指令为数据加载类指令,则根据预设第一标识确定中间节点的节点标识;若反汇编后根节点对应的函数中的汇编指令为数据存储指令,则根据预设第二标识确定中间节点的节点标识;若反汇编后根节点对应的函数中的汇编指令为数据传送指令,则根据预设第三标识确定中间节点的节点标识;若反汇编后根节点对应的函数中的汇编指令为数据计算指令,则根据预设第四标识确定中间节点的节点标识;若反汇编后根节点对应的函数中的汇编指令为逻辑运算指令,则根据预设第五标识确定中间节点的节点标识;若反汇编后根节点对应的函数中的汇编指令为转移指令或分支指令,则根据预设第六标识确定中间节点的节点标识;若反汇编后根节点对应的函数中的汇编指令为程序状态寄存器访问指令,则根据预设第七标识确定中间节点的节点标识;若反汇编后根节点对应的函数中的汇编指令为堆栈操作指令,则根据预设第八标识确定中间节点的节点标识;若反汇编后根节点对应的函数中的汇编指令为协处理器指令,则根据预设第九标识确定中间节点的节点标识;若反汇编后根节点对应的函数中的汇编指令为软件中断指令,则根据预设第十标识确定中间节点的节点标识;若反汇编后根节点对应的函数中的汇编指令为伪指令,则根据预设第十一标识确定中间节点的节点标识;其中,中间节点的节点标识用于描述中间节点的节点类型。
即,可以预先为各种汇编指令类型设置对应的标识。具体的:(1)控制存储器到寄存器的数据传送,即数据加载类指令,如LDR,对应的预设第一标识可以为LOAD;(2)控制寄存器到存储器的数据传送,即数据存储指令,如STR,对应的预设第二标识可以为 STORE;(3)数据传送指令,如MOV,对应的预设第三标识可以为TRANSFER;(4)数据计算指令,如ADD,对应的预设第四标识可以为CALCULATE;(5)逻辑运算指令,其中将比较指令也包含在逻辑运算内,如CMP、TEQ、AND,对应的预设第五标识可以为LOGIC;(6)转移指令或分支指令,如B,对应的预设第六标识可以为CONTROL;(7)程序状态寄存器访问指令,如MRS,对应的预设第七标识可以为PROGRAM_STATUS;(8)堆栈操作指令,如PULL、POP,对应的预设第八标识可以为STACK_HEAP;(9)协处理器指令,包括数据处理、寄存器传输及内存传输指令,如CR,对应的预设第九标识可以为CO-PROCESS;(10)软件中断指令,如SWI,对应的预设第十标识可以为INTERRUPT;(11)伪指令,如ADR,对应的预设第十一标识可以为PSEUDOINSTRUCTION。
在上述各汇编指令类型中,数据加载类指令和数据存储指令是按照数据的两个传送方向分为两类,为了表示出二进制层面的数据流特征;逻辑运算指令、转移指令/分支指令、程序状态寄存器访问指令以及堆栈操作指令,是为了体现程序控制流与计算关系的指令,体现出函数的主要执行逻辑。
在上述实施方式中,通过识别根节点对应的函数中汇编指令的类型,进而根据十一种类型分别对应的预设标识构建中间节点的节点标识,实现了中间节点的准确构建。
需要说明的是,在本发明实施例中,一个根节点下可以有多个中间节点,一个中间节点下可以有一个或多个中间节点,每一个中间节点对应一条汇编指令。示例性的,图2为本发明实施例提供的一种类抽象语法树的结构示意图。
S130、针对第一类抽象语法树中的各中间节点,基于反汇编后中间节点对应的汇编指令中关于调用函数或关于数据的代码,构建中间节点下的叶子节点,其中,叶子节点为数据叶子节点或调用函数叶子节点。
在构建出第一类抽象语法树中的各中间节点后,进一步的,可以构建最底层的中间节点下的各个叶子节点。具体的,可以通过中间节点对应的汇编指令中关于调用函数的代码,构建调用函数叶子节点,通过中间节点对应的汇编指令中关于数据的代码,构建数据叶子节点。
在构建类抽象语法树的根节点时,曾说明为了让SAST体现出相对地址这一高级语义特征,在根节点的数据结构中设置函数的绝对地址,因此,还可以将叶子节点的数据格式设置为[data::address]或[function::address],其中,address为叶子节点与根节点的相对地址,即描述叶子节点相对于根节点的距离。确定叶子节点的相对地址的目的在于:针对同一套二进制代码,由于平台不同导致基址不同,因此,为了消除基址的影响,采用相对地址进行描述,可以保证提取的语义信息的准确性。
由于SAST构建在二进制汇编层面,源码中的变量类型、变量修饰符都会在预编译、编译阶段消失,进而转变为数据或函数的地址和存储空间的容量(字节、字、双字大小的存储空间。)。SAST中要体现出二进制层面数据和函数的语义特征,因此要对汇编层面的函数和数据做归类,以根据函数或数据的类型、相对于根节点的地址等信息,构建叶子节点的数据结构。
在一种具体的实施方式中,基于反汇编后中间节点对应的汇编指令中关于调用函数或关于数据的代码,构建中间节点下的叶子节点,包括:
在反汇编后的汇编代码中,根据中间节点对应的汇编指令中关于调用函数的代码在汇编代码中的位置,确定调用函数叶子节点的节点类型,并确定调用函数叶子节点的节点名称,以及调用函数叶子节点与根节点之间的相对地址;
其中,根据所述中间节点对应的汇编指令中关于调用函数的代码在汇编代码中的位置,确定调用函数叶子节点的节点类型,包括:
若中间节点对应的汇编指令中关于调用函数的代码在汇编代码的文本代码段中,则确定与关于调用函数的代码对应的调用函数叶子节点的节点类型为普通函数;
若中间节点对应的汇编指令中关于调用函数的代码在汇编代码的全局偏移表或程序链接表中,则确定与关于调用函数的代码对应的调用函数叶子节点的节点类型为动态链接函数;
若中间节点对应的汇编指令中关于调用函数的代码在汇编代码的动态符号表中,则确定与关于调用函数的代码对应的调用函数叶子节点的节点类型为导入函数或导出函数。
即,针对调用函数可以预先设置以下类型:普通函数、动态链接函数、导入函数以及导出函数。每一种类型可以根据相关代码在汇编代码中的位置确定。其中,普通函数表示关于调用函数的代码在文本代码段(text)中,动态链接函数表示关于函数的代码在全局偏移表(.got)或程序链接表(.plt)中,导入函数或导出函数表示关于函数的代码在动态符号表(.dynsym)中。
具体的,通过汇编指令中关于调用函数的代码的具体位置,确定调用函数的类型,进而根据该类型确定对应的调用函数叶子节点的节点类型。并且,还可以确定调用函数叶子节点相对于根节点的地址,即调用函数叶子节点与根节点之间的相对地址。如,function(调用函数)相对地址=叶子节点绝对地址–根节点绝对地址。
并且,还可以根据符号表确定调用函数叶子节点的节点名称,若符号表被去除,则可以将随机生成的名称确定为调用函数叶子节点的节点名称。示例性的,调用函数叶子节点的数据结构为:[function::address::type],其中,function表示节点名称,address表示相对地址,type表示节点类型。
通过上述实施方式,可以构建出包括节点名称、节点类型以及相对地址的各个调用函数叶子节点,进而得到含有调用函数的语义信息的类抽象语法树,在后续比对时,可以进一步提高准确性。
除了将调用函数的语义信息加入到对应叶子节点之外,还可以将数据的语义信息加入到对应叶子节点。因为SAST构建在二进制汇编层面,源码中的变量类型、变量修饰符都会在预编译、编译阶段消失,进而转变为数据或调用函数的地址和存储空间的容量(字节、字、双字大小的存储空间。)。考虑汇编指令中所引用数据的位置,将该特征作为语义特征。
在一种具体的实施方式中,基于反汇编后中间节点对应的汇编指令中关于调用函数或关于数据的代码,构建中间节点下的叶子节点,还包括:
在反汇编后的汇编代码中,根据中间节点对应的汇编指令中关于数据的代码在汇编代码中的位置,确定数据叶子节点的节点类型,并确定数据叶子节点的节点名称、数据叶子节点的节点大小、以及数据叶子节点与根节点之间的相对地址;
其中,根据中间节点对应的汇编指令中关于数据的代码在汇编代码中的位置,确定数据叶子节点的节点类型,包括:
若中间节点对应的汇编指令中关于数据的代码在汇编代码的内存映像中,则确定与关于数据的代码对应的数据叶子节点的节点类型为普通数据;
若中间节点对应的汇编指令中关于数据的代码在汇编代码的用于动态链接的字符串中,则确定与关于数据的代码对应的数据叶子节点的节点类型为符号数据;
若中间节点对应的汇编指令中关于数据的代码在汇编代码的只读信息段中,则确定与关于数据的代码对应的数据叶子节点的节点类型为只读数据;
若中间节点对应的汇编指令中关于数据的代码在汇编代码的字符串区,则确定与关于数据的代码对应的数据叶子节点的节点类型为字符串数据;
若中间节点对应的汇编指令中关于数据的代码在汇编代码的文本代码段中,则确定与关于数据的代码对应的数据叶子节点的节点类型为立即数。
具体的,数据在二进制中,会被存放到.data段(将出现在程序的内存映像中)、.dynstr(用于动态链接的字符串),.rodata (只读信息段)、或者.strtab (字符串区),还有以#符号作为开头的立即数。虽然在二进制层面没有了变量修饰符、变量类型等语法信息,但是这些信息都转发为数据的位置和大小,因此,在本发明实施例中,可以将数据叶子节点划分为以下类型:普通数据、符号数据、只读数据、字符串数据、以及立即数。
其中,普通数据表示关于数据的代码在内存映像(.data段)中;符号数据表示关于数据的代码在用于动态链接的字符串(.dynstr)中;只读数据表示关于数据的代码在只读信息段(.rodata)中;字符串数据表示关于数据的代码在字符串区(.strtab)中;立即数表示关于数据的代码在文本代码段(.text)中。
除了根据关于数据的代码的具体位置确定对应的数据叶子节点的节点类型之外,还可以确定数据叶子节点相对于根节点的地址,即数据叶子节点与根节点之间的相对地址。如,data (数据)相对地址=叶子节点绝对地址–根节点绝对地址。
并且,还可以确定调用函数叶子节点的节点名称和节点大小,其中,节点大小可以理解为数据的取值大小,具体体现为二进制的可执行机器码文件中占用的空间大小。例如,在反汇编的过程中可以生成普通数据的随机名称,进而将随机名称作为对应的数据叶子节点的节点名称。
示例性的,数据叶子节点的数据结构可以是:[data::address::type::size]。其中,data表示数据的名称及值,每一种类型的节点的data生成命令可以是:1)普通数据:V_,A_+随机字符串+值;2)符号数据:Strings +值;3)只读数据:Rdata +值;4)字符串数据:Strings +值;5)立即数:Immediate +值。并且,address为相对地址,type为节点类型,size为数据大小。
通过上述实施方式,可以构建出包括节点名称、节点类型、节点大小以及相对地址的各个数据叶子节点,进而得到含有数据的语义信息的类抽象语法树,在后续比对时,可以进一步提高准确性。
需要说明的是,本发明实施例提出的类抽象语法树的构建方式,可以在二进制汇编层面提取函数和数据的语法语义信息,进而提高了对二进制的固件进行漏洞检测的准确性。并且,该类抽象语法树可以直接应用于固件静态分析,克服了符号执行在汽车固件领域需要动态调试执行导致的高成本问题,通过抽象出二进制汇编层面语法语义信息,提高固件软件漏洞检测的准确性。
S140、根据各第一类抽象语法树确定待检测固件对应的第一语法树森林,获取当前漏洞固件对应的第二语法树森林,根据第一语法树森林和第二语法树森林之间的相似度,判断待检测固件是否存在安全漏洞。
在完成对各个第一类抽象语法树中的根节点、中间节点以及叶子节点的构建之后,可以将所有第一类抽象语法树确定为待检测固件对应的第一语法树森林。同时,还可以获取当前漏洞固件对应的第二语法树森林。
其中,当前漏洞固件可以是已确定存在安全漏洞的固件。当前漏洞固件对应的第二语法树森林中包括一个或多个第二类抽象语法树,第二类抽象语法树的构建可参见第一类抽象语法树的构建步骤,在此不再赘述。
具体的,通过确定第一语法树森林和第二语法树森林之间的相似度,实现对待检测固件和当前漏洞固件的比对,进而确定待检测固件与当前漏洞固件之间是否存在代码克隆情况,即待检测固件是否存在当前漏洞固件中的安全漏洞。
示例性的,可以确定第一语法树森林中任意一个第一类抽象语法树和第二语法树森林中任意一个第二类抽象语法树之间的相似度,如,根据两个类抽象语法树的相同节点的数量、相同边的数量等,确定相似度。
在一种具体的实施方式中,根据第一语法树森林和第二语法树森林之间的相似度,判断待检测固件是否存在安全漏洞,包括如下步骤:
步骤1、针对第一语法树森林和第二语法树森林,确定第一语法树森林中的各第一类抽象语法树与第二语法树森林中的各第二类抽象语法树之间的节点相似比例、相同相对距离的节点统计比率、以及公共路径统计比率;
步骤2、根据节点相似比例、相同相对距离的节点统计比率以及公共路径统计比率,确定第一类抽象语法树与第二类抽象语法树之间的相似度;
步骤3、通过各第一类抽象语法树与各第二类抽象语法树之间的相似度,判断待检测固件是否存在安全漏洞。
具体的,可以确定各第一类抽象语法树与各第二类抽象语法树之间的节点相似比例、相同相对距离的节点统计比率、以及公共路径统计比率。其中,节点相似比例可以描述两个类抽象语法树之间相似的根节点和叶子节点的数量所占比例;相同相对距离的节点统计比率可以描述两个类抽象语法树之间相同相对地址的叶子节点的数量所占比例;公共路径统计比率可以描述两个类抽象语法树之间相同长度的路径的数量所占比例。
其中,针对上述步骤1,可选的,确定第一类抽象语法树与第二类抽象语法树之间的节点相似比例,包括如下步骤:
步骤11、针对第一类抽象语法树中的根节点和第二类抽象语法树中的根节点,若根节点的节点名称相同或根节点的节点地址相同,则确定第一类抽象语法树与第二类抽象语法树的根节点相同;
步骤12、针对分别从第一类抽象语法树中和第二类抽象语法树中选取的数据叶子节点,基于两个数据叶子节点的节点类型、节点大小、节点名称以及相对地址,确定两个数据叶子节点之间的参考相似度,若参考相似度大于预设相似度阈值,则确定两个数据叶子节点相同;
步骤13、针对分别从第一类抽象语法树中和第二类抽象语法树中选取的调用函数叶子节点,基于两个调用函数叶子节点的节点类型、节点名称以及相对地址,确定两个调用函数叶子节点之间的参考相似度,若参考相似度大于预设相似度阈值,则确定两个调用函数叶子节点相同;
步骤14、根据相同根节点的数量、相同数据叶子节点的数量以及相同调用函数叶子节点的数量,确定节点相似比例。
即,针对两个类抽象语法树中的根节点,若两个根节点的节点名称相同,或者节点地址相同,则可以确定两个根节点相同。针对两个类抽象语法树中的数据叶子节点,通过节点类型、节点大小、节点名称以及相对地址,计算两个数据叶子节点之间的参考相似度,如果参考相似度大于预设相似度阈值,则可以确定两个数据叶子节点相同。其中,预设相似度阈值可以是0.5。示例性的,计算两个数据叶子节点之间的参考相似度,可以参见如下公式:
Figure SMS_1
其中,similar表示参考相似度;T1.type、T2.type分别表示两个数据叶子节点的节点类型;T1.size、T2. size分别表示两个数据叶子节点的节点大小;T1.address、T2.address分别表示两个数据叶子节点的相对地址;T1.data、T2. data分别表示两个数据叶子节点的节点名称;strcmp表示判断两个字符串是否相等,相等时返回1,否则返回0。
针对两个类抽象语法树中的调用函数叶子节点,通过节点类型、节点名称以及相对地址,计算两个调用函数叶子节点之间的参考相似度,如果参考相似度大于预设相似度阈值,则可以确定两个调用函数叶子节点相同。其中,预设相似度阈值可以是0.5。示例性的,计算两个调用函数叶子节点之间的参考相似度,可以参见如下公式:
Figure SMS_2
其中,similar表示参考相似度;T1.function、T2. function分别表示两个调用函数叶子节点的节点名称;T1.address、T2. address分别表示两个调用函数叶子节点的相对地址;T1.type、T2.type分别表示两个调用函数叶子节点的节点类型。
进一步的,可以根据相同根节点的数量、相同数据叶子节点的数量以及相同调用函数叶子节点的数量,确定出相同节点总数量,进而将相同节点总数量与参与对比节点总数量的比值,确定为节点相似比例,如:
Figure SMS_3
其中,TR为节点相似比例;count_same_token函数,表示计算T1、T2两个类抽象语法树之间根节点、叶子节点相同的个数;
Figure SMS_4
、/>
Figure SMS_5
分别表示T1、T2中用于比较数据统计特征的节点数目,值为叶子节点的个数+1,这里加一是将根节点也加入,因为每棵SAST仅有一个根节点;min函数表示计算两棵SAST中用于比较数据统计特征的节点数的最小值,即参与对比节点总数量。通过该方式,可以对叶子节点的语义信息进行比对,进而保证了两个固件的比对准确性。
其中,针对上述步骤1,可选的,确定第一类抽象语法树与第二类抽象语法树之间的相同相对距离的节点统计比率,包括:
步骤21、确定第一类抽象语法树中的各叶子节点到根节点的相对距离,构建第一距离集合;
步骤22、确定第二类抽象语法树中的各叶子节点到根节点的相对距离,构建第二距离集合;
步骤23、确定第一距离集合与第二距离集合中相对距离相同的叶子节点的当前数量,并确定第一类抽象语法树和第二类抽象语法树中根节点与叶子节点的数量之和最小值;
步骤24、基于当前数量与所述数量之和最小值,确定相同相对距离的节点统计比率。
其中,各叶子节点到根节点的相对距离,可以理解为各叶子节点的相对地址。具体的,针对两个待比对的类抽象语法树,可以分别根据其中的各叶子节点的相对地址,构建第一距离集合和第二距离集合,进而判断第一距离集合与第二距离集合中相对距离相同的数量,即当前数量,并且,确定第一类抽象语法树中根节点与叶子节点的数量之和,以及第二类抽象语法树中根节点与叶子节点的数量之和,得到两个数量之和中的最小值。进一步的,将当前数量与最小值的比值确定为相同相对距离的节点统计比率。通过该方式,可以对叶子节点中相对距离这一高维度特征进行比对,进而保证了两个固件的比对准确性。
针对公共路径统计比率,考虑到SAST的结构为树状结构,即为图结构。对于SAST的叶子节点到中间节点或根节点的路径,若两个SAST中两条路径的长度相等,而且顶点(中间节点或根节点)相同,则可以这两条路径确定为两个SAST的公共路径。度量两个SAST的相似度(高级语法语义)具体可以是:两个图结构的公共路径越多,则它们越相似。
在本发明实施例中,可以利用核方法处理SAST的结构相似度,将SAST表示为邻接矩阵,通过邻接矩阵相乘和相加找到SAST的所有路径,用核函数的内积计算两个SAST的公共路径数和分支节点的数目,进而得到公共路径统计比率。示例性的,参见如下公式:
Figure SMS_6
其中,RG_S表示公共路径统计比率,K(T1,T2)表示两个类抽象语法树中公共路径的数量,
Figure SMS_7
表示两个类抽象语法树中所有路径的数量。具体的:
Figure SMS_8
Figure SMS_9
式中,
Figure SMS_10
表示两个类抽象语法树中所有长度为K的路径的公共矩阵,即由长度为K的各个公共路径组成的矩阵,R表示两个类抽象语法树中的任意长度的公共矩阵,/>
Figure SMS_11
表示单位矩阵,/>
Figure SMS_12
表示单位矩阵的逆矩阵。内积/>
Figure SMS_13
表示计算两个类抽象语法树中的所有公共路径数,RG_S由基于核函数的矩阵计算。
进一步的,可以将节点相似比例、相同相对距离的节点统计比率以及公共路径统计比率的和,确定为第一类抽象语法树与第二类抽象语法树之间的相似度。如:
Figure SMS_14
式中,PR表示两颗SAST的相似度,TR表示节点相似比例,AR表示相同相对距离的节点统计比率,RG_S表示公共路径统计比率。
进一步的,如果针对待检测固件和当前漏洞固件,语法树之间的相似度大于预设相似度阈值的数量超过预设数量阈值,则可以确定待检测固件与当前漏洞固件存在软件克隆情况,待检测固件存在当前漏洞固件中的安全漏洞。示例性的,预设数量阈值可以是2,预设相似度阈值可以是0.95。
通过计算第一语法树森林中各第一类抽象语法树与第二语法树森林中各第二类抽象语法树之间的节点相似比例、相同相对距离的节点统计比率以及公共路径统计比率,实现了任意两个类抽象语法树之间的相似度的确定,进而根据所有相似度判断待检测固件是否存在安全漏洞,实现了对待检测固件的准确检测,从节点相似、相对距离的节点、以及公共路径三个方面,对两个固件进行比对,使用尽可能多的二进制层面特征进行相似度计算,使得结果更加接近固件二进制层面真实的特征匹配情况,保证了比对的准确性。
本发明具有以下技术效果:对待检测固件的可执行机器码文件进行反汇编,根据识别到的各个函数分别构建各第一类抽象语法树中的根节点,针对第一类抽象语法树中的各根节点,进而通过反汇编后根节点对应的函数中的汇编指令,构建根节点下的中间节点,对于第一类抽象语法树中的各中间节点,通过反汇编后中间节点对应的汇编指令中关于调用函数或关于数据的代码,构建该中间节点下的叶子节点,进而根据各第一类抽象语法树构建待检测固件对应的第一语法树森林,获取当前漏洞固件对应的第二语法树森林,通过第一语法树森林和第二语法树森林之间的相似度,判断待检测固件是否也存在当前漏洞固件中的安全漏洞,实现了针对汽车固件的漏洞检测,解决了现有技术中由于无法获取固件源码导致漏洞检测准确性低的问题,并且,通过构建的语法树森林进行相似度识别,实现了基于高维度特征的漏洞检测,提高了漏洞检测的准确性。
图3为本发明实施例提供的一种电子设备的结构示意图。如图3所示,电子设备400包括一个或多个处理器401和存储器402。
处理器401可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备400中的其他组件以执行期望的功能。
存储器402可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器401可以运行所述程序指令,以实现上文所说明的本发明任意实施例的汽车固件的安全漏洞检测方法以及/或者其他期望的功能。在所述计算机可读存储介质中还可以存储诸如初始外参、阈值等各种内容。
在一个示例中,电子设备400还可以包括:输入装置403和输出装置404,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。该输入装置403可以包括例如键盘、鼠标等等。该输出装置404可以向外部输出各种信息,包括预警提示信息、制动力度等。该输出装置404可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图3中仅示出了该电子设备400中与本发明有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备400还可以包括任何其他适当的组件。
除了上述方法和设备以外,本发明的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本发明任意实施例所提供的汽车固件的安全漏洞检测方法的步骤。
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本发明实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本发明的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本发明任意实施例所提供的汽车固件的安全漏洞检测方法的步骤。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
需要说明的是,本发明所用术语仅为了描述特定实施例,而非限制本申请范围。如本发明说明书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法或者设备中还存在另外的相同要素。
还需说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。除非另有明确的规定和限定,术语“安装”、“相连”、“连接”等应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案。

Claims (9)

1.一种汽车固件的安全漏洞检测方法,其特征在于,包括:
对待检测固件中的可执行机器码文件进行反汇编,在反汇编过程中根据识别到的各个函数分别确定各第一类抽象语法树中的根节点;
针对所述第一类抽象语法树中的根节点,基于反汇编后所述根节点对应的函数中的汇编指令,构建所述根节点下的中间节点;
针对所述第一类抽象语法树中的各中间节点,基于反汇编后所述中间节点对应的汇编指令中关于调用函数或关于数据的代码,构建所述中间节点下的叶子节点,其中,所述叶子节点为数据叶子节点或调用函数叶子节点;
根据各所述第一类抽象语法树确定所述待检测固件对应的第一语法树森林,获取当前漏洞固件对应的第二语法树森林,根据所述第一语法树森林和所述第二语法树森林之间的相似度,判断所述待检测固件是否存在安全漏洞;
所述在反汇编过程中根据识别到的各个函数分别确定各第一类抽象语法树中的根节点,包括:
基于反汇编得到的汇编代码识别各个函数,针对每一个函数,根据随机名称或符号表中函数的名称,确定所述函数对应的根节点的节点名称,根据所述函数的绝对地址确定所述函数对应的根节点的节点地址。
2.根据权利要求1所述的方法,其特征在于,所述基于反汇编后所述根节点对应的函数中的汇编指令,构建所述根节点下的中间节点,包括:
若反汇编后所述根节点对应的函数中的汇编指令为数据加载类指令,则根据预设第一标识确定所述中间节点的节点标识;
若反汇编后所述根节点对应的函数中的汇编指令为数据存储指令,则根据预设第二标识确定所述中间节点的节点标识;
若反汇编后所述根节点对应的函数中的汇编指令为数据传送指令,则根据预设第三标识确定所述中间节点的节点标识;
若反汇编后所述根节点对应的函数中的汇编指令为数据计算指令,则根据预设第四标识确定所述中间节点的节点标识;
若反汇编后所述根节点对应的函数中的汇编指令为逻辑运算指令,则根据预设第五标识确定所述中间节点的节点标识;
若反汇编后所述根节点对应的函数中的汇编指令为转移指令或分支指令,则根据预设第六标识确定所述中间节点的节点标识;
若反汇编后所述根节点对应的函数中的汇编指令为程序状态寄存器访问指令,则根据预设第七标识确定所述中间节点的节点标识;
若反汇编后所述根节点对应的函数中的汇编指令为堆栈操作指令,则根据预设第八标识确定所述中间节点的节点标识;
若反汇编后所述根节点对应的函数中的汇编指令为协处理器指令,则根据预设第九标识确定所述中间节点的节点标识;
若反汇编后所述根节点对应的函数中的汇编指令为软件中断指令,则根据预设第十标识确定所述中间节点的节点标识;
若反汇编后所述根节点对应的函数中的汇编指令为伪指令,则根据预设第十一标识确定所述中间节点的节点标识;
其中,所述中间节点的节点标识用于描述所述中间节点的节点类型。
3.根据权利要求1所述的方法,其特征在于,所述基于反汇编后所述中间节点对应的汇编指令中关于调用函数或关于数据的代码,构建所述中间节点下的叶子节点,包括:
在反汇编后的汇编代码中,根据所述中间节点对应的汇编指令中关于调用函数的代码在所述汇编代码中的位置,确定调用函数叶子节点的节点类型,并确定所述调用函数叶子节点的节点名称,以及所述调用函数叶子节点与所述根节点之间的相对地址;
其中,所述根据所述中间节点对应的汇编指令中关于调用函数的代码在所述汇编代码中的位置,确定调用函数叶子节点的节点类型,包括:
若所述中间节点对应的汇编指令中关于调用函数的代码在所述汇编代码的文本代码段中,则确定与所述关于调用函数的代码对应的调用函数叶子节点的节点类型为普通函数;
若所述中间节点对应的汇编指令中关于调用函数的代码在所述汇编代码的全局偏移表或程序链接表中,则确定与所述关于调用函数的代码对应的调用函数叶子节点的节点类型为动态链接函数;
若所述中间节点对应的汇编指令中关于调用函数的代码在所述汇编代码的动态符号表中,则确定与所述关于调用函数的代码对应的调用函数叶子节点的节点类型为导入函数或导出函数。
4.根据权利要求3所述的方法,其特征在于,所述基于反汇编后所述中间节点对应的汇编指令中关于调用函数或关于数据的代码,构建所述中间节点下的叶子节点,还包括:
在反汇编后的汇编代码中,根据所述中间节点对应的汇编指令中关于数据的代码在所述汇编代码中的位置,确定数据叶子节点的节点类型,并确定所述数据叶子节点的节点名称、所述数据叶子节点的节点大小、以及所述数据叶子节点与所述根节点之间的相对地址;
其中,根据所述中间节点对应的汇编指令中关于数据的代码在所述汇编代码中的位置,确定数据叶子节点的节点类型,包括:
若所述中间节点对应的汇编指令中关于数据的代码在所述汇编代码的内存映像中,则确定与所述关于数据的代码对应的数据叶子节点的节点类型为普通数据;
若所述中间节点对应的汇编指令中关于数据的代码在所述汇编代码的用于动态链接的字符串中,则确定与所述关于数据的代码对应的数据叶子节点的节点类型为符号数据;
若所述中间节点对应的汇编指令中关于数据的代码在所述汇编代码的只读信息段中,则确定与关于数据的代码对应的数据叶子节点的节点类型为只读数据;
若所述中间节点对应的汇编指令中关于数据的代码在所述汇编代码的字符串区,则确定与所述关于数据的代码对应的数据叶子节点的节点类型为字符串数据;
若所述中间节点对应的汇编指令中关于数据的代码在所述汇编代码的文本代码段中,则确定与所述关于数据的代码对应的数据叶子节点的节点类型为立即数。
5.根据权利要求4所述的方法,其特征在于,所述根据所述第一语法树森林和所述第二语法树森林之间的相似度,判断所述待检测固件是否存在安全漏洞,包括:
针对所述第一语法树森林和所述第二语法树森林,确定所述第一语法树森林中的各第一类抽象语法树与所述第二语法树森林中的各第二类抽象语法树之间的节点相似比例、相同相对距离的节点统计比率、以及公共路径统计比率;
根据所述节点相似比例、所述相同相对距离的节点统计比率以及所述公共路径统计比率,确定所述第一类抽象语法树与所述第二类抽象语法树之间的相似度;
通过各所述第一类抽象语法树与各所述第二类抽象语法树之间的相似度,判断所述待检测固件是否存在安全漏洞。
6.根据权利要求5所述的方法,其特征在于,确定所述第一类抽象语法树与所述第二类抽象语法树之间的节点相似比例,包括:
针对所述第一类抽象语法树中的根节点和所述第二类抽象语法树中的根节点,若根节点的节点名称相同或根节点的节点地址相同,则确定所述第一类抽象语法树与所述第二类抽象语法树的根节点相同;
针对分别从所述第一类抽象语法树中和所述第二类抽象语法树中选取的数据叶子节点,基于两个数据叶子节点的节点类型、节点大小、节点名称以及相对地址,确定两个数据叶子节点之间的参考相似度,若所述参考相似度大于预设相似度阈值,则确定所述两个数据叶子节点相同;
针对分别从所述第一类抽象语法树中和所述第二类抽象语法树中选取的调用函数叶子节点,基于两个调用函数叶子节点的节点类型、节点名称以及相对地址,确定两个调用函数叶子节点之间的参考相似度,若所述参考相似度大于预设相似度阈值,则确定所述两个调用函数叶子节点相同;
根据相同根节点的数量、相同数据叶子节点的数量以及相同调用函数叶子节点的数量,确定节点相似比例。
7.根据权利要求5所述的方法,其特征在于,确定所述第一类抽象语法树与所述第二类抽象语法树之间的相同相对距离的节点统计比率,包括:
确定所述第一类抽象语法树中的各叶子节点到根节点的相对距离,构建第一距离集合;
确定所述第二类抽象语法树中的各叶子节点到根节点的相对距离,构建第二距离集合;
确定所述第一距离集合与所述第二距离集合中相对距离相同的叶子节点的当前数量,并确定所述第一类抽象语法树和所述第二类抽象语法树中根节点与叶子节点的数量之和最小值;
基于所述当前数量与所述数量之和最小值,确定相同相对距离的节点统计比率。
8.一种电子设备,其特征在于,所述电子设备包括:
处理器和存储器;
所述处理器通过调用所述存储器存储的程序或指令,用于执行如权利要求1至7任一项所述的汽车固件的安全漏洞检测方法的步骤。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行如权利要求1至7任一项所述的汽车固件的安全漏洞检测方法的步骤。
CN202310212730.7A 2023-03-08 2023-03-08 汽车固件的安全漏洞检测方法、设备和存储介质 Active CN116049835B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310212730.7A CN116049835B (zh) 2023-03-08 2023-03-08 汽车固件的安全漏洞检测方法、设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310212730.7A CN116049835B (zh) 2023-03-08 2023-03-08 汽车固件的安全漏洞检测方法、设备和存储介质

Publications (2)

Publication Number Publication Date
CN116049835A CN116049835A (zh) 2023-05-02
CN116049835B true CN116049835B (zh) 2023-06-23

Family

ID=86120337

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310212730.7A Active CN116049835B (zh) 2023-03-08 2023-03-08 汽车固件的安全漏洞检测方法、设备和存储介质

Country Status (1)

Country Link
CN (1) CN116049835B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116302074B (zh) * 2023-05-12 2023-07-28 卓望数码技术(深圳)有限公司 第三方组件识别方法、装置、设备及存储介质
CN116502238B (zh) * 2023-06-26 2023-10-10 中汽智联技术有限公司 一种基于车联网产品安全漏洞专业库cavd的防护方法
CN116880858A (zh) * 2023-09-06 2023-10-13 北京华云安信息技术有限公司 固件实际基地址的获取方法、装置、设备以及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106295335A (zh) * 2015-06-11 2017-01-04 中国科学院信息工程研究所 一种面向嵌入式设备的固件漏洞检测方法及系统
CN114462046A (zh) * 2022-01-07 2022-05-10 济南超级计算技术研究院 一种基于反编译的智能IoT设备固件安全检测方法及系统

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8429628B2 (en) * 2007-12-28 2013-04-23 International Business Machines Corporation System and method for comparing partially decompiled software
KR101051600B1 (ko) * 2010-03-29 2011-07-22 주식회사 소프트 포 소프트 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템
US9426177B2 (en) * 2013-07-15 2016-08-23 Tencent Technology (Shenzhen) Company Limited Method and apparatus for detecting security vulnerability for animation source file
CN105159715B (zh) * 2015-09-01 2018-07-20 南京大学 一种基于抽象语法树节点变更抽取的Python代码变更提示方法
KR101906004B1 (ko) * 2016-11-29 2018-10-10 한국전력공사 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치 및 그 방법
CN106648681A (zh) * 2016-12-29 2017-05-10 南京科远自动化集团股份有限公司 一种可编程语言编译装载系统及方法
CN107908955B (zh) * 2017-11-30 2019-11-12 华中科技大学 一种基于中间语言分析的控制流完整性保护方法及系统
CN109359468B (zh) * 2018-08-23 2021-12-14 创新先进技术有限公司 漏洞检测方法、装置及设备
CN109635569B (zh) * 2018-12-10 2020-11-03 国家电网有限公司信息通信分公司 一种漏洞检测方法及装置
US20210389946A1 (en) * 2019-04-22 2021-12-16 Whole Sky Technologies Company Hardware enforcement of boundaries on the control, space, time, modularity, reference, initialization, and mutability aspects of software
CN111552968B (zh) * 2020-04-21 2023-06-13 中国电力科学研究院有限公司 基于模型检查的嵌入式终端软件代码漏洞检测方法及装置
CN112149136A (zh) * 2020-09-23 2020-12-29 北京顶象技术有限公司 loT设备固件漏洞的检测方法、系统及电子设备
CN112613040A (zh) * 2020-12-14 2021-04-06 中国科学院信息工程研究所 一种基于二进制程序的漏洞检测方法及相关设备
CN114003867A (zh) * 2021-10-26 2022-02-01 成都睿码科技有限责任公司 一种代码混淆的校验方法、电子设备和存储介质
CN113821804B (zh) * 2021-11-24 2022-03-15 浙江君同智能科技有限责任公司 一种面向第三方组件及其安全风险的跨架构自动化检测方法与系统
CN114417347A (zh) * 2021-12-14 2022-04-29 奇安盘古(上海)信息技术有限公司 应用程序的漏洞检测方法、装置、设备、存储介质和程序
CN115344866A (zh) * 2022-07-20 2022-11-15 国网黑龙江省电力有限公司 基于符号执行的跨架构二进制可执行文件漏洞检测方法及系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106295335A (zh) * 2015-06-11 2017-01-04 中国科学院信息工程研究所 一种面向嵌入式设备的固件漏洞检测方法及系统
CN114462046A (zh) * 2022-01-07 2022-05-10 济南超级计算技术研究院 一种基于反编译的智能IoT设备固件安全检测方法及系统

Also Published As

Publication number Publication date
CN116049835A (zh) 2023-05-02

Similar Documents

Publication Publication Date Title
CN116049835B (zh) 汽车固件的安全漏洞检测方法、设备和存储介质
US8943423B2 (en) User interface indicators for changed user interface elements
CN108427731B (zh) 页面代码的处理方法、装置、终端设备及介质
CN108614707A (zh) 静态代码检查方法、装置、存储介质和计算机设备
CN107526625B (zh) 一种基于字节码检查的Java智能合约安全检测方法
US20170315903A1 (en) Systems and methods for analyzing violations of coding rules
US20070083933A1 (en) Detection of security vulnerabilities in computer programs
KR101694783B1 (ko) 소스 코드의 오류 검출에 있어서 경보 유형 분류 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체
CN111124479B (zh) 配置文件的解析方法、系统及电子设备
CN113497809B (zh) 基于控制流和数据流分析的mips架构漏洞挖掘方法
CN105653949B (zh) 一种恶意程序检测方法及装置
WO2021223215A1 (en) Automated decision platform
CN110851351A (zh) 部署环境测试方法、装置、计算机设备及存储介质
CN112181804A (zh) 一种参数校验方法、设备以及存储介质
CN109446753A (zh) 检测盗版应用程序的方法、装置、计算机设备及存储介质
CN114968807A (zh) 代码检测方法、装置、电子设备及可读存储介质
CN111813670A (zh) 一种非侵入式mc/dc覆盖率统计分析方法
CN111930364B (zh) 通过动态配置规则装置实现流程节点按条件流转的方法
CN112596868A (zh) 模型训练方法及装置
CN110286912B (zh) 代码检测方法、装置及电子设备
CN112948400A (zh) 一种数据库管理方法、数据库管理装置及终端设备
CN115659340B (zh) 一种仿冒小程序识别方法、装置、存储介质及电子设备
CN117234517A (zh) 接口参数校验方法、装置、设备及存储介质
CN113971284A (zh) 基于JavaScript的恶意网页检测方法、设备及计算机可读存储介质
CN110765003B (zh) 代码检测方法、装置以及设备、存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant