应用实践
简介
本文将阐述我们推出 vArmor 项目的目的,解析其在容器安全策略管理中的挑战与解决方案。然后从技术角度出发,介绍其在多租户隔离、核心业务加固与特权容器加固等场景的应用,展示如何凭借项目的技术特性来解决特定问题,从而实现技术与业务目标,助力企业构建云原生环境下的安全防线。
为什么推出 vArmor
容器运行时组件和 Kubernetes 早已增加了对 LSM、Seccomp 的支持,其中 Seccomp 在 Kubernetes v1.19 GA,AppArmor LSM 在 Kubernetes v1.30 GA。用户可以自行编写和管理 AppArmor、SELinux、Seccomp Profiles,并在工作负载中配置安全策略对其进行加固。几乎所有的容器运行时组件都附带了默认的 AppArmor 和 Seccomp 安全策略,但默认的 Seccomp 策略需要显式设置才会为容器开启,而默认的 AppArmor 策略需要操作系统支持才会为容器自动开启。
充分利用 Linux 系统的安全机制可以有效加固容器。例如通过 LSM、Seccomp 等技术对容器进程进行强制访问控制,可以减少内核攻击面、增加容器逃逸或横向移动攻击的难度与成本。它们的基本原理如下图所示。
然而,编写和管理安全策略则面临诸多挑战:
- 容器运行时组件的默认安全 策略存在局限性,无法防御某些漏洞、错误配置风险,也不能限制攻击者在容器内的渗透行为。
- 构建 AppArmor、Seccomp、SELinux Profile 需要专业知识。
- 为复杂且快速迭代的容器化应用制定健壮的安全策略(尤其是 Deny-by-Default 模式的策略)难度较大。
- AppArmor 或 SELinux LSM 依赖操作系统发行版,存在一定局限性。
- 在 Kubernetes 环境中,自动化管理和应用不同的安全策略比较复杂。
为了解决这些问题,vArmor 应运而生。它提供了多种策略模式、内置规则和配置选项,vArmor 会根据策略对象的定义,管理安全策略(AppArmor Profile、BPF Profile、Seccomp Profile)对不同工作负载的容器进行加固。vArmor 还基于 BPF 和 Audit 技术实现了行为建模功能,可以对不同应用进行行为采集并生成行为模型,从而辅助构建安全策略。
例如,用户可以按需配置策略对象,实现违规拦截、拦截并告警、只告警不拦截三种效果,并使用内置规则和自定义规则动态更新策略对象,从而满足不同应用场景的需要。下面我们将用几个实际应用场景来展示 vArmor 如何助力企业提升云原生环境中的容器安全防护能力。
vArmor 的应用场景
多租户隔离
多租户应用的风险
现代 SaaS 应用程序大多采用多租户模式,严重的漏洞及相应的利用链,极有可能致使恶意用户得以访问其他租户的数据。随着大语言模型时代来临,云服务的使用量还会进一步增长。因此,构建此类服务的人员更需关注多租户隔离风险并采取防范举措,以降低跨租户攻击的风险。
下图是 Wiz 在 PEACH 框架中描绘的一个典型跨租户攻击序列[1]:
大量案例表明,跨租户漏洞、漏洞利用链的根因主要包括:
- 用户接口复杂度较高,接口中的无害 bugs、features 加剧风险
- 多租户共享组件实现不当。
- 多租户独占组件安全边界实现不当。
针对这些问题,可采取以下缓解措施:
- 减少用户接口复杂度
- 将共享组件转变成租户独占组件
- 提升租户独占组件的隔离性
如何选择加固方案
Wiz 在 PEACH 框架中指出,针对多租户应用,应根据安全建模结果,综合合规、数据敏感度、成本等因素选择租户隔离技术方案。企业可以通过选择不同类型的安全边界和防御技术,将不可控风险转化为可控成本。
租户隔离用于弥补由于接口的复杂性而带来的多租户隔离安全风险。而接口复杂度则与漏洞出现概率正相关,下表描述了接口复杂度的简单评估方法[1]。