
Довольно крутой сканер уязвимостей
Flan Scan — это легковесный сетевой сканер уязвимостей. С помощью Flan Scan вы можете легко обнаружить открытые порты в вашей сети, определить службы и их версии, а также получить список соответствующих CVE, затрагивающих вашу сеть.
Flan Scan представляет собой обёртку над Nmap и скриптом vulners, которая превращает Nmap в полноценный сетевой сканер уязвимостей. Flan Scan упрощает развёртывание Nmap локально в контейнере, отправку результатов в облако и развёртывание сканера на Kubernetes.
Клонируйте этот репозиторий
Убедитесь, что у вас установлен Docker:
$ docker --version
Добавьте список IP-адресов или CIDR-диапазонов, которые вы хотите просканировать, в shared/ips.txt.
Соберите контейнер:
$ make build
$ make start
По умолчанию Flan создаёт отчёты в формате LaTeX. Чтобы получить другие форматы, выполните:
$ make html
Дополнительные поддерживаемые форматы: md (markdown), html и json.
После завершения сканирования вы найдёте отчёты, обобщающие результаты, в shared/reports. Вы также можете просмотреть необработанный XML-вывод Nmap в shared/xml_files.
По умолчанию Flan Scan выполняет следующую команду Nmap:
$ nmap -sV -oX /shared/xml_files -oN - -v1 $@ --script=vulners/vulners.nse <ip-address>
Флаг -oX добавляет XML-версию результатов сканирования в каталог /shared/xml_files, а флаг -oN - выводит "обычные" результаты Nmap в консоль. Флаг -v1 увеличивает уровень подробности до 1, а флаг -sV запускает сканирование с определением служб (помимо стандартного сканирования портов и SYN-сканирования Nmap). --script=vulners/vulners.nse — это скрипт, который сопоставляет обнаруженные службы с соответствующими CVE.
Nmap также позволяет выполнять UDP-сканирование и сканирование IPv6-адресов. Чтобы добавить эти и другие флаги в команду Nmap Flan Scan, после выполнения make build запустите контейнер и передайте свои флаги Nmap следующим образом:
$ docker run -v $(CURDIR)/shared:/shared flan_scan <Nmap-flags>
В настоящее время Flan Scan поддерживает отправку отчётов LaTeX и необработанных XML-файлов Nmap в корзину GCS или AWS S3. Flan Scan требует две переменные окружения для отправки результатов в облако. Первая — upload, которая принимает одно из двух значений: gcp или aws. Вторая — bucket, значением которой является имя корзины S3 или GCS для загрузки результатов. Чтобы установить переменные окружения, после выполнения make build запустите контейнер, задав переменные окружения следующим образом:
$ 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
Ниже приведены примеры добавления необходимых ключей аутентификации AWS или GCP в качестве переменных окружения в контейнере. Однако это также можно сделать с помощью секрета в Kubernetes, который предоставляет необходимые переменные окружения, или с помощью других инструментов управления секретами.
Скопируйте ваш закрытый ключ GCS для сервисного аккаунта в файл /shared
$ cp <path-to-local-gcs-key>/key.json shared/
Запустите контейнер, задав переменную окружения GOOGLE_APPLICATION_CREDENTIALS как путь к ключу GCS
$ 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
Установите переменные окружения AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY в соответствующие значения для вашего сервисного аккаунта S3.
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
При развёртывании Flan Scan в системе оркестрации контейнеров, такой как Kubernetes, необходимо убедиться, что контейнер имеет доступ к файлу с именем ips.txt в каталоге /. В Kubernetes это можно сделать с помощью ConfigMap, которая монтирует файл из вашей локальной файловой системы как том, к которому контейнер может получить доступ после развёртывания. Файл kustomization.yaml содержит пример создания ConfigMap с именем shared-files. Эта ConfigMap затем монтируется как том в файле deployment.yaml.
Вот несколько простых шагов для развёртывания Flan Scan на Kubernetes:
ips.txt в kustomization.yaml, а затем выполните kubectl apply -k ..kubectl get configmap, чтобы убедиться, что ConfigMap создана правильно.deployment.yaml.kubectl apply -f deployment.yaml, чтобы запустить развёртывание Flan Scan.Flan Scan должен успешно работать на Kubernetes!