关于软件供应链安全的一些想法

admin 2024年5月8日07:39:21评论3 views字数 2415阅读8分3秒阅读模式

关于软件供应链安全的一些想法

软件供应链安全也算是业内比较有研究价值的一个方向。产生这个方向的主要原因就是:

开源代码无处不在

对于任何公司、组织和个人开发者来说,问题不是你是否在有使用开源代码,而是你在使用什么开源代码,以及使用了多少。

软件供应链引发的安全问题

远了不说,就说近期的,2024年3月29日,微软开发人员在liblzma/xz工具和动态库中发现一个涉及混淆恶意代码的供应链攻击,不过严格意义上来讲这算是一次 APT 攻击,不完全算是供应链投毒;再远一点就是 NPM 供应链、Python 等投毒,再往前看 Solarwinds 被投毒等等,案例实在是太多太多了...

什么是供应链投毒

供应链是由一连串供应商和采购商组成的团队,以接力赛团队的模式,完成从采购原材料,到制成中间产品及至最终产品,然后将最终产品交付用户为功能的,由一系列设施和分布选择形成的网络。

而在计算机领域,软件供应链是将制造业的供应链概念用在软件开发上,是指在软件开发过程中,所需要的组件、软件包、函数库、开发工具等。

软件供应链投毒是指在软件开发和分发过程中,恶意攻击者植入恶意代码或者其他恶意元素到你软件中。这种攻击方式可以在多个环节进行,例如在源代码、编译环境、更新服务器或者其他供应链的任何部分。攻击者的目的通常是通过这种方式来感染最终用户的计算机系统或者窃取数据。

软件供应链管理的必要性

短视的看,组织做供应链管理主要是为了规避安全风险,企业面对的大规模勒索、数据泄露等安全事故都与此有关。要知道,就像 log4j 一样,攻击者做的事儿基本是无差别,也就是说他们快速扫描到哪里有洞直接开干,任何一个组织只要在公网上暴露出自己的脆弱点,被勒索或者发生数据泄露就是早一天晚一天的事儿。

安全团队尽力会缩小对外暴露的攻击面,但一旦你代码中使用的某些开源组件爆出漏洞,可能安全团队建设好的纵深防御就对攻击者大门敞开咯。

还有一个点对企业很重要,合规!这一点在国内还好,一旦涉及到出海,问题很严重,例如你使用的开源组件许可是 GPL,那你不开源就不合规,而 BSD MIT 之类的就没多大影响,这一点真的对企业很重要。

虽然说做供应链安全是一个不错的趋势,因为毕竟现代工业化研发模式以搭积木为主,你的代码会集成大量第三方组件,安全和运维团队会做好 DAST SAST IAST等,只不过由于第三方开源组件的安全性有待商榷,这些漏洞也会传导到你自己的代码上...但是供应链安全的价值在哪里?你在企业内要做一件事一定要说清楚它的价值,以说服你的 +1 乃至 CTO 来支持你做这件事对吧。不过目前来看更多是偏向事中或者事后的安全,也就是说供应链安全暂时无法做到预先规避有漏洞的开源组件,只能分析清楚一个应用使用到了哪些开源组件,这些组件的版本是什么,有没有高危漏洞,并给出相应的见解,例如升级到某个版本,或者暂时无法升级选择什么样的安全策略规避它...

题外话

说到这里,我再说说个人的观点吧:

我觉得软件供应链安全有一点虚幻,要知道系统的安全性从来不在于长板有多强,而是短板呀!很多情况下,开源项目的维护者是一批一批的出现然后消失掉,软件们只会陷入无穷无尽的混沌,处于熵增状态(当然你说我花一大笔钱找专职人员来维护也可以)。更关键的是,现在的供应链分析工具大部分是真的只专注于事中和事后,事前最多有些威胁情报,所以你说供应链安全有价值吗?一定有,他也能解决很大一部分问题,例如许可证;但它的价值和 RASP 这类相比还是差一些...

做供应链安全的难点

最大的难点:事前不太容易发现问题,拿 RASP 举例子,就算是 0day,假设你的应用程序有什么异常举动,RASP 一定会产生告警;但供应链安全并不能预先发现你用到的开源组件有哪些未出现的漏洞...

剩下的难点更多是工程上的,例如检测结果不准确、误报高、修复难等问题,我举个例子吧:

假设你扫描清楚企业内全部的第三方依赖链条和关系,你有一个超大的 list,这时候你发现有一大批漏洞需要处理,要么升级,要么在 WAF 上增加规则之类的,你要做的事儿大概是针对不同业务确定修复优先级、分级修复、识别漏洞的触发或者利用门槛、搞一些补救措施等;更高层面的看,你肯定需要向上汇报对吧,那你就需要拿出实打实的数据,例如我们有 100 个用到的库,其中 90 个存在漏洞,但其中敏感业务中存在 10 个,那这部分要修复率 100%,暂时无法修复的和非核心业务上的漏洞,也要分析清楚后续动作和解决时间表是吧...

更重要的是,前面的做法前提是你需要有一套成熟的软件成分分析工具,手写很难,大概率要用商业化的产品,这个成分分析工具要能对源代码和二进制都有检测能力,这听起来简单但做起来很杂,不同语言、不同的包管理工具查依赖关系的原理都不太一样,而且还要保证准确度才行。

我上家公司用的是 Synk,我也试用过国产的 墨菲安全 的产品,但由于业务模式所限,我们不能使用国内的产品,平心而论,墨菲的产品做的确实不错...

同时,做供应链安全还需要做准入限制,这一部分又是需要工具来做,nexus就可以。

假设企业内想探索的话,我建议按照这个思路搞:

  1. 审核和验证使用的第三方组件和库,保证软件源可信赖,这一步非常烦非常麻烦

  2. 使用安全的开发实践,包括做 DAST SAST IAST等,特别是配置文件扫描、硬编码之类的都要查

  3. 监控和分析软件行为,例如用上 RASP

  4. 情报很重要

供应链安全是企业安全基础建设的重要环节,不要在前期做,中期后期等安全基础过得去再搞是比较靠谱的。

写在最后

供应链安全小公司和大公司的做法也不大一样,但如果想做就需要先把基础打好,CI CD 的安全性做好,先用Snyk 墨菲 Dependencycheck等搞清楚用到了哪些包,然后找到核心业务,针对性做检查、做升级,并配合做好包管理,这就是个初步的供应链安全管理了。如果不想花钱,很多 SCA 工具都是开源或者免费体验的,先做起来看看就清楚了。

原文始发于微信公众号(imBobby的自留地):关于软件供应链安全的一些想法

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月8日07:39:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   关于软件供应链安全的一些想法https://cn-sec.com/archives/2717973.html

发表评论

匿名网友 填写信息