https://blog.stephane-robert.info/post/kubernetes-kubespace-securite/
Kubernetes prend une place de plus en plus importante dans les infrastructures, même s’il est assez facile de déployer et de garantir la disponibilité des applications, sa mécanique est réellement complexe. Et comme on dit souvent “sans maîtrise, la puissance n’est rien”. En effet, installé et configuré par défaut un cluster kubernetes est vulnérable aux attaques.
Je vous propose de découvrir kubescape, un outil open source de contrôle de sécurité de clusters Kubernetes, développé par la société ARMO. Cet outil est un véritable couteau suisse de la sécurité des infrastructures cloud native, en effet il permet :
Attention c’est plus qu’un outil d’analyse, kubescape fournit sur son site toutes les documentations pour remédier aux failles découvertes. Pour ceux qui veulent progresser sur kubernetes cet outil est une véritable mine d’or.
Son écosystème est très important, car Armo fournit :
Nous allons nous concentrer sur l’utilisation de la CLI et de l’interprétation des résultats.
Installation de kubescape
L’installation est assez simple puisqu’elle peut être faite via une simple commande curl :
curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash
Une fois installée, vous pouvez vérifier la version installée :
kubescape version
Your current version is: v2.0.176
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 :
Par défaut, kubescape exécutera tous ces frameworks et indiquera un niveau de risque pour chacun d’entre eux.
Pour affichier les frameworks disponibles :
kubescape list frameworks
+----------------------+
| SUPPORTED FRAMEWORKS |
+----------------------+
| AllControls |
+----------------------+
| ArmoBest |
+----------------------+
| CIS |
+----------------------+
| DevOpsBest |
+----------------------+
| MITRE |
+----------------------+
| NSA |
+----------------------+
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.
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 hardener (durci).
kubescape permet :
Pour lancer une analyse, il suffit de lancer la commande scan :
kubescape scan
[info] Kubescape scanner starting
[warning] Kubernetes cluster nodes scanning is disabled. This is required to collect valuable data for certain controls. You can enable it using the --enable-host-scan flag
[info] Downloading/Loading policy definitions
[success] Downloaded/Loaded policy
[info] Accessing Kubernetes objects
[success] Accessed to Kubernetes objects
[info] Requesting images vulnerabilities results
[warning] failed to collect image vulnerabilities. error: credentials are not configured for any registry adaptor
[success] Requested images vulnerabilities results
[info] Requesting Host scanner data
[info] Scanning. Cluster: default
[success] Done scanning. Cluster: default
...
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.
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
kubescape scan framework DevOpsBest --enable-host-scan
[info] Kubescape scanner starting
[info] Installing host scanner
[info] Downloading/Loading policy definitions
[success] Downloaded/Loaded policy
[info] Accessing Kubernetes objects
[success] Accessed to Kubernetes objects
[info] Scanning. Cluster: default
[success] Done scanning. Cluster: default
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Controls: 11 (Failed: 8, Excluded: 0, Skipped: 0)
Failed Resources by Severity: Critical — 0, High — 16, Medium — 8, Low — 22
+----------+------------------------------------+------------------+--------------------+---------------+--------------+
| SEVERITY | CONTROL NAME | FAILED RESOURCES | EXCLUDED RESOURCES | ALL RESOURCES | % RISK-SCORE |
+----------+------------------------------------+------------------+--------------------+---------------+--------------+
| High | Resources CPU limit and request | 8 | 2 | 11 | 73% |
| High | Resources memory limit and request | 8 | 1 | 11 | 73% |
| Medium | Configured liveness probe | 7 | 0 | 11 | 64% |
| Medium | Container hostPort | 1 | 0 | 11 | 9% |
| Low | Configured readiness probe | 7 | 0 | 11 | 64% |
| Low | K8s common labels usage | 6 | 2 | 11 | 55% |
| Low | Label usage for resources | 8 | 2 | 11 | 73% |
| Low | Pods in default namespace | 1 | 0 | 11 | 9% |
+----------+------------------------------------+------------------+--------------------+---------------+--------------+
| | RESOURCE SUMMARY | 9 | 2 | 22 | 43.80% |
+----------+------------------------------------+------------------+--------------------+---------------+--------------+
FRAMEWORK DevOpsBest
A un namespace :
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.
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
...
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.
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 :
kubescape scan *.yaml
Pour analyser un une chart HELM :
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 :
A la fin de l’analyse kubescape fourni un score de risque de 0% ( très sécurisé ) à 100% ( non sécurisé ).
kubescape peut être utilisé dans la plupart des outils de CI/CD dont :
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!
kubescape fournit également une extension VSCode ↗ qui permet d’analyser à la volée un manifest.
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.