
Chassez les failles de sécurité dans les clusters Kubernetes
kube-hunter n'est plus en développement actif. Si vous êtes intéressé par l'analyse des clusters Kubernetes pour des vulnérabilités connues, nous vous recommandons d'utiliser Trivy. Plus précisément, l'analyse de mauvaise configuration Kubernetes de Trivy et l'analyse de vulnérabilités KBOM. En savoir plus dans la documentation Trivy.
kube-hunter traque les faiblesses de sécurité dans les clusters Kubernetes. L'outil a été développé pour accroître la sensibilisation et la visibilité des problèmes de sécurité dans les environnements Kubernetes. Vous ne devez PAS exécuter kube-hunter sur un cluster Kubernetes qui ne vous appartient pas !
Exécuter kube-hunter : kube-hunter est disponible en tant que conteneur (aquasec/kube-hunter), et nous proposons également un site web à kube-hunter.aquasec.com où vous pouvez vous inscrire en ligne pour recevoir un token vous permettant de voir et partager les résultats en ligne. Vous pouvez également exécuter le code Python vous-même comme décrit ci-dessous.
Explorer les vulnérabilités : La base de connaissances de kube-hunter comprend des articles sur les vulnérabilités et problèmes détectables. Lorsque kube-hunter signale un problème, il affiche son VID (Identifiant de vulnérabilité) afin que vous puissiez le consulter dans la KB à https://aquasecurity.github.io/kube-hunter/
Si vous êtes intéressé par l'intégration de kube-hunter avec la matrice ATT&CK Kubernetes, Continuer la lecture
Vidéo de démonstration de kube-hunter
kube-hunter prend désormais en charge le nouveau format de la matrice ATT&CK Kubernetes. Alors que les vulnérabilités de kube-hunter sont une collection de techniques créatives conçues pour imiter un attaquant dans le cluster (ou en dehors), la norme ATT&CK de Mitre définit des catégories de techniques plus générales et standardisées pour y parvenir.
Vous pouvez considérer les vulnérabilités de kube-hunter comme des étapes pour un attaquant, qui suivent la piste d'une technique plus générale qu'il viserait. La plupart des chasseurs et vulnérabilités de kube-hunter peuvent être classés sous ces techniques, c'est pourquoi nous avons décidé de suivre la norme de la matrice.
Certaines vulnérabilités de kube-hunter que nous n'avons pas pu mapper à une technique Mitre sont préfixées par le mot-clé General

Il existe trois façons différentes d'exécuter kube-hunter, chacune offrant une approche différente pour détecter les faiblesses de votre cluster :
Exécutez kube-hunter sur n'importe quelle machine (y compris votre ordinateur portable), sélectionnez l'analyse à distance et donnez l'adresse IP ou le nom de domaine de votre cluster Kubernetes. Cela vous donnera une vue d'attaquant de votre configuration Kubernetes.
Vous pouvez exécuter kube-hunter directement sur une machine du cluster, et sélectionner l'option pour sonder toutes les interfaces réseau locales.
Vous pouvez également exécuter kube-hunter dans un pod à l'intérieur du cluster. Cela indique à quel point votre cluster serait exposé si l'un de vos pods d'application était compromis (par exemple, via une vulnérabilité logicielle). (drapeau --pod)
Vérifiez d'abord ces prérequis.
Par défaut, kube-hunter ouvrira une session interactive dans laquelle vous pourrez sélectionner l'une des options d'analyse suivantes. Vous pouvez également spécifier l'option d'analyse manuellement en ligne de commande. Voici vos options :
Pour spécifier des machines distantes à chasser, sélectionnez l'option 1 ou utilisez l'option --remote. Exemple :
kube-hunter --remote some.node.com
Pour spécifier l'analyse d'interface, vous pouvez utiliser l'option --interface (cela analysera toutes les interfaces réseau de la machine). Exemple :
kube-hunter --interface
Pour spécifier un CIDR particulier à analyser, utilisez l'option --cidr. Exemple :
kube-hunter --cidr 192.168.0.0/24
Définissez le drapeau --k8s-auto-discover-nodes pour interroger Kubernetes afin d'obtenir tous les nœuds du cluster, puis tentez de les analyser tous. Par défaut, il utilisera la configuration dans le cluster pour se connecter à l'API Kubernetes. Si vous souhaitez utiliser un fichier kubeconfig explicite, définissez --kubeconfig /emplacement/du/fichier/kubeconfig.
Notez également que cela est toujours effectué lors de l'utilisation du mode --pod.
Afin d'imiter un attaquant à ses premiers stades, kube-hunter ne nécessite aucune authentification pour la chasse.
Impersonnalisation - Vous pouvez fournir à kube-hunter un token de compte de service spécifique à utiliser lors de la chasse en passant manuellement le token JWT Bearer du secret du compte de service avec le drapeau --service-account-token.
Exemple :
$ kube-hunter --active --service-account-token eyJhbGciOiJSUzI1Ni...
Lors de l'exécution avec le drapeau --pod, kube-hunter utilise le token de compte de service monté à l'intérieur du pod pour s'authentifier auprès des services qu'il trouve pendant la chasse.
--service-account-token a la priorité lors de l'exécution en tant que podLa chasse active est une option dans laquelle kube-hunter exploite les vulnérabilités qu'il trouve pour explorer d'autres vulnérabilités. La principale différence entre la chasse normale et la chasse active est qu'une chasse normale ne modifiera jamais l'état du cluster, tandis que la chasse active peut potentiellement effectuer des opérations modifiant l'état du cluster, ce qui pourrait être dangereux.
Par défaut, kube-hunter n'effectue pas de chasse active. Pour chasser activement un cluster, utilisez le drapeau --active. Exemple :
kube-hunter --remote some.domain.com --active
Vous pouvez voir la liste des tests avec l'option --list : Exemple :
kube-hunter --list
Pour voir les tests de chasse active ainsi que passive :
kube-hunter --list --active
Pour voir uniquement une cartographie du réseau de vos nœuds, exécutez avec l'option --mapping. Exemple :
kube-hunter --cidr 192.168.0.0/24 --mapping
Cela affichera tous les nœuds Kubernetes que kube-hunter a trouvés.
Pour contrôler la journalisation, vous pouvez spécifier un niveau de log, en utilisant l'option --log. Exemple :
kube-hunter --active --log WARNING
Les niveaux de log disponibles sont :
Par défaut, le rapport sera envoyé vers stdout, mais vous pouvez spécifier différentes méthodes en utilisant l'option --dispatch. Exemple :
kube-hunter --report json --dispatch http
Les méthodes d'envoi disponibles sont :
Lors de l'exécution en tant que Pod dans un environnement Azure ou AWS, kube-hunter récupérera les sous-réseaux depuis le Service de Métadonnées d'Instance. Naturellement, cela rend le processus de découverte plus long.
Pour limiter strictement l'analyse des sous-réseaux à un CIDR /24, utilisez l'option --quick.
La chasse personnalisée permet aux utilisateurs avancés de contrôler quels chasseurs sont enregistrés au début d'une chasse. Si vous savez ce que vous faites, cela peut aider si vous souhaitez ajuster le processus de chasse et de découverte de kube-hunter selon vos besoins.
Exemple :
kube-hunter --custom <HunterName1> <HunterName2>
Activer la chasse personnalisée supprime tous les chasseurs du processus de chasse, à l'exception des chasseurs autorisés donnés.
Le drapeau --custom lit une liste de noms de classes de chasseurs. Pour voir tous les noms de classes de kube-hunter, vous pouvez combiner le drapeau --raw-hunter-names avec le drapeau --list.
Exemple :
kube-hunter --active --list --raw-hunter-names
Remarque : En raison de la conception architecturale de kube-hunter, les "Chasseurs/Classes de base" suivants seront toujours enregistrés (même lors de l'utilisation de la chasse personnalisée) :
Il existe trois méthodes pour déployer kube-hunter :
Vous pouvez exécuter kube-hunter directement sur votre machine.
Vous devrez avoir installé les éléments suivants :
Installer :
pip install kube-hunter
Exécuter :
kube-hunter
Clonez le dépôt :
git clone https://github.com/aquasecurity/kube-hunter.git
Installez les dépendances du module. (Vous pouvez préférer le faire dans un Environnement Virtuel)
cd ./kube-hunter
pip install -r requirements.txt
Exécutez :
python3 kube_hunter
Si vous souhaitez utiliser pyinstaller/py2exe, vous devez d'abord exécuter le script install_imports.py.
Aqua Security maintient une version conteneurisée de kube-hunter à aquasec/kube-hunter:aqua. Ce conteneur inclut ce code source, ainsi qu'un plugin de rapport supplémentaire (à source fermée) pour télécharger les résultats dans un rapport consultable sur kube-hunter.aquasec.com. Veuillez noter que l'exécution du conteneur aquasec/kube-hunter et le téléchargement des données de rapport sont soumis à des conditions générales supplémentaires.
Le Dockerfile de ce dépôt vous permet de construire une version conteneurisée sans le plugin de rapport.
Si vous exécutez le conteneur kube-hunter avec le réseau hôte, il pourra sonder toutes les interfaces de l'hôte :
docker run -it --rm --network host aquasec/kube-hunter
Note pour Docker pour Mac/Windows : Soyez conscient que l'"hôte" pour Docker pour Mac ou Windows est la VM dans laquelle Docker exécute les conteneurs. Par conséquent, spécifier --network host donne à kube-hunter accès aux interfaces réseau de cette VM, et non à celles de votre machine.
Par défaut, kube-hunter s'exécute en mode interactif. Vous pouvez également spécifier l'option d'analyse avec les paramètres décrits ci-dessus, par exemple
docker run --rm aquasec/kube-hunter --cidr 192.168.0.0/24
Cette option vous permet de découvrir ce qu'un conteneur malveillant peut faire/découvrir sur votre cluster. Cela donne une perspective sur ce qu'un attaquant pourrait faire s'il parvenait à compromettre un pod, peut-être via une vulnérabilité logicielle. Cela peut révéler considérablement plus de vulnérabilités.
Le fichier d'exemple job.yaml définit un Job qui exécutera kube-hunter dans un pod, en utilisant les paramètres d'accès par défaut du pod Kubernetes. (Vous pouvez modifier cette définition, par exemple pour l'exécuter en tant qu'utilisateur non root, ou dans un namespace différent.)
kubectl create -f ./job.yamlkubectl describe job kube-hunterkubectl logs <nom du pod>Pour lire les directives de contribution, Cliquez ici
Ce dépôt est disponible sous la Licence Apache 2.0.