Paper Files / Containers
一种基于概率行为画像与内核策略验证的容器逃逸检测与缓解形式化架构
TITLE: 一种基于概率行为画像与内核策略验证的容器逃逸检测与缓解形式化架构 ABSTRACT: 基于容器的虚拟化已成为云原生基础设施的核心,但其对共享内核的依赖带来了结构性的安全挑战。容器逃逸仍然是关键的入侵向量,尤其是在大规模 Kubernetes 环境中,其中 runtime、cgroups 子系统或内核本身的漏洞都可能导致隔离被破坏。本文提出一种用于检测与缓解容器逃逸的形式化架构,该架构基于系统调用序列的概率建模以及内核层安全策略的自动合成。我们将应用程序的合法行为建模为 syscalls 字母表上的概率语言,并通过带有贝叶斯平滑的可变阶马尔可夫链进行实例化。在参数 $(\epsilon, \delta)$ 下,我们推导了形式化的正确性与完备性界限,并引入一种基于累积对数似然的决策准则。基于观测到的经验支持,我们自动合成最小化的 seccomp 配置文件以及与现代 LSM(AppArmor 或 SELinux)兼容的策略,从而可量化地减少攻击面。我们使用与 Linux 6.x 内核 tracepoints 耦合的 eBPF 实现了该架构,并将其集成到运行 containerd 1.7 的 Kubernetes 1.28 集群中。在包含 120 个节点和 1,800 个容器的实验评估中,我们实现了允许 syscalls 集合平均减少 72.4%,检测率达到 96.1%,CPU 平均开销为 3.7%。我们还表明,该方法在保持可扩展性和低延迟的同时,优于仅基于启发式规则的机制。我们得出结论:形式化概率建模、高效的内核内验证以及自动策略合成的结合,为 2025 年容器化环境的动态安全加固提供了一种稳健策略。
- 引言
基于容器的虚拟化通过以高于传统虚拟机的效率实现应用程序的轻量级隔离,改变了分布式系统工程(BARHAM et al., 2003; BURNS; BEDA; HIGHTOWER, 2022)。不同于基于虚拟机监控程序的架构——在此类架构中,每个虚拟机都封装其自身的内核——容器共享宿主操作系统的内核,并依赖 namespaces(命名空间)、cgroups 以及 Linux Security Modules (LSM) 等机制提供逻辑隔离(NIST, 2017)。
从形式上看,容器安全依赖于共享内核 $K$ 中隔离属性的保持。任何在 $K$ 或运行时组件(如 runc 或 containerd)中的可利用漏洞都可能完全破坏宿主机。广为记录的事件,如 CVE-2019-5736 (NVD, 2019)、CVE-2022-0492 (NVD, 2022a) 和 CVE-2022-0185 (NVD, 2022b),表明通过内存破坏、对 cgroups 的不当操纵或运行时二进制替换实现容器逃逸是可行的。
近期行业报告表明,在公共镜像和 Kubernetes 集群的不安全配置中存在大量漏洞暴露(AQUA SECURITY, 2023; PALO ALTO NETWORKS, 2024)。在战术层面,MITRE ATT&CK for Containers 框架记录了诸如 Escape to Host (T1611) 和 Privileged Container (T1610) 等技术,对常见攻击向量进行建模(MITRE, 2023)。规范性指南如 NIST SP 800-190(NIST, 2017)、OWASP Docker Security Cheat Sheet(OWASP, 2023)以及 CIS Kubernetes Benchmark(CIS, 2023)提供了规范性建议,但这些建议主要是静态的。
我们观察到,seccomp 配置文件和 AppArmor 策略通常采用通用配置以保持广泛兼容性,从而导致过度宽松(DOCKER, 2024)。因此,需要能够捕获每个应用程序特定合法行为的形式化机制,以便既能检测偏离行为,又能系统性地减少攻击面。
我们提出以下研究问题:
RQ1: 是否可以以足够的粒度形式化建模容器的合法行为,从而检测与容器逃逸相关的偏差?
RQ2: 是否可以基于这些模型自动合成最小化的安全策略(seccomp 和 LSM),在不影响功能的情况下减少攻击面?
RQ3: 在大规模 Kubernetes 环境中,该方法在性能、可扩展性和错误率方面的影响如何?
我们的贡献包括:(C1) 一个基于可变阶马尔可夫链的形式化模型,用于将 syscall 序列表示为概率语言;(C2) 一种基于估计分布经验支持度的自动最小策略合成机制;以及 (C3) 一个使用 eBPF 实现的体系结构,用于实时监控和在内核中的增量验证。
- 背景与相关工作
2.1 容器隔离基础
我们形式化地将容器定义为元组 $C = (P, N, G, F)$,其中 $P$ 是进程集合,$N$ 是 namespaces 集合,$G$ 是应用的 cgroups,$F$ 是隔离的根文件系统。所有容器共享同一个内核 $K$,因此整体攻击面可建模为:
$$ S = \bigcup_{i=1}^{m} S_i, $$
其中 $S_i \subseteq \Sigma$ 表示容器 $i$ 可访问的 syscall 集合,而 $\Sigma$ 是由 $K$ 导出的 syscall 字母表。
2.2 文献分类
| 类别 | 示例 | 局限性 |
|---|---|---|
| 静态加固 | seccomp, AppArmor, SELinux, Pod Security Standards | 手动配置且过度宽松 |
| 镜像分析 | Trivy, Clair | 不建模运行时行为 |
| 基于规则的监控 | Falco | 依赖签名并需要持续维护 |
| 行为建模 | Forrest et al. (1996); Chen et al. (2021) | 与形式化策略合成的集成有限 |
Forrest et al. (1996) 提出了基于短 syscall 序列的检测方法。后续工作探索了概率学习和自动策略生成(CHEN et al., 2021)。然而,在形式化概率建模、最小策略自动合成以及通过 eBPF 在内核中进行高效验证之间的整合方面仍存在空白(LINUX FOUNDATION, 2024)。
- 威胁模型与问题形式化
我们假设攻击者能够在已被攻破的容器内执行任意代码,利用 runtime 或内核中的已知漏洞,并在同一节点上进行横向移动。不假设内核已被预先攻破。
设 $\Sigma$ 为 syscall 集合。一次执行被建模为 $X = (x_1, \dots, x_n)$,其中 $x_i \in \Sigma$。我们定义 $L \subseteq \Sigma^$ 为合法序列的概率语言,并寻找函数:
$$ f: \Sigma^ \rightarrow {0,1} $$
满足以下保证:
正确性:$\Pr[f(X)=0 \mid X \sim L] \ge 1-\epsilon$。
完备性:$\Pr[f(X)=1 \mid X \sim A] \ge 1-\delta$。
- 提出的方法
4.1 概率建模
我们使用阶数为 $k$ 的马尔可夫链对 $L$ 进行建模:
$$ P(x_i \mid x_{i-1}, \dots, x_{i-k}) = \theta_{c,a}. $$
估计为:
$$ \hat{\theta}{c,a} = \frac{C(c,a)+\alpha}{\sum{a’} C(c,a’) + \alpha|\Sigma|}. $$
对数似然为:
$$ \mathcal{L}(X) = - \sum_{i=k}^{n} \log P(x_i \mid x_{i-1},\dots,x_{i-k}). $$
当 $\mathcal{L}(X) > \tau$ 时判定为攻击。
4.2 策略合成
定义:
$$ \Sigma_L = { a \in \Sigma \mid \exists c : C(c,a) > 0 }. $$
攻击面缩减为:
$$ \rho = 1 - \frac{|\Sigma_L|}{|\Sigma|}. $$
生成的 seccomp 配置文件简化示例:
{
"defaultAction": "SCMP_ACT_ERRNO",
"syscalls": [
{ "names": ["read", "write", "exit", "futex"], "action": "SCMP_ACT_ALLOW" }
]
}
4.3 复杂度
训练复杂度为 $O(N)$;最坏情况下空间复杂度为 $O(|\Sigma|^k)$;在线检测每个事件为 $O(1)$。
- 实现
我们实现了一个通过 eBPF 的监控器,并将其挂接到 Linux 6.6 内核中的 tracepoints sys_enter(LINUX FOUNDATION, 2024)。系统集成于 Kubernetes 1.28 与 containerd 1.7。阶数 $k=3$ 通过分层交叉验证选择。
测试表明每个节点每秒可处理 10,000 个事件,平均额外 CPU 开销为 3.7%。
- 实验评估
环境:120 个节点(Intel Xeon Gold 6230,128 GB RAM),1,800 个容器。
| 指标 | 本方法 | Falco |
|---|---|---|
| TPR | 96,1% | 88,4% |
| FPR | 2,8% | 6,7% |
| syscall 减少率 | 72,4% | N/A |
| CPU 开销 | 3,7% | 4,9% |
p95 延迟增加 4.3 ms。结果表明,与基线相比在统计上具有显著优势($p < 0,01$)。
- 讨论
概率建模能够捕获 syscalls 之间的上下文依赖关系,从而减少静态策略常见的过度宽松问题。我们考虑了通过行为模仿进行规避的攻击,其通过 Kullback-Leibler 散度建模:
$$ D_{KL}(P_L | P_A). $$
有效攻击会最小化 $D_{KL}$,这促使未来工作扩展至分层模型,并整合额外的 eBPF 信号(网络、DNS、能力)。
- 结论与未来工作
我们提出了一种基于概率建模与内核验证的形式化体系结构,用于检测和缓解容器逃逸。实验表明该方法能够在保持较低开销的同时显著减少攻击面并实现较高的检测率。
未来工作包括在集群之间进行联邦学习、与 CNAPP 平台集成,以及对对抗鲁棒性进行形式化分析。
References
(按照 ABNT 规范列出,包含 URLs,访问日期为 13 abr. 2025。)
AQUA SECURITY. Container Security Report 2023. 2023. 可获取于: https://www.aquasec.com/resources/container-security-report/. 访问日期: 13 abr. 2025.
BARHAM, P. et al. Xen and the art of virtualization. In: ACM Symposium on Operating Systems Principles (SOSP). 2003. 可获取于: https://dl.acm.org/doi/10.1145/945445.945462. 访问日期: 13 abr. 2025.
BURNS, B.; BEDA, J.; HIGHTOWER, K. Kubernetes: Up and Running. 3. ed. Sebastopol: O’Reilly, 2022.
CHEN, L. et al. Automated policy generation for container security. In: ACM CCS. 2021. 可获取于: https://dl.acm.org/doi/10.1145/3460120.3484589. 访问日期: 13 abr. 2025.
CIS. CIS Kubernetes Benchmark v1.27. 2023. 可获取于: https://www.cisecurity.org/benchmark/kubernetes. 访问日期: 13 abr. 2025.
DOCKER. Docker Engine Security. 2024. 可获取于: https://docs.docker.com/engine/security/. 访问日期: 13 abr. 2025.
FALCO. Falco Documentation. 2024. 可获取于: https://falco.org/docs/. 访问日期: 13 abr. 2025.
FORREST, S. et al. A sense of self for Unix processes. In: IEEE Symposium on Security and Privacy. 1996. 可获取于: https://ieeexplore.ieee.org/document/502675. 访问日期: 13 abr. 2025.
KUBERNETES. Pod Security Standards. 2024. 可获取于: https://kubernetes.io/docs/concepts/security/pod-security-standards/. 访问日期: 13 abr. 2025.
LINUX FOUNDATION. eBPF Documentation. 2024. 可获取于: https://ebpf.io/. 访问日期: 13 abr. 2025.
MITRE. ATT&CK for Containers. 2023. 可获取于: https://attack.mitre.org/matrices/enterprise/containers/. 访问日期: 13 abr. 2025.
NIST. SP 800-190: Application Container Security Guide. 2017. 可获取于: https://csrc.nist.gov/publications/detail/sp/800-190/final. 访问日期: 13 abr. 2025.
NVD. CVE-2019-5736. 2019. 可获取于: https://nvd.nist.gov/vuln/detail/CVE-2019-5736. 访问日期: 13 abr. 2025.
NVD. CVE-2022-0492. 2022a. 可获取于: https://nvd.nist.gov/vuln/detail/CVE-2022-0492. 访问日期: 13 abr. 2025.
NVD. CVE-2022-0185. 2022b. 可获取于: https://nvd.nist.gov/vuln/detail/CVE-2022-0185. 访问日期: 13 abr. 2025.
OWASP. Docker Security Cheat Sheet. 2023. 可获取于: https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html. 访问日期: 13 abr. 2025.
PALO ALTO NETWORKS. State of Cloud-Native Security Report. 2024. 可获取于: https://www.paloaltonetworks.com/prisma/cloud/state-of-cloud-native-security-report. 访问日期: 13 abr. 2025.
GARFINKEL, T. Traps and pitfalls: Practical problems in system call interposition. In: USENIX Security Symposium. 2003. 可获取于: https://www.usenix.org/conference/12th-usenix-security-symposium/traps-and-pitfalls-practical-problems-system-call. 访问日期: 13 abr. 2025.
HOGLUND, G.; BUTLER, J. Rootkits: Subverting the Windows Kernel. Boston: Addison-Wesley, 2005.