在云时代更加普遍的今天,云安全也逐被各大厂商关注,因此有必要了解常见的云安全知识。
通过本文,可以理解安全处理的过程、基础安全准则、常见攻击类型,能够检测云安全里面的 4C(code, container, cluster, cloud),研究安全机构和安全资源等等。
计算机安全指的是对计算机或者计算机系统的某个项目或者资产价值的保护;这里的资产有很多种类,包括硬件、软件、数据、程序、员工,以及它们的组合等。
安全可以集成到资产生命周期,即获取到资产的时候就存在资产安全问题了;
安全也可以集成到软件开发生命周期,软件开发包括设计、开发、测试、部署等主要过程,其中在软件产品的设计阶段就很有必要考虑到软件的安全问题了;
安全也可以通过建立有组织性的策略和程序来保障,即建立策略和规则降低意外风险和损害;
安全还可以通过定义角色和职责来保障,即在实际中很有必要建立一个有层次的结构来相应各类安全事件。
当前有很多种方式来查看系统安全,绝大部分可以划分到如下四个原则中。
攻击既可以来自于内部,也可能来源于外部。内部攻击是由一个内部安全边界中的实体发起,也就是说这个实体被授权访问系统资源,但是其使用一种不被认可的访问资源方式。
外部攻击是有边界外部发起的,例如未被该系统授权的用户或非法的用户。在网络上,潜在的外部攻击者包括网络安全余业爱好者、有组织的不法分子、国际恐怖组织、敌对的政府机构等。
被攻击的资源(物理或逻辑上)被称为资产;在一次威胁或者攻击活动中,资产通常有一个或者多个漏洞可以被威胁代理人利用。若资源存在漏洞,那么结果可能导致妥协资源的保密性、完整性或可用性。
攻击者有时候实施攻击行为并不需要移动或者删除数据,他们只需要读取某些材料,例如私密公式、加密算法 或者敲诈勒索的关键信息。
攻击类型可以分为2种,主动攻击和被动攻击。
云原生中的4C 安全包括 code, container, cluster 和 cloud,其结构图如下所示。
下图中每一层都会影响其内部的每一层的资源安全,若集群层面存在漏洞,那么通常情况下没法从Code层保护所有资源的安全。
在云层面,当前有很多云供应商,它们都有自己的一套最佳安全实践和设置。云厂商的安全设置大多是固定或者锁定的,作为用户我们需要去探索研究它们的设置,而不能一味地相信。甚至有的时候我们需要主动从安全角度武装设备和资源,从而保障其安全。
在集群层面,很多组件都有它们自己可能的安全关注点,后续会在笔者相应的博文中加以介绍。
在容器层面,容器安全很多时候需要依赖可靠的代码。该层不仅可以结合容器漏洞扫描、镜像签名来确保相关内容没有被修改,还能预防超过最小特权来利用更高的特权的问题。
云上的每一个组件都有可能称为一个受到攻击的目标,也被称为攻击面。一些攻击面可能不太明显,例如攻击门禁读卡器然后接管整个IT系统。
一种确保数据安全的方式是移除电源并且锁住整个系统,然后将其放在一个保险库中。这种方式虽然安全,但是不利于数据访问。实际中,每种环境都应该综合考虑可访问性和安全性,然后按需取舍。
在k8s中,etcd数据库组件存储了集群状态、认证和授权设置,该组件不易于重建。因此在实际使用中,应该额外对其进行备份并保护该组件的安全,一旦其被攻击,就有可能提供攻击者绝大多数访问和控制权限。
在大多数环境中,终端用户都是通过网络来访问资源的,因此网络也应当作为一个主要的关注对象。通常应该注意只开放必要的端口,保护终端用户不需要的API端点,并计划定期重新评估。
在k8s工作节点上,kubelet 和 kube-proxy 的pods有权限访问控制面板,节点往往可以通过某种方式暴露给外部;因此需要特别关注这些组件,确保它们没有攻击。在集群或者系统上安装的其它项目都可能有类似agent,这些代理组件都需要定期计划评估。
像 Platform AbstRaction for SECurity (PARSEC)这样的项目正在尝试为特定平台抽象出来的安全服务提供一个通用的API。
根据 The Parsec Book, Parsec 旨在定义一个通用的软件标准,以便于与安全对象存储和加密服务进行交互、创建一个通用的方法与函数进行交互(传统方式可能需要多专用APIs才能被访问)。
该项目允许应用利用与平台无关的原言,且同时在同一个系统上支持一系列的应用。
当前有很多出版物可以用来阅读和跟踪时下的安全威胁,FIPS (Federal Information Processing Standard) 是一个很好的出发点。我们可以通过访问 Computer Security Resource Center Publications web page 来找到标准的特殊出版物 和 研究报告等内容。
通常刊物和报告上的内容非常多,很难快速吸收消化相关信息。CSF(Cybersecurity Framework) 把安全组织分类为5种不同的活动(Identify, Protect, Detect, Respond, and Recovery),并提供了信息以便于查找相关协助处理的人员或组织。第一个活动是鉴定,它管理者网络安全所必须的组织结构,被进一步划分为6个类别,具体包括:资产管理,商业环境,管理,风险评估,风险管理策略,供应链风险管理。
通过分解大量网络安全到多个活动和类别,我们可以根据自己当前的角色找到最有用的信息,并且随着时间、精力的增长而获得更多的知识。
实际中,网络安全攻击面看起来无穷无尽,而且我们也不可能检测到任何阶段的攻击,因此我们应该把时间和精力投入到最重要的高价值资产上,并且支持相关系统和应用。然后再去考虑下一层次的依赖,并且随着环境动态变化的提高,我们更应该重新评估响应的安全事项。
除此之外,当网络攻击发生时候我们应当预先计划如何返回到系统操作或返回到一个健康状态。就像评估高价值资产一样,我们应当有一个计划用来重新评估如何返回到典型的商业计划中。
另外一个政府机构CISA( Cybersecurity and Infrastructure Security Agency) 致力于帮助政府和重要的基础设施组织减少网络攻击的风险。他们提供扫描和渗透测试,以鼓励联邦、州、当地、部落和领土政府实现最佳的网络卫生。
NVD(National Vulnerability Database) 是美国国家标准与技术研究所提供的服务,是有美国政府物理科学实验室主持的计算机安全资源中心(CSRC),在这里能找到 FIPS(Federal Information Processing Standards) 和 SP(Special Publications) 相关的文档。
除了可以找到很多文档外,我们也可以在他们的数据库里找到很多问题和清单,例如合规、漏洞、特殊问题等相关的清单。更多信息可以在 NCP(National Checklist Program Repository page) 中查找,其提供了相对低级的操作系统和应用安全配置指导。
CSI( Center for Internet Security, Inc. (CIS®)) 是一个致力于分享网络安全最佳实践、信息和工具的非盈利组织。一些信息可以免费获取,其它的一些工具可能需要会员的形式才能使用。
CIS-CAT® Pro 是其中的一个很流行的工具,需要会员身份才能使用;该工具可以在系统上运行,然后比较、汇报其和最佳实践的一致性。其数据主要按照数字的形式排列,并且通过动态web界面提供了相应的改进信息。
该组织也提供了一些基准,以便于我们自己评估系统和软件;该组织的软件也能从不同的安全考量方式给我提供一些独特的观点。
在无法使用 CIS 工具的时候,可以选择使用 kube-bench 。kube-bench 努力像CIS一样测试一些相同的问题,当然不会包含CIS 中所有测试,也不会存在一对一的映射。但是它能够让我们知道一些漏洞。
需要注意的是,如果我们使用类似与GKE这样的云上管理的集群,云供应商可能不允许我们进行相关测试。而我们自己搭建的集群,或者不受云供应商限制的集群,就比较合适用kube-bench这样的工具来查找和发现漏洞了。
另外一个用于提高安全的资源是 Homeland Security 网站, Cybersecurity Directives, 它为联邦机构列出了 BOD(Binding Operational Directives ),同时列出了一些已知、可能存在的广泛问题。
更多相关新版本信息可以在 Securing High Value Assets page 中查找,该文档可以查阅到安全团队组织结构、学习安全的方法和常规的高价值资产评估。
安全团队需要培养一种健康的团队文化。一方面需要积极响应遇见的安全问题,主动承担安全咨询的角色,让内部人员期待与安全团队一起工作。另一方面需要提高团队知识和技能,提供的内部咨询越多,那么对应参与的工作就显得更有价值。
总的来说,如果安全团队形如花瓶,那么整个组织也会随之受损;如果安全团队是一群佼佼者,那么组织就会持续把安全推到各个方面,设置让安全意识深入人心。
在安全领域一个很核心的概念是限制外部直接访问生产环境。外部终端用户需要访问某个服务,通常需要经过多层网络才能到达最终的目标服务上,这种多层的网络就能够有效的保护敏感信息和高价值资产。
其次需要保护网络流量,包括节点间的连接和节点内部的通信,在这个过程中应该由一系列的防火墙相关配合工作。
对于动态的CI/CD环境,由于其不断变化导致不易于受到保护。此时可以加入扫描和验证工具到pipeline中,同时持续进行一些检验和评估,确保问题能被捕获并被修护。
此外,需要一些与容器无关的安全工具来管理从硬件到应用每一层的访问,例如 SELinux、 Kerberos、SAML等。
本文主要对Kubernetes安全知识精要(LFS260) 中的云安全概述进行了整理,主要是翻译相关知识点,并结合个人的理解作了少量调整。
翻译过程中难免有一些不精准的地方,望各位读者理解;若有更好的见解,欢迎在评论区留言。
参考文档