
Ein ziemlich cooler Schwachstellenscanner
Flan Scan ist ein leichtgewichtiger Netzwerk-Schwachstellenscanner. Mit Flan Scan können Sie einfach offene Ports in Ihrem Netzwerk finden, Dienste und ihre Versionen identifizieren und eine Liste relevanter CVEs erhalten, die Ihr Netzwerk betreffen.
Flan Scan ist ein Wrapper um Nmap und das vulners-Skript, das Nmap in einen vollwertigen Netzwerk-Schwachstellenscanner verwandelt. Flan Scan erleichtert das Bereitstellen von Nmap lokal in einem Container, das Hochladen der Ergebnisse in die Cloud und das Bereitstellen des Scanners auf Kubernetes.
Klonen Sie dieses Repository
Stellen Sie sicher, dass Docker eingerichtet ist:
$ docker --version
Fügen Sie die Liste der IP-Adressen oder CIDRs, die Sie scannen möchten, zu shared/ips.txt hinzu.
Bauen Sie den Container:
$ make build
$ make start
Standardmäßig erstellt Flan Latex-Berichte. Um andere Formate zu erhalten, führen Sie aus:
$ make html
Zusätzlich unterstützte Formate sind md (Markdown), html und json.
Wenn der Scan abgeschlossen ist, finden Sie die Berichte, die den Scan zusammenfassen, in shared/reports. Sie können die rohe XML-Ausgabe von Nmap auch in shared/xml_files sehen.
Standardmäßig führt Flan Scan den folgenden Nmap-Befehl aus:
$ nmap -sV -oX /shared/xml_files -oN - -v1 $@ --script=vulners/vulners.nse <ip-address>
Das Flag -oX fügt eine XML-Version der Scan-Ergebnisse zum Verzeichnis /shared/xml_files hinzu und das Flag -oN - gibt "normale" Nmap-Ergebnisse an die Konsole aus. Das Flag -v1 erhöht die Ausführlichkeit auf 1 und das Flag -sV führt einen Dienst-Erkennungs-Scan durch (neben Nmaps standardmäßigem Port- und SYN-Scan). Das Skript --script=vulners/vulners.nse ist das Skript, das die erkannten Dienste mit relevanten CVEs abgleicht.
Nmap ermöglicht auch UDP-Scans und das Scannen von IPv6-Adressen. Um diese und andere Flags zum Nmap-Befehl von Flan Scan hinzuzufügen, führen Sie nach dem Ausführen von make build den Container aus und übergeben Sie Ihre Nmap-Flags wie folgt:
$ docker run -v $(CURDIR)/shared:/shared flan_scan <Nmap-flags>
Flan Scan unterstützt derzeit das Hochladen von Latex-Berichten und rohen XML-Nmap-Ausgabedateien in einen GCS-Bucket oder einen AWS S3-Bucket. Flan Scan benötigt 2 Umgebungsvariablen, um Ergebnisse in die Cloud hochzuladen. Die erste ist upload, die einen von zwei Werten annimmt: gcp oder aws. Die zweite ist bucket und der Wert ist der Name des S3- oder GCS-Buckets, in den die Ergebnisse hochgeladen werden sollen. Um die Umgebungsvariablen zu setzen, führen Sie nach dem Ausführen von make build den Container aus und setzen die Umgebungsvariablen wie folgt:
$ docker run --name <container-name> \
-v $(CURDIR)/shared:/shared \
-e upload=<gcp or aws> \
-e bucket=<bucket-name> \
-e format=<optional, one of: md, html or json> \
flan_scan
Im Folgenden finden Sie einige Beispiele zum Hinzufügen der erforderlichen AWS- oder GCP-Authentifizierungsschlüssel als Umgebungsvariablen im Container. Dies kann jedoch auch mit einem Secret in Kubernetes erfolgen, das die erforderlichen Umgebungsvariablen bereitstellt, oder mit anderen Secrets-Management-Tools.
Kopieren Sie Ihren privaten GCS-Schlüssel für ein Dienstkonto in das Verzeichnis /shared
$ cp <path-to-local-gcs-key>/key.json shared/
Führen Sie den Container aus und setzen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS als Pfad zum GCS-Schlüssel
$ docker run --name <container-name> \
-v $(CURDIR)/shared:/shared \
-e upload=gcp \
-e bucket=<bucket-name> \
-e GOOGLE_APPLICATION_CREDENTIALS=/shared/key.json
-e format=<optional, one of: md, html or json> \
flan_scan
Setzen Sie die Umgebungsvariablen AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY auf die entsprechenden Variablen für Ihr S3-Dienstkonto.
docker run --name <container-name> \
-v $(CURDIR)/shared:/shared \
-e upload=aws \
-e bucket=<s3-bucket-name> \
-e AWS_ACCESS_KEY_ID=<your-aws-access-key-id> \
-e AWS_SECRET_ACCESS_KEY=<your-aws-secret-access-key> \
-e format=<optional, one of: md, html or json> \
flan_scan
Wenn Sie Flan Scan auf einem Container-Orchestrierungssystem wie Kubernetes bereitstellen, müssen Sie sicherstellen, dass der Container Zugriff auf eine Datei mit dem Namen ips.txt im Verzeichnis / hat. In Kubernetes kann dies mit einem ConfigMap erfolgen, das eine Datei aus Ihrem lokalen Dateisystem als Volume bereitstellt, auf das der Container nach der Bereitstellung zugreifen kann. Die Datei kustomization.yaml enthält ein Beispiel, wie ein ConfigMap namens shared-files erstellt wird. Dieses ConfigMap wird dann als Volume in der Datei deployment.yaml bereitgestellt.
Hier sind einige einfache Schritte, um Flan Scan auf Kubernetes bereitzustellen:
ips.txt-Datei in kustomization.yaml hinzu und führen Sie dann kubectl apply -k . aus.kubectl get configmap aus, um sicherzustellen, dass das ConfigMap ordnungsgemäß erstellt wurde.deployment.yaml.kubectl apply -f deployment.yaml aus, um ein Deployment zu starten, das Flan Scan ausführt.Flan Scan sollte erfolgreich auf Kubernetes laufen!