← Retour aux articles

Paper Files / Containers

TITRE: Une Architecture Formelle pour la Détection et l’Atténuation des Évasions de Conteneurs Fondée sur des Profils Comportementaux Probabilistes et la Vérification de Politiques dans le Noyau

ContainersFR

TITRE: Une Architecture Formelle pour la Détection et l’Atténuation des Évasions de Conteneurs Fondée sur des Profils Comportementaux Probabilistes et la Vérification de Politiques dans le Noyau RÉSUMÉ: La virtualisation basée sur les conteneurs s’est imposée comme un fondement de l’infrastructure cloud-native, mais sa dépendance à un noyau partagé impose des défis structurels de sécurité. Les évasions de conteneurs demeurent des vecteurs critiques de compromission, en particulier dans les environnements Kubernetes à grande échelle, où des vulnérabilités dans le runtime, dans le sous-système cgroups ou dans le noyau lui-même peuvent entraîner une violation de l’isolement. Dans ce travail, nous proposons une architecture formelle pour la détection et l’atténuation des évasions de conteneurs fondée sur la modélisation probabiliste des séquences d’appels système et la synthèse automatique de politiques de sécurité au niveau du noyau. Nous modélisons le comportement légitime des applications comme un langage probabiliste sur l’alphabet des syscalls, instancié par des chaînes de Markov d’ordre variable avec lissage bayésien. Nous dérivons des bornes formelles de correction et de complétude sous des paramètres (ε, δ) et introduisons un critère de décision basé sur la log-vraisemblance cumulée. À partir du support empirique observé, nous synthétisons automatiquement des profils seccomp minimaux et des politiques compatibles avec les LSM modernes (AppArmor ou SELinux), réduisant de manière quantifiable la surface d’attaque. Nous avons implémenté l’architecture avec eBPF couplé à des tracepoints du noyau Linux 6.x, en l’intégrant à un cluster Kubernetes 1.28 avec containerd 1.7. Dans une évaluation expérimentale impliquant 120 nœuds et 1 800 conteneurs, nous avons obtenu une réduction moyenne de 72,4 % de l’ensemble des syscalls autorisés, un taux de détection de 96,1 % et une surcharge moyenne du CPU de 3,7 %. Nous démontrons également que l’approche surpasse les mécanismes reposant exclusivement sur des règles heuristiques, tout en conservant l’évolutivité et une faible latence. Nous concluons que la combinaison d’une modélisation probabiliste formelle, d’une vérification efficace dans le noyau et d’une synthèse automatique de politiques constitue une stratégie robuste pour le durcissement dynamique des environnements conteneurisés en 2025.

  1. Introduction

La virtualisation basée sur les conteneurs a transformé l’ingénierie des systèmes distribués en permettant un isolement léger des applications avec une efficacité supérieure à celle des machines virtuelles traditionnelles (BARHAM et al., 2003; BURNS; BEDA; HIGHTOWER, 2022). À la différence des architectures fondées sur des hyperviseurs, dans lesquelles chaque machine virtuelle encapsule son propre noyau, les conteneurs partagent le noyau du système d’exploitation hôte, s’appuyant sur des mécanismes tels que les namespaces, les cgroups et les Linux Security Modules (LSM) pour assurer un isolement logique (NIST, 2017).

Formellement, la sécurité des conteneurs dépend du maintien des propriétés d’isolement dans le noyau partagé $K$. Toute vulnérabilité exploitable dans $K$ ou dans des composants du runtime, tels que runc ou containerd, peut compromettre l’intégralité de l’hôte. Des incidents largement documentés, tels que CVE-2019-5736 (NVD, 2019), CVE-2022-0492 (NVD, 2022a) et CVE-2022-0185 (NVD, 2022b), mettent en évidence la faisabilité d’échappements de conteneurs via la corruption mémoire, la manipulation indue des cgroups ou le remplacement des binaires du runtime.

Des rapports industriels récents indiquent une exposition élevée aux vulnérabilités dans les images publiques et aux configurations non sécurisées dans les clusters Kubernetes (AQUA SECURITY, 2023; PALO ALTO NETWORKS, 2024). Sur le plan tactique, le cadre MITRE ATT&CK for Containers documente des techniques telles que Escape to Host (T1611) et Privileged Container (T1610), en modélisant des vecteurs récurrents (MITRE, 2023). Des guides normatifs tels que NIST SP 800-190 (NIST, 2017), OWASP Docker Security Cheat Sheet (OWASP, 2023) et CIS Kubernetes Benchmark (CIS, 2023) fournissent des recommandations prescriptives, mais principalement statiques.

Nous observons que les profils seccomp et les politiques AppArmor adoptent fréquemment des configurations génériques afin de maintenir une large compatibilité, ce qui conduit à une permissivité excessive (DOCKER, 2024). Ainsi, émerge le besoin de mécanismes formels capables de capturer le comportement légitime propre à chaque application, permettant à la fois la détection des écarts et la réduction systématique de la surface d’attaque.

Nous formulons les questions de recherche suivantes :

RQ1 : Est-il possible de modéliser formellement le comportement légitime des conteneurs avec une granularité suffisante pour détecter les écarts associés à des échappements ?

RQ2 : Peut-on synthétiser automatiquement des politiques minimales de sécurité (seccomp et LSM) à partir de ces modèles, en réduisant la surface d’attaque sans compromettre la fonctionnalité ?

RQ3 : Quel est l’impact de l’approche en termes de performance, d’évolutivité et de taux d’erreur dans des environnements Kubernetes à grande échelle ?

Nos contributions sont les suivantes : (C1) un modèle formel fondé sur des chaînes de Markov d’ordre variable pour représenter des séquences de syscalls comme une langue probabiliste ; (C2) un mécanisme de synthèse automatique de politiques minimales dérivé du support empirique des distributions estimées ; et (C3) une architecture implémentée avec eBPF pour la surveillance en temps réel et la vérification incrémentale dans le noyau.

  1. Background and Related Work

2.1 Fondements de l’isolement dans les conteneurs

Nous définissons formellement un conteneur comme la tuple $C = (P, N, G, F)$, où $P$ est l’ensemble des processus, $N$ l’ensemble des namespaces, $G$ les cgroups appliqués et $F$ le système de fichiers racine isolé. Tous les conteneurs partagent le même noyau $K$, de sorte que la surface d’attaque globale peut être modélisée comme :

$$ S = \bigcup_{i=1}^{m} S_i, $$

où $S_i \subseteq \Sigma$ est l’ensemble des syscalls accessibles au conteneur $i$ et $\Sigma$ est l’alphabet total des syscalls exposés par $K$.

2.2 Classification de la littérature

Catégorie Exemples Limites
Durcissement statique seccomp, AppArmor, SELinux, Pod Security Standards Configuration manuelle et permissivité excessive
Analyse d’images Trivy, Clair Ne modélise pas le comportement en temps d’exécution
Surveillance par règles Falco Dépendance aux signatures et maintenance continue
Modélisation comportementale Forrest et al. (1996); Chen et al. (2021) Intégration limitée avec la synthèse formelle de politiques

Forrest et al. (1996) ont introduit une détection fondée sur des séquences courtes de syscalls. Des travaux ultérieurs ont exploré l’apprentissage probabiliste et la génération automatique de politiques (CHEN et al., 2021). Toutefois, une lacune subsiste dans l’intégration entre la modélisation probabiliste formelle, la synthèse automatique de politiques minimales et la vérification efficace dans le noyau via eBPF (LINUX FOUNDATION, 2024).

  1. Threat Model and Problem Formalization

Nous supposons un adversaire capable d’exécuter du code arbitraire à l’intérieur d’un conteneur compromis, d’exploiter des vulnérabilités connues dans le runtime ou le noyau et d’effectuer un mouvement latéral sur le même nœud. Nous ne supposons pas de compromission préalable du noyau.

Soit $\Sigma$ l’ensemble des syscalls. Une exécution est modélisée par $X = (x_1, \dots, x_n)$ avec $x_i \in \Sigma$. Nous définissons $L \subseteq \Sigma^*$ comme une langue probabiliste de séquences légitimes et recherchons une fonction :

$$ f: \Sigma^* \rightarrow {0,1} $$

avec les garanties suivantes :

Correction : $\Pr[f(X)=0 \mid X \sim L] \ge 1-\epsilon$.

Complétude : $\Pr[f(X)=1 \mid X \sim A] \ge 1-\delta$.

  1. Proposed Methodology

4.1 Modélisation probabiliste

Nous modélisons $L$ par une chaîne de Markov d’ordre $k$ :

$$ P(x_i \mid x_{i-1}, \dots, x_{i-k}) = \theta_{c,a}. $$

Nous estimons :

$$ \hat{\theta}{c,a} = \frac{C(c,a)+\alpha}{\sum{a’} C(c,a’) + \alpha|\Sigma|}. $$

La log-vraisemblance :

$$ \mathcal{L}(X) = - \sum_{i=k}^{n} \log P(x_i \mid x_{i-1},\dots,x_{i-k}). $$

Nous décidons qu’il s’agit d’une attaque si $\mathcal{L}(X) > \tau$.

4.2 Synthèse de politiques

Nous définissons :

$$ \Sigma_L = { a \in \Sigma \mid \exists c : C(c,a) > 0 }. $$

La réduction de surface :

$$ \rho = 1 - \frac{|\Sigma_L|}{|\Sigma|}. $$

Exemple simplifié de profil seccomp généré :

{
  "defaultAction": "SCMP_ACT_ERRNO",
  "syscalls": [
    { "names": ["read", "write", "exit", "futex"], "action": "SCMP_ACT_ALLOW" }
  ]
}

4.3 Complexité

Apprentissage en $O(N)$ ; espace dans le pire cas $O(|\Sigma|^k)$ ; détection en ligne en $O(1)$ par événement.

  1. Implementation

Nous avons implémenté un moniteur via eBPF couplé aux tracepoints sys_enter dans le noyau Linux 6.6 (LINUX FOUNDATION, 2024). Nous l’avons intégré à Kubernetes 1.28 avec containerd 1.7. L’ordre $k=3$ a été sélectionné par validation croisée stratifiée.

Les tests ont indiqué un traitement de 10.000 événements/seconde par nœud, avec une surcharge moyenne supplémentaire de 3,7 % de CPU.

  1. Experimental Evaluation

Environnement : 120 nœuds (Intel Xeon Gold 6230, 128 Go RAM), 1.800 conteneurs.

Métrique Proposé Falco
TPR 96,1 % 88,4 %
FPR 2,8 % 6,7 %
Réduction des syscalls 72,4 % N/A
Surcharge CPU 3,7 % 4,9 %

La latence p95 a augmenté de 4,3 ms. Les résultats indiquent une supériorité statistiquement significative ($p < 0,01$) par rapport au baseline.

  1. Discussion

La modélisation probabiliste capture les dépendances contextuelles entre syscalls, réduisant la permissivité typique des politiques statiques. Nous considérons l’évasion par mimétisme comportemental, modélisée via la divergence de Kullback-Leibler :

$$ D_{KL}(P_L | P_A). $$

Les attaques efficaces minimisent $D_{KL}$, ce qui motive une extension future vers des modèles hiérarchiques et l’intégration de signaux eBPF supplémentaires (réseau, DNS, capacités).

  1. Conclusion and Future Work

Nous avons proposé une architecture formelle pour la détection et l’atténuation des échappements de conteneurs, fondée sur la modélisation probabiliste et la vérification dans le noyau. Nous avons démontré une réduction substantielle de la surface d’attaque et des taux de détection élevés avec une surcharge modeste.

Les travaux futurs incluent l’apprentissage fédéré entre clusters, l’intégration avec des plateformes CNAPP et l’analyse formelle de la robustesse adversariale.

References

(Présentées conformément à l’ABNT, avec URLs et accès le 13 avr. 2025.)

AQUA SECURITY. Container Security Report 2023. 2023. Available at: https://www.aquasec.com/resources/container-security-report/. Accessed on: 13 avr. 2025.

BARHAM, P. et al. Xen and the art of virtualization. In: ACM Symposium on Operating Systems Principles (SOSP). 2003. Available at: https://dl.acm.org/doi/10.1145/945445.945462. Accessed on: 13 avr. 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. Available at: https://dl.acm.org/doi/10.1145/3460120.3484589. Accessed on: 13 avr. 2025.

CIS. CIS Kubernetes Benchmark v1.27. 2023. Available at: https://www.cisecurity.org/benchmark/kubernetes. Accessed on: 13 avr. 2025.

DOCKER. Docker Engine Security. 2024. Available at: https://docs.docker.com/engine/security/. Accessed on: 13 avr. 2025.

FALCO. Falco Documentation. 2024. Available at: https://falco.org/docs/. Accessed on: 13 avr. 2025.

FORREST, S. et al. A sense of self for Unix processes. In: IEEE Symposium on Security and Privacy. 1996. Available at: https://ieeexplore.ieee.org/document/502675. Accessed on: 13 avr. 2025.

KUBERNETES. Pod Security Standards. 2024. Available at: https://kubernetes.io/docs/concepts/security/pod-security-standards/. Accessed on: 13 avr. 2025.

LINUX FOUNDATION. eBPF Documentation. 2024. Available at: https://ebpf.io/. Accessed on: 13 avr. 2025.

MITRE. ATT&CK for Containers. 2023. Available at: https://attack.mitre.org/matrices/enterprise/containers/. Accessed on: 13 avr. 2025.

NIST. SP 800-190: Application Container Security Guide. 2017. Available at: https://csrc.nist.gov/publications/detail/sp/800-190/final. Accessed on: 13 avr. 2025.

NVD. CVE-2019-5736. 2019. Available at: https://nvd.nist.gov/vuln/detail/CVE-2019-5736. Accessed on: 13 avr. 2025.

NVD. CVE-2022-0492. 2022a. Available at: https://nvd.nist.gov/vuln/detail/CVE-2022-0492. Accessed on: 13 avr. 2025.

NVD. CVE-2022-0185. 2022b. Available at: https://nvd.nist.gov/vuln/detail/CVE-2022-0185. Accessed on: 13 avr. 2025.

OWASP. Docker Security Cheat Sheet. 2023. Available at: https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html. Accessed on: 13 avr. 2025.

PALO ALTO NETWORKS. State of Cloud-Native Security Report. 2024. Available at: https://www.paloaltonetworks.com/prisma/cloud/state-of-cloud-native-security-report. Accessed on: 13 avr. 2025.

GARFINKEL, T. Traps and pitfalls: Practical problems in system call interposition. In: USENIX Security Symposium. 2003. Available at: https://www.usenix.org/conference/12th-usenix-security-symposium/traps-and-pitfalls-practical-problems-system-call. Accessed on: 13 avr. 2025.

HOGLUND, G.; BUTLER, J. Rootkits: Subverting the Windows Kernel. Boston: Addison-Wesley, 2005.