2020年底,黑客利用SolarWinds的网管软件漏洞,攻陷了多家美国联邦机构及财富500强企业的网络。这场“太阳风暴”让人始料未及。时隔一年,2021年底爆发的Log4j漏洞,更被称为互联网历史上破坏力最惊人的漏洞之一。有报告显示,软件供应链的攻击在过去三年内增加了742%。人们不禁感叹:软件供应链安全问题猛如虎!
腾讯开发安全高级产品经理刘天勇一针见血地指出,软件供应链安全这个问题其实折射出了开源组件的安全问题。经过几十年的日积月累,软件开源化不仅成了一种业界趋势,更成为一种文化,甚至改变了整个软件业的面貌。有统计显示,当前全球90%以上的企业正在直接或者间接,甚至是在无意识中使用着开源技术、开源软件。保障开源软件的安全已经成了当务之急。
在云计算代,云原生要求软件的研发再提速,同时容器、微服务、DevOps等新的理念、技术又不断加入,使得软件供应链变得越来越复杂,安全问题的滋生在所难免。
解决软件供应链安全问题之道,还是要从“源”头抓起:一方面,既然今天黑客更愿意选择从软件供应链安全的缺口,也就是从软件开发阶段就开始渗透、攻击,那么我们就要在软件开发的源头做好防守;另一方面,针对存在的开源软件漏洞或组件不可控等问题,我们更要查遗补缺,严防死守,不能有一丝懈怠。
控制好代码来源
毋庸置疑,云原生是一种更先进的开发和应用模式,其先进性的一个重要体现就是降低了开发的门槛。比如,以前作为一个程序员,必须具有非常全面的能力,既要了解业务需求,又要会写代码。而现在,有了容器化、微服务、DevOps等,可能程序员本身就不用再掌握那么多的底层技术、开发技巧,很多时候通过直接调用第三方现成的一些模块,或公开的开发组件,就能完成特定程序的开发,效率大大提升。不过也正因为如此,程序员不可控的东西增加了,导致危险的来源也同步增加了。
站在一家研发企业的角度,解决软件供应链安全问题的关键就是控制好代码来源。尤其是程序员如果在开发过程中直接使用了第三方的开源组件,就要特别小心。因为现在很多开发的过程中都是直接使用标准化、模块化的工具进行堆叠,所以要对这些开发组件进行必要的安全检测。
而对于一般的用户来说,则要守好两条“管道”:一是自己开发的软件,要做好全流程的安全管控和检查;二是直接购买的商用软件或开源软件,在产品上线前,除了要做好组件的检测和代码检测之外,还要在软件供应商的资格准入问题上严格要求,一丝不苟。
刘天勇指出,在国内,不同的行业对于软件供应链安全这个问题的重视、认知程度也不尽相同。以互联网、金融等为代表的、软件研发占据相当比重的行业用户,最近两三年受到国内外频发的安全事件的启示,加快了软件供应链安全建设。
其实与商品的供应链相比,软件供应链并不是很长,其安全症结集中而突出,就是能不能完全掌控软件的所有开发组件。近些年,随着使用开源组件的范围越来越广,频率越来越高,开源组件的安全问题正源源不断浮出水面。举例来说,如果开发一个APP总计有100万行代码,其中70%是调用现成的开源组件,那么就意味着这70万行代码必须“可信”,否则就可能存在安全隐患。如何能够有效地监控到这70万行代码的安全,对很多普通用户来说可能是一个棘手的问题。
还有一种可能让用户更担心的情况,就是像0day漏洞。安全人员可能发现了某个组件是有安全漏洞的,但留给企业来修补的时间只有一天甚至几个小时,过了这个窗口期,黑客也许就会大规模地攻入。因此,防御未知漏洞还是一项十分严峻的挑战。
安全防线前移
以前一提到安全,人们最先想到的就是杀毒软件、防火墙等。但这些都是在应用部署之后的运行阶段所做的防御措施。解决软件供应链安全问题,安全防线还要再前移。这也是业界提出“安全左移”“开发安全”以及DevSecOps等概念的初衷,其本质都是希望在应用上线前就最大程度地消除安全隐患。
刘天勇解释说,安全左移代表的一种技术理念,是将安全的检测和防御从应用上线之后向左移动。如果将一个软件的生命周期由左至右来排列,那么最开始是软件的需求设计,然后是程序员的编码、测试、发布上线,最后是运营。以前的安全防御集中在运营阶段去做,就像是看病,要得了病以后再去医院治疗。而安全左移意味着,要提前做好预防工作,特别是在引入了第三方开发组件的情况下,“安全左移”就更具必要性。
DevSecOps
代表着一种研发模式,更多地强调,在这种新的研发模式之下,安全防御手段也要与时俱进做出调整,不管是在开发还是在测试阶段,或其他阶段,所有人都要为整个应用的安全负责。因为现在应用的研发迭代非常快,不可能再像以前那样一道工序接着一道工序按部就班。只有将安全体系的建设放到应用上线之前,才能事半功倍。


很多时候,我们在谈到开源软件时,关注的都是对研发效率的提升或其他优势,比如站在巨人的肩膀上研发,可以省掉大量重复劳动,能够把更多精力和时间放到攻克技术难关上,更好地实现共享等。但我们容易忽视的是,开源在某种意义上意味着责任不清晰。比如,你在使用开源软件时,可能免费地拿来就用,一旦其中隐藏着安全隐患,这个责任又该谁来承担呢?这就涉及到一个严肃的话题,即开源组件的权限权益、责任边界以及如何合理地进行使用。这不是一个单纯的技术问题,应该上升到整个公司的研发标准、策略和规范层面,再往上可能会涉及到国家安全。所以,对于开源组件的安全使用一定要有明确的规范和准则。
二进制SCA另辟蹊径
既是软件开发者,同时又是安全解决方案提供商,腾讯的“双重身份”让它在软件供应链安全这个问题上看得更加通透,解决起来也更加得心应手。“腾讯在软件供应链安全上有自己独特的技术思路。”刘天勇如是说。
在软件上线之前,要检测清楚到底使用了哪些第三方的开源组件,是否存在安全隐患。针对这个问题,业界目前有两大技术流派。一派是检测源代码,即源代码SCASource Code Analyzer,源代码分析)。大多数主流安全厂商都采用这一思路。
腾讯则另辟蹊径,是从源代码编译构建的产物,也就是制品或者说二进制构建产物切入的,是在代码编译之后,检测其编译后的产物,以得到软件供应链的组成成分。
两者的区别在于,源代码侧技术难度相对较低,但弊端在于,它可能会忽略编译过程中引入的新问题, 难以解决一些间接依赖问题;而二进制分析技术是编译之后再去检测,无需源代码,使用起来也更简单,而且可以把在编译过程中引入的其他问题,如和编译器相关的软件供应链风险扫描得更全。这也是腾讯选择走二进制SCA技术路线的原因。
“我们之所以选择二进制SCA这条路线,主要因为腾讯在此领域有比较深厚的技术积累。”刘天勇介绍说,“腾讯安全科恩实验室积极布局物联网、车联网安全,其技术实力和研究成果达到国际领先水平。自2016年以来,实验室连续5年发布多个知名品牌网联汽车安全研究成果,助力厂商修复安全问题,并构建全面的安全体系。现在,将这些技术应用于软件开发,其本质是一样的。因此,腾讯安全在二进制SCA方面筑起了高技术壁垒。”
目前在国内安全厂商中,腾讯是唯一一家在软件供应链安全实践中,从制品角度去检测整个第三方开源组件的厂商。在国外,采用与腾讯相同技术路线的厂商屈指可数,它们有的是从源代码扫描领域拓展而来,有的本身并不是安全厂商,而是做制品库管理的。但是异曲同工,二进制SCA是确保软件供应链安全的一条捷径。
保障软件供应链安全,腾讯安全能够提供包括SCASAST等工具在内的一系列检测产品,同时还可以提供专家咨询服务,协助客户落地相关体系。
“在DevSecOps的概念之下,腾讯针对广义的软件供应链安全还能提供更多的创新技术和产品。”刘天勇举例说,“最近,腾讯安全科恩实验室就推出了一个模糊测试的解决方案T-fuzz。这样一来,腾讯在源代码扫描、开源组件的成分分析测试、模糊测试等几个维度都有了相应的工具。这些工具再加上专业的咨询服务,就构成了腾讯软件供应链安全的完整体系。”
腾讯自己就是二进制SCA最早的使用者和试验田。腾讯在其整个DevOps流水线中集成了二进制SCA扫描产品后,在应用上线之前就完成了整个开源组件的检测。腾讯内部有一个专家团队,负责实时维护开源组件知识库,能够第一时间发现漏洞,并及时通知相关的业务团队,快速完成应急响应处理。
作国中国信息通信研究院软件供应链安全实验室(3S-Lab)首批成员单位,腾讯安全的二进制SCA产品应用实践入选了2022中国信通院守卫者计划——“软件供应链安全”优秀应用案例,这是腾讯安全与上汽集团子公司零束科技开展“产研结合”的重要成果之一。该产品基于先进的二进制软件成分分析能力,在供应链安全管理、软件生命周期(SDLC)管理、关键基础设施安全、发布合规检查等各类场景中,实现了已知漏洞扫描、开源软件审计和敏感信息检测。同时,腾讯安全的代码安全检查工具Xcheck通过了《静态应用程序安全测试工具能力要求》评估。Xcheck采用创新的技术路线,摒弃了传统SAST工具主要依赖规则匹配的技术原理,基于成熟的污点分析技术与对抽象语法树的精准剖解,实现了快速精准的识别代码风险。
新赛道 新标准
当前,关于软件供应链安全整个业界还没有一个统一的标准。2022年上半年成立的“软件供应链安全实验室(3S-Lab)”,旨在联合政产学研用多方力量,进行软件供应链安全关键技术的研究,同时完善标准体系建设,开展测试评估。包括腾讯在内的很多安全厂商都加入了这一实验室,致力于联合推动软件供应链安全产业的发展与创新。据了解,实验室在成立后,已经发布了一个SBOM软件物料清单的管理标准,为下一步工作的开展开了一个好头。
“从当前的市场需求和应用场景来看,软件供应链安全还处于早期市场教育阶段。对安全比较重视的公司已经在着手填补此领域的空白。而大多数公司还没有开始行动。”刘天勇表示,在对开源组件进行检测的过程中,有两个细节需要特别注意。第一,在发现开源组件存在安全隐患后,应该如何进行修复?因为开源代码通常不属于开发者,在发现问题后,只能寄希望于开源组件的拥有者,能够及时发布更新的版本,然后开发者再进行替换。第二,开源组件如果有未知漏洞,该怎么办?随着开源软件的名气越大,使用的人越多,如果开源组件有未知漏洞,那么可能造成的危害就越大。“0day漏洞,再加上软件供应链安全这个‘放大器’,危害结果很可能是1+12Log4j之所以震惊世界,也是与此相关。”刘天勇解释说。
腾讯安全非常看好软件供应链安全这条新赛道,这将是一个巨大的增量市场,也能够充分体现腾讯安全的核心竞争力。腾讯安全已经在该领域处于领先地位,其产品的可行性、可靠性也得到了市场的全面验证。下一步,就是要开展大规模的商业应用。
“从公司内部自研自用的产品,到全面走向市场的适用于各行各业的标准化产品,我们在软件供应链安全产品层面,还有很多标准化的工作要持续做下去。产品完善的过程需要循序渐进,不可能一蹴而就。”刘天勇表示,“未来,我们会不断加强软件供应链安全方面的防御对策和手段,并在行业标准的制定上贡献自己的力量。”



继续阅读
阅读原文