Flan Scan es un escáner ligero de vulnerabilidad de la red. Con Flan Scan puedes encontrar fácilmente los puertos abiertos en tu red, identificar los servicios y su versión, y obtener una lista de los CVEs relevantes que afectan a tu red.
Flan Scan es un wrapper sobre Nmap y el script de vulners que convierte a Nmap en un completo escáner de vulnerabilidades de red. Flan Scan facilita la implementación de Nmap localmente dentro de un contenedor, el envío de los resultados a la nube y el despliegue del escáner en kubernetes.
Empezando
- Clonar este depósito
- Asegúrate de que tienes la configuración de docker:
$ docker --version
- Añade la lista de direcciones IP o CIDRS que deseas escanear a shared/ips.txt.
- Construye el contenedor:
$ make build
¡Empieza a escanear!
$ make start
Por defecto, flan crea informes de Latex, para que se ejecuten otros formatos:
$ make html
Los formatos adicionales soportados son md (markdown), html y json.
Cuando el escaneo termine, encontrarás los informes que resumen el escaneo en shared/reports
. También puedes ver la salida XML en bruto de Nmap en shared/xml_files
.
Configuración Personalizada de Nmap
Por defecto, Flan Scan ejecuta el siguiente comando Nmap:
$ nmap -sV -oX /shared/xml_files -oN - -v1 $@ --script=vulners/vulners.nse <ip-address>
El flag -oX
añade una versión XML de los resultados del análisis al directorio /shared/xml_files
y el flag -oN -
flag envía los resultados “normales” de Nmap a la consola. El flag -v1
aumenta la verbosidad a 1 y el flag -sV
ejecuta un análisis de detección de servicios (aparte de los análisis de puertos y SYN por defecto de Nmap). El --script=vulners/vulners.nse
es el script que hace coincidir los servicios detectados con los CVEs relevantes.
Nmap también permite ejecutar escaneos UDP y escanear direcciones IPv6. Para añadir estas y otras flags al comando Nmap de Scan Flan después de ejecutarlo, haz que el contenedor se ejecute y pasa tus flags de Nmap de esta forma:
$ docker run -v $(CURDIR)/shared:/shared flan_scan <Nmap-flags>
Empujando los Resultados a la Nube
Flan Scan actualmente soporta el envío de informes Latex y archivos de salida XML Nmap a un Bucket GCS o a un Bucket AWS S3. Flan Scan requiere 2 variables de entorno para llevar los resultados a la nube. La primera es upload
que toma uno de los dos valores gcp
o aws
. El segundo es bucket
y el valor es el nombre del Bucket S3 o GCS para subir los resultados. Para establecer las variables de entorno, después de ejecutar make build
ejecuta el contenedor estableciendo las variables de entorno de esta manera:
$ 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
A continuación se presentan algunos ejemplos para añadir las necesarias claves de autenticación AWS o GCP como variables de entorno en el contenedor. Sin embargo, esto también se puede lograr con un secreto en Kubernetes que exponga las variables de entorno necesarias o con otras herramientas de gestión de secretos.
Ejemplo de Configuración GCS Bucket
Copia tu clave privada de GCS para una cuenta de servicio en el archivo /shared
.
$ cp <path-to-local-gcs-key>/key.json shared/
Ejecuta el contenedor estableciendo la variable de entorno GOOGLE_APPLICATION_CREDENTIALS
environment como la ruta a la clave 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
Ejemplo de Configuración AWS S3 Bucket
Establece las variables de entorno AWS_ACCESS_KEY_ID
y AWS_SECRET_ACCESS_KEY
en las variables correspondientes a tu cuenta de servicio 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
Desplegando en Kubernetes
Cuando se despliega Flan Scan en un sistema de orquestación de contenedores, como Kubernetes, debes asegurarte de que el contenedor tiene acceso a un archivo llamado ips.txt
en el directorio /
. En Kubernetes, esto puede hacerse con un ConfigMap que montará un archivo en su sistema de archivos local como un volumen al que el contenedor puede acceder una vez desplegado. El archivo kustomization.yaml
tiene un ejemplo de cómo crear un ConfigMap llamado shared-files
. Este ConfigMap se monta como un volumen en el archivo deployment.yaml
.
Aquí hay algunos pasos sencillos para desplegar el Flan Scan en Kubernetes:
- Para crear el ConfigMap añade una ruta a un archivo local
ips.txt
enkustomization.yaml
y luego ejecutakubectl apply -k .
. - Ahora ejecuta
kubectl get configmap
para asegurarte de que el ConfigMap fue creado correctamente. - Establece las variables de entorno y los secretos necesarios para tu proveedor de nubes dentro de
deployment.yaml
. - Ahora ejecuta
kubectl apply -f deployment.yaml
para lanzar un despliegue ejecutando Flan Scan.
¡Flan Scan debería estar funcionando en Kubernetes con éxito!
flan (este enlace se abre en una nueva ventana) por cloudflare (este enlace se abre en una nueva ventana)
A pretty sweet vulnerability scanner