Sécurité des infrastructures de virtualisation

Timothée Ravier - siosm@floss.social - https://tim.siosm.fr/cours

5e année cycle ingénieur, filière STI
Option Sécurité des Systèmes Ubiquitaires

2023 - 2024

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 infrastrucutre 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.

Kubernetes

Kubernetes

  • Projet lancé par des ingénieurs de chez Google en 2014
  • Inspiré de Borg, le gestionnaire de conteneur interne Google
  • Basé sur le concept de Pods (groupe de conteneurs partageant certains namespaces)
  • Repose sur etcd (base de données clé valeur distribuée)

center

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

center

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

Distributions Kubernetes

Kubernetes & Cloud providers

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

Cloud Native Computing Foundation

Sécurité

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 :
    • Red Hat CoreOS (OpenShift) et Fedora CoreOS (OKD)
    • Flatcar Container Linux
    • openSUSE MicroOS (Kubic)
    • Container-Optimized OS (GCP uniquement)
    • Bottlerocket OS (Amazon EKS ou ECS)
    • VMware Photon OS

Mise à jour des logiciels qui composent l'infrastructure ?

  • Logiciel donc inévitabilité de l'existance de vulnérabilités
  • Quel impact sur le fonctionnement du Cloud ?
  • OpenStack : concepts d'UnderCloud et d'OverCloud (TripleO : OpenStack On OpenStack)
  • Kubernetes : Self hosted Kubernetes (« Bootstrap » puis gestion des services de Kubernetes par lui même)

Automatisation de la gestion et de l'administration

Automatisation: CI/CD

Immutable infrastructure & Infrastructure as Code

Immutable Infrastructure

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

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

  • Exemples :

    • Argo CD, GitHub Actions, GitLab CI/CD, Jekins X, CircleCI, etc.

Operators (Kubernetes)

  • Logiciel qui se charge de gérer un déploiement dans une infrastructure Kubernetes
  • Objectif : automatiser l'administration, la mise à jour et la maintenance d'un service
  • OperatorHub
  • Exemples et état des lieux sur kubedex : Kubernetes Operators

Gestion du réseau

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

  • Visibilité sur l'état de l'architecture :
    • Métriques : Prometheus
    • Audit : osquery

Sécurité OpenStack

Ressources :

Sécurité Kubernetes

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

  • Support de « Docker » désormais deprecated :
  • 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

Sécurité Kubernetes

Service proxy :

  • Interface entre l'extérieur et l'intérieur
  • Load balancing, metriques, etc.
  • Exemples: Envoy, Traefik, nginx, etc.

Service mesh :

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

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

# Kubernetes : Architecture

# Kubernetes : Architecture

- Pour être automatique, une mise à jour doit être non-intéractive, atomique et

coordonnée :

- Systèmes d'exploitation centrés sur l'utilisation de conteneurs

- Pas ou peu de gestion de paquets

- Retour en arrière possible après une mise à jour non fonctionnelle

# OpenStack - Réseau : OpenStack Neutron - Secrets : Anchor, Barbican - Identité : Keystone - Métriques et performance : Ceilometer ---

---

# Kubernetes : Docker $\Rightarrow$ containerd

![](img/kubernetes-docker.png)

<https://kubernetes.io/blog/2018/05/24/kubernetes-containerd-integration-goes-ga/>

---

# Kubernetes : CRI-O

![](img/kubernetes-crio.png)

<https://www.redhat.com/en/blog/why-red-hat-investing-cri-o-and-podman>