梁胜博士:软件供应链安全两手抓,既要安全左移也要全链路防护丨活动回顾
11月1日下午,由深圳金融科技协会主办的湾区湾区金科(Fintech)沙龙(第四十期)—— 敏捷开发安全与软件供应链安全实践探讨专场圆满举办,逾1500名业界人士线上线下同步参加。数澈软件 Seal 联合创始人梁胜博士和江鹏受邀出席此次沙龙并发表题为《如何保证企业软件供应链安全》的演讲,本文为演讲实录。
就当前而言,软件供应链还是一个比较新的概念,最近一两年这个概念才开始进入大众视野。首先,先介绍一下软件供应链的背景。软件供应链这一概念援引自传统制造业中的供应链。我们来回看整个软件开发到发布的流程就会发现这与传统制造业的供应链流程十分类似——软件从最早开发开始,到中间构建,然后进行测试,测试结束后变成一个二进制的制品,接着在云端或者本地发布软件。
具体来说,在软件供应链中有一个特别重要的概念叫做软件物料清单(SBOM,Software bills of materials)。比如一台电视机,有显示屏、有元器件等等零部件,这些东西在制造业的术语里被称为 BOM(物料清单),它决定了产品的成本和质量,很大程度上也决定了产品的可靠性和安全性,所以如果中间的“元器件”遭受了攻击,将会对产品造成重大影响。
软件供应链也是如此,比如部署一个应用系统,这个系统内使用了各种服务,每个服务可能包含自研代码以及一些外部的开源组件还有第三方供应商的代码,同时第三方供应商所提供的代码也会包含自研的和开源组件,所以整个构成其实十分复杂。因此,国防领域、政府机关以及金融领域的企业都对此有很高的要求,因为一旦某个环节遭受攻击,所造成的后果不堪设想。
在整个供应链来看,其实第三方供应商所提供的代码比较有保证,因为企业内部会先对供应商进行审查,最终选择的供应商一般可信赖程度较高。至于自研代码,企业内部也可以通过各种手段对其进行控制,至少可以确保来源的可靠性。因此,最近这几年来最大的风险还是来自于开源组件。 因为近几年开源文化在软件世界盛行,开源组件的数量呈爆发式增长。一个应用在开发过程中会引入大量开源组件,但并不是每个开源组件都是可信任的。
此外,开源组件更新速度也很快,每个组件可能几个月或者几周就会更新一次,也许在应用集成的所有组件中每天有组件在更新,这会变得难以控制。因此对于软件供应商来说,这构成了一个非常大的威胁。在过去,软件供应商把应用或操作系统发布到一个设备上,这个设备也许会受到一些传统的安全攻击,比如针对终端的攻击。但是现在有终端的防护、网络的防护,相对来说攻击设备已经没有那么容易。那么,黑客就开始将目光转向了软件供应链。众所周知,一旦软件供应链被攻击,那么所有终端都在所难免,因此这个影响是非常大的。
其实此类问题早已存在多年,印象中十几年前业界就有提及,但当时还觉得只是一个理论上的问题,因为实际发生的事件还不多。但是过去的5年,发生的频率明显上升。比如2020年的 SolarWinds 黑客事件,现在这家公司岌岌可危,几乎就是由于那次经历的黑客攻击。因为这家公司的软件是用来监控企业内部其他关键软件的,所以软件权限很高,并且被许多政府机关、银行、国防部门所使用,攻击者可以借此访问到许多敏感信息。当这个软件存在漏洞之后,所有采用这一软件的企业的内容系统都会存在巨大漏洞。截止今日,这一攻击所造成损失还无法估量。
更为人所知的事件还有2021年末 Java 语言中著名的开源日志框架 Log4j 的高危漏洞。因为这些影响广泛的事件,现在许多软件安全厂商意识到了软件供应链的风险,于是将他们现有的工具组合起来,来解决一些软件供应链安全的问题。其中,SAST 和 SCA 是对软件供应链最适用的。
SAST 即静态应用安全测试,简而言之就是扫描源代码,看是否存在问题。SCA 即软件成分分析,看 SBOM 里到底有什么。其实这两种工具已经存在多年,但当时大家也不知道怎么样更好地利用这两种工具,因为对软件供应链的认识不足。早前一般都用这些工具来查找程序中的错误,或者是否有密钥放在了明文部分,或者是查软件的 License 是否合规。现在这些工具基本都开始用来解决一些软件供应链的安全问题。
但挑战依旧很大,因为传统这些软件误报实在太多了,有很多假阳性。比如,之前我就把以前公司开发的一个软件拿去扫了一下,随便就扫出了5000多个问题,而且都很严重,但人力上很难查得过来这么多问题,并且也不知道如何修复。而且公司客户怎么办?这个软件已经发布了好几年,如果这5000多个问题中间存在真正的大问题,那应该怎么办。
另外,软件供应链与多个部门有关系,比如 IT 部门、安全部门、运维部门等。研发部门在开发软件时用到的工具也特别多,每个环节都有可能查出一些错误,那对于首席安全官,甚至首席信息官对这些都很重视,但是因为情况太复杂很难搞清楚。像之前提到的 SolarWinds 事件,事情一被爆出,公司CEO甚至引咎辞职。
就中国国情来说,软件供应链在中国还有一些特殊的要求,因为现在国内很讲究对IT的掌控,因此对软件供应链的来源其实有更严格的要求。比如企业想知道他们对所用到的组件是不是真正可控,是否可以禁止某个第三方的组件。数澈软件可以在这里面做一点事情。
还有一个问题就是软件供应链本身是一个“链”,所以从一定程度来说,与传统安全不太一样。传统的安全公司安全工具都比较单一,也许提供很多不同的产品,但一般每个产品就干一件事,比如扫描病毒、控制网络安全等。但是软件供应链整个链路上的每个地方都有可能出问题——从源代码到构建到最后发布,中间各个组件之间的依赖性等。所以软件供应链的安全并不是一个点的问题。
接下来我们看全链路到底是怎么回事,其实全链路有两个方面,一方面是“左移”,这个词在业界是比较受认可的,为什么左移很重要?
因为越左移意味着越早发现,在开发阶段出现的问题最好在开发的时候发现,而不要在运行的时候发现,因为越早发现越容易纠正。如果在运行的时候才发现,可能都很难回溯到最初的情况,也很难找到责任人。而且生产环境也不能停,那只能冒险运行。所以“左移”很重要。
但是“左移”也不能100%解决问题,因为最后的软件还有50%~90%的部分是第三方的组件。而且第三方的软件在链路的每个环节都有可能注入代码仓库,比如可能用到第三方的软件库,在构建阶段用到第三方的工具和操作系统,在制品库中用到第三方的镜像,最后运行阶段,可能在 K8s 或者云平台上运行,那云平台和 K8s 本身也会引入更多工具。
所以即便企业已经100%进行安全左移了,但全链路依旧需要检测,因为每一个环节都会有新的依赖项被引入,所以两者必不可少。因此数澈软件 Seal 就是为了解决中国企业的软件供应链安全问题。所以我们提出要做一个防火墙,像网络防火墙一样,把整个软件供应链全链路的每个环节都保护起来,然后进行统一管理,给安全部门提供可视化,最后做到安全和合规。