
Un scanner de vulnérabilités plutôt sympa
Flan Scan est un scanner de vulnérabilités réseau léger. Avec Flan Scan, vous pouvez facilement trouver les ports ouverts sur votre réseau, identifier les services et leur version, et obtenir une liste des CVE pertinentes affectant votre réseau.
Flan Scan est une surcouche de Nmap et du script vulners qui transforme Nmap en un scanner de vulnérabilités réseau complet. Flan Scan facilite le déploiement local de Nmap dans un conteneur, la transmission des résultats vers le cloud et le déploiement du scanner sur Kubernetes.
Clonez ce dépôt
Assurez-vous d'avoir Docker installé :
$ docker --version
Ajoutez la liste des adresses IP ou des CIDR que vous souhaitez analyser dans shared/ips.txt.
Construisez le conteneur :
$ make build
$ make start
Par défaut, Flan crée des rapports LaTeX. Pour obtenir d'autres formats, exécutez :
$ make html
Les formats supplémentaires pris en charge sont md (markdown), html et json.
Une fois l'analyse terminée, vous trouverez les rapports récapitulatifs dans shared/reports. Vous pouvez également consulter les résultats XML bruts de Nmap dans shared/xml_files.
Par défaut, Flan Scan exécute la commande Nmap suivante :
$ nmap -sV -oX /shared/xml_files -oN - -v1 $@ --script=vulners/vulners.nse <adresse-ip>
L'option -oX ajoute une version XML des résultats d'analyse dans le répertoire /shared/xml_files et l'option -oN - affiche les résultats "normaux" de Nmap dans la console. L'option -v1 augmente la verbosité à 1 et l'option -sV exécute une analyse de détection de services (en plus des analyses de ports et SYN par défaut de Nmap). Le script --script=vulners/vulners.nse est celui qui associe les services détectés aux CVE pertinentes.
Nmap permet également d'exécuter des analyses UDP et d'analyser des adresses IPv6. Pour ajouter ces options et d'autres à la commande Nmap de Flan Scan, après avoir exécuté make build, lancez le conteneur en passant vos options Nmap comme suit :
$ docker run -v $(CURDIR)/shared:/shared flan_scan <options-Nmap>
Flan Scan permet actuellement de transmettre les rapports LaTeX et les fichiers XML bruts de Nmap vers un bucket GCS ou un bucket AWS S3. Flan Scan nécessite deux variables d'environnement pour envoyer les résultats vers le cloud. La première est upload qui prend l'une des deux valeurs gcp ou aws. La seconde est bucket dont la valeur est le nom du bucket S3 ou GCS vers lequel télécharger les résultats. Pour définir les variables d'environnement, après avoir exécuté make build, lancez le conteneur en définissant les variables d'environnement comme suit :
$ docker run --name <nom-conteneur> \
-v $(CURDIR)/shared:/shared \
-e upload=<gcp ou aws> \
-e bucket=<nom-bucket> \
-e format=<optionnel, un parmi : md, html ou json> \
flan_scan
Voici quelques exemples pour ajouter les clés d'authentification AWS ou GCP nécessaires en tant que variables d'environnement dans le conteneur. Cependant, cela peut également être réalisé avec un secret dans Kubernetes qui expose les variables d'environnement nécessaires ou avec d'autres outils de gestion des secrets.
Copiez votre clé privée GCS pour un compte de service dans le fichier /shared
$ cp <chemin-vers-clé-gcs-locale>/key.json shared/
Lancez le conteneur en définissant la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS comme le chemin vers la clé GCS :
$ docker run --name <nom-conteneur> \
-v $(CURDIR)/shared:/shared \
-e upload=gcp \
-e bucket=<nom-bucket> \
-e GOOGLE_APPLICATION_CREDENTIALS=/shared/key.json
-e format=<optionnel, un parmi : md, html ou json> \
flan_scan
Définissez les variables d'environnement AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY avec les valeurs correspondant à votre compte de service S3.
docker run --name <nom-conteneur> \
-v $(CURDIR)/shared:/shared \
-e upload=aws \
-e bucket=<nom-bucket-s3> \
-e AWS_ACCESS_KEY_ID=<votre-aws-access-key-id> \
-e AWS_SECRET_ACCESS_KEY=<votre-aws-secret-access-key> \
-e format=<optionnel, un parmi : md, html ou json> \
flan_scan
Lors du déploiement de Flan Scan sur un système d'orchestration de conteneurs, comme Kubernetes, vous devez vous assurer que le conteneur a accès à un fichier nommé ips.txt dans le répertoire /. Dans Kubernetes, cela peut être fait avec un ConfigMap qui monte un fichier de votre système de fichiers local en tant que volume accessible par le conteneur une fois déployé. Le fichier kustomization.yaml contient un exemple de création d'un ConfigMap appelé shared-files. Ce ConfigMap est ensuite monté en volume dans le fichier deployment.yaml.
Voici quelques étapes simples pour déployer Flan Scan sur Kubernetes :
ips.txt local dans kustomization.yaml, puis exécutez kubectl apply -k ..kubectl get configmap pour vérifier que le ConfigMap a été créé correctement.deployment.yaml.kubectl apply -f deployment.yaml pour lancer un déploiement exécutant Flan Scan.Flan Scan devrait maintenant fonctionner avec succès sur Kubernetes !