Ciel ! Mon Kubernetes mine des

width:60 Bitcoins width:60

~# whoami

Denis GERMAIN

Ingénieur Cloud chez height:30

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

Leader mondial des solutions technologiques intégrées pour les entreprises utilisatrices de cuir ou textile

width:550 center

Que fait un ingénieur cloud chez height:40 ?

center width:1050

D’ailleurs… je cherche des collègues !

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'infra 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 images préconfigurées

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 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é : n'exposez pas la console

Vraiment.

N'exposez pas la console. Ne la déployez même pas.

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

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, la gestion du réseau virtuel dans Kubernetes autorise tout container à se connecter à n'importe quel autre.

              

Les bons élèves des Network Policies

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

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

Si le binaire contenu dans l'image Docker est lancé en tant que root (souvent le cas), un attaquant a plus de chance de sortir du container.

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'

Scan statique des images

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

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

  • analyse statiques des images Docker
    center width:380 center width:380

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)

Scan temps réel

Il existe aussi des Intrusion Detection System pour Kubernetes

center width:400

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

“Pourquoi GCC tourne sur mon container ?”

center width:1000

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

Deux 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

“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

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 ?

Service Mesh !

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

... mais on peut faire encore plus complexe !

Mise à jour, le monde parfait (et simpliste)

center

Avec un cluster k8s stateful multizone ?

Zalando a des clusters avec des données... qui ne veulent pas migrer !

center width:580

Sources

Les best practices

Les outils pour durcir Kube

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

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

Kubernetes Security Audit

Autre