软件供应链的安全问题越演越烈,在近几年的国家级实战攻防演习中频频发生。即使是在常态化,我们也在不断地帮客户(被供应链攻击的上游客户)应急或在自家环境中发现过此类事件。因此企业在防守难度上,又新增了一块高地。
作为安全产品的供应商,在瞬息万变的攻防态势下,正努力、主动地试图摸索出一条解决之道,提升产品的自身安全性以及到客户侧的整条链路安全性,以更好的服务客户。本系列文章将以供应商视角,介绍实战场景中遇到的软件供应链攻击,分享对应的常态化实践举措,以及在攻防演习前的大型集中战。
本篇章将继续围绕实战风险进一步剖析,结合日常的安全建设和运营工作,总结并提炼出四大类风险、十大应对的安全举措,以及在整个构思的过程中参照的安全框架、设计原则等,最终输出一份软件供应商面临的安全风险治理框架。
01
—
实战风险回顾
在上一篇的中,主要围绕产品漏洞、公司员工、开发流程和云端服务四方面的安全风险及实例进行介绍,其风险大致如下:
详情可至《软件供应商面临的攻防实战风险》进行回顾。
02
—
风险深入剖析
本节将进一步介绍这些风险的治理关键点以及策略,不再去对风险进行介绍,但会去拆解、分析关键点,从而琢磨出应对之道。
产品的漏洞分类方法非常多,比如按照漏洞风险等级可分为严重、高、中、低危;按照漏洞类型可分为注入类、文件处理类、不安全的配置类、不安全的设计类等;按照漏洞出现的位置可分为主机漏洞、web漏洞、客户端漏洞;…但继续这样分下去可能会使问题变得特别复杂,并不能帮助解决产品存在漏洞的现实。不过每个分类方法,似乎都有一定道理及参考意义。仔细分析这些漏洞分类方法,似乎都是在漏洞已经发生的情况下,要定级或描述时才具有参考价值。不如也“左移”一下,试着从漏洞来源角度解题,则可清晰的分为两类:
用底线思维的来看人员的安全性问题,员工终端/账号必定会失陷。对失陷的原因进行分类分析,可以分为主动和被动两种:
面向软件开发过程的风险,其实质已经远超流程了,还包括流程中的相关人员(开发、测试、配管、交付等)、系统(开发相关基础设施,如gitlab、Jenkins、k8s、AF等)。很多都依赖于企业安全基础设施的建设,但针对此类特定的场景,还可以结合攻防实战来发现安全隐患,并推动修复,比如针对CI/CD环境的渗透测试,可以从攻击者视角进行整体的安全性评估。
产品的云端服务是交付的重要环节,服务本身就已经暴露在互联网,此外就是提供的软件升级包、规则包具有投毒的动力,故吸引着攻击者的注意力。但通常由于其服务比较简单,相对来说较易守难攻,但针对内部攻破的例子却已有发生(SolarWinds)。所以可以借用内部资源的优势,从内部和外部进行安全评审及渗透测试,主动发现安全隐患并及时修补。
03
—
治理模型探索
此处的探寻是指根据已知的安全问题,去找寻相应的框架或模型来解决的过程。并不是所有的问题都有现成、成体系的模型,但是现有的一些安全模型的确已经涵盖了软件供应商遇到的安全问题。虽然有的不是那么好落地,但确实是可以起到一定的指引作用。本节将介绍三个经典模型,并尝试用自己的实践与理解的去阐述。
主要解决供应商产品的安全漏洞,通过建立安全开发组织、规范、流程、制度,配备漏洞扫描工具、人工安全设计、安全评审及渗透能力,可以实现开发安全左移和收敛软件安全漏洞的目的。
(https://www.microsoft.com/en-us/securityengineering/sdl)
至于达到的效果,需要看具体实施的颗粒度、力度而定。在笔者的实践中,开发安全体系其实是一个底座或大的安全基线,建立起来后需要持续精细化运营,才会有好的效果。但是在面对实战时,在资源有限的情况下还远不够,结果依旧会被攻击队揍。但又不能少了它,所以还需要找到真正能够应对实战攻击的补偿方法。
聚焦解决软件开发过程中,由于代码篡改、构建系统或软件仓库而带来的安全威胁。主要通过软件签名和验签的方式防篡改,从而保障整个开发、生产和交付过程中的软件安全性。通过该框架的落地可以解决上述问题中开发流程的风险,但进一步思考为什么会有篡改发生呢?大致又可以归结为相关人员和研发基础设施存在问题,而导致的结果。
(https://slsa.dev/spec/v1.0)
令人沮丧的是要全面落地SLSA的难度也很大,在资源收紧的情况下,可以从人员和研发基础设施着手设计,比如在交付环节的重要节点进行软件病毒扫描,引入蓝军渗透CI/CD相关基础设施,发现最要命的安全漏洞并推动修复。
美国研究机构MITRE推出的攻击框架,完整的包括了攻击技战法,国内不少公司的安全运营都在参照进行检测规则编写,最近几年也涌现了一些书籍专门介绍这个框架。其内容是大而全,但实际不必面面做到、况且有的也是遇不到的或利用难度很大的;其内容比较通用,没有细化到具体的场景中,比如开发环境渗透、员工终端攻防对抗,但仍旧值得借鉴其框架,来构建自己关注的场景的攻击框架。
(https://attack.mitre.org)
OWASP出品,针对CI/CD生态环境(开发环境、流程、系统)的十大安全问题总结。安全人员若在不熟悉研发环境的情况下,可参照这些风险,快速上手对公司的环境进行攻击模拟。在笔者的实践中,最开始针对开发流程的安全治理主要就是依托于这个总结,结合公司实际使用到的系统和流程等情况,枚举可能存在的安全漏洞或隐患,在由蓝军依据制定的行动计划发起攻击,从而发现安全问题之后推动业务方整改。
(https://owasp.org/www-project-top-10-ci-cd-security-risks)
04
—
安全设计原则
在风险深度剖析的基础上,参照安全模型或框架,便可规划或设计出安全对策及措施。不过也有几点原则可以参考,以便提高成功率:
其实就是可落地性,符合当前的建设阶段就是最好的。安全模型和框架往往都是大而全,要做到高度覆盖率,其实是需要配套的基础设施才能支撑。当没有好基础的时候,就应该适当的做舍弃,做出切合实际的剪裁。
站在攻防视角来看待这些风险,从影响和危害角度对其进行逐一评级和分类,重要的问题就重点投入、跟进、优化,以至解决。在找重要问题时,比较有用的一个做法就是:提前思考和底线思维,如果这个风险不管而带来的结果能否承受、外部现在最关注、最想利用的是哪个风险?
无论是重点还是一般治理,其都应该有一个度,也就是在安全人员心里要有一把称。结合实际的资源、安全态势来给出不同风险的治理程度定位,如:
05
—
风险治理举措
综上所述,应针对这四方面进行case by case的制定安全举措。其涵盖的内容主要为: