CN116868193A - 固件组件标识和漏洞评估 - Google Patents

固件组件标识和漏洞评估 Download PDF

Info

Publication number
CN116868193A
CN116868193A CN202180091692.3A CN202180091692A CN116868193A CN 116868193 A CN116868193 A CN 116868193A CN 202180091692 A CN202180091692 A CN 202180091692A CN 116868193 A CN116868193 A CN 116868193A
Authority
CN
China
Prior art keywords
code
firmware
source
neutralization
store
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.)
Pending
Application number
CN202180091692.3A
Other languages
English (en)
Inventor
G·雷格夫
O·佩雷斯
T·阿里尔
A·Y·布雷弗曼
M·肖尔
Y·希特里特
N·弗鲁莫维奇
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.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
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 Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN116868193A publication Critical patent/CN116868193A/zh
Pending legal-status Critical Current

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
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • 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/572Secure firmware programming, e.g. of basic input output system [BIOS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Stored Programmes (AREA)

Abstract

描述了用于标识设备固件组件的来源的方法、系统、装置和计算机可读存储介质。固件反汇编器被配置为反汇编从设备(诸如便携式电子设备)获得的固件代码,以生成汇编代码。反编译器被配置为反编译汇编代码以基于设备固件生成源代码。代码中性化器从源代码生成第一中性化代码。固件标识器将中性化代码的至少一部分与代码存储库相比较以标识固件代码的来源。漏洞确定器至少基于所标识的固件代码的来源,来确定固件代码是否包含漏洞,诸如可能被利用的潜在安全漏洞。

Description

固件组件标识和漏洞评估
背景技术
计算设备通常根据安装在其上的软件操作。一类这样的软件是设备固件,其一般包括存储在设备的存储器中的一组指令,用于对设备的硬件组件进行低级别控制。在许多情况下,设备供应商在创建安装在设备上的固件时,从开源软件(OSS)源获得软件组件,诸如软件库。所安装的固件可以基于设备的特定计算架构,并且还可以基于设备的特定硬件和/或操作选择性地被修改。以这种方式,开源组件可以被用于跨多种设备的许多目的。
然而,与许多类型的软件一样,设备固件中使用的开源软件组件(例如,库)可能包括漏洞,诸如攻击者可能试图利用的安全漏洞。例如,耦合到企业网络的便携式电子设备上可能已经安装了固件,该固件包括开源软件组件,该组件可能对该设备和耦合在企业网络上的其他设备构成直接威胁。而安装在此类设备上的设备固件中使用的特定组件可以是最初配置该设备的安装者(例如,供应商)已知的,对于固件已经被安装的这些类型的设备的购买者来说,这些信息通常是未知的。在这些情况下,虽然设备供应商可以提供固件更新,但这种更新很少被提供,导致固件在包含几个开源组件的设备上使用,其中每一个开源组件都可能潜在地变得过时和/或包含漏洞,从而潜在地导致跨大型网络的未解决的安全漏洞。
发明内容
提供本发明内容是为了以简化的形式介绍概念的选择,这些概念的选择将在以下具体实施方式中进一步描述。本发明内容不旨在标识所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护主题的范围。
描述了用于标识设备固件组件的来源的方法、系统、装置和计算机可读存储介质。在一个示例中,固件反汇编器被配置为反汇编从设备(诸如便携式电子设备)获得的固件代码,以生成汇编代码。反编译器被配置为反编译汇编代码以基于设备固件生成源代码。代码中性化器从源代码生成第一中性化代码。固件标识器将中性化代码中的至少部分中性化代码与代码库相比较以标识固件代码的来源。漏洞确定器至少基于所标识的固件代码的来源,确定固件代码是否包含漏洞,诸如可能被利用的潜在安全漏洞。
以下参照附图详细描述实施例的另外的特征和优点,以及各种实施例的结构和操作。应注意,该方法和系统不限于本文所述的特定实施例。本文仅出于说明目的而呈现这样的实施例。基于本文所包含的教导,附加实施例对于相关领域的技术人员将是显而易见的。
附图说明
结合于此并构成说明书一部分的附图示出了本申请的实施例,并且与说明书一起进一步用于解释实施例的原理,并使相关领域的技术人员能够制作和使用实施例。
图1示出了根据示例实施例的用于标识设备固件的固件标识系统的框图。
图2示出了根据示例实施例的用于标识设备固件的方法的流程图。
图3示出了根据示例实施例的用于标识实现本文所描述技术的设备固件的固件标识系统的框图。
图4示出了根据示例实施例的用于将源代码的符号映射到中性化符号的方法的流程图。
图5示出了根据示例实施例的用于将代码的标记与存储库中的标记相比较的方法的流程图。
图6示出了根据示例实施例的用于生成标识是准确的置信度分数的方法的流程图。
图7示出了根据示例实施例的用于学习固件代码的方法的流程图。
图8A和图8B示出了根据示例实施例的反编译源代码的说明性示例。
图9A和图9B示出了根据示例实施例的从源代码生成中性化代码的说明性示例。
图10示出了根据示例实施例的中性化代码的标记的示例性比较。
图11是可用于实现各种实施例的示例基于处理器的计算机系统的框图。
图12是可以用于实现各种实施例的示例移动设备的框图。
当结合附图进行时,本文所描述的实施例的特征和优点将从下文所述的详细描述中变得更加明显,在附图中,相同的附图标记始终标识对应的元素。在附图中,相似的附图标记通常表示相同的、功能相似的和/或结构相似的元素。元素首次出现的附图由对应附图标记中最左边的数字表示。
具体实施方式
I.介绍
以下详细描述公开了许多示例性实施例。本专利申请的范围不限于所公开的实施例,还包括所公开的各实施例的组合以及对所公开的各个实施例的修改。
说明书中对“一个实施例”、“实施例”和“示例实施例”等的引用表明,所描述的实施例可以包括特定的特征、结构或特性,但每个实施例不一定包括特定的特征、结构或特性。此外,这样的短语不一定指的是相同的实施例。此外,当结合实施例描述特定的特征、结构或特性时,无论是否明确描述,认为结合其他实施例实现这种特征、结构、或特性在本领域技术人员的知识范围内。
在讨论中,除非另有说明,否则诸如“实质上”和“关于”的形容词修改了本公开实施例的一个或多个特征的条件或关系特性,被理解为指该条件或特性被定义在实施例的操作所能接受的公差范围内,该实施例的目的是用于应用。
以下描述了许多示例性实施例。需要注意的是,本文中提供的任何章节/小节标题都不是限制性的。实施例在整个文档中被描述,并且任何类型的实施例可以被包括在任何章节/小节下。此外,在任何章节/小节中公开的实施例可以以任何方式与在相同章节/小节和/或不同章节/小节描述的任何其他实施例相结合。
II.示例实施例
计算设备通常根据安装在其上的软件操作。一类这样的软件是设备固件,其通常包括存储在设备的存储器中的一组指令,用于对设备的硬件组件进行低级别控制。在许多情况下,设备供应商在创建安装在设备上的固件时,从开源软件(OSS)源获得软件组件,诸例如软件库。所安装的固件可以基于设备的特定计算架构,并且还可以基于设备的特定硬件和/或操作选择性地修改。以这种方式,开源组件可以用于跨多种设备的许多目的。
然而,与许多类型的软件一样,设备固件中使用的开源软件组件(例如,库)可能包括漏洞,诸如攻击者可能试图利用的安全漏洞。例如,耦合到企业网络的便携式电子设备上可能已经安装了固件,该固件包括开源软件组件,该组件可能对该设备和耦合在企业网络上的其他设备构成直接威胁。而安装在此类设备上的设备固件中使用的特定组件可以是最初配置该设备的安装者(例如,供应商)已知的,对于固件已经被安装的这些类型的设备的购买者来说,这些信息通常是未知的。在这些情况下,虽然设备供应商可以提供固件更新,但这种更新很少被提供,导致固件在包含几个开源组件的设备上使用,其中每一个开源组件都可能潜在地变得过时和/或包含漏洞,从而潜在地导致跨大型网络的未解决的安全漏洞。
某些技术试图标识设备的固件中的开源组件,并基于在二进制固件代码(例如,执行固件的机器代码)中定位唯一的二进制签名来标识固件本身(例如,库名称和版本)。然而,这样的技术在应用中是有限的,因为针对一个计算架构设计的软件可以具有与针对不同计算架构所设计的相同软件不同类型的汇编语言,导致完全不同的二进制代码。这种差异可以使标识二进制代码中可被用于标识固件内容的唯一二进制签名变得困难。此外,这些技术通常不适用于将库静态链接到软件中,诸如在编译过程中组合不同的一组代码生成二进制时。最后,一些开源库可能根本没有任何可用于标识库的唯一二进制签名。此外,即使相同的固件被用于相同的计算架构,由于某些编译器配置,诸如编译过程中使用的优化,生成的二进制可能仍然不同。
本文描述的实施例旨在标识设备固件组件的来源。在示例系统中,固件反汇编器被配置为反汇编从设备(诸如便携式电子设备)获得的固件代码,以生成汇编代码。反编译器被配置为反编译汇编代码,以基于设备固件生成源代码。代码中性化器从源代码生成第一中性化代码。固件标识器将中性化代码的至少一部分与代码存储库相比较,以标识固件代码中的组件。漏洞确定器至少基于在固件代码中所标识的组件,确定固件代码是否包含漏洞,诸如可能被利用的潜在安全漏洞。
本文所述的实施例可以有利地使具有安全漏洞的软件易于被标识,从而能够解决这些漏洞以防止攻击者利用。通过这种方式,安装此类软件的设备以及网络和/或与其耦合的资源(例如,企业网络的资源)的安全性得到了提高。例如,本文所述的技术确保标识固件或其他软件中使用的可能过时或包含安全缺陷的代码,即使设备消费者不知道此类代码的来源。一旦根据本文描述的技术标识固件的来源,就可以确定固件是否包含任何已知的安全缺陷,这些缺陷可能会使设备或耦合到网络的其他设备面临风险,从而允许采取预防措施来减轻潜在的攻击(例如,根据需要更新固件,禁用或使受影响的设备离线等)。通过标识固件的来源来改进对此类安全缺陷的检测和补救,可以减少影响计算设备和/或网络的恶意活动,从而改善网络和与其耦合的计算设备两者的功能。
举例说明这些优势的示例涉及物联网(IoT)设备,物联网设备可以包括用于各种目的的网络耦合设备(例如,智能传感器、电视、相机、IP语音设备等)。通常,此类IoT设备可以安装有由设备制造商或供应商安装的固件,其中固件包括来自开源库等的代码。虽然制造商或供应商可能知道软件组件的起源,但在某些情况下,软件更新可能仍然很少,甚至根本不存在,导致物联网设备的任何潜在安全缺陷得不到解决,从而使设备和耦合到同一网络的其他设备面临攻击的风险。根据本文描述的技术,例如,可以使用软件的二进制代码很容易地标识软件组件的来源。一旦被标识,就可以确定安装在IoT设备上的固件中包括的任何组件是否存在任何已知的安全问题,这些问题可以通过适当的方式解决(例如,将固件更新到已解决漏洞的较新版本)。通过标识和修复IoT设备中的此类缺陷,这些设备的安全性可以得到提高。此外,在某些情况下,本文所述的技术可以被用于通过在部署前检查IoT(或类似)设备的固件来降低部署可能包含漏洞的设备的风险。因此,即使在计算设备上安装了不频繁更新的软件(例如,固件),因此可能由于安全问题而面临风险的情况下,也可以根据所公开的技术来检测和解决软件组件的来源和任何相关联的漏洞。本文公开了许多这样的技术。
因此,本文针对用于标识固件组件的来源的技术描述了示例实施例。例如,图1示出了根据示例实施例的用于标识设备固件组件的来源的系统100的框图。如图1所示,系统100包括便携式设备102、计算设备104、网络108、服务器110、代码存储库114和漏洞数据库116。便携式设备102包括固件代码118。计算设备104包括代码分析器用户界面(UI)106。服务器110包括代码相似性引擎112。如下文更详细描述的,代码相似性引擎112可以获得固件代码118,并且至少基于与存储在代码存储库114中的代码的一个或多个比较来标识固件代码中的组件的来源。代码相似性引擎112还可以至少基于以下更详细描述的访问漏洞数据库116来标识所标识的固件组件是否包含安全漏洞。下面参考图11和图12描述可以包含便携式设备102、计算设备104和服务器110(或其中的任何子组件)功能的示例计算设备。注意,系统100可以包括任何数目的设备,包括图1中所示的设备,以及可选的一个或多个未明确示出的其他设备或组件。系统100进一步描述如下。
网络108可以包括一项或多项:局域网(LAN)、广域网(WAN)、个人局域网(PAN)、通信网络(诸如互联网)的组合、和/或虚拟网络中。在示例实现中,便携式设备102、计算设备104和服务器110可经由网络108相互通信耦合。在实现中,便携式设备102、计算设备104和服务器110中的任何一个或多个可以经由一个或多个应用编程接口(API)和/或根据其他接口和/或技术通信。便携式设备102、计算设备104、和服务器110可以各自包括至少一个能够相互通信的网络接口。这种有线或无线网络接口的示例包括IEEE 802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙TM接口、近场通信(NFC)接口等。本文其它地方描述了网络接口的另外的示例。
便携式设备102可以包括其上安装或存储有软件的任何类型的设备。此类软件可以包括任何类型的软件,用于使用一个以上的处理组件执行,诸如固件代码118。固件代码118可以包括可在便携式设备102上执行的任何二进制代码或机器代码。固件代码18可以通过编译更高级别语言(例如编程语言)生成。在示例中,固件代码118包括初始化便携式设备102的一个或多个硬件组件的低级别指令,低级别指令定义一个或多个此类硬件组件的功能,和/或使便携式设备102能够按预期运行。固件代码118包括任何数目的组件(例如,软件组件)。在示例实施例中,此类软件组件包括一个或多个开源库,诸如从第三方源获得的库。
固件代码118可以被存储在便携式设备102的任何合适的存储器中,诸如只读存储器(ROM)、闪存、可编程存储器(例如,可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)等),或者任何其他类型的存储器或存储设备。应当理解,尽管本文针对包括固件代码118的便携式设备描述了示例实施例,但是安装在便携式设备102上的软件可以包括任何其他类型的软件,包括但不限于其他固件、应用、操作系统、软件包等。因此,应当理解,本文所描述的技术还可以用于分析可以安装或存储在便携式设备102上的任何类型的软件。
便携式设备102可以是任何类型的固定或移动计算设备,包括移动计算机或移动计算设备(例如,设备、个人数字助理(PDA)、膝上型计算机、笔记型计算机、诸如Apple iPadTM的平板计算机、上网本等)、移动电话(例如,蜂窝电话、智能电话(诸如Apple iPhone)、实现/>AndroidTM操作系统的电话、Microsoft电话等)、可穿戴计算设备(例如,包括智能眼镜(诸如/>GlassTM、Oculus VR的Oculus/>LLC等)的头戴式设备),或其他类型的固定或移动设备。还应注意的是,便携式设备102可以包括任何固定或移动的其他设备,其可以包括安装在其中的计算组件,诸如媒体播放器、电视、电器等。
在示例实现中,便携式设备102可以由一个或多个电池供电,包括但不限于碱性电池、锂离子(Li-ion)电池、锂硬币电池、碳锌电池、镍镉电池(Ni-Cad)、镍金属氢化物(Ni-MH)电池、铅酸电池、或本领域技术人员将理解的其他类型的电池。电池可以在便携式设备102的外壳内部或外部,并且可以是一次性的或可再充电的。便携式设备102的电池可以是任何尺寸或形状(例如,硬币、AAA、AA、C、D、汽车等)。
在实现中,便携式设备102可以包括便携式设备,诸如IoT设备或人工智能(AIoT)设备。此类设备可以包括一个或多个组件,诸如传感器,用于捕获存储在便携式设备102上和/或提供给另一计算设备的数据。在一些实现中,便携式设备102可以包括一个或多个处理组件,包含但不限于中央处理单元(CPU)、微控制器或微控制器单元(MCU)、微处理器或微处理单元(MPU)、模块上系统或主板上系统(SoM)、片上系统(SoC)、多芯片模块(MCM)或其他类型的处理器。在一些示例中,这样的处理组件中的一个或多个处理组件可以包括硬件加速器,诸如张量处理单元(TPU)、图形处理单元(GPU)、现场可编程门阵列(FPGA)、专用集成电路(ASIC)或可以执行某些类型的处理的其他专业硬件处理器。便携式设备102还可以包含用于存储信息的一个或多个存储设备,信息包括但不限于固件代码118、其他软件、从一个或多个传感器获得的数据或任何其他信息。在某些情况下,便携式设备102的硬件加速器可以执行与训练和/或执行机器学习(ML)、人工智能(AI)模型、深度神经网络(DNN)或其他类型的分类或预测模型有关的处理操作。
计算设备104包括一个或多个用户(例如,个人用户、家庭用户、企业用户、政府用户等)的任何一个或多个计算设备,这些计算设备可以包括以下的一项或多项:应用、操作系统、虚拟机、存储设备等,这些计算设备可以用于访问、管理或以其他方式与便携式设备102通信。计算设备104可以是任何类型的固定或移动计算设备,包含移动计算机或移动计算设备(例如,设备、个人数字助理(PDA)、膝上型计算机、笔记型计算机、诸如Apple iPadTM的平板计算机、上网本等)、移动电话、可穿戴计算设备或其他类型的移动设备、或诸如台式计算机或PC(个人计算机)的固定计算设备、或服务器。计算设备104不限于物理机器,而是可以包括其他类型的机器或节点,诸如虚拟机。计算设备104可以通过API和/或其他机制与图1中所示的其他组件对接。
计算设备104可被配置为配置便携式设备102,包含安装在其上的软件(诸如固件代码118),以使便携式设备102能够按预期操作。在一些示例中,计算设备104可以包括用户或管理员可以创建和/或从远程存储库(诸如开源数据库)下载固件代码的接口,用于作为固件代码118安装在便携式设备102上。固件代码118可以由计算设备104以各种方式提供给便携式设备102,包括但不限于经由网络108或经由一个或多个其他耦合物(例如,USB电缆、无线连接等)。在一些示例实施例中,计算设备104可以经由网络108或通过任何其他合适的耦合物从便携式设备102下载固件代码118和/或更新固件代码118。
计算设备104可以包括用于交互(例如,经由导航到web页面的浏览器、经由存储在其上的应用等)的任何合适的用户界面,其示例将在下面参考图11和图12被描述。在一些示例中,计算设备104可包括代码分析器UI 106,可以由代码相似性引擎112经由该代码分析器UI 106分析或促使分析固件代码118。例如,代码分析器UI 106可以提供接口,经由该接口可以从计算设备104的存储设备和/或便携式设备118获得固件代码118,并将其提供给代码相似性引擎112用于标识(例如,标识其组件的来源和/或任何相关联的漏洞)。在示例中,代码分析器UI 106包括一个或多个UI元素(例如,显示窗口、交互式元素、菜单、文本输入字段等),固件代码118可以经由这些元素被选择、被上传和/或被分析。代码分析器UI 106也可以从代码相似性引擎112中获得固件标识的结果,诸如固件代码118的组件的来源的标识、其版本和/或任何相关联的安全漏洞。如下面更详细描述的,代码分析器UI 106也可以被配置为经由一个或多个UI元素呈现由代码相似性引擎112生成的任何其他信息。
服务器110可以包括任意数目的设备,诸如网络可访问的服务器(例如,云计算服务器网络),其可以接收用于标识的代码(例如,固件代码118)并确定这样的代码是否包含任何安全漏洞。例如,服务器110可以包括服务器群组或服务器集合(例如,计算设备),每个服务器由诸如Internet的网络可访问(例如,在“基于云”的实施例中)。在示例实施例中,服务器110是位于便携式设备102和/或计算设备104的远程(例如,位于不同的设施中)的计算设备,并经由网络108与其通信耦合。服务器110可以包括任何数目的计算设备,并且可以包括任何类型和数目的其他资源,包括有助于与服务器通信以及服务器之间通信的资源、服务器的存储等(例如,网络交换机、存储设备、网络等)。在实施例中,服务器110的设备可以位于同一位置(例如,与诸如备用电源、冗余数据通信、环境控制等相关联组件一起容纳在一个或多个附近的建筑物中)以形成数据中心,或者可以以其他方式被布置。相应地,服务器110可以是数据中心的分布式集合中的数据中心。
代码相似性引擎112可以获得代码(例如,固件代码118)、分析代码以标识其来源、标识任何相关联的漏洞、并向代码分析器UI 106提供与所标识的来源和相关联的漏洞相关的信息。如下面更详细描述的,代码相似性引擎112可以以各种方式操作。在一些示例中,代码相似性引擎112反汇编固件代码118以生成汇编代码、反编译汇编代码以生成源代码、并从源代码生成中性化代码。中性化代码可以包括中性化(例如,抽象或去除)依赖于架构的代码部分的代码,使得中性化代码可以去除这种依赖于架构的差异。代码相似性引擎112可以将中性化代码与存储在代码存储库114(诸如可以包含在固件代码118中的开源库或其他软件组件)中的代码相比较,以标识固件代码118的来源。在一些实现中,代码相似性引擎112还可以基于中性化代码的至少一部分与代码存储库114的比较来标识固件代码118的版本(例如开源库的版本)。代码相似性引擎112可以访问漏洞数据库116,以至少基于所标识的固件代码118的来源来确定固件代码118是否包含漏洞。以这种方式,代码相似性引擎112可以确定便携式设备102的固件代码118是否包含可能需要补救的潜在安全缺陷,以减轻不希望的利用。下面将更详细地描述关于操作代码相似性引擎112的另外细节。
代码存储库114包括存储与一个或多个已知代码相关联的信息的存储库(例如,数据存储、数据库、表或任何其他文件结构或其组合)。例如,代码存储库114可以包括从各种代码库(例如,开源库)生成的中性化代码的存储库,连同每个代码库和/或相关联的代码库版本的标识。代码存储库114可以以各种方式生成,包括但不限于通过代码相似性引擎112传递已知的代码样本以存储在代码存储库114中。
漏洞数据库116包括标识与多个已知代码或代码库中的每一个代码或代码库相关联的一个或多个实际或潜在安全漏洞的数据库。例如,漏洞数据库116可以指出已知代码或代码库的每一项是否存在安全漏洞、安全漏洞的级别(例如,低风险、中风险、高风险、关键风险等)、安全漏洞的类型、是否存在解决漏洞的更新代码或代码库,以及与代码、代码库或相关联的漏洞相关联的任何其他信息。如本文更多部分所描述,由代码相似性引擎112从漏洞数据库116获得的信息可以被提供给代码分析器UI 106,其可以使得用户或管理员能够更新固件代码118以解决便携式设备102的所标识的漏洞。相应地,通过标识固件代码的来源(例如,标识其中使用的开源库),即使创建固件的供应商或开发者尚未标识出此类漏洞,也可以很容易地在固件中检测到已知漏洞。以这种方式,可以容易地分析安装在便携式设备102(或大型网络上的多个这样的设备)上的固件的漏洞,并且可以确定这样的设备在网络内使用是否安全。
应注意并理解,实现不限于图1中所示的说明性布置。例如,便携式设备102、计算设备104、服务器110、代码存储库114和漏洞数据库116不需要彼此分离或位于彼此远离的位置。在一些示例中,便携式设备102、计算设备104、服务器110、代码存储库114和漏洞数据库116(或其中的任何子组件)可以位于同一计算设备中或可经由同一计算设备访问。此外,系统100可以包括以任何方式耦合的任何数目的计算设备、服务器和/或便携式设备(例如,数十个、数百个、甚至数千个这样的设备)。
代码相似性引擎112可以以各种方式操作以标识设备固件。例如,代码相似性引擎112可以根据图2操作。图2示出了根据示例实施例的用于标识设备固件组件的来源的方法的流程图200。为了说明的目的,流程图200和代码相似性引擎112关于图3描述如下。
图3示出了根据示例实施例的用于标识实现本文所描述技术的设备固件组件的来源的系统300的框图。如图3所示,系统300包括代码分析器UI 106、代码相似性引擎112、代码存储库114、漏洞数据库116和固件代码118的示例实现。如图3所示,代码相似性引擎112包括代码学习器302、固件反汇编器304、反编译器306、代码中性化器308、固件标识器312和漏洞确定器318。代码中性化器308包括编译器310。固件标识器312包括标记比较器314和分数生成器316。流程图200和系统300另外被详细地描述如下。
图2的流程图200从步骤202开始。在步骤202中,固件代码被反汇编以生成汇编代码。例如,参考图3,固件反汇编器304可以被配置为获得324固件代码118并从中生成汇编代码,固件反汇编器304可以以各种方式接收固件代码118,诸如经由与代码分析器UI 106的交互。例如,代码分析器UI 106可以提供接口,用户可以经由该接口与一个或多个元素交互以选择或上传320固件代码118并将其连同标识固件代码118的来源的请求一起发送到固件反汇编器304。固件代码118可以包括安装在便携式设备102上的固件的任何部分,包括固件的一部分或整个固件。此外,固件代码118可以包含任何数目的组件(例如,软件组件,诸如开源库等)。本文所描述的技术可以用于标识固件代码118中包含的特定组件的来源或多个来源(例如,多个开源库)。换言之,由固件反汇编器304获得的固件代码118可以包括任何数目的组件,并且任何数目的相关联的来源(和/或相关联的版本)可以被标识。
如本文所述,固件反汇编器304可以被配置为反汇编固件代码118以生成汇编代码。由固件反汇编器304生成的汇编代码(也称为汇编语言)可以包括作为固件代码118的翻译的任何较低级别编程语言。在示例中,由固件反汇编器304生成的汇编代码可以包含作为固件代码的二进制代码或机器语言的翻译的文本代码(例如,一组字母数字字符、字符串等)。例如,由固件反汇编器304生成的汇编语言可以包含作为翻译固件代码118的结果而生成的人类可读编程语言。换言之,固件反汇编器304可以被配置为从固件代码118中提取从固件代码中生成的与代码中包含的指令相关的汇编语言。如相关领域的技术人员所理解的,固件反汇编器304可以利用任何合适的转换来生成汇编代码。在示例中,固件反汇编器304可以针对固件118的全部或部分生成汇编代码。例如,所生成的汇编代码可以仅针对固件代码118的一部分生成,可以针对多个不同部分生成,或者可以针对所有固件代码118生成。
注意,由固件反汇编器304生成的汇编语言可以取决于固件代码118被设计为在其上执行的CPU架构,以及被用于编译原始固件代码的编译器和/或在固件代码118的编译过程中被使用的任何编译器配置或优化。例如,针对不同的CPU架构(例如,高级RISC(精简指令集计算)机器(ARM)、无互锁流水线级的微处理器(MIPS)、X86、X64、PowerPC等)设计的相同固件或者使用不同的编译器或编译器配置可能导致由固件反汇编器304生成不同的汇编语言。
在步骤204中,汇编代码被反编译以生成源代码。例如,参考图3,反编译器306可以从固件反编译器304获得328汇编代码,并反编译所获得的汇编代码以从中生成源代码。由反编译器306生成的源代码可以包括比所获得的汇编代码更高级别的编程代码。在一些示例中,由反编译器306生成的源代码可以包括相关领域的技术人员将理解的任何合适的编程语言,诸如R、Python、Java、C、C++、C#、或任何其他合适的编程语言。
以这种方式,固件反汇编器304和反编译器306可以相应地将机器代码(即,固件代码118)转换为汇编代码,并且然后将该汇编代码转换为基于原始固件代码118的编程语言(例如,C编程语言)。如前所述,由固件反汇编器304生成的汇编代码可以取决于计算架构、编译器或编译器配置。因此,由于同一固件的汇编代码不同,反编译器306也可以针对同一固件生成不同的源代码。换言之,由于原始固件代码(例如,固件代码)如何生成以用于部署到便携式设备102可能存在差异,因此作为基于原始固件代码反编译汇编代码的结果而生成的源代码可能相应地不同,即使对于针对两个不同实现部署的相同固件也是如此。尽管可以存在这样的差异,但在反编译过程之后也可能存在某些相似之处。下面参照图8A、图8B、图9A和图9B描述由反编译器306生成的源代码的说明。
在步骤206中,从源代码生成第一中性化代码。例如,参考图3,代码中性化器308可以获得330由反编译器306生成的源代码,并由此生成中性化代码。在示例中,被中性化的可以是从源代码生成的一组字母数字字符,诸如一组字符串或签名,其中中性化代码被抽象或被中性化以去除可以特定于计算架构或编译器的某些语言。换言之,代码中性化器308可以通过去除固件的特定实现的结果的语言来生成中性化代码。
例如,代码中性化器308可以包括编译器310,编译器310被配置为将源代码编译成单独的中性化代码,其中该中性化代码抽象源代码的语言。编译器310可以将源代码的编程语言(例如,C语言)转换为以中性化方式描述(例如,捕获)源代码逻辑的语言,使得差异被抽象。中性化代码可以是一种中间语言(IL),或者在本文中可以被称为共享固件代码(SFC)。通过以这种方式生成中性化代码,编译器310因此可以生成语言,该语言去除汇编代码中因CPU架构或编译器配置不同而产生的某些差异,同时还保持固件代码118的逻辑或框架。然而,在某些情况下,在生成中性化代码后,CPU架构或编译器配置的某些人工产物可能仍然存在。如下所述,在代码比较阶段可以考虑这些人工产物。代码中性化器308的操作的另外的细节和示例也将在下面更详细地描述(例如,关于图4、图8A、图8B、图9A和图9B)。
在步骤208中,将中性化代码的至少一部分与代码存储库相比较,以标识固件代码的来源。例如,参考图3,固件标识器可以被配置为获得332由代码中性化器308生成的中性化代码,并将中性化代码的至少一部分与代码存储库114中存储的代码相比较,以标识固件代码118的来源。固件标识器312可以通过各种方式标识固件代码的来源。在一些示例中,固件标识器312可以将代码中性化器308生成的中性化代码的全部或部分与存储在代码存储库114中的代码相比较334,以标识一个或多个匹配代码。从代码存储库114中所标识的匹配代码可以是部分匹配,也可以是完全匹配(例如,完全相同)。例如,固件标识器312可以标识存储在代码存储库114中的与由代码中性化器308生成的中性化代码部分匹配的一个或多个中性化代码,或者可以标识存储在代码存储库114中的与生成的中性化代码完全相同匹配的一个或多个中性化代码。下面更详细地描述基于存储在代码存储库114中的代码的比较来标识固件代码118的来源的另外细节。
基于标识存储在代码存储库114中的匹配代码,固件标识器312可以标识固件代码118的来源。在示例中,代码存储库114可以针对存储在其中的每个代码存储代码的来源。在一些另外的示例实施例中,代码存储库114也可以针对存储在其中的每个代码存储代码的版本(例如,软件版本或代码版本、版本号、版本日期等)。在一些实现中,代码存储库可以包括从各种开源代码库生成的中性化代码的存储库,连同每个代码库的来源的标识(例如,库名称、开发者、供应商、设计师等)、相关联的代码库版本、或与库相关联的任何其他信息。通过将由代码中性化器308生成的中性化代码的一个或多个部分与存储在代码存储库114中的中性化代码相比较,固件标识器312因此可以标识固件代码118中使用的一个(或多个)代码库的来源,连同固件代码中使用的这种代码库的版本。换言之,即使在固件代码118的来源和/或版本可能对客户端或客户未知的情况下(例如,由于固件代码118以可执行二进制存储在便携式设备118上),本文所描述的技术也可以使得能够标识这种代码的来源。
在步骤210中,至少基于所标识的来源来确定固件代码是否包含漏洞。例如,参考图3,漏洞确定器318可以被配置为获得336来源的标识,并至少基于所标识的固件代码118的来源来确定固件代码118是否包含漏洞。在示例中,漏洞确定器318可以通过访问338漏洞数据库116来确定固件代码118是否包含漏洞,漏洞数据库116包括针对每个代码库和/或代码库版本的漏洞(例如,常见漏洞和披露,或CVE)的数据库。在实现中,固件的来源的标识、固件的版本、和任何相关联的漏洞连同任何其他相关的信息(例如,安全性分数、或对所分析的固件在便携式设备102上使用是否安全的其他评估)可以被提供340,用于在代码分析器UI 106上呈现。
漏洞数据库116可以以各种方式被生成。例如,漏洞数据库116可以通过从外部源(例如,经由网络108)接收一个或多个代码库或其版本的已知漏洞的指示来构成,可以由管理员或开发者生成,或经由相关领域技术人员所理解的任何其他方式生成。漏洞数据库116可以针对每个代码库和/或版本存储任何类型的已知或感知的漏洞。此类漏洞的示例包含但不限于易受攻击的代码路径、默认密码、私人证书、或可能潜在地包括便携式设备102、耦合到网络108的其他资源、和/或其中存储或可访问的任何数据(例如,敏感数据)的任何其他漏洞。漏洞数据库116还可以针对其中所标识的每个漏洞,指示每个漏洞的级别(例如,低风险、中等风险、高风险、关键风险等)、漏洞的类型、是否存在解决该漏洞的所更新的代码或代码库,以及与该代码、代码存储库、或相关联的漏洞相关联的任何其他信息。虽然漏洞数据库116被示为与代码存储库114分离,但是应当理解,漏洞数据库116和代码存储库114可以是同一数据库或存储库的一部分和/或彼此本地存储。
因此,如所描述,代码相似性引擎112可以被配置为标识固件代码118中使用的代码的来源,诸如至少基于固件的二进制代码来标识代码库(例如,开源库)和开源库的相关联版本。例如,代码分析器UI 106可以使用户能够向代码相似性引擎112提供固件文件(例如,固件代码118),之后,如所描述,代码相似性引擎112可以分析该固件文件,以标识该固件的来源和/或相关联版本,以及该固件中是否存在任何漏洞。因此,即使便携式设备102可能正在运行固件的最新版本,如果这样的固件包含已知的漏洞,本文描述的技术也可以使得能够标识在固件中使用的任何开源库(及其版本)以及任何相关联的漏洞。基于这样的标识,可以基于检测到的漏洞来确定便携式设备102是否安全使用,是否可以通过更新存储在其中的固件来使其更加安全,或者是否不应该使用该设备。
如上所描述,编译器310可以将由反编译器306生成的源代码编译成中性化代码。例如,图4示出了根据示例实施例的用于将源代码的符号映射到中性化符号的方法的流程图。在实现中,流程图400的方法可以由编译器310来实现。继续参照图3来描述图4。基于以下关于流程图400和图3的系统300的讨论,其他结构和操作实现对于相关(多个)领域的技术人员将是显而易见的。
流程图400从步骤402开始。在步骤402中,将源代码中的多个符号中的每个符号映射到多个中性化符号。例如,参考图3,编译器310可以被配置为在生成中性化代码时,将由反编译器306生成的多个符号中的每个符号映射到多个中性化符号。在示例中,编译器310包括一组规则,该组规则用于将编程语言的符号(例如,字符、命令、指令、函数或源代码的其他文本)映射到另一代码(例如,SFC或中性化代码)的符号。基于这组规则,编译器310可以将源代码(包含其中所包含的所有符号)转换为中性化代码,其中中性化代码包括不同的一组符号。
在示例中,中性化代码的符号可以包括编程语言的符号的抽象版本。在一些实现中,用于中性化代码的符号集合中的可用符号的总数目可以小于用于编程语言的可用符号的总数目。在一些其他实现中,用于中性化代码的一个或多个符号的长度可以小于用于编程语言的相应符号的长度。以这种方式,编译器310可以生成包括长度比编程语言的符号短的一个或多个符号的中性化代码,从而产生总长度比源代码短的中性化代码。
如前所述,中性化代码可以以保留或保持由反编译器306生成的源代码的至少一部分逻辑的方式生成。因此,尽管基于本文所述的符号的映射在中性化代码中保留或保持了至少一部分的逻辑,与源代码相比较,编译器310可以生成中性化代码中所包含的符号的长度和/或中性化代码的总长度。作为说明性示例,源代码的所有类型的函数(例如,“CRYPTO_free”函数、“OPENSSL_cleanse”函数等)都可以被映射到单个字符符号“Z”。作为这种映射的结果,源代码的至少一部分逻辑(例如,框架)仍然可以被保持在中性化代码中,同时也可以以抽象的方式生成中性化代码,并且与源代码相比较更短。下面(例如,关于图9A和图9B)描述将源代码符号映射到中性化代码符号的附加说明性示例。
在一些实现中,标记标识符312至少基于中性化代码和代码存储库中的代码的标记来标识固件代码118的来源。例如,图5示出了根据示例实施例的用于将代码的标记与存储库中的标记相比较的方法的流程图。在实现中,流程图500的方法可以由标记比较器314来实现。继续参照图3来描述图5。基于以下关于图3的流程图500和系统300的讨论,其他结构和操作实现对于相关(多个)领域的技术人员将是显而易见的。
流程图500从步骤502开始。在步骤502中,将第一中性化代码的标记与代码存储库中的多个标记相比较,以标识固件代码的来源。例如,参考图3,标记比较器314可以被配置为将由代码编译器310生成的中性化代码的标记与存储在代码存储库114中的多个标记相比较,以标识固件代码118的来源。如本文所描述,标记包括中性化代码的任何部分,其可以是单个字符或序列字符的串。在一些实现中,标记可以包括与前面描述的符号相同的一组字符。在其他实现中,标记可以包括固定数目的字符(例如,一个字符、两个字符等),或者可以是可变的。下面参照图10更详细地描述标记的说明性示例。
如本文所描述,标记比较器314可以从中性化代码标识标记,以生成表示中性化代码的一组标记。因此,每个标记可以包括中性化代码的较小部分。在一些实现中,标记比较器314可以基于中性化代码中存在的字符子集来生成标记。例如,当将中性化代码分离成多个较小的标记时,标记比较器314可以从中性化代码选择性地去除某些字母数字字符(例如,方括号、圆括号等)。
在标识固件代码118的来源时,标记比较器314可以将生成的中性化代码的一个或多个所生成的标记与存储在代码存储库114中的多个标记相比较。例如,如上所描述,代码存储库114可以包括针对多个已知代码库中每个代码库的中性化代码。在一些实现中,代码存储库114针对多个已知代码库中每个代码库存储表示代码库中的中性化代码的一组标记。以这种方式,标记比较器314可以将基于固件代码118生成的一个或多个所生成的标记与存储在代码存储库114中的标记相比较,以标识匹配的标记或一组匹配的标记,其可以被确定为标识固件代码118的来源。
标记比较器314可以以各种方式比较标记。在一些示例中,标记比较器314可以使用文本相似性搜索将中性化代码的标记与存储在代码存储库114中的标记相比较。使用文本相似性搜索,标记比较器314可以确定代码存储库中的一个或多个标记与中性化代码的标记部分匹配还是完全匹配。标记比较器314可以在尝试标识代码数据库中的匹配代码时重复对中性化代码中存在的每个标记的这种搜索。换言之,标记比较器314可以基于比较代码的较小部分(例如,标记)的文本来搜索代码存储库114中的匹配代码。
以这种方式,即使由代码中性化器308生成的中性化代码可能与存储在代码存储库114中的一个或多个代码不完全匹配,标记比较器314仍然可以标识存储在代码存储库114中的代码,该代码包括与中性化代码的最大重叠量,诸如通过标识具有最大数目匹配标记的代码。例如,由于本文所述的差异(例如,计算架构、编译器配置等),由计算机310生成的中性化代码可能仍然包含与存储在存储库中的一个或多个代码的差异。这种差异可以包括中性化代码的微小变化(例如,一个或多个标记的字母数字字符的差异)、丢失代码(例如,丢失标记或其部分)或附加代码(例如,附加标记或其部分)。通过如所描述的将中性化代码划分为小标记,标记比较器314可以通过基于其中包含的标记的匹配来找到类似的代码来克服这种小差异。换言之,即使基于固件代码118生成的中性化代码相对于存储在存储库中的匹配代码包含某些差异,标记比较器314仍然可以基于代码存储库中标记的文本搜索来标识匹配代码。一旦定位匹配代码(例如,基于文本相似性的最相似的匹配代码),固件代码118的来源和任何相关联的漏洞可以如本文所描述被标识。
应当理解,以上图示仅是标记比较器的操作的一个图示示例,并且标记比较器314可以以其他方式标识存储在代码存储库114中的匹配代码。例如,标记比较器314可以被配置为基于匹配中性化代码的所有标记、匹配标记的最小(例如,阈值)数目或百分比、或者以由相关领域技术人员将理解的任何其他方式来标识匹配代码。此外,标记比较器314不需要标识存储在代码存储库114中的单个匹配代码,而是可以标识多个可能的匹配代码(例如,前3个最相似的匹配代码)。
在一些实现中,可以针对存储在代码存储库114中的被标识为潜在地匹配中性化代码的一组代码生成分数。例如,图6示出了根据示例实施例的用于生成标识是准确的置信度分数的方法的流程图。在实现中,流程图600的方法可以由分数生成器316来实现。继续参照图3来描述图6。基于以下关于图3的流程图600和系统300的讨论,其他结构和操作实现对于相关(多个)领域的技术人员将是显而易见的。
流程图600从步骤602开始。在步骤602中,生成置信度分数,该置信度分数包括固件代码的来源的标识是准确的置信度的测量。例如,参考图3,分数生成器316可以生成固件标识器312准确标识固件代码118的来源的置信度分数。在示例中,分数生成器316至少基于第一中性化代码(或其一部分,例如标记)与存储在代码存储库114中的代码(或标记)的比较来生成这样的置信度分数。置信度分数可以包括值、等级、百分比或者类似于所标识的固件代码118的来源是准确的置信度(例如,可能性)和/或两个代码(来自存储库的中性化代码和匹配代码)相似或相同的置信度的任何其他评级。在示例中,置信度分数可以是由代码编译器310生成的中性化代码与从代码存储库114标识的匹配代码之间的匹配标记的数目的百分比或比率。例如,如果中性化代码包括总共20个标记,并且代码存储库中的一组代码包含19个相同标记,分数生成器316可以生成置信度分数,该置信度分数指示固件代码118的来源被准确标识的可能性为95%。注意,该示例仅是示例性的,还可以实现用于生成置信度分数的其他技术。
在实现中,代码分析器UI 106可以接收置信度分数,用于与固件代码118的来源的标识一起呈现或当前呈现。例如,代码分析器UI 106可以经由一个或多个用户界面元素指示固件代码118利用特定开源库和/或其版本的95%置信度。代码分析器UI 106还可以指示与本文所描述的比较相关的任何其他信息,诸如代码的哪些部分或标记匹配或不匹配的标识,包括较低置信度分数的其他代码库的标识(例如,位于代码存储库114中的下一个最接近匹配),或者可以指示从固件代码118生成的中性化代码和/或存储在代码存储库114内的一个或多个代码之间的相似性测量的任何其他信息。
如上所述,代码存储库114可以包括已知固件代码的数据库。代码存储库可以以各种方式被生成或被构成。例如,图7示出了根据示例实施例的用于学习固件代码的方法的流程图。在实现中,流程图700的方法可以由代码学习器302来实现。继续参照图3来描述图7。基于以下关于流程图700和图3的系统300的讨论,其他结构和操作实现对于相关(多个)领域的技术人员将是显而易见的。
流程图700从步骤702开始。在步骤702中,接收已知固件代码和已知固件代码的来源。例如,参考图3,代码学习器302可以接收322已知固件代码及其来源。代码学习器302可以通过各种方式(诸如经由代码分析器UI 106)接收此类信息。作为示例,代码分析器UI106的用户可以经由一个或多个交互接口元素上传已知固件代码(例如,作为固件映像、文件等),连同固件代码来源的指示(例如,开发者、供应商等的指示)和/或固件代码的版本。可以经由代码分析器UI 106的一个或多个文本代码字段或经由任何其他输入方法输入固件代码的来源和/或固件代码的版本(例如,OpenSSL,版本1.0.1)的指示。
在另外的实现中,代码分析器UI 106可以经由一个或多个交互接口元素接收与所提供的固件代码相关联的其他信息,诸如已知固件被设计用于的计算架构、与用于生成已知固件代码的编译器配置相关联的信息、针对已知固件代码是否存在任何已知漏洞的指示、针对已知固件代码的任何软件更新的指示、将被安装已知固件代码所针对的设备(例如,相机、路由器等)的型号、类型或类别的标识、与已知固件代码相关联的供应商名称、或者可以被存储在代码存储库114中的与已知固件代码相关联的任何其他描述性信息。
在步骤704中,将从已知固件代码生成的第二中性化代码连同已知固件代码的来源的指示一起存储在代码存储库中。例如,参考图3,代码学习器302可以被配置为促使中性化代码被生成,并将中性化代码连同已知固件代码的来源的指示一起存储在代码存储库114中。在示例中,代码学习器302可以根据本文所描述的技术生成针对已知固件代码的中性化代码。例如,已知固件代码可以被提供326给固件反汇编器304,并且固件反汇编器可以反汇编已知固件代码以从中生成汇编代码。反编译器306可以反编译汇编代码以生成针对已知固件代码的源代码。代码中性化器308可以从源代码生成中性化代码,并将中性化代码(例如,SFC)提供342给代码学习器302,用于连同已知固件代码的来源的指示一起存储344在代码存储库114中。
针对每个代码或代码库,可以以类似的方式重复学习已知固件代码的过程。以这种方式,代码存储库114可以被包括针对已知固件代码(例如,代码库)的中性化代码(例如,签名)的数据库,以及它们的相关联版本。当未知固件代码(例如,固件代码118)被提供给代码相似性引擎112以标识其来源时,可以将从固件代码118(或其标记)生成的中性化代码与如本文所描述的代码存储库114中的一个或多个代码(或其标记)相比较,以找到匹配代码并标识未知固件代码的来源。
因此,根据上述技术,代码存储库114可以以相对快速的方式被自动生成和/或被构成,同时还可以减少所需的人工干预量(例如,通过消除人工分析代码或创建签名的需要)。此外,以上描述的技术可以使新的库或库版本能够以简单的方式被添加到代码存储库114中(例如,通过向代码学习器302提供库及其来源的标识)。此外,通过中性化源代码中所包含的信息以生成中性化代码,可以减少或甚至消除可能是不同计算架构和/或编译器配置的结果的代码差异,从而使得代码相似性引擎112能够标识未知代码的来源,即使代码存储库114被与不同计算架构或编译器配置相关联的一个或多个代码或库构成。换言之,即使未知固件代码118与第一计算架构(例如,X86)相关联,由于反编译源代码中存在的计算架构元素的失效,固件标识器312仍然可以通过定位与不同计算架构相关联的适当的匹配代码来标识固件代码的来源。
现在将描述上述技术的非限制性说明。例如,图8A和图8B示出了根据示例实施例的反编译源代码的说明性示例。特别地,图8A示出了由反编译器306生成的第一反编译源代码800,并且图8B示出了也由反编译器306生成的第二反编译源代码810。在该说明性示例中,第一反编译源代码800可以从未知固件代码(例如,其来源未知的固件代码118)被生成。第二反编译源代码810可以包括已知代码库的反编译源代码,其中中性化代码(稍后描述)被存储在代码存储库114中。
在该示例中,第一反编译源代码800和第二反编译源代码810可以包括在不同计算架构上实现的相同开源库。例如,第一反编译源代码800可以与在第一计算架构(例如,PowerPC)上实现的开源库相关联,而第二反编译源代码810可以与在第二计算架构上实现的相同的开源库(例如,X64)相关联。如图8A和图8B所示,反编译源代码的两个不同版本中可能存在某些差异802、差异812。图8A和8B中概述的这种差异可以是针对相同开源库的不同实现(例如,计算架构)的结果。
图9A和图9B示出了根据示例实施例的从源代码生成中性化代码的说明性示例。例如,图9A示出了第一反编译源代码902到第一中性化代码904的第一转换900,并且图9B示出了第二反编译源代码912到第二中性化代码914的第二转换910。在该示例中,图9A的第一反编译源代码902对应于图8A中所示的第一反编译源代码(例如,基于未知代码存储库的代码),并且第二反编译源代码912对应于在图8B中所示的第二反编译源代码810(例如,基于已知固件库的代码,其中性化版本被存储在代码存储库114中)。
第一反编译源代码902到第一中性化代码904的第一转换900以及第二反编译源代码912到第二中性化代码914的第二转换910可以由本文所描述的编译器310执行。例如,如图9A所示,如上所描述,第一反编译源代码902的符号可以被映射到第一中性化代码904的符号,诸如通过将源代码中的每个函数(例如,CRYPTO_free、OPENSSL_cleanse)映射到第一中性化代码904的单个字母(“Z”)符号。可以针对第一反编译源代码902的每个符号重复这样的映射,以生成第一中性化代码904。
第二变换910可以以与上面关于第一变换900所描述的类似的方式来执行。第二中性化代码914可以作为已知代码(例如,已知代码存储库)连同其来源、版本和/或本文所描述的任何其他信息的指示一起被存储在代码存储库114中。
图10示出了根据示例实施例的中性化代码的标记的示例性比较1000。在实现中,图10中所示的比较1000可以由本文所描述的标记比较器314执行。如图10所示,比较1000包括第一组标记1002和第二组标记1004之间的比较。第一组标记1002可以对应于图9A的第一中性化代码904,并且第二组标记1004可以对应于图9B的第二中性化代码914。因此,在该示例中,第一组标记1002可以与来源未知的代码或库相关联,而第二组标记1004可以包括与存储在其来源已知的代码存储库114中的代码或库相关联的一组标记。
如图10所示,第一组标记1002和第二组标记1004之间的标记的比较可以由标记比较器314逐标记地执行。例如,第一组标记1002中的第一所示标记可以被标识为与第二组标记1004中的第一所示标记匹配(例如,完全相同)。这样的比较可以针对第一组标记1002和第二组标记1004中的每个标记被执行,以标识匹配标记中的每个匹配标记。基于所匹配的标记,标记比较器314可以确定第一组标记1002(对应于未知代码库)与第二组标记1004相似或完全相同,并且因此将第一组标记1002的来源标识为包括所存储的第二组标记1004的来源(例如,存储在存储库中)。以这种方式,标记比较器314可以确定未知代码的来源,即使在未知代码或库与存储在存储库中的代码或库不同的计算架构相关联的情况下也是如此。
虽然在一些实现中已经描述了可以根据本文所描述的技术来标识单个开源库及其相关联的版本,但可以设想多个库可以被标识。例如,在一些示例中,多个固件文件可以经由代码分析器UI 106上传(例如,作为批处理)用于由代码相似性引擎112分析。在其他示例中,固件代码118可以包括固件图像(例如,压缩文件),该图像包括其中包含的多个不同文件(例如,可执行部分),其中文件(或甚至单个文件)使用几个不同的开源库。在这样的示例中,代码相似性引擎112可以被配置为解压缩固件图像以提取每个文件,并且每个文件可以根据本文所公开的技术被分析以标识其中使用的任何开源库的来源。因此,代码相似性引擎112可以被配置为标识包含在包括多个静态编译库的固件文件内的组件的来源。
在分析固件图像中所包含的每个文件时,代码相似性引擎112可以提供分析的结果(包括但不限于固件图像中所包含的文件中所标识的任何库的来源以及这些库的任何相关联的版本),用于在代码分析器UI 106上呈现。在一些实现中,代码分析器UI 106还可以显示与代码分析相关的附加信息或元数据,包含但不限于,包含来源被标识的库的每个文件的标识、与每个所标识的来源相关联的置信度分数、处理时间、分析的开始时间或结束时间、固件图像中所标识的文件的数目、在固件图像中所发现的库的数目、安全漏洞的标识和/或数目、基于风险级别对每个漏洞的分类和/或与分析相关的任何其他信息。基于提供给代码分析器UI 106的信息,耦合到企业网络的包含漏洞的设备(例如,便携式设备102)可以容易地被标识,并且可以标识这些设备对网络构成的风险,使得能够及时地处理和/或解决这些漏洞。
还应注意并理解,虽然已经描述了用于检测固件代码的来源的示例实施例,但代码相似性引擎也可以以类似的方式被实现,以检测其他类型的软件,诸如应用或其他可执行程序。换言之,本文所描述的技术一般可以应用于软件,而不限于标识固件代码的来源。
III.示例计算机系统实现
便携式设备102、计算设备104、代码分析器UI 106、服务器110、代码相似性引擎112、代码存储库114、漏洞数据库116、固件代码118、代码学习器302、固件反汇编器304、反编译器306、代码中性化器308、编译器310、固件标识器312、标记比较器314、分数生成器316、漏洞确定器318、流程图200、流程图400,流程图500、流程图600和/或流程图700可以用硬件或与软件和/或固件中的一个或两个组合的硬件来实现。例如,便携式设备102、计算设备104、代码分析器UI 106、服务器110、代码相似性引擎112、代码存储库114、漏洞数据库116、固件代码118、代码学习器302、固件反汇编器304、反编译器306、代码中性化器308、编译器310、固件标识器312、标记比较器314、分数生成器316、漏洞确定器318、流程图200、流程图400、流程图500、流程图600和/或流程图700可以被实现为计算机程序代码/指令,该计算机程序代码/指令被配置为在一个或多个处理器中被执行并被存储在计算机可读存储介质中。
备选地,便携式设备102、计算设备104、代码分析器UI 106、服务器110、代码相似性引擎112、代码存储库114、漏洞数据库116、固件代码118、代码学习器302、固件反汇编器304、反编译器306、代码中性化器308、编译器310、固件标识器312、标记比较器314、分数生成器316、漏洞确定器318、流程图200、流程图400、流程图500、流程图600和/或流程图700可以被实现为硬件逻辑/电子电路。
例如,在实施例中,便携式设备102、计算设备104、代码分析器UI 106、服务器110、代码相似性引擎112、代码存储库114、漏洞数据库116、固件代码118、代码学习器302、固件反汇编器304、反编译器306、代码中性化器308、编译器310、固件标识器312、标记比较器314、分数生成器316、漏洞确定器318、流程图200、流程图400、流程图500、流程图600和/或流程图700中的一个或多个可以以任何组合一起在片上系统(SoC)中实现。SoC可以包括集成电路芯片,该集成电路芯片包括处理器(例如,中央处理单元(CPU)、微控制器、微处理器、数字信号处理器(DSP)等)中的一个或多个、存储器、一个或多个通信接口和/或其他电路,并且可以可选地执行接收到的程序代码和/或包括嵌入式固件以执行功能。
图11描绘了计算设备1100的示例性实现,其中实施例可以被实现。例如,便携式设备102、计算设备104、代码分析器UI 106、服务器110、代码相似性引擎112、代码存储库114、漏洞数据库116、固件代码118、代码学习器302、固件反汇编器304、反编译器306、代码中性化器308、编译器310、固件标识器312、标记比较器314、分数生成器316、漏洞确定器318、流程图200、流程图400、流程图500、流程图600和/或流程图700(和/或其中描述的流程图200、流程图400、流程图500、流程图600和流程图700中的任何步骤)可以在类似于固定或移动计算机实施例中的计算设备1100的一个或多个计算设备中实现,其包含计算设备1100的一个或多个特征和/或备选特征。本文提供的对计算设备1100的描述是为了说明的目的,而不是为了限制。实施例可以在如相关(多个)领域的技术人员所知的其他类型的计算机系统中实现。
如图11所示,计算设备1100包含被称为处理器电路1102的一个或多个处理器、硬件加速器1103、系统存储器1104,以及将包含系统存储器1104的各种系统组件耦合到处理器电路1102和硬件加速器1103的总线1106。处理器电路1102和/或硬件加速器1103是电子电路和/或光学电路,在一个或多个物理硬件电子电路设备元素和/或集成电路设备(半导体材料芯片或管芯)中被实现为中央处理单元(CPU)、微控制器、微处理器、和/或其他物理硬件处理器电路。处理器电路1102可以执行存储在计算机可读介质中的程序代码,诸如操作系统1130的程序代码、应用程序1132、其他程序1134等。总线1106代表几种类型的总线结构中的一种或多种,包含存储器总线或存储器控制器、外围总线、加速图形端口、以及使用各种总线架构中的任何一种的处理器或本地总线。系统存储器1104包含只读存储器(ROM)1108和随机存取存储器(RAM)1110。基本输入/输出系统1112(BIOS)存储在ROM 1108中。
计算设备1100还具有以下驱动器中的一个或多个:用于从硬盘读取和向硬盘写入的硬盘驱动器1114、用于从可移动磁盘1118读取或向可移动磁盘写入的磁盘驱动器1116、以及用于从诸如CD ROM、DVD ROM或其他光学介质的可移动光盘1122读取或向其写入的光盘驱动器1120。硬盘驱动器1114、磁盘驱动器1116和光盘驱动器1120分别通过硬盘驱动器接口1124、磁盘驱动器接口1126和光盘驱动器接口1128连接到总线1106。驱动器及其相关联的计算机可读介质为计算机提供计算机可读指令、数据结构、程序模块和其他数据的非易失性存储。虽然描述了硬盘、可移动磁盘和可移动光盘,但也可以使用其他类型的基于硬件的计算机可读存储介质来存储数据,诸如闪存卡、数字视频盘、RAM、ROM和其他硬件存储介质。
许多程序模块可以存储在硬盘、磁盘、光盘、ROM或RAM上。这些程序包括操作系统1130、一个或多个应用程序1132、其他程序1134和程序数据1136。应用程序1132或其他程序1134可以包含,例如,计算机程序逻辑(例如,计算机程序代码或指令),用于实现以下项的特征中的任何特征和/或本文所述的其他实施例:便携式设备102、计算设备104、代码分析器UI 106、服务器110、代码相似性引擎112、代码存储库114、漏洞数据库116、固件代码118、代码学习器302、固件反汇编器304、反编译器306、代码中性化器308、编译器310、固件标识器312、标记比较器314、分数生成器316、漏洞确定器318、流程图200、流程图400、流程图500、流程图600和/或流程图700。
用户可以通过诸如键盘1138和定点设备1140的输入设备将命令和信息输入到计算设备1100中。其他输入设备(未示出)可以包括麦克风、操纵杆、游戏板、卫星天线、扫描仪、触摸屏和/或触摸板、用于接收语音输入的语音识别系统、用于接收姿势输入的姿势识别系统等。这些和其他输入设备通常通过耦合到总线1106的串行端口接口1142连接到处理器电路1102,但也可以通过其他接口(诸如并行端口、游戏端口或通用串行总线(USB))连接。
显示屏1144还经由诸如视频适配器1146的接口连接到总线1106。显示屏1144可以在计算设备1100的外部,或者被并入在计算设备中。显示屏1144可以显示信息,也可以是用于接收用户命令和/或其他信息(例如,通过触摸、手指手势、虚拟键盘等)的用户界面。除了显示屏1144之外,计算设备1100还可以包括其他外围输出设备(未示出),诸如扬声器和打印机。
计算设备1100通过适配器或网络接口1150、调制解调器1152或用于在网络之上建立通信的其他部件连接到网络1148(例如,Internet)。调制解调器1152可以是内部的或外部的,可以经由串行端口接口1142连接到总线1106,如图11所示,或者可以使用另一接口类型(包含并行接口)连接到总线1106。
如本文所使用的,术语“计算机程序介质”、“计算机可读介质”和“计算机可读存储介质”用于指代物理硬件介质,诸如与硬盘驱动器1114相关联的硬盘、可移动磁盘1118、可移动光盘1122、其他物理硬件介质(诸如RAM、ROM、闪存卡、数字视频盘、zip盘、MEM、基于纳米技术的存储设备,以及另外类型的物理/有形硬件存储介质)。这种计算机可读存储介质与通信介质不同,并且与通信介质不重叠(不包含通信介质)。通信介质体现了计算机可读指令、数据结构、程序模块或调制数据信号(诸如载波)中的其他数据。术语“调制数据信号”是指一种信号,其一个或多个特性被设置或被更改,以便在信号中编码信息。作为示例而非限制,通信介质包括无线介质,诸如声学、RF、红外和其他无线介质,以及有线介质。实施例还针对与针对计算机可读存储介质的实施例分离且不重叠的此类通信介质。
如上所述,计算机程序和模块(包括应用程序1132和其他程序1134)可以存储在硬盘、磁盘、光盘、ROM、RAM或其他硬件存储介质上。这样的计算机程序也可以经由网络接口1150、串行端口接口1142或任何其他接口类型来接收。当由应用执行或加载这样的计算机程序时,使得计算设备1100能够实现本文所讨论的实施例的特征。因此,这样的计算机程序表示计算设备1100的控制器。
实施例还涉及包括存储在任何计算机可读介质上的计算机代码或指令的计算机程序产品。此类计算机程序产品包括硬盘驱动器、光盘驱动器、存储设备包、便携式记忆棒、存储器卡和其他类型的物理存储硬件。
IV.示例移动设备实现
图12是可实现本文所述实施例的示例性移动设备1202的框图。例如,移动设备1201可用于实现便携式设备102、计算设备104、代码分析器UI 106、服务器110、代码相似性引擎112、代码存储库114、漏洞数据库116、固件代码118、代码学习器302、固件反汇编器304、反编译器306、代码中性化器308、编译器310、固件标识器312、标记比较器314、分数生成器316、漏洞确定器318,或者流程图200、流程图400、流程图500、流程图600和/或流程图700的步骤。如图12中所示,移动设备1202包括各种可选的硬件和软件组件。移动设备1202中的任何组件可以与任何其他组件通信,尽管为了便于说明,没有显示所有连接。移动设备1202可以是各种计算设备中的任何一种(例如,蜂窝电话、智能电话、手持计算机、个人数字助理(PDA)等),并且可以允许与一个或多个移动通信网络1204(诸如蜂窝或卫星网络)或局域网或广域网无线双向通信。
所示的移动设备1202可以包括控制器或处理器1210(例如,信号处理器、微处理器、ASIC或其他控制和处理逻辑电路),用于执行诸如信号编码、数据处理、输入/输出处理、功率控制、和/或其他功能之类的任务。操作系统1212可以控制移动设备1202的组件的分配和使用,并针对一个或多个应用程序1214(也称为“应用”或“app”)提供支持。应用程序1214可以包含常见的移动计算应用(例如,数字个人助理、电子邮件应用、日历、联系人管理器、web浏览器、消息应用)和任何其他计算应用(例如,文字处理应用、地图应用、媒体播放器应用)。
所示的移动设备1202可以包括存储器1220。存储器1220可以包括不可移动存储器1222和/或可移动存储器1224。不可移动存储1222可以包括RAM、ROM、闪存、硬盘或其他公知的存储器设备或技术。可移动存储器1224可以包括闪存或用户身份模块(SIM)卡,它在GSM通信系统中是公知的,或其他公知的存储器设备或技术,诸如“智能卡”。存储器1220可以被用于存储用于运行操作系统1212和应用1214的数据和/或代码。示例数据可包括web页面、文本、图像、声音文件、视频数据、或者经由一个或多个有线或无线网络发送到一个或多个网络服务器或其他设备和/或从一个或多个网络服务器或者其他设备接收的其他数据。存储器1220可以被用于存储用户标识符,诸如国际移动用户身份(IMSI)和设备标识符,诸如国际移动设备标识符(IMEI)。这些标识符可以被传输到网络服务器以标识用户和设备。
移动设备1202可以支持一个或多个输入设备1230,诸如触摸屏1232、麦克风1234、相机1236、物理键盘1238和/或轨迹球1240,以及一个或多个输出设备1250,诸如扬声器1252和显示器1254。其他可能的输出设备(未示出)可以包含压电或其他触觉输出设备。一些设备可以提供一个以上的输入/输出功能。例如,触摸屏1232和显示器1254可以被组合在单个输入/输出设备中。输入设备1230可以包含自然用户接口(NUI)。
如本领域容易理解的,无线调制解调器1260可以被耦合到(多个)天线(未示出),并且可以支持处理器1210和外部设备之间的双向通信。(多个)调制解调器1260被一般性地示出并且可以包含用于与移动通信网络1204和/或其他基于无线电的调制解调器(例如,蓝牙1264和/或Wi-Fi 1262)通信的蜂窝调制解调器1266。(多个)无线调制解调器1260中的至少一个无线调制解调器1260通常被配置为与一个或多个蜂窝网络通信,诸如用于单个蜂窝网络内、蜂窝网络之间或移动设备与公共交换电话网络(PSTN)之间的数据和语音通信的GSM网络。
移动设备1202还可以包括至少一个输入/输出端口1280、电源1282、卫星导航系统接收器1284(诸如全球定位系统(GPS)接收器)、加速度计1286和/或物理连接器1290,物理连接器可以是USB端口、IEEE 1394(火线)端口、和/或RS-232端口。移动设备1202的所示组件不是必需的或包括所有组件,因为本领域技术人员将认识到,任何组件可以被删除,并且其他组件可以被添加。
在实施例中,移动设备1202被配置为执行以下任一项的功能中的任一功能:便携式设备102、计算设备104、代码分析器UI 106、服务器110、代码相似性引擎112、代码存储库114、漏洞数据库116、固件代码118、代码学习器302、固件反汇编器304、反编译器306、代码中性化器308、编译器310、固件标识器312、标记比较器314、分数生成器316、漏洞确定器318或流程图200、流程图400、流程图500、流程图600和/或流程图700的步骤。用于执行这些设备的功能的计算机程序逻辑可以存储在存储器1220中,并由处理器1210执行。通过执行这种计算机程序逻辑,可以使处理器1210实现这些设备中的任何设备的任何特征。此外,通过执行这样的计算机程序逻辑,可以使处理器1210执行流程图200、流程图400、流程图500、流程图600和/或流程图700的任何或全部步骤。
V.另外的示例实施例
本文公开了一种用于标识设备固件组件的来源的系统。该系统包括:至少一个处理器电路;以及至少一个存储器,该至少一个存储器存储程序代码,程序代码被配置为由至少一个处理器电路执行,程序代码包括:固件反汇编器,被配置为反汇编固件代码以生成汇编代码;反编译器,被配置为反编译汇编代码以生成源代码;代码中性化器,被配置为从源代码生成第一中性化代码;固件标识器,被配置为将中性化代码的至少一部分与代码存储库相比较以标识固件代码的来源;以及漏洞确定器,被配置为至少基于所标识的来源来确定固件代码是否包含漏洞。
在前述系统的一个实现中,固件标识器还被配置为至少基于中性化代码的至少一部分与代码存储库的比较来标识固件代码的版本。
在前述系统的另一实现中,固件代码的来源是开源库,并且固件代码的版本是开源库的版本。
在前述系统的另一实现中,代码中性化器包括编译器,编译器被配置为将源代码中的多个符号中的每个符号映射到多个中性化符号。
在前述系统的另一实现中,第一中性化代码的一部分包括第一中性化代码的标记;并且固件标识器被配置为将第一中性化代码的标记与代码存储库中的多个标记相比较以使用文本相似性搜索来标识固件代码的来源。
在前述系统的另一实现中,固件标识器被配置为生成置信度分数,置信度分数包括对固件代码的来源的标识是准确的置信度的测量,置信度分数至少基于第一中性化代码的至少一部分与代码存储库的比较而生成。
在前述系统的另一实现中,固件标识器被配置为通过标识代码存储库中的匹配代码来标识固件代码的来源,并且与固件代码相关联的计算架构不同于与代码存储库中的匹配代码相关联的计算架构。
在前述系统的另一实现中,该系统包括代码学习器,该代码学习器被配置为:接收已知固件代码和已知固件代码的来源,并且将从已知固件代码生成的第二中性化代码连同已知固件代码的来源的指示一起存储在代码存储库中。
本文公开了一种用于标识设备固件组件的来源的方法。该方法包括反汇编固件代码以生成汇编代码;反编译汇编代码以生成源代码;从源代码生成第一中性化代码;将中性化代码的至少一部分与代码存储库相比较以标识固件代码的来源;以及至少基于所标识的来源来确定固件代码是否包含漏洞。
在前述方法的实现中,该方法还包括至少基于中性化代码的至少一部分与代码存储库的比较来标识固件代码的版本。
在前述方法的另一实现中,固件代码的来源是开源库,并且固件代码的版本是开源库的版本。
在前述方法的另一实现中,生成第一中性化代码包括:将源代码中的多个符号中的每个符号映射到多个中性化符号。
在前述方法的另一实现中,第一中性化代码的部分包括第一中性化代码的标记;并且将中性化代码的至少一部分与代码存储库相比较包括:将第一中性化代码的标记与代码存储库中的多个标记相比较以使用文本相似性搜索来标识固件代码的来源。
在前述方法的另一实现中,该方法还包括生成置信度分数,该置信度分数包括固件代码的来源的标识是准确的置信度的测量,置信度分数至少基于第一中性化代码的至少一部分与代码存储库的比较而生成。
在前述方法的另一实现中,将中性化代码的至少一部分与代码存储库相比较包括:通过标识代码存储库中的匹配代码来标识固件代码的来源;并且与固件代码相关联的计算架构不同于与代码存储库中的匹配代码相关联的计算架构。
在前述方法的另一实现中,该方法还包括接收已知固件代码和已知固件代码的来源,并将从已知固件代码生成的第二中性化代码连同已知固件代码来源的指示一起存储在代码存储库中。
本文公开了一种计算机可读存储介质。计算机可读存储介质上记录有程序指令,该程序指令在由计算设备的至少一个处理器执行时执行方法,该方法包括:反汇编固件代码以生成汇编代码;反编译汇编代码以生成源代码;从源代码生成第一中性化代码;将中性化代码的至少一部分与代码存储库相比较以标识固件代码的来源;以及至少基于所标识的来源来确定固件代码是否包含漏洞。
在前述计算机可读存储介质的一种实现中,生成第一中性化代码包括将源代码中的多个符号中的每个符号映射到多个中性化符号。
在前述计算机可读存储介质的另一实现中,第一中性化代码的一部分包括第一中性化代码的标记;并且将中性化代码的至少一部分与代码存储库相比较包括:将第一中性化代码的标记与代码存储库中的多个标记相比较,以使用文本相似性搜索来标识固件代码的来源。
在前述计算机可读存储介质的一种实现中,该方法还包括:接收已知固件代码和已知固件代码的来源;以及在代码存储库中存储从已知固件代码生成的第二中性化代码以及已知固件代码的来源的指示。
VI.结论
尽管以上已经描述了各种实施例,但应当理解,它们仅通过示例而非限制的方式呈现。相关领域的技术人员将理解,在不脱离所附权利要求中定义的所描述的实施例的精神和范围的情况下,可以在形式和细节上进行各种改变。相应地,本实施例的广度和范围不应受到任何上述示例性实施例的限制,而应仅根据以下权利要求及其等同物来定义。

Claims (15)

1.一种用于标识设备固件组件的来源的系统,所述系统包括:
至少一个处理器电路;以及
至少一个存储器,所述至少一个存储器存储程序代码,所述程序代码被配置为由所述至少一个处理器电路执行,所述程序代码包括:
固件反汇编器,被配置为反汇编固件代码以生成汇编代码;
反编译器,被配置为反编译所述汇编代码以生成源代码;
代码中性化器,被配置为从所述源代码生成第一中性化代码;
固件标识器,被配置为将所述中性化代码的至少一部分与代码存储库相比较以标识所述固件代码的来源;以及
漏洞确定器,被配置为至少基于所标识的所述来源来确定所述固件代码是否包含漏洞。
2.根据权利要求1所述的系统,其中所述固件标识器还被配置为至少基于所述中性化代码的所述至少一部分与所述代码存储库的所述比较来标识所述固件代码的版本。
3.根据权利要求2所述的系统,其中所述固件代码的所述来源是开源库,并且所述固件代码的所述版本是所述开源库的版本。
4.根据权利要求1所述的系统,其中所述代码中性化器包括编译器,所述编译器被配置为将所述源代码中的多个符号中的每个符号映射到多个中性化符号。
5.根据权利要求1所述的系统,其中所述第一中性化代码的所述一部分包括所述第一中性化代码的标记;并且
其中所述固件标识器被配置为将所述第一中性化代码的所述标记与所述代码存储库中的多个标记相比较,以使用文本相似性搜索来标识所述固件代码的所述来源。
6.根据权利要求1所述的系统,其中所述固件标识器被配置为生成置信度分数,所述置信度分数包括对所述固件代码的所述来源的所述标识是准确的置信度的测量,所述置信度分数至少基于所述第一中性化代码的所述至少一部分与所述代码存储库的比较而生成。
7.根据权利要求1所述的系统,其中所述固件标识器被配置为通过标识所述代码存储库中的匹配代码来标识所述固件代码的所述来源,并且
其中与所述固件代码相关联的计算架构不同于与所述代码存储库中的所述匹配代码相关联的计算架构。
8.根据权利要求1所述的系统,还包括代码学习器,所述代码学习器被配置为:
接收已知固件代码和所述已知固件代码的来源,以及
将从所述已知固件代码生成的第二中性化代码连同所述已知固件代码的所述来源的指示一起存储在所述代码存储库中。
9.一种用于标识设备固件组件的来源的方法,所述方法包括:
反汇编固件代码以生成汇编代码;
反编译所述汇编代码以生成源代码;
从所述源代码生成第一中性化代码;
将所述中性化代码的至少一部分与代码存储库相比较以标识所述固件代码的来源;以及
至少基于所标识的所述来源来确定所述固件代码是否包含漏洞。
10.根据权利要求9所述的方法,还包括:
至少基于所述中性化代码的所述至少一部分与所述代码存储库的所述比较来标识所述固件代码的版本。
11.根据权利要求10所述的方法,其中所述固件代码的所述来源是开源库,并且所述固件代码的所述版本是所述开源库的版本。
12.根据权利要求9所述的方法,其中所述生成第一中性化代码包括:
将所述源代码中的多个符号中的每个符号映射到多个中性化符号。
13.根据权利要求9所述的方法,其中所述第一中性化代码的所述一部分包括所述第一中性化代码的标记;并且
其中所述将所述中性化代码的所述至少一部分与所述代码存储库相比较包括:将所述第一中性化代码的所述标记与所述代码存储库中的多个标记相比较,以使用文本相似性搜索来标识所述固件代码的所述来源。
14.根据权利要求9所述的方法,还包括:
接收已知固件代码和所述已知固件代码的来源;以及
将从所述已知固件代码生成的第二中性化代码连同所述已知固件代码的所述来源的指示一起存储在所述代码存储库中。
15.一种计算机可读介质,所述计算机可读介质上记录有计算机程序逻辑,所述计算机程序逻辑包括:
用于使处理器能够执行根据权利要求9-14中任一项所述的方法的计算机程序逻辑。
CN202180091692.3A 2021-01-22 2021-12-17 固件组件标识和漏洞评估 Pending CN116868193A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/155,820 2021-01-22
US17/155,820 US20220237300A1 (en) 2021-01-22 2021-01-22 Firmware component identification and vulnerability assessment
PCT/US2021/063943 WO2022159212A1 (en) 2021-01-22 2021-12-17 Firmware component identification and vulnerability assessment

Publications (1)

Publication Number Publication Date
CN116868193A true CN116868193A (zh) 2023-10-10

Family

ID=80034772

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180091692.3A Pending CN116868193A (zh) 2021-01-22 2021-12-17 固件组件标识和漏洞评估

Country Status (4)

Country Link
US (1) US20220237300A1 (zh)
EP (1) EP4281889A1 (zh)
CN (1) CN116868193A (zh)
WO (1) WO2022159212A1 (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102476358B1 (ko) * 2021-01-26 2022-12-08 고려대학교 산학협력단 소스코드 레벨에서의 오픈소스 소프트웨어 (oss) 구성요소 식별을 위한 방법
US20230205891A1 (en) * 2021-12-28 2023-06-29 SecureX.AI, Inc. Systems and methods for prioritizing security findings using machine learning models
US20230385408A1 (en) * 2022-05-31 2023-11-30 Acronis International Gmbh Antimalware Scan with Decompilation
US20240211249A1 (en) * 2022-12-23 2024-06-27 Palantir Technologies Inc. Systems and methods for using software supply chain to control software operations
CN116880858A (zh) * 2023-09-06 2023-10-13 北京华云安信息技术有限公司 固件实际基地址的获取方法、装置、设备以及存储介质

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9176729B2 (en) * 2013-10-04 2015-11-03 Avaya Inc. System and method for prioritizing and remediating defect risk in source code
US10395032B2 (en) * 2014-10-03 2019-08-27 Nokomis, Inc. Detection of malicious software, firmware, IP cores and circuitry via unintended emissions
US10310831B2 (en) * 2015-07-17 2019-06-04 Enhance, Inc. Method and system for modifying machine instructions within compiled software
CN109074458B (zh) * 2016-07-28 2022-04-15 惠普发展公司,有限责任合伙企业 用于传送代码包变体的系统和方法
US10678513B2 (en) * 2017-09-12 2020-06-09 Devfactory Fz-Llc Library upgrade method, apparatus, and system
US11048615B2 (en) * 2018-01-08 2021-06-29 Ozcode Ltd. Time travel source code debugger incorporating visual annotations
US11036479B2 (en) * 2018-08-27 2021-06-15 Georgia Tech Research Corporation Devices, systems, and methods of program identification, isolation, and profile attachment
US10990674B2 (en) * 2018-08-28 2021-04-27 AlienVault, Inc. Malware clustering based on function call graph similarity
US11074055B2 (en) * 2019-06-14 2021-07-27 International Business Machines Corporation Identification of components used in software binaries through approximate concrete execution
US11687658B2 (en) * 2020-10-06 2023-06-27 Capital One Services, Llc Software code vulnerability remediation

Also Published As

Publication number Publication date
EP4281889A1 (en) 2023-11-29
US20220237300A1 (en) 2022-07-28
WO2022159212A1 (en) 2022-07-28

Similar Documents

Publication Publication Date Title
US20220237300A1 (en) Firmware component identification and vulnerability assessment
CN112041815B (zh) 恶意软件检测
US8631498B1 (en) Techniques for identifying potential malware domain names
Alazab et al. Malware detection based on structural and behavioural features of API calls
US7949670B2 (en) Language neutral text verification
US11580222B2 (en) Automated malware analysis that automatically clusters sandbox reports of similar malware samples
US20150213365A1 (en) Methods and systems for classification of software applications
JP6689283B2 (ja) 装置指紋をインターネット装置に割り当てるための方法及び機器
CN113360910B (zh) 恶意应用的检测方法、装置、服务器和可读存储介质
CN106022349B (zh) 用于设备类型确定的方法和系统
KR20170068814A (ko) 악성 모바일 앱 감지 장치 및 방법
CN108563951B (zh) 病毒检测方法及装置
KR102073068B1 (ko) 어플리케이션 클러스터링 방법 및 그 장치
CN111078481B (zh) 获取配置检查清单的方法、装置、电子设备及存储介质
EP4002174A1 (en) Utilizing orchestration and augmented vulnerability triage for software security testing
CN107615240A (zh) 用于分析二进制文件的基于生物序列的方案
CN110023938A (zh) 利用函数长度统计确定文件相似度的系统和方法
US11934533B2 (en) Detection of supply chain-related security threats to software applications
El Fiky et al. Detection of android malware using machine learning
Yu et al. Cfg2vec: Hierarchical graph neural network for cross-architectural software reverse engineering
US20240129329A1 (en) Method and apparatus for testing a malware detection machine learning model
WO2023072002A1 (zh) 开源组件包的安全检测方法及装置
CN112711424A (zh) 应用程序的风险问题确定方法、装置及存储介质
CN107451050B (zh) 函数获取方法和装置、服务器
CN118103852A (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