点击↑ 蓝字
关注 墨云安全
在软件开发和安全领域,软件构建中的组件分析SCA(Software component analysis)是一种用于检测和管理软件项目中使用的第三方组件(如开源库、框架等)的方法。SCA 工具帮助开发者识别项目中使用的组件,并检查这些组件是否包含已知的漏洞或安全问题,有助于提高应用程序的安全性,防范潜在的攻击。
SCA,一种跨开发语言的分析技术
SCA理论上来说是一种通用的分析方法,可以对Java、C/C++、Golang、Python、JavaScript等任何开发语言对象,从文件层面的文件内容,文件与文件之间的关联关系,以及彼此组合成目标的过程细节进行分析。SCA分析的目标程序形式既可以是源代码,也可以是编译出来的各类的二进制文件,分析的数据对象对程序架构、编译方式都是不敏感的,无论目标程序运行在x86平台还是ARM平台,windows系统或是Linux系统,简而言SCA是一种跨开发语言的应用程序分析技术。
SCA分析过程中首先对目标源代码或二进制文件进行解压,并从文件中提取特征,再对特征进行识别和分析,获得各个部分的关系,从而获得应用程序的画像—–组件名称+版本号,进而关联出存在的已知漏洞清单。由于SCA分析过程中不需要把目标程序运行起来,因此具有分析过程对外部依赖少,分析全面,快捷、效率高的优点。
二进制静态代码分析(Binary Static Code Analysis)和源代码静态代码分析(Source Code Static Code Analysis)是SCA中两个重要概念。
源代码静态代码分析
源代码静态代码分析(Static Code Analysis)是一种通过对程序的源代码进行分析来检测潜在问题和漏洞的方法,这种分析方法主要关注在程序编译之前,通过对源代码文件进行静态检查,以识别代码中的安全漏洞、潜在错误、不良编程实践和其他问题。
源代码包含了变量符号类型、函数名称、类名称、代码逻辑结构等大量丰富的代码信息,分为大颗粒度检测方法与细颗粒度检测方法。
大颗粒度检测方法可以根据源代码文件的相似度来判断其属于何种组件和版本。这包括文件相似度的两种主要匹配方法:基于 hash 的严格匹配和基于文本相似度的匹配。虽然基于 hash 的方法效率高,匹配速度快,但容易漏报。基于文本相似度的方法准确率较低,因为只考虑文本结构而不涵盖语法和语义方面的考量。
细颗粒度检测方法则经过源代码处理流程,包括词法分析、Token 提取、语法分析、抽象语法树(AST)生成和语义分析等步骤,以提取更丰富的程序信息。通过机器学习、NLP、CFG 调用图、DFG 数据流图等算法,细颗粒度检测方法可以更准确地进行代码相似度检测,克服了大颗粒度方法的一些限制,如仅考虑文件结构而不涉及语法和语义。
对于具备包管理机制的语言,如Java和Go,还可以利用该机制实现开源软件的关联分析,通过分析引用的开源软件包信息,可以准确地分析出引用的开源软件名称,提供更精确的关联信息。
二进制代码分析
二进制SCA(Static Code Analysis)是一种用于检测二进制文件(机器码或可执行文件)中的潜在安全漏洞和问题的方法。与源代码SCA不同,它专注于分析已编译的程序而不依赖于源代码。
首先,二进制SCA通常从反汇编开始,将二进制文件的机器码转化为更易于理解的汇编语言,这个过程将程序的底层表示形式转变为人类可读的指令序列,为后续分析奠定基础。
随后的控制流分析是二进制SCA的关键步骤之一。通过确定程序的执行路径,分析工具可以建立起对程序结构的理解。这有助于发现潜在的漏洞,尤其是与程序执行流程相关的问题。同时,数据流分析被用来追踪数据在程序中的传递路径,以便检测潜在的数据泄露和未初始化变量等安全问题。
二进制SCA还包括漏洞扫描和模式匹配,其中预定义的规则和模式被用于寻找已知的安全漏洞和恶意代码模式,有助于快速识别程序中存在的已知风险,及时进行安全评估。
高级的二进制SCA工具中,还可能包括抽象语法树(AST)分析。通过对程序结构的更深层次理解,工具可以更准确地推断语法和语义,提高对代码的分析深度。
源代码SCA VS 二进制SCA
源代码层面检测通过代码比对直接分析,能够利用导入的依赖包来判定其是否引入恶意环境;二进制层面的检测主要优势则是能够实现深度分析,针对编译好的程序,实现对已编译程序的反汇编,判定其汇编代码与库中汇编指令的相似性,确定其引用关系,从而剖析出软件组成、依赖关系、复用关系以及是否存在恶意程序等。
二进制SCA与源代码SCA各有千秋,适用于不同的场景。对于闭源软件,二进制SCA可能是更实用的选择,二进制文件的SCA检测能发现构建过程中工具链引入的安全问题,而源代码的SCA则不能。在选择使用哪种方法时,需要根据项目需求、可用资源和安全要求来进行权衡。
参考链接:http://www.huaweicloud.com/zhishi/vss-010.html
往期回顾