作者简介:马金龙,某互联网公司网络安全经理,持有CISSP和CIW Security Analyst证书,拥有超过15年的信息安全管理经验,擅长领域信息安全体系建设及实践,著有《企业信息安全体系建设之道》一书。
2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞(CVE-2021-44228),此漏洞是因为Log4j2组件在处理程序日志记录时存在JNDI注入缺陷,攻击者利用该漏洞可以向目标服务器发送精心构造的恶意数据,触发Log4j2组件解析缺陷,实现目标服务器的任意代码执行,从而获得目标服务器权限。漏洞利用简单无需特殊配置,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响,全球许多知名企业都面临着巨大的风险,其中包括微软、Twitter、苹果、亚马逊、百度、Cloudflare、网易、Cloudflare 等科技巨头企业,这是一次典型的软件供应链安全事件。
随着云计算、物联网、大数据、AIGC等新技术的高速发展,万物皆可互联的智能时代已经到来,给人们带来便利的同时也带来了安全威胁和风险,软件供应链也已经成为网络空间攻防对抗的焦点,对关键基础设施和重要信息系统安全有着直接的影响。
软件供应链概念
传统意义的供应链是指围绕企业核心,通过对信息流、货物流、资金流的控制,从采购原材料开始,制成中间产品以及最终产品,最后由销售网络把产品送到消费者手中,它是由供应方、生产方、销售方直到最终用户组成的相互依赖的一个整体的网链模式。
而软件供应链与供应链网链模式大致相同,通常是指软件开发、软件交付以及软件产品运行的过程,以及这过程中所涉及到软件供应商、软件开发人员、软件发布平台以及其它相应的资源。
简单来讲,软件供应链就是软件从开发到运行过程中所涉及的所有软件、工具、组件和资源集合。而软件供应链安全是指在软件开发和运维过程中,保障相关软件所使用的各种供应链可信性和安全性的理念、方法和措施,保护软件生命周期内的所有流程、工具和技术的可信度和安全性,避免恶意软件、漏洞以及信息泄露等问题。
软件供应链的风险
软件供应链可以划分为开发、交付、运行三个大的环节,在每个环节都可能会引入相应的供应链安全风险从而遭受攻击,上游环节的安全问题会传递到下游环节并被放大。
开发环节
开发环节,是指软件产品在开发过程的节点,包括软件开发所涉及到的开发环境、设备、产品、系统、开发工具、第三方库等。针对开发节点的攻击有:开发工具污染、第三方库漏洞、后门、源码污染等。
例如针对开发工具Xcode非官方版本恶意代码污染的事件:Xcode 是由苹果发布的运行在操作系统Mac OS X上的集成开发工具(IDE),是开发OS X和iOS应用程序的最主流工具。2015年9月14日起,一例Xcode非官方版本恶意代码污染事件被披露,多数分析者将这一事件称为“XcodeGhost”。攻击者通过向非官方版本的Xcode注入病毒Xcode Ghost,它的初始传播途径主要是通过非官方下载的 Xcode 传播,通过CoreService库文件进行感染。当应用开发者使用带毒的Xcode工作时,编译出的App都将被注入病毒代码,从而产生众多携带病毒的APP。至少692种APP受污染,过亿用户受影响,受影响的包括了微信、滴滴、网易云音乐等著名应用。
交付环节
交付环节,是指获取所需软件产品的节点,包括通过软件官方网站、公共代码仓库、在线商店、免费软件下载站点、购买软件安装光盘等存储介质、资源共享等方式。针对交付节点的攻击有:软件替换、工具篡改、捆绑下载等。
例如捆绑下载中异鬼ⅡBootkit木马的事件:2017年7月被曝光的异鬼ⅡBootkit木马通过高速下载器传播。隐藏在正规软件甜椒刷机中,带有官方数字签名,导致大量安全厂商直接放行。木马的VBR感染模块、恶意功能模块均由云端下发,笔者可任意下发功能模块到受害者电脑执行任意恶意行为,下发的主要是篡改浏览器主页、劫持导航网站、后台刷流量等。该木马通过国内几大知名下载站的高速下载器推广,影响百万台机器。
运行环节
运行环节,是指用户使用软件的节点,使用者在使用软件产品的整个生命周期,包括产品更新升级、维护等过程。针对运行节点的攻击包括升级劫持污染、运行环境后门和漏洞、第三方库0day漏洞等。
比如网管软件供应链攻击SolarWinds Orion事件:2020年12月13日,FireEye发布了关于SolarWinds供应链攻击的通告,基础网络管理软件供应商SolarWinds Orion软件更新包中被黑客植入后门,并将其命名为SUNBURST,与其相关的攻击事件被称为 UNC2452。SolarWinds的客户主要分布在美国本土,不乏世界500强企业。随着时间的推移,事件逐渐发酵,越来越多的事实正在被逐步发掘。本次供应链攻击事件,波及范围极大,包括政府部门,关键基础设施以及多家全球500强企业,造成的影响目前无法估计。
另外,国内企业软件开源占比逐年增多,但问题也随之而来,包括开源软件使用不规范、软件交付渠道不可控等。引入开源软件为敏捷开发带来极大便利,大量代码克隆虽然可以极大提升软件开发速度,但开源项目引用过程中缺乏对漏洞、恶意代码的检测、修复,代码复用产生的漏洞也成为软件供应链的重大安全隐患。另外,目前针对软件供应链薄弱环节的网络攻击呈现指数级增加,全球针对软件供应链的安全事件频发、影响巨大,这将给企业安全防护带来新的挑战。当黑客利用软件供应链的漏洞入侵企业系统,可以获取敏感信息如机密技术、个人隐私信息等,还可以对企业开展勒索攻击,这将会给企业造成重大的经济损失和声誉影响。
软件供应链安全应对措施
企业执行软件供应链安全措施的目的就是配合企业其它的安全策略对来自于企业以外的第三方组件任何安全风险进行预防、检测和缓解,保护用户以及企业数据和信息资产。
在开发环节,企业对开源组件进行管理,通过开发框架、开发平台的规范化梳理形成企业自有的开源框架及组件白名单,并通过预置基础框架、白名单组件方便同类产品直接复用框架和白名单组件。开发人员在提前准备好的开发环境、开发工具编码实现业务功能,代码实现后需要提交到统一的代码存储平台进行管理,并借助持续集成(Continuous Integration,CI)、持续交付(Continuous Delivery,CD)环境和工具执行集成构建打包,通过各类专业自动化工具如安全漏洞扫描、开源组件版本检查、主机安全扫描工具、配置基线加固检查工具、代码审计工具、黑白盒测试、静态应用安全测试(Static Application Security Testing,SAST)工具、动态应用安全测试(Dynamic Application Security Testing,DAST)工具以及交互式应用安全测试(Interactive Application Security Testing,IAST)等进行漏洞检测以及代码验证,确保软件代码安全,最好能利用DevSecOps中的安全工具平台形成的从代码提交后触发全流程安全工具扫描审查的自动化流水线。在交付环节,企业建立有效的交付流程和交付渠道,在软件发布前进行证书和软件签名,并确保应用市场合规合法,提醒用户到合法正确的官方渠道进行下载。最后在运行环节,企业应该提供相应的软件用户使用文档,告知软件的使用、更新升级的方法,并提醒用户在使用更新包时对文件进行检验,确保来源合法正确等。
另外,企业软件供应链还需要采取适当的安全措施进行有效的管理,如明确软件使用标准,做好软件(包括开源软件)的台帐管理,进行针对性的安全意识培训,接收最新威胁情报,建立有效的漏洞及事件应急响应机制,以及使用适当的技术手段进行持续监控等措施的实施,提高企业的业务稳定性和数据安全性。
明确软件使用标准
建立一个全面且适合自身特点的供应链管理框架和标准,以确保所有人都能够在设计和实施供应链安全措施的过程中遵循统一的标准和规范。使用管理及技术的手段明确软件使用标准,其中包括风险评估、安全审计、技术合规性审查、监督工具和策略等来实现,如需要定期对开源软件进行全面风险评估,以适应不断变化的开发运行环境。
做好软件台帐管理
建立适用企业的软件物料清单(Software Bill of Materials,SBOM),根据企业实际情况,通过开发全流程逐步实现对软件全生命周期SBOM生成、更新和归档标识,形成透明的软件组成成分使用、流转和交付全流程自动化审查控制。通过对SBOM进行流程化、工具化的管理,可自动化、持续地生成和更新软件SBOM清单,可以对0day漏洞组件进行快速定位和应急响应。
针对性安全意识培训
建立针对性的安全培训和教育机制,提高员工的安全意识水平。在保障供应链安全的过程中,所有人员都应该具备一定的安全意识和技能。通过针对性的安全意识培训可以为员工提供必要的知识、技能和实践经验,让他们能够在软件开发和运维过程中遵循正确的安全操作流程,提高每个人对于供应链安全的认识和重视程度,形成全员参与的安全防护意识。
接收最新的危胁情报
建立一个监控平台和危胁情报中心,可以根据业务监控状态和最新的危胁情报预测攻击趋势,开展针对性安全防御。供应链攻击大多是黑客先找一个防御薄弱的目标,然后目标企业被渗透,具有价值的数据被泄露,并且根据所利用的漏洞对可能使用相同软件及系统的目标执行横向移动。当我们接收到实时和相关的威胁情报后,我们就会制定相应的针对性安全防护,这样企业就可以降低被攻击的风险,从而保护企业的数据和信息资产。
有效的漏洞及事件应急响应
建立有效的漏洞及事件应急响应机制,可以大大降低漏洞及事件给企业带来的影响。漏洞是导致系统被攻击和破坏的关键原因之一,漏洞管理及事件应急响应是保障供应链安全的重要措施。漏洞管理需要建立有效的工具和流程,从源头上避免漏洞产生并及时修复已经存在的漏洞,事件应急响应可以采用预案和流程等方式,在出现安全事件时快速反应和处置,最大限度地减少损失。
除了相应的技术手段,为了确保供应链的可靠性和安全性,企业还可以申请第三方审计和认证,让用户对产品充满信心,提高企业知名度。企业应该遵循国家及行业现有的供应链相关标准和规范,同时要求供应商和合作伙伴也遵循相应的标准和规范来保证整个供应链的可信度和安全性。
总结
整个软件供应链是一种生态,上下游都有自我的责任和义务。作为在供应链的上游的数据、产品、服务的供应方,在产品生命周期确保安全,分发给下游的软硬件/工具/组件等不被植入、篡改、伪造或者替换,并且确保在分发传递中的信息不被泄露给未授权者,同时提高员工安全意识,避免被攻击者钓鱼攻击或社工,保证产品的完整性。而做为下游产品厂商,需加强对上游供应商产品、补丁、数据及服务进行评估及审核,强化审核流程,只有这样才能保障业务持续安全运营。
希望朋友们通过此文简单了解软件供应链的一些知识,在日常工作中,结合企业自身的情况设计及实施有效的供应链安全管理策略,明确软件使用标准,以及供应方评估的相应标准及流程,加强安全意识教育,从而降低潜在的安全风险,提高企业的安全防护水平。