Conteneurs et sécurité

Timothée Ravier (@siosm) - https://tim.siosm.fr/cours

5e année cycle ingénieur, filière STI

Option Sécurité des Systèmes Ubiquitaires

2021-2022

Points d'attention

  • Sécurité de l'hôte hébergeant les conteneurs :
    • Matériel
    • Noyau et système de base
    • Gestionnaire de conteneurs
    • Méchanismes d'isolation entre les conteneurs
  • Sécurité de l'image de base d'un conteneur :
    • Distribution et intégrité
    • Distribution des secrets
  • Sécurité de l'application dans le conteneur :
    • Système de base et mises à jour
    • Langage de programmation & Framework

Sécurité de l'hôte

Matériel : Co-processeurs et co-OS

Matériel : Co-processeurs et firmwares

Matériel : Nombreux éléments partagés

Attaques par canaux cachés :

Noyau Linux

Noyau Linux

Noyau Linux et namespaces

Noyau Linux : namespaces

Durcissement du noyau Linux

  • « Historiquement » : PaX & grsecurity
  • Les patchs ne sont plus disponibles publiquement
  • Travail en cours par le Kernel Self Protection Project pour améliorer progressivement la situation upstream
  • Arrivée potentielle de Rust dans le noyau

Durcissement distributions Linux

Distributions Linux

  • Mises à jour régulières

Outils de gestion de conteneurs

  • Les outils d'infrastructure pour gérer les conteneurs font parti de la surface d'attaque.
  • Container CVE List

Vulnérabilités spécifiques à LXC

Vulnérabilités spécifiques à Docker

Sécurité ?

« Docker is about running random code downloaded from the Internet and running it as root. »

Vulnérabilités spécifiques à Docker

Spécificités Docker

Isolation : SELinux

  • Contenir les conteneurs à l'aide des catégories (MCS)
  • Tous les conteneurs utilisent le même type (même accès)
  • Associe à l'exécution un ensemble de catégories à chaque conteneur
  • SELinux garantie qu'il ne peut pas y avoir d'intéraction entre les conteneurs si leur ensemble de catégories sont distincts
  • Supporté par Docker et Podman
  • Limite la portée d'une grande partie des vulnérabilités (ex. CVE-2016-9962)

Isolation : AppArmor

Sécurité du conteneur et de son image de base

Sécurité du conteneur

  • Restriction des permissions :
    • Utiliser un utilisateur non privilégié
    • Limiter les capabilities
    • Appliquer un filtre seccomp-bpf strict
  • Image du conteneur en lecture seule (RO)
  • Stockage persistent externe (par ex. volumes Docker) pour :
    • la configuration en lecture seule
    • les données en lecture / écriture

Sécurité de l'image de conteneur

  • Contrôle de l'intégrité du conteneur :
    • stockage
    • transport sur le réseau
    • vérification avant exécution
  • Distribution des secrets ?
    • Considérer une image de conteneur comme publique
    • Ne pas inclure de secrets dans une image de conteneur
    • Utilisation de variables d'environnement
    • Récupération dynamique des secrets : HashiCorp Vault

Sécurité de l'application

Sécurité des applications : système de base

  • Conteneurs sont souvent créés à partir d'un système de base
  • La taille n'est pas toujours un facteur de décision (même si l'on cherche souvent à la réduire le plus possible)
  • Choisir un système de base avec des bonnes propriétés de sécurité et correctement supporté :
    • Attention aux images basées sur Alpine :
    • Les distributions standard (Debian, Ubuntu, Fedora, Red Hat & CentOS Stream) restent une valeur sûre.

Sécurité des applications : mises à jour

  • Beaucoup d'images proposés sur le Registry ne sont pas à jour
  • Conteneur \Leftrightarrow énorme binaire statique
  • Absolument prévoir un cycle de mise à jour
  • Intégration Continue (CI)

Sécurité des applications : scanneurs de vulnérabilités

Sécurité des applications : langages

  • Une application vulnérable sera toujours vulnérable dans un conteneur
  • Utiliser des langages de programmation et des « frameworks » avec des propriétés intéressantes en terme de sécurité :
    • Rust, Go, Kotlin
    • Haskell, OCaml, Java, Elixir, Erlang, Python

Suite

Sécurité de la virtulisation

% TODO : add TPM examples and trusted hardware examples % # Matériel % Se reposer sur du matériel de confiance : % - TPM\@ : What Trusted Computing Means to Users of CoreOS and Beyond\footnotemark. % \footnotetext[1]{What Trusted Computing Means to Users of CoreOS and Beyond : \url{https://coreos.com/blog/coreos-trusted-computing.html} ---