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)