Ciel ! Mon Kubernetes mine des

width:60 Bitcoins width:60

~$ whoami

Denis GERMAIN

Senior SRE chez height:40

Auteur principal sur blog.zwindler.fr*

width:50 @zwindler / @zwindler_rflx

#geek #SF #courseAPied


*Les slides de ce talk sont sur le blog

height:50 en quelques chiffres

  • Créé en 2007
  • 73M de titres
  • 16M d'utilisateurs actifs
  • ~35k connections par seconde
  • 1 gros monolithe en cours de tronçonnage

D’ailleurs… je cherche des collègues !

  • Un·e Network Engineer SRE pour connecter tout ce binioù 👩‍💻 👨‍💻

  • Et des Devs pour casser faire scaler les environnements 🤣

  • Et plus encore

  • GOTO ➔ deezerjobs (ou demandez moi, je suis gentil)

Ciel ! Mon Kubernetes mine des

Bitcoins width:60 Monero width:60

Mais... c'est quoi Kubernetes / Docker déjà ?

width:700 center
Crédits : Dmitriy Paunin

Les containers Docker

Technologie de containerisation d'applications

  • sortie en 2013
  • utilise des fonctionnalités du kernel Linux
  • gestion via une interface "simple"
  • fourni un magasin d'images librement accessibles

center width:400

Docker et ses promesses

  • Rend l'infrastructure facile pour le développeur
  • Economies (par rapport aux VMs)
  • Sécurité (isolation des applications)
  • Immutabilité (déploiements et mises à jours reproductibles)

Retour à la réalité

Techniquement : on a réinventé les jail avec une interface de management "simple" et des (très) gros binaires

Mais on ne sait toujours pas comment gérer :

  • la haute disponibilité ?
  • la tolérance de panne ?
  • les droits d'accès ?

Kubernetes

  • Orchestrateur de containers, inspiré par un outil interne de Google

  • Donné à la CNCF (spin-off Linux Foundation)

  • Open Sourcé en 2015

center

C'est un outil puissant et complexe

Kubernetes définit un certain nombre d'objets pilotables par API, qui ensemble fournissent des mécanismes pour déployer, maintenir et mettre à l’échelle des applications

  • Pod, Deployment, ReplicaSet, DaemonSet, StatefulSet pour l'appli
  • Role, RoleBinding, ClusterRoleBinding, ServiceAccount pour la gestion des droits
  • ...

Par extension, c'est un outil verbeux

Lancer nginx dans Docker
center width:450
Versus dans Kubernetes
center width:540

Abstraire l'infrastructure

Décrire l'état souhaité de notre application hautement disponible

center

What could possibly go wrong ?

width:500

Un outil complexe ? Pas grave, il y a une UI !

L'histoire récente regorge de failles et d'exploits sur des interfaces de management ouvertes sur Internet

  • phpMyAdmin

  • tomcat-manager

  • webmin

  • ...

Et pourtant... Tesla width:50...

center width:1100

center height:400

“Not password protected”

The hackers had infiltrated Tesla’s Kubernetes console which was not password protected / Source : redlock.io

width:500 center

Moralité : sortez couvert (sur Internet)

Vraiment.

N'exposez pas la console. Si vous ne l'utilisez pas, ne la déployez même pas.

  • Vue incomplète de votre cluster et de votre métrologie
  • Les clouds providers la désactivent par défaut
  • Préférez lui
    • pour la gestion : kubectl ou des UIs locales
    • pour la métrologie : Grafana, Prometheus, outils tiers

Autre exemple : Kubeflow

  • Dashboard pour planifier des tâches de machine learning
  • ML => GPU
  • $$$$$$

zdnet - Microsoft découvre un gang de cryptomining détournant des clusters Kubernetes

Utilisez une authentification tierce

Pas de gestion des (vrais) utilisateurs. Les applications/démons ont des ServiceAccounts authentifiés par :

  • Tokens JWT
  • Certificats (difficilement révocables 😭)

Ajouter une authentification tierce de type OIDC + RBAC

width:400 center

Contrôle d'accès dans Kubernetes

  • Depuis la 1.6 (2017), RBAC (Role-based access control) par défaut

    • Donner des droits fins
      • par type de ressource
      • par type d'accès
    • De les affecter à des groupes d'utilisateurs ou d'applications
  • Appliquez le principe de moindre privilège

Le RBAC par l'exemple

    width:500   width:500

Ex. alice a le droit de lister les containers dans le namespace default, mais pas de les supprimer ni les créer.

En cas de compromission

Si un compte utilisateur/application est compromis, les accès de l'attaquant seront limités à un périmètre donné :

  • Namespace (subdivision logique du cluster)
  • types d'actions précis pour chaque type de ressources

Dans la pratique

Le principe des moindres privilèges est un vrai chantier

  • à mettre en place dès le début du cycle de développement
  • plus difficile à appliquer a posteriori (sauf à tout bloquer)

Pour auditer le RBAC :

“C’est toujours la faute du réseau”

Architecture simplifiée de Kubernetes

center width:700

Du TLS partout

Tous les flux doivent être chiffrés, en particulier ceux de Kubernetes lui-même (api-server, etcd, ...)

Point Captain Obvious : Si les flux ont été chiffrés, il sera plus difficile de récupérer des identifiants

Pas d'APIs sur Internet !

2000 Docker engines are insecurely exposed to the Internet unit42 : Docker API + Graboid

[...] but it was possible to connect from….the Internet 4armed : etcd + Digital Ocean

our coworker’s server was also publicly exposing the kubelet ports Handy + kubelet

Ajouter des Network Policies

Par défaut, Kubernetes autorise tout container à se connecter à n'importe quel autre #OpenBar

              

Sac de nouilles avec les Network Policies

Monzo Bank a mis en place des Network Policies pour la totalité de ses 1500 microservices : center

Service Mesh !

Mettre en place des Network Policies peut être complexe...

... mais on peut faire encore plus complexe !

Service Mesh

Déléguer beaucoup d'aspects réseau+sécu au Service Mesh :

  • gestion TLS
  • firewalling / ACL
  • analyse temps réel des attaques
    • audit/forensics, DDOS mitigation, ...

Sécuriser les containers

It's secure

Sysadmins/Devs: "It's secure because it's in a container"

Hackers: center width:350 @sylvielorxu

Pas de container exécuté en tant que Root !

Kubernetes utilise (pour l'instant) la table des users ID de l'hôte

binaire lancé en tant que root = binaire lancé en root sur l'hôte k8s

Kubecon EU 2018: The route to Rootless Containers

JW Player

Un des services de supervision (Weave Scope) avait été créé avec des privilèges et accessible depuis le net

Our deployment was missing the annotation to make the load balancer internal
The weave-scope container is running with the --privileged flag
Files on the root file system were mounted onto the container
Containers are run as the root user.

How A Cryptominer Made Its Way in our k8s Clusters

Pod Security Policy

Kubernetes permet l'ajout de politiques de conformités, notamment dans le but d'imposer des règles pour les Pods

# Required to prevent escalations to root.
allowPrivilegeEscalation: false
runAsUser:
  # Require the container to run without root privileges.
  rule: 'MustRunAsNonRoot'

Pod Security Policy 💥 DEPRECATED

Dépréciées depuis Kubernetes 1.21
A remplacer par OPA (Open Policy Agent)

height:300 center

Vos politiques de conformité sur Kubernetes avec OPA et Gatekeeper

static scan

Des CVE sortent sur NodeJS, .Net et autre JVM toutes les semaines

Les images de bases de vos containers sont bourrées de failles

width:380 width:380 height:200
...

Concrètement

Interface affichant les failles détectées sur chaque image

Rajouter des quality gates côté Intégration Continue pour bloquer les images qui ne répondent pas aux exigences de sécurité

Réduire la surface d'attaque

Limiter l'impact d'une compromission :

  • Le moins de dépendances possibles
  • Ne pas ajouter des binaires utiles aux attaquants
    • oubliez ping, traceroute, gcc, ...
  • Multistage build (images build vs images run)
  • Pas de shell !

Vérifiez que vos applications

center width:800

runtime scan

Il existe aussi des Intrusion Detection System pour Kubernetes

width:300 width:300 width:300

Falco is an open source project for intrusion and abnormality detection for Cloud Native platforms

Cilium: eBPF-based Networking, Observability, and Security

“Pourquoi GCC tourne dans mon container ?”

Utilise des programmes BPF côté kernel pour détecter des comportements anormaux

center width:1000

Cilium Uncovering a Sophisticated Kubernetes Attack in Real-Time

Et l'infra dans tout ça ?

Kubernetes Security Audit

Comme tout logiciel, Kubernetes a des failles !

Aout 2019 : la CNCF a commandé un audit du code de Kubernetes

  • Commencé sur un périmètre restreint
  • Généralisé à tous les nouveaux composants entrant dans la CNCF
  • A permis de déceler 37 vulnérabilités

D'autres failles dans Kubernetes

Trois autres grosses CVE sont sorties "récemment"

Moralité : mettez à jour régulièrement !

center width:300

... en vrai, c'est pas forcément simple

Kubecon EU 2018 - Zalando Continuously Deliver your K8s Infra

Vérifiez AUSSI que votre cluster respecte les bonnes pratiques

center height:250

Exemple d'attaque via Unauthenticated Kubelet

“Promis, demain, je sécurise”

center

There is a lot to Secure

center width:750

Source: Kubernetes Security / Duffie Cooley

Conclusion


  • Il y a beaucoup de choses à sécuriser dans Kube
    • Formez vos développeurs, pas seulement les Ops !
    • Sécurisez dès le début

That's all folks

width:800 center

Des questions ?

center width:500

Backup slides

Kubernetes threat matrix

center width:800

Microsoft Security Blog

La mode des containers

Outil qui permet d'empaqueter une application et ses dépendances. Elle pourra être exécuté sur n'importe quel serveur

  • Il existe de nombreuses implémentations des containers
  • width:200 est très utilisé depuis quelques années
    • utilise des fonctionnalités du kernel Linux
    • fourni une interface "simple" et un magasin d'images

Le container, ce n'est pas une VM !


width:1000 center

Pourquoi utiliser les containers Docker ?

Pratique si on déploie souvent de "petites" applications, en cycle (très) courts

L'application devient immuable

  • Si on veut l'upgrader ou changer sa configuration :
    • on ne modifie pas le container (source d'erreur)
    • on déploie la nouvelle version et on supprime l'ancienne

blog.zwindler.fr / Should we have containers ?

Sources

Les best practices

Les outils pour durcir Kube (1/2)

Les outils pour durcir Kube (2/2)

Les failles de sécu récentes de K8s (&+)

Les sociétés hackées dans la presse

Kubernetes Security Audit

Autre