数字经济时代,随着开源应用软件开发方式的使用度越来越高,开源组件逐渐成为软件开发的核心基础设施,但同时也带来了一些风险和安全隐患。为了解决这些问题,二进制软件成分分析技术成为了一种有效的手段之一。通过对二进制软件进行成分分析,可以检测其中的潜在风险,并提供对用户有价值的信息。
本文将从二进制软件成分分析诞生背景、二进制文件可以分析哪些安全风险、二进制技术原理以及实践应用等维度深度剖析二进制软件成分分析关键技术。
01 为什么需要二进制软件成分分析
在工业系统、车联网系统、银行券商系统和嵌入式系统中,有无数的二进制程序和库,这些源程序可能长期丢失或是私有的,这意味着无法使用常规方法对这些程序和库进行修补或在源代码级别上评估其安全性。
供应链场景下,对于采购的交付件制品,大多无法提供源码,对于此类采购产品需要上线,或者需要集成到自研产品中的,则需要提前进行二进制制品的检测,进行安全评估。
在整个数字供应链的场景下,二进制检测的需求越发重要。
SCA的二进制检测可以对源代码检测起到很好的补充:
-
二进制 SCA 检测对象为二进制构建产物,无需源码。
-
二进制 SCA 和源代码 SCA 检测阶段不同,源代码 SCA 在开发阶段检测,二进制 SCA 在测试、交付阶段检测。
-
在语言支持上互补,对 C++、C、Java、Go 等语言良好支持。
-
在检测结果上给予补充,可检测静态链接库和在构建过程中引入的开源软件。
当然二进制成分分析也存在一些技术挑战:
-
无法准确地确定程序中的变量和函数名。
-
分析过程可能会因为一些代码混淆和程序加固技术而变得困难或无法进行。
二进制软件成分分析和源代码成分分析都不可或缺,在不同的阶段和场景下具备各自的优势。
02 二进制文件可以分析哪些风险
高级语言和二进制机器语言之间存在很大的语义鸿沟,因此很难知道它们如何进行联系。编译后的程序不一定会符合开发者的意图。存在二进制级别的后门程序和恶意代码植入等可能被忽视的风险。
二进制软件成分分析可以对提供的软件包/固件进行全面分析,通过解压获取包中所有待分析文件,基于组件特征识别技术以及各种风险检测规则,获得相关被测对象的组件SBOM清单和潜在风险清单。
主要包括以下几类:
-
开源软件风险:检测包中的开源软件风险,如已知漏洞、License合规等。
-
安全配置风险:检测包中配置类风险,如硬编码凭证、敏感文件(如密钥、证书、调试工具等)问题、OS认证和访问控制类问题等。
-
信息泄露风险:检测包中信息泄露风险,如IP泄露、硬编码密钥、弱口令、GIT/SVN仓泄露等风险。
-
安全编译选项:支持检测包中二进制文件编译过程中相关选项是否存在风险。
在了解二进制成分分析是如何分析出上述风险项之前,需要对二进制文件的定义,二进制文件的生成过程,以及二进制文件的基本结构和运行时的内存结构进行了解。
03 什么是二进制文件
二进制文件通常指将属于每个程序的所有二进制代码(机器指令) 和数据(变量、常量等) 存储在一个自包含文件中。这些文件包含可在对应系统直接运行执行的二进制文件,所以它们被称为二进制可执行文件,或者二进制文件。
狭义的二进制文件被定义为除文本文件以外的文件。即:文件内容由0、1组成,均可被称为二进制文件。
ELF格式和PE格式是Linux和Windows操作系统上使用最广泛的二进制格式。
PE