
Un escáner de vulnerabilidades bastante chulo
Flan Scan es un escáner de vulnerabilidades de red ligero. Con Flan Scan puedes encontrar fácilmente puertos abiertos en tu red, identificar servicios y sus versiones, y obtener una lista de CVE relevantes que afectan a tu red.
Flan Scan es un envoltorio sobre Nmap y el script vulners que convierte a Nmap en un escáner de vulnerabilidades de red completo. Flan Scan facilita la implementación de Nmap localmente dentro de un contenedor, el envío de resultados a la nube y el despliegue del escáner en Kubernetes.
Clona este repositorio
Asegúrate de tener Docker configurado:
$ docker --version
Añade la lista de direcciones IP o CIDR que deseas escanear a shared/ips.txt.
Construye el contenedor:
$ make build
$ make start
Por defecto, Flan crea informes en LaTeX. Para obtener otros formatos, ejecuta:
$ make html
Los formatos adicionales compatibles son md (markdown), html y json.
Cuando finalice el escaneo, encontrarás los informes resumiendo el escaneo en shared/reports. También puedes ver la salida XML sin procesar de Nmap en shared/xml_files.
Por defecto, Flan Scan ejecuta el siguiente comando de Nmap:
$ nmap -sV -oX /shared/xml_files -oN - -v1 $@ --script=vulners/vulners.nse <ip-address>
La opción -oX añade una versión XML de los resultados del escaneo al directorio /shared/xml_files y la opción -oN - muestra los resultados "normales" de Nmap en la consola. La opción -v1 aumenta la verbosidad a 1 y la opción -sV ejecuta un escaneo de detección de servicios (además del escaneo de puertos y SYN por defecto de Nmap). El argumento --script=vulners/vulners.nse es el script que empareja los servicios detectados con los CVE relevantes.
Nmap también permite ejecutar escaneos UDP y escanear direcciones IPv6. Para añadir estas y otras opciones al comando de Nmap de Flan Scan, después de ejecutar make build, ejecuta el contenedor y pasa las opciones de Nmap de la siguiente manera:
$ docker run -v $(CURDIR)/shared:/shared flan_scan <Nmap-flags>
Flan Scan actualmente admite el envío de informes LaTeX y archivos XML sin procesar de Nmap a un bucket de GCS o a un bucket de AWS S3. Flan Scan requiere 2 variables de entorno para enviar los resultados a la nube. La primera es upload, que toma uno de dos valores: gcp o aws. La segunda es bucket, y el valor es el nombre del bucket de S3 o GCS al que se subirán los resultados. Para establecer las variables de entorno, después de ejecutar make build, ejecuta el contenedor configurando las variables de entorno de la siguiente 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 agregar las claves de autenticación necesarias de 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.
Copia tu clave privada de GCS para una cuenta de servicio al archivo /shared
$ cp <path-to-local-gcs-key>/key.json shared/
Ejecuta el contenedor configurando la variable de entorno GOOGLE_APPLICATION_CREDENTIALS como la ruta a la clave de 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
Configura las variables de entorno AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY con las variables correspondientes para tu cuenta de servicio de 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
Al implementar Flan Scan en un sistema de orquestación de contenedores, como Kubernetes, debes asegurarte de que el contenedor tenga acceso a un archivo llamado ips.txt en el directorio /. En Kubernetes, esto se puede hacer con un ConfigMap que montará un archivo de tu sistema de archivos local como un volumen al que el contenedor pueda acceder una vez desplegado. El archivo kustomization.yaml tiene un ejemplo de cómo crear un ConfigMap llamado shared-files. Luego, este ConfigMap se monta como un volumen en el archivo deployment.yaml.
Aquí hay algunos pasos sencillos para implementar Flan Scan en Kubernetes:
ips.txt local en kustomization.yaml y luego ejecuta kubectl apply -k ..kubectl get configmap para asegurarte de que el ConfigMap se haya creado correctamente.deployment.yaml.kubectl apply -f deployment.yaml para lanzar un deployment ejecutando Flan Scan.¡Flan Scan debería estar ejecutándose exitosamente en Kubernetes!