PR - Supply-Chain Vulnerability Elimination via Active Learning and Regeneration
原文作者:N Vasilakis, A Benetopoulos, S Handa
原文标题:Supply-Chain Vulnerability Elimination via Active Learning and Regeneration
原文链接:http://nikos.vasilak.is/p/harp:ccs:2021.pdf
原文来源:CCS 2021
笔记作者:outx
0x01 Intro
网络攻防发展至今,攻破软件直接实现攻击愈发困难,软件供应链攻击应运而生。攻击者往往不会直接针对这些软件发起攻击,而是转为对其供应商发起攻击,利用这些软件中或多或少/直接或间接依赖于供应商这一基本情况,有目的地向这些供应商所提供的组件代码中插入其精心构造的恶意代码,以此达到成功植入后门等目的。
由于一系列原因,诸如软件开发者没办法对其集成的所有组件的代码进行人工审查,即便是那些被广泛使用,传播度极高的组件也有将漏洞引入软件中的真实案例。
为了这些已经被攻陷的组件不被安全人员检测到,通常情况下这些漏洞仅会在非常特定的执行上下文中触发,并表现出恶意行为(例如窃取敏感数据,隐蔽执行命令等)。所以最为常见的情况是,软件仅能够观察到组建的功能行为,这里指的是组件返回的结果,但并不能够观察到组件在执行过程中可能会出现的一些恶意行为。
在这种情况下,作者研究了一种新方法来消除软件组件中可能存在的漏洞,以此来消除潜在的供应链攻击风险。这种方法首先假定采用一个不完整的组件(被攻击者植入后门),在完全受控的环境中研究其行为,然后学习其功能行为(为了排除掉漏洞那部分带来的行为特征),然后利用学习到的模型重新生成该组件的新版本,这种方法作者称其为ALR(active library learning and re-generation)。作者设计了一个系统,Harp,它主要是通过应用上述方法来自动生成一些广泛使用的字符串相关组件的无漏洞版本,以及建立在这些组件之上的一些高阶组件的无漏洞版本。
部署阶段
Harp支持一系列的部署方式,主要分成两类:
- 部署至应用程序开发之前,以获得一个完全安全的基本字符串相关组件集合,这种部署方式可以集成到一个或者多个组织开发的多个应用程序中
- 部署至开发过程中,以替换掉先前开发过程中使用的一些不确定的组件
针对范围
作者的方法针对的是那些被广泛使用的流行组件中使用的简单组件,这些组件之所以容易受到攻击主要是:
- 这些简单组件被用作于一些高级组件的基石,一旦被攻击者控制,影响范围巨大
- 通过这些简单组件来控制那些高级组件,进而控制开发者开发的软件,比直接尝试通过攻击控制高级组件更具有可行性。
除了上述的那些简单组件,Harp还可以针对那些能够使用DSL(domain-specific language)捕获行为的组件,DSL能够促进组件行为的表示和推理,消除那些无法被表示的恶意行为。
0x02 Harp
Harp能够回答以下三个问题:
- Harp能够消除真正的漏洞么?
作者通过Harp已经成功消除了三个大规模供应链攻击漏洞,其完美地消除了对危险代码的任何依赖。 - ALR时间效率如何?
将其应用于17个JavaScript字符串处理组件,Harp在1分钟内学会了14个组件,而所有组件的学习都在1小时内完成了。 - 这些再生成的组件有什么特点?
再生组件的执行速度相较于原始JavaScript组件浮动于+2%~-7%之间,这些生成的组件没有导入任何东西,完全是基于原生的JavaScript语言。 - ALR适用于除了JavaScript之外的语言么?
尝试应用于5个用C/C++编写的组件上,ALR成功以JavaScript再生成了对应的新组件。
所尝试应用Harp来再生成的JavaScript组件如下:
0x03 Conclusion
本文基于目前供应链攻击的泛滥及其影响严重性,提出了一种新的方法,即组件主动学习和再生成,以黑盒的形式推断和重新生成这些组件正常的功能行为,进而再生成安全无漏洞的版本。
读完整篇文章,读者发现这个方案思路很好,但也存在着一些问题,一是怎么确保再生成的组件能够完整满足源组件的所有输入,在具备正常的行为功能的情况下做到完全相同的输出;二是上述学习过程中如果出现了因为漏洞所引起的输入和输出,那么其生成的所谓无漏洞版本中其实也会存在学习过程中出现的那种漏洞。