Aller au contenu

Sécuriser Kubernetes avec Kubescape

Mise à jour :

logo kubernetes

Dans un monde où les applications déployées sur des clusters Kubernetes sont de plus en plus courantes, il devient essentiel de sécuriser ces environnements complexes. Kubescape se positionne comme un outil gratuit et efficace pour auditer la sécurité des clusters Kubernetes. Que vous soyez un développeur ou un administrateur système, cet outil vous permet de détecter les failles de sécurité en scannant vos configurations et en vous proposant des solutions pour corriger les vulnérabilités.

Fonctionnalités de Kubescape

Kubescape propose un ensemble riche de fonctionnalités pour renforcer la sécurité des environnements Kubernetes :

  1. Shift-left security : Kubescape permet aux développeurs d’identifier les mauvais paramétrages dès la soumission des fichiers de manifeste, favorisant une approche proactive de la sécurité.
  2. Intégration IDE et CI/CD : L’outil s’intègre facilement à des environnements de développement comme VSCode, Lens et à des plateformes CI/CD telles que GitHub et GitLab, ce qui permet de réaliser des vérifications de sécurité tout au long du processus de développement.
  3. Scan de clusters : Kubescape peut scanner les clusters Kubernetes actifs à la recherche de vulnérabilités, de configurations incorrectes ou d’autres problèmes de sécurité.
  4. Support de plusieurs frameworks : Il teste les configurations de sécurité selon divers cadres tels que la NSA, MITRE, SOC2 et d’autres.
  5. Validation des YAML et des charts Helm : L’outil vérifie les fichiers YAML et les Helm charts selon les critères des cadres de sécurité, même en l’absence d’un cluster actif.
  6. Renforcement de Kubernetes : Il permet d’identifier et de remédier aux mauvaises configurations et vulnérabilités via des scans manuels, récurrents ou déclenchés par un événement.
  7. Sécurité à l’exécution : Kubescape offre une protection continue à l’exécution avec une surveillance constante et la détection des menaces pour les applications déployées.
  8. Gestion de la conformité : L’outil aide à maintenir la conformité aux cadres et normes reconnus, simplifiant ainsi le respect des exigences réglementaires.
  9. Support multi-cloud : Il offre une sécurité fluide sur plusieurs fournisseurs cloud et différentes distributions de Kubernetes, garantissant une protection homogène.

Ces fonctionnalités rendent Kubescape très flexible pour assurer une sécurité robuste à chaque étape du cycle de vie d’un projet Kubernetes, que ce soit au niveau du code, de l’infrastructure ou des applications en production.

Installation de kubescape

L’installation de Kubescape est relativement simple et peut se faire de différentes manières selon votre environnement.

  1. Utilisation de la ligne de commande : Vous pouvez installer Kubescape via une commande curl. Cette méthode télécharge et installe directement l’outil sur votre machine. Voici un exemple de commande à exécuter dans le terminal :

    Terminal window
    curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash
  2. Utilisation de Docker : Si vous préférez ne pas installer Kubescape directement sur votre machine, vous pouvez utiliser un conteneur Docker. Cela permet de lancer des scans sans affecter votre système d’exploitation local.

  3. Exécution en tant que Pod Kubernetes : Pour une intégration complète avec vos clusters Kubernetes, Kubescape peut être déployé comme un Pod. Cela permet de scanner directement les ressources du cluster et de générer des rapports sur les vulnérabilités. Le déploiement peut se faire à l’aide d’un manifeste YAML disponible dans la documentation officielle.

Ces méthodes vous offrent la flexibilité d’adapter l’installation à vos besoins, que ce soit pour un audit local ou un environnement de production complet.

Pour plus de détails sur les options d’installation, rendez-vous sur le site officiel de Kubescape.

Fonctionnement de kubescape

kubescape utilise toute une série de contrôles basés sur les directives de sécurité fournies par la NSA, la CISA et Microsoft, entre autres. Ces contrôles sont regroupés en quatre catégories, appelées des cadres :

Le tableau des frameworks supportés par Kubescape inclut plusieurs options qui permettent d’auditer et de sécuriser un cluster Kubernetes. Voici une description des principaux cadres :

  • AllControls : Exécute tous les contrôles disponibles.
  • ArmoBest : Propose des recommandations spécifiques basées sur l’expertise de l’équipe Kubescape.
  • DevOpsBest : Couverture basique des points essentiels pour la sécurité.
  • MITRE et NSA : Conformes aux recommandations des organisations respectives.
  • SOC2 : Axé sur la conformité SOC 2.
  • CIS : Des contrôles spécifiques pour les versions Kubernetes AKS, EKS et standard.

Ces cadres vous permettent de choisir celui qui correspond le mieux à vos besoins de sécurité, en fonction de l’environnement utilisé.

Par défaut, kubescape exécutera tous ces frameworks et indiquera un niveau de risque pour chacun d’entre eux.

Pour afficher les frameworks disponibles :

Terminal window
kubescape list frameworks
Supported frameworks
├──────────────────────┤
AllControls
├──────────────────────┤
ArmoBest
├──────────────────────┤
DevOpsBest
├──────────────────────┤
MITRE
├──────────────────────┤
NSA
├──────────────────────┤
SOC2
├──────────────────────┤
cis-aks-t1.2.0
├──────────────────────┤
cis-eks-t1.2.0
├──────────────────────┤
cis-v1.23-t1.0.1
└──────────────────────┘

Nos Premiers scans avec kubescape

Plutôt que de lancer tous les contrôles, nous allons découper notre analyse sous deux angles. En effet, l’analyse peut se faire soit sur l’état de santé du Cluster, soit de celui des applications qu’il héberge.

Analyse d’un Cluster Kubernetes avec kubescape

En premier lieu, pour assurer la sécurité des applications hébergées au sein de nos clusters Kubernetes contre les attaques, il est important que ceux-ci soient correctement durcis.

kubescape permet :

  • D’identifier des nodes non sécurisés (clients Kubelet sans authentification TLS)
  • De rechercher les interfaces exposées et non sécurisées, par ex. une API.
  • De détecter si le cluster est affecté par des CVE connues.
  • De détecter les politiques réseau manquantes.

Pour lancer une analyse, il suffit de lancer la commande scan :

Terminal window
kubescape scan
Initialized scanner
Loaded policies
Loaded exceptions
Loaded account configurations
Accessed Kubernetes objects
Control: C-0066 100% |██████████████████████████████████████████████████████████████████████████████████████████████████████████████| (47/47, 33 it/s)
Done scanning. Cluster: kubernetes-admin-kubernetes
Done aggregating results
Security posture overview for cluster: 'kubernetes-admin-kubernetes'
In this overview, Kubescape shows you a summary of your cluster security posture, including the number of users who can perform administrative actions. For each result greater than 0, you should evaluate its need, and then define an exception to allow it. This baseline can be used to detect drift in future.
Control plane
┌────┬─────────────────────────────────────┬────────────────────────────────────┐
Control name Docs
├────┼─────────────────────────────────────┼────────────────────────────────────┤
API server insecure port is enabled https://hub.armosec.io/docs/c-0005
Anonymous access enabled https://hub.armosec.io/docs/c-0262
Audit logs enabled https://hub.armosec.io/docs/c-0067
RBAC enabled https://hub.armosec.io/docs/c-0088
Secret/etcd encryption enabled https://hub.armosec.io/docs/c-0066
└────┴─────────────────────────────────────┴────────────────────────────────────┘
Access control
┌────────────────────────────────────────────────────┬───────────┬────────────────────────────────────┐
Control name Resources View details
├────────────────────────────────────────────────────┼───────────┼────────────────────────────────────┤
Administrative Roles 1 $ kubescape scan control C-0035 -v
List Kubernetes secrets 2 $ kubescape scan control C-0015 -v
Minimize access to create pods 1 $ kubescape scan control C-0188 -v
Minimize wildcard use in Roles and ClusterRoles 1 $ kubescape scan control C-0187 -v
Portforwarding privileges 1 $ kubescape scan control C-0063 -v
Prevent containers from allowing command execution 1 $ kubescape scan control C-0002 -v
Roles with delete capabilities 2 $ kubescape scan control C-0007 -v
Validate admission controller (mutating) │ 0 │ $ kubescape scan control C-0039 -v │
Validate admission controller (validating) │ 0 │ $ kubescape scan control C-0036 -v │
└────────────────────────────────────────────────────┴───────────┴────────────────────────────────────┘
Secrets
┌─────────────────────────────────────────────────┬───────────┬────────────────────────────────────┐
Control name Resources View details
├─────────────────────────────────────────────────┼───────────┼────────────────────────────────────┤
Applications credentials in configuration files 0 $ kubescape scan control C-0012 -v
└─────────────────────────────────────────────────┴───────────┴────────────────────────────────────┘
Network
┌────────────────────────┬───────────┬────────────────────────────────────┐
Control name Resources View details
├────────────────────────┼───────────┼────────────────────────────────────┤
Missing network policy 5 $ kubescape scan control C-0260 -v
└────────────────────────┴───────────┴────────────────────────────────────┘
Workload
┌─────────────────────────┬───────────┬────────────────────────────────────┐
Control name Resources View details
├─────────────────────────┼───────────┼────────────────────────────────────┤
Host PID/IPC privileges 0 $ kubescape scan control C-0038 -v
HostNetwork access 1 $ kubescape scan control C-0041 -v
HostPath mount 1 $ kubescape scan control C-0048 -v
Non-root containers 2 $ kubescape scan control C-0013 -v
Privileged container 1 $ kubescape scan control C-0057 -v
└─────────────────────────┴───────────┴────────────────────────────────────┘
Highest-stake workloads
───────────────────────
High-stakes workloads are defined as those which Kubescape estimates would have the highest impact if they were to be exploited.
1. namespace: kube-system, name: calico-node, kind: DaemonSet
'$ kubescape scan workload DaemonSet/calico-node --namespace kube-system'
2. namespace: kube-system, name: calico-kube-controllers, kind: Deployment
'$ kubescape scan workload Deployment/calico-kube-controllers --namespace kube-system'
3. namespace: kube-system, name: kube-apiserver-master-a1.test.local, kind: Pod
'$ kubescape scan workload Pod/kube-apiserver-master-a1.test.local --namespace kube-system'
Compliance Score
────────────────
The compliance score is calculated by multiplying control failures by the number of failures against supported compliance frameworks. Remediate controls, or configure your cluster baseline with exceptions, to improve this score.
* MITRE: 79.22%
* NSA: 75.62%
View a full compliance report by running '$ kubescape scan framework nsa' or '$ kubescape scan framework mitre'

Pour simplifier la lecture et je préfère cette solution, car elle fournit les liens de remédiations des erreurs rencontrées, j’utilise la sortie au format html.

Terminal window
kubescape scan --format html --output results.html

kubescape scan

Un exemple de remédiation proposé :

kubescape remediation

Il suffit de suivre le lien.

Limiter le scan à un framework, un namespace

Par exemple pour limiter le scan au framework Dev

Terminal window
kubescape scan framework DevOpsBest --enable-host-scan
Flag --enable-host-scan has been deprecated, To activate the host scanner capability, proceed with the installation of the kubescape operator chart found here: https://github.com/kubescape/helm-charts/tree/main/charts/kubescape-operator. The flag will be removed at 1.Dec.2023
ℹ️ Installing host scanner
Initialized scanner
Loaded policies
Loaded exceptions
Loaded account configurations
Accessed Kubernetes objects
Control: C-0044 100% |██████████████████████████████████████████████████████████████████████████████████████████████████████████████| (14/14, 53 it/s)
Done scanning. Cluster: kubernetes-admin-kubernetes
Done aggregating results
──────────────────────────────────────────────────
Framework scanned: DevOpsBest
┌─────────────────┬────┐
Controls 14
Passed 8
Failed 6
Action Required 0
└─────────────────┴────┘
Failed resources by severity:
┌──────────┬────┐
Critical 0
High 4
Medium 0
Low 10
└──────────┴────┘
Run with '--verbose'/'-v' to see control failures for each resource.
┌──────────┬────────────────────────────────┬──────────────────┬───────────────┬──────────────────┐
Severity Control name Failed resources All Resources Compliance score
├──────────┼────────────────────────────────┼──────────────────┼───────────────┼──────────────────┤
High Ensure CPU limits are set 2 17 88%
High Ensure memory limits are set 2 17 88%
Low Label usage for resources 2 17 88%
Low K8s common labels usage 2 17 88%
Low Ensure CPU requests are set 1 17 94%
Low Ensure memory requests are set 5 17 71%
├──────────┼────────────────────────────────┼──────────────────┼───────────────┼──────────────────┤
Resource Summary 5 17 94.12%
└──────────┴────────────────────────────────┴──────────────────┴───────────────┴──────────────────┘

A un namespace :

Terminal window
kubescape scan --include-namespaces default framework DevOpsBest

Cet outil regorge d’options. Pour les découvrir, il suffit d’utiliser l’option --help, cela fonctionne avec toutes les commandes.

Terminal window
kubescape list --help
List frameworks/controls will list the supported frameworks and controls
Usage:
kubescape list <policy> [flags]
Examples:
# List default supported frameworks names
kubescape list frameworks
# List all supported frameworks names
kubescape list frameworks --account <account id>
# List all supported controls names with ids
kubescape list controls
Control documentation:
https://hub.armosec.io/docs/controls
Flags:
--access-key string Kubescape SaaS access key. Default will load access key from cache
--account string Kubescape SaaS account ID. Default will load account ID from cache
--format string output format. supported: 'pretty-print'/'json' (default "pretty-print")
-h, --help help for list
Global Flags:
--cache-dir string Cache directory [$KS_CACHE_DIR] (default "/Users/srt20/.kubescape")
--disable-color Disable color output for logging
--enable-color Force enable color output for logging
--kube-context string Kube context. Default will use the current-context
-l, --logger string Logger level. Supported: debug/info/success/warning/error/fatal [$KS_LOGGER] (default "info")
--server string Backend discovery server URL

Analyse des manifests YAML et des charts HELM

Kubescape permet d’analyser les manifests YAML mais aussi les Charts HELM. Il permet même de le faire directement dans le dépôt du code source.

Terminal window
kubescape scan framework DevOpsBest https://github.com/kubescape/kubescape
[info] Kubescape scanner starting
[info] Downloading/Loading policy definitions
[success] Downloaded/Loaded policy
[info] Accessing local objects
[info] cloning. repository url: https://github.com/kubescape/kubescape
[warning] failed to collect images vulnerabilities. error: credentials are not configured for any registry adaptor
[success] Done accessing local objects
[info] Scanning Repo
[success] Done scanning Repo
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Controls: 10 (Failed: 8, Excluded: 0, Skipped: 0)
Failed Resources by Severity: Critical 0, High 2, Medium 4, Low 43
+----------+------------------------------------+------------------+--------------------+---------------+--------------+
| SEVERITY | CONTROL NAME | FAILED RESOURCES | EXCLUDED RESOURCES | ALL RESOURCES | % RISK-SCORE |
+----------+------------------------------------+------------------+--------------------+---------------+--------------+
| High | Resources CPU limit and request | 1 | 0 | 16 | 6% |
| High | Resources memory limit and request | 1 | 0 | 16 | 6% |
| Medium | Configured liveness probe | 3 | 0 | 16 | 19% |
| Medium | Container hostPort | 1 | 0 | 16 | 6% |
| Low | Configured readiness probe | 2 | 0 | 16 | 13% |
| Low | K8s common labels usage | 14 | 2 | 16 | 88% |
| Low | Label usage for resources | 14 | 0 | 16 | 88% |
| Low | Pods in default namespace | 13 | 0 | 16 | 81% |
+----------+------------------------------------+------------------+--------------------+---------------+--------------+
| | RESOURCE SUMMARY | 14 | 2 | 16 | 20.27% |
+----------+------------------------------------+------------------+--------------------+---------------+--------------+
FRAMEWORK DevOpsBest
...

Pour analyser des manifests YAML :

Terminal window
kubescape scan *.yaml

Pour analyser un une chart HELM :

Terminal window
kubescape scan https://github.com/AdminTurnedDevOps/PearsonCourses/tree/main/Helm-Charts-For-Kubernetes/Segment3/nginxupdate

En analysant les manifests, kubescape peut détecter des problèmes de type :

  • Services SSH non sécurisés fonctionnant à l’intérieur d’un conteneur
  • Utilisation de sudo des dans la commande de démarrage d’un conteneur
  • Exécution de conteneurs en tant que root ou avec des capacités excessives
  • Pods prenant trop de ressources CPU et Mémoire.

A la fin de l’analyse kubescape fourni un score de risque de 0% ( très sécurisé ) à 100% ( non sécurisé ).

Utilisation dans les outils de CI/CD

kubescape peut être utilisé dans la plupart des outils de CI/CD dont :

  • Gitlab-CI
  • ArgoCD
  • CircleCI
  • Azure Devops Pipeline
  • Github Actions
  • Jenkins

Un exemple de pipeline avec Github Actions :

name: Kubescape scanning for misconfigurations
on: [push, pull_request]
jobs:
kubescape:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: kubescape/github-action@main
continue-on-error: true
with:
format: sarif
outputFile: results.sarif
# # Optional: Specify the Kubescape cloud account ID
# account: ${{secrets.KUBESCAPE_ACCOUNT}}
# # Optional: Scan a specific path. Default will scan the whole repository
# files: "examples/*.yaml"
- name: Upload Kubescape scan results to Github Code Scanning
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: results.sarif

Tout est envisageable avec kubescape!

Utilisation de l’extension VSCode

kubescape fournit également une extension VSCode qui permet d’analyser à la volée un manifest.

Kubescape

Conclusion

kubescape est vraiment un bel outil qui mérite qu’on s’y attarde. Je n’ai pas essayé de l’installer dans mon cluster Kubernetes, car c’est possible, mais je vais pousser mon analyse plus loin.

Lien vers le projet kubescape