Ciel ! Mon Kubernetes mine des

Bitcoins

~$ whoami

Denis GERMAIN - @zwindler


#geek 👨‍💻 #SF 🤖👽 #courseAPied 🏃‍♂️


*Les slides de ce talk sont sur blog.zwindler.fr/conférences/

C'est quoi ce talk ?

  • Docker / Kubernetes, c'est hype

    • donc plein de gens en font !
  • Les hackers adorent ça 👀

  • On va parler de gens qui font du Kubernetes sans le sécuriser

    • et des conséquences

Ciel ! Mon Kubernetes mine des

Bitcoins Monero

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

center
Crédits : Dmitriy Paunin

Les containers Docker

Technologie de containérisation 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

Docker et ses promesses

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

Retour à la réalité

Techniquement : réinvention des jail BSD avec une interface de management "simple" et des (très) gros binaires

Mais (à l'époque) Docker ne gérait pas vraiment :

  • 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

T'aimes pas l'infra ? On va tout abstraire !

Décrire l'état souhaité de notre application et des composants d'infrastructure avec des API et du YAML

center

APIs, APIs partout

Les APIs nous "cachent" toute la mécanique qui permet de déployer, maintenir et mettre à l’échelle nos applications

  • Apps: Pod, Deployment, ReplicaSet, DaemonSet, StatefulSet
  • RBAC: Role, RoleBinding, ClusterRoleBinding, ServiceAccount
  • ...

kubectl --context prod api-resources --no-headers| wc -l
> 70

C'est un outil verbeux

Lancer nginx dans Docker
center
Versus dans Kubernetes
center

What could possibly go wrong ?

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

center

center

“Not password protected”

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

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.

  • Les clouds providers ne l'activent plus par défaut
  • Préférez lui :
    • pour la gestion : kubectl ou des UIs locales (octant, lens)
    • pour la métrologie : Grafana, Prometheus, outils tiers

Autre exemple : Kubeflow & Argo Workflow

  • Dashboards pour planifier des tâches de Machine Learning
  • Machine Learning ⇒ serveurs avec GPUs
  • 💸💸💸💸💸💸

zdnet - Un gang de crypto détourne des clusters K8s / bleeping computer - cryptominers on K8s via Argo Workflows

Authentification

Contrôle d'accès dans Kubernetes

  • Kubernetes implémente le RBAC (Role-based access control)

    • 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

     

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 :

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

                          

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

Architecture simplifiée de Kubernetes

center

Du TLS partout

Tous les flux devraient ê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

Plus difficile de faire du MITM

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

              

Allégorie du "sac de nouilles" chez Monzo

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

Service Mesh !

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

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

Sécuriser les containers

It's secure

It's secure, because it's in a container

center

twitter.com/krisnova

Ca vaut aussi pour Microsoft Windows !

Siloscape : Premier Malware à viser des workloads Kubernetes sur des serveurs Windows

Microsoft originally didn't consider this issue a vulnerability, based on the reasoning that Windows Server containers are not a security boundary...

The Register - Siloscape malware targets Windows containers, breaks through to the underlying Kubernetes cluster

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

Weave Scope (supervision) 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

Politiques de conformité

Kubernetes permet "trop" de choses

  • Pod Security Policy 💥 DEPRECATED (1.21)
  • A remplacer par Open Policy Agent ou Kyverno

Blog zwindler - Vos politiques de conformité sur Kubernetes avec OPA et Gatekeeper

Meetup Enix Jpetazzo - escalation via hostPath Volume

Analyse statique (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

...

Concrètement

Affiche les failles détectées pour chaque image Docker

Rajouter des quality gates (bloquants) côté Intégration Continue

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 !
  • Sur les versions récentes : kubectl debug

Vérifiez vos déploiements

center

Analyse temps réel (runtime scan)

Il existe aussi des Intrusion Detection System pour Kubernetes

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

Cilium: eBPF-based Networking, Observability, and Security

“Pourquoi diantre GCC tourne dans mon container ? 🤔🤔

Programmes BPF pour détecter des comportements anormaux

center

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 !

Août 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

Des k8s et des CVEs

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

center

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

Kubecon EU 2018 - Zalando Continuously Deliver your K8s Infra

Trust... but verify

K8s single pane of glass, including risk analysis, security compliance, RBAC visualizer and image vulnerabilities scanning


Exemple d'attaque via Unauthenticated Kubelet

“C'est bon, c'est safe”

center

There is a lot to Secure

center

Source: Kubernetes Security / Duffie Cooley

Conclusion

  • Ne déployez pas Kubernetes pour de mauvaises raisons
    (aka. si vous n'en avez pas besoin !)

  • 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

center

Des questions ?

center

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 (1/2)

Les sociétés hackées dans la presse (2/2)

Autre (1/2)

Autre (2/2)