现代软件开发的依赖树让黑客更容易从小型开源专案入手攻克。
若恶意黑客参与了小型开源软件的开发,在自身关键应用中包含了这些开源软件的公司企业就可能面临遭遇漏洞利用的风险。安全专家指出,这些专案的开源本质和程式码的广泛应用,对企业造成了切实的威胁。
一旦潜入开源专案,罪犯就有多种下手方式可供选择,但必须动作够快。因为无论是后门键盘记录器还是某种木马,如果不是动手够快,或者真的非常非常隐蔽,用不了多久就会被 “众人之眼” 揪出。
网络罪犯之所以热衷于黑开源专案,正是由于开源专案兼具灵活性和可用性的特点,能为黑客行动的开展带来大量机会。真可谓众所周知的攻击途径了。而且开源专案被黑概率很可能比大众认知的要高得多。
安全公司 Checkmarx 安全研究主管 Eran Yalon 就表示:
几乎所有开源专案都要求贡献者的工作要经过专案其他成员稽核才能并入专案。稽核层级随贡献者个人声誉而递减,贡献者受信度越高,则稽核层级越少。尤其是在大型知名开源专案中,比如主流 Linux 发行版,整个稽核过程非常精细完备,也有充足的人力资源持续执行这一规程。
专案越小,则可供保障安全的资源就越少。所以,小型专案被黑的情况也就更常见了。
专家指出,超小型开源专案是黑客注入恶意程式码的重灾区。
超小型开源软件包也有可能是大型软件包的依赖,无论依赖层有多深。你觉得自己的专案只有一两个依赖,但实际上可能有成百上千的,而且你根本无法彻查。
比如说,由个人开发并维护的开源专案 Event-stream 就被恶意黑客接手,成功向经由流行 JavaScript 包管理器 NPM 分发的程式码库中注入了恶意程式码。
刚刚接管的时候该专案还是像以往一样维护。此后,这名恶意使用者修改了 Event-stream 自身依赖的一个包,注入了可以劫持特定比特币钱包的程式码。
该攻击的影响范围有多大?该专案程式码每周下载量近 150 万次,用在其他 1,600 多个软件包中,而这些软件包自身又各有数百万次的下载量。
另一起非恶意事件例证了小型开源软件包的深远影响:2016 年 3 月 23 日,开发者 Azer Koçulu 删除了他通过 NPM 分发的 250 个模组。其中一个模组非常之小,仅含 11 行程式码,是往文字字串左侧新增空格以适应变数定义的。结果,这个名为 “left-pad” 的模组是全世界成千上万的企业和商业软件所用依赖包的一部分,包括用 JavaScript 开发的中流砥柱 Babel 和 Node 构建的那些。
而由于 “left-pad” 下架,这些数以千万计的应用全都失灵了。虽说开发者重新建立该功能也不是很难,但如此简单的动作受到的短期影响也已经十分巨大。
开源的普遍性众所周知。Gartner 资料显示,95% 的企业在内部专案中使用开源代码。
鉴于敏捷开发运维方法的时间压力,由内部开发团队编写自有功能和函式库来打造确定性防御的做法,是不太可能被采用的。
于是,开发团队怎么增强程式码安全性呢?
第一步就是甄选纳入技术栈的库和开源专案。有些专案的 “履历” 优于其他专案。
第二步,确保所用专案是活跃专案,有定期更新。检视专案的活动历史可以确保专案是有众多活跃开发者支援的好专案。有漏洞出现时能被及时修复的概率也高得多。
而一旦补丁可用,要确保及时应用补丁修复漏洞。常有关注零日漏洞和黑客国家队的组织机构自己的 “基本程式码安全” 却没做好。保持开源代码更新和做好基础的程式码扫描,才是最基本而坚实的网络威胁防线。
这就是个信任问题:对开源专案和使用该程式码的内部开发人员的信任。恶意开源代码包如果没人用,也是不会造成严重后果的。IT 部门里谁能升级或修改软件包必须有着非常明确的规定。必须有人监管着所发生的一切。
left-pad:
Babel: