上周跟一个做垂直SaaS的小团队技术负责人吃路边摊,他攥着冰可乐的手还在抖。
前阵他们按监管要求做等保自查,顺手扫了下项目依赖,发现用了快两年的一个开源日志组件,三个月前的某个更新里,藏了个能往境外服务器发请求的后门。测试环境还存着不少客户的脱敏数据,要是真被爬走,他那二十人的小团队,直接赔到关门都不够。
这事没那么玄。
没人盯着的依赖才是最大的窟窿
很多人聊起供应链安全,第一反应是大厂的核心系统被攻击,是硬件里藏的后门,是上游供应商的资质问题。说白了,90%的中小团队碰到的坑,都在他们随手import的几行依赖里。
开发者写代码的时候,为了省半小时造轮子的时间,随手从公共仓库拉个star数过千的组件,连里面的代码有多少行是第三方提交的、最近半年有没有人维护、上次更新是几年前,一概不看。
开源组件的供应链风险,本质上是你把自己的安全边界,让渡给了你根本不认识的陌生人。
star数高不代表绝对安全。前两年有个维护了好几年的轻量HTTP工具,作者突然上传了带挖矿逻辑的新版本,半个月内被十几万次下载,波及的团队小到几个人的工作室,大到做电商的中型平台。没人会主动去拆开源组件的每一行代码,大家都默认,star高、用的人多,就不会有问题。

安全团队的责任盲区就在这
大部分公司的安全团队,日常盯的是什么?是防火墙有没有被异常IP扫,是内部员工有没有乱插私人U盘,是生产环境的服务器有没有爆出新的CVE漏洞。
没人管开发环境里的依赖。
这是个天然的空白地带。开发觉得我写的业务逻辑没问题,依赖是开源社区的锅;安全团队觉得我只管线上运行的系统,开发阶段的事不归我管。真出了事,两边对着甩锅,最后损失的还是公司自己。
大部分公司的供应链安全投入,都卡在了开发和安全的责任边界上。
很多小公司甚至连专门的安全岗都没有,全靠开发自己自觉。更讽刺的是,现在的黑客根本不会手动找目标,都是写好自动化脚本,只要你用的组件有已知漏洞,或者组件里藏了后门,脚本直接顺着依赖就打进来,根本不管你公司是十个人还是一千个人。

上次那个吃路边摊的技术负责人跟我说,他之前总觉得自己公司小,没人看得上。直到扫出那个后门的时候,回去翻了下测试环境的访问日志,发现已经有自动化脚本在里面跑了快一周,只是测试环境没放真实的核心数据,才没出大事。
他说那感觉就像你租的房子,早就被人在门口装了个针孔摄像头,你还天天在屋里开内部会,聊哪个客户的合同要改。
不用花大价钱也能把事做好

很多人觉得搞供应链安全,就得招专门的团队,就得买几十万的商业扫描工具,小公司根本承担不起。
真的。
没那么复杂。
别随便用你不认识的组件。star数低、提交记录少、大半年没维护的,直接换掉,别图省事。也别在依赖配置里随便写自动更新的规则。很多开发者喜欢加个^符号,意思是只要是兼容的最新小版本,都可以自动拉取更新。这就相当于你天天主动把陌生人塞给你的新锁装在你家门上,你连锁里面是什么结构都不看。
锁版本是成本最低的供应链安全措施,没有之一。
就把你所有项目的依赖版本固定死,要更新的时候,专门抽时间检查更新的内容,确认没问题了再手动升级,多花不了多少时间。还有,现在有不少免费的开源扫描工具,定期跑一遍,就能把已知的依赖漏洞扫出来,不用买昂贵的商业产品。
说白了,就是别把省下来的开发时间,最后换成出事的时候赔的钱。
那个技术负责人说,他现在每次拉新的开源组件,都要翻至少三个月的提交记录,看看最近的提交是不是原作者本人做的,有没有陌生的账号提了奇怪的代码。哪怕多花半小时,也比半夜接到告警电话强。
很多人总说供应链安全是个很虚的概念,是大厂要考虑的事。其实根本不是。就是你写代码的时候多留个心眼,别随便把陌生人的代码往自己系统里塞,就这么简单。