Sécurité des infrastructures de virtualisation

Timothée Ravier
siosm@floss.social - tim.siosm.fr/cours - github.com/travier

5e année cycle ingénieur, filière STI
Option Sécurité des Systèmes Embarqués et du Cloud (2SEC)

2024 - 2025

Infrastructures ?

Infrastructure de type Cloud

Ensemble de services qui fournissent aux utilisateurs un environnement pour déployer des applications sous différentes formes (machines virtuelles, conteneurs, fonctions, etc.).

Self service

Chaque utilisateur peut choisir ce dont il a besoin parmis les services proposés (stockage, réseau, base de données, gestion de charge, etc.).

Responsabilités séparées

Les services fournis par l'infrastructure ne sont pas administrés par les utilisateurs de l'infrastructure.

Services fournis par une infrastructure (1)

  • Compute:
    • Machines virtuelles
    • Conteneurs
    • Fonctions (« serverless »)
  • Stockage:
    • Stockage d'images disques (block storage)
    • Stockage d'images de conteneurs (container registry)
    • Stockage d'objets / blocs de données (object storage)
    • Stockage persistant (NFS, etc.)

Services fournis par une infrastructure (2)

  • Réseau:
    • Adresses IP, routage, réseau privées virtuels
    • DNS, noms de domaine
    • Load Balancing
    • Enregistrement et découverte de services
  • Gestion des identités, gestion des secrets
  • Bases de données (PostgreSQL, MariaDB, NoSQL, etc.)

Services fournis par une infrastructure (3)

  • Intégration Continue (CI) / Déploiement continue (CD) :
    • Compilation, test, etc.
    • Construction d'images de conteneurs
  • Supervision:
    • Métriques (performance)
    • Inventaire et audit
  • Intégration avec du matériel (routeurs, stockage, etc.)
  • Intégration avec les services de Cloud providers

Besoins en automatisation et orchestration

  • Automatisation essentielle pour les grands déploiements
  • Gestion organisée et planifiée :
    • de l'infrastructure
    • de la disponibilité
    • des applications
    • de la répartition des ressources
  • Objectifs :
    • Déléguer les tâches ingrates à des services
    • Minimiser les temps de panne et augmenter la réactivité

Quels logiciels pour une infrastructure de virtualisation ?

Exemples d'infrastructures

  • Cloud providers Américains :
    • Amazon Web Services (AWS), Google Cloud Platform (GCP), Microsoft Azure, IBM Cloud, etc.
  • Cloud providers Européens :
    • OVHcloud, Scaleway, Hetzner, IONOS (1&1), Clever Cloud, etc.
  • Cloud providers Asiatiques :
    • Alibaba Cloud, Tencent Cloud, Baidu, etc.
  • Cloud providers Russes :
    • Yandex Cloud, etc.

Mettre en place une infrastructure

Nombreux projets proposant un ensemble de logiciels pour mettre en place sa propre infrastructure, dans un environnement public (Cloud provider) ou privé (datacenter) :

  • Infrastructure orientée virtualisation :
    • OpenStack
    • VMware (vSphere ESXi, vCenter, etc.) (racheté par Broadcom)
    • Nutanix, oVirt, Apache CloudStack, Eucalyptus, OpenNebula, etc.
  • Infrastructure orientée conteneurs :
    • Kubernetes (et dérivés: OpenShift, etc.)
    • Hashicorp Nomad (n'est plus open source depuis Août 2023)
    • Mesos, Docker Machine, Cloud Foundry, etc.

Openstack

OpenStack

  • Projet lancé en 2010 par Rackspace et la NASA
  • Ensemble de composant pour gérer automatiquement le déploiement de machines virtuelles ou de conteneurs
  • Nombreux services disponibles
  • Intégration avec le matériel réseau, stockage, etc.

Sécurité OpenStack

Ressources :

Kubernetes

Kubernetes

  • Projet lancé par des ingénieurs de chez Google en 2014
  • Inspiré de Borg, le gestionnaire de conteneur interne à Google
  • Automatisation du déploiment, passage à l'échelle et gestion des applications conteneurisées

A Technical Overview of Kubernetes, Brendan Burns, CoreOS Fest 2015

center

https://kubernetes.io/docs/concepts/overview/components/

Noeuds (Nodes)

  • Machines (virtuelles ou non) qui composent notre cluster
  • Fournit le CPU, la mémoire, le stockage
  • Indifférenciées par défaut
  • Agent sur chaque noeud : kubelet
  • Container runtime : containerd, CRI-O

Documentation Kubernetes : Nodes

Pods

  • Groupe de conteneurs partageant certains namespaces : réseau, IPCs
  • Chaque Pod a une addresse IP unique au cluster

Scheduler

  • Assigne les pods aux noeuds

etcd

  • Base de données clé / valeur distribuée
  • etcd.io
  • Stocke la configuration et l'état du cluster

Boucle de réconciliation (Reconciliation loop)

center

Contrôleurs (Controllers)

center

Operateurs (Operators)

  • Même fonctionnement qu'un contrôleur
  • Avec des objets non natifs à Kubernetes (base de données, application)
  • Gère le déploiement dans un cluster
  • Objectif : automatiser l'administration, la mise à jour et la maintenance d'une application ou d'un service
  • OperatorHub

center

https://kubernetes.io/docs/concepts/overview/components/

Gestion du réseau

center

Gestion du réseau


Service proxy & Service mesh

Service proxy :

  • Interface entre deux environnements
  • Répartition de charge (load balancing), metriques, etc.
  • Exemples: Envoy, Traefik, etc.

Service mesh :

  • Découverte, enregistrement et routage entre les conteneurs
  • TLS mutuel pour les communications entre conteneurs
  • Exemples : Linkerd, Istio, Consul, etc.

center

https://platform9.com/blog/kubernetes-enterprise-chapter-2-kubernetes-architecture-concepts/

Stockage

  • Stockage éphémère par défaut pour les conteneurs
  • Volume peristent pour les données persistentes
  • Généralement : Réplication des données et redondance à travers le réseau
  • Exemples :

Infrastructure immuable (Immutable infrastructure)

Approche de la gestion des services et logiciels où les composants sont remplacés par une nouvelle version plutôt que modifiés directement.

  • Approche rendue possible par les conteneurs
  • Fonctionnement par défaut des déploiements dans Kubernetes
  • Concept étendable aux systèmes d'exploitation

Distributions Kubernetes

Kubernetes et Cloud providers

Cloud Native Computing Foundation

Sécurité des infrastructures de virtualisation

Sécurité des infrastructures de virtualisation

  • Sécurité du fournisseur d'infrastructure Cloud :
    • Configuration et propre à chaque plateforme
  • Sécurité des éléments de base de l'infrastructure :
    • Sécurité des hôtes / hyperviseurs
    • Sécurité des machines virtuelles et conteneurs
    • Services qui fournissent l'infrastructure
    • Comptes et interfaces d'administration
    • Déploiement et mises à jour
  • Sécurité des éléments déployés sur l'infrastructure :
    • Services mis à disposition des utilisateurs
    • Indicateurs, visibilité et inventaire

Fournisseur de Cloud et sécurité

Authentification à plusieurs facteurs

  • Priorité : protection des comptes administrateurs
  • Utiliser l'authentification à deux facteurs (2FA, MFA)
  • Préférer les méthodes :
    • Token hardware U2F (Standards FIDO 1 & 2 : Yubikey, NitroKey, etc.)
    • TOTP hardware ou software
  • Eviter l'usage du SMS, très vulnérable face à un attaquant déterminé

Isolation des interfaces d'administration

  • Isolation réseau des interfaces d'administrations des hôtes de l'infrastructure
  • Séparer les communications liées à l'administration des autres interactions
  • Utiliser des protocoles éprouvés (SSH)
  • Utiliser un réseau physique distinct (ou à minima un réseau logique distinct)

Isolation des services de l'infrastructure

  • La compromission d'un service peut entraîner la compromission de toute l'infrastructure
  • Séparer les communications entre les services des communications effectuées par les machines virtuelles, conteneurs et applications déployées par les utilisateurs sur l'infrastructure
  • Utiliser des protocoles éprouvés (HTTPS avec TLS 1.2+)
  • Utiliser un réseau physique distinct (ou à minima un réseau logique distinct)

Automatisation des mises à jour des hôtes

Exemples d'OS à base d'image (Image Based OS) :

  • Red Hat CoreOS (OpenShift) et Fedora CoreOS (ostree & composefs)
  • Flatcar Container Linux (dm-verity)
  • openSUSE MicroOS (snapshots Btrfs)
  • Container-Optimized OS (dm-verity, GCP uniquement)
  • Bottlerocket OS (dm-verity, Amazon EKS ou ECS)
  • VMware Photon OS (ostree)

Mise à jour des logiciels qui composent l'infrastructure ?

  • Plein de logiciels donc quasi inévitabilité de l'existance de vulnérabilités
  • Quel impact sur le fonctionnement de l'infrastructure ?

  • OpenStack : Concepts d'UnderCloud et d'OverCloud (TripleO : OpenStack On OpenStack)
  • Kubernetes : kubelet et binaires associées, services du cluster

Automatisation: CI/CD

Infrastructure as Code

Décrire l'infrastructure sous forme de code pour pouvoir la déployer, modifier et redéployer automatiquement

GitOps

What is GitOps?

GitOps = Infrastructures as Code + Pull Requests + CI/CD

  • Gestion de l'infrastructure et des applications à l'aide de Git

  • Utilisation de l'Infrastructure as Code pour décrire les déploiements

  • Pull request pour proposer des changements

  • Chaîne d'intégration continue et de déploiement continu (CI/CD) pour tester et valider les changements avant déploiement

  • Exemple : Argo CD

Gestion des secrets & identités

  • Gestion des secrets :
    • Kubernetes Secrets (fonctionnalités « basiques »)
    • HashiCorp Vault : Automatisation de la création, du stockage chiffré, de l'expiration et du renouvellement

  • Gestion des identités et des accès :
    • Kubernetes RBAC
    • Dex

Indicateurs, Visibilité et inventaire

Sécurité Kubernetes

Sécurité Kubernetes : Conteneurs (Pods)

Principe fondamental : Restreindre les permissions par défaut :

  • Non root
  • Filtre seccomp
  • Pas de capabilities
  • NoNewPrivileges
  • / en lecture seule (Read Only)

Sécurité Kubernetes : Pod Security Policy

Pour les anciennes versions de Kubernetes (inférieur à 1.25) :

Sécurité Kubernetes : Pod Security Standards

Pour les nouvelles versions de Kubernetes (1.25+) :

Sécurité Kubernetes

Ressources et guides :

Sécurité Kubernetes

Mini CTF:

Red Hat OpenShift

  • Sécurité par défaut (!root, Read Only, etc.)
  • Mises à jour coordonnée de l'intégralité de la plateforme
    • Red Hat Enterprise Linux CoreOS (basé sur Red Hat Enterprise Linux)
  • Gestion automatisée à l'aide d'operators
  • Support des conteneurs, machines virtuelles, fonctions, CI/CD, GitOps, etc.
  • Intégration de Red Hat Quay, Data Foundation (Ceph Storage), Advanced Cluster Management, Advanced Cluster Security
  • Red Hat deuxième contributeur à Kubernetes

center

center

# OpenStack: services

# OpenStack: services

# Sécurité Kubernetes - Support de « Docker » désormais *deprecated* : - [Don't Panic: Kubernetes and Docker](https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/) - Alternatives : containerd & CRI-O; - Avantages de CRI-O : - Stabilité : une version de CRI-O par version de Kubernetes - Sécurité : conçu uniquement pour Kubernetes - Compatibilité : Images Dockers et OCI - Configuration par défaut sur Red Hat OpenShift ---

--- # *Serverless* --- # *Serverless* ou « Fonctions » **Concept** > Exécuter des petites portions de code en réaction à un événement et sans > avoir à gérer ou mettre en place une infrastructure complète. Exemples chez les Cloud providers : - AWS Lambda, Google Cloud Functions, Azure Functions, Fastly Terrarium, Cloudflare Workers Exemples d'implémentations *open source* : - Knative, Kubeless, Fission, Apache OpenWhisk, IronFunctions, OpenFaaS, Fn Project