miércoles, 29 de junio de 2022

Nuclei: un escáner vulnerabilidades automatizado y personalizable

Nuclei es una herramienta que permite ejecutar pruebas de pentesting sobre aplicaciones web y otros servicios pero lo que la convierte en una utilidad realmente interesante es su capacidad de reducir al máximo los falsos positivos. Para conseguir ésto, funciona con un modelo basado en plantillas en las que es necesario declarar cómo se deben realizar las peticiones y qué debería haber en la respuesta devuelta por el servidor para determinar que existe una vulnerabilidad, mala configuración o fuga de información.




 

Nuclei es un escáner de vulnerabilidades escrito en Go permitiendo realizar la detección en diferentes protocolos por ejemplo TCP, HTTP, DNS.

 El binario de Nuclei por si solo «no hace nada», es decir, la potencia de la herramienta se encuentra en las plantillas que se le pasan por parámetro a dicho binario. Se trata de una utilidad que dadas sus capacidades y facilidad de uso, se puede integrar perfectamente en un pipeline orientado al DevSecOps.




Para crear las plantillas no hace falta aprender un lenguaje de programación ni nada parecido, basta con conocer la sintaxis de una estructura YAML y las posibles secciones/palabras reservadas que componen una plantilla válida. No es un proyecto reciente y de hecho, cuenta con una comunidad de personas que colaboran en la mejora de este framework desde hace algún tiempo, tanto es así que a la fecha de redactar este post existe un repositorio con más de 3600 plantillas que se pueden utilizar libremente.

La instalación de la herramienta consiste en simplemente descargar el binario de Nuclei que se encuentra disponible en la sección de releases y luego, se puede ejecutar con una serie de parámetros en donde como mínimo, se debe  indicar una o varias URL que serán los objetivos del ataque y una o varias plantillas en formato YAML, las cuales procesará Nuclei para verificar si las condiciones definidas en ellas se cumplen en las respuestas devueltas por el servidor.



La primera vez que se ejecuta la herramienta, lo primero que hace es descargar las plantillas desarrolladas por la comunidad y almacenar dichos ficheros en $HOME/nuclei-templates. A partir de este punto, se puede lanzar la herramienta utilizando cualquiera de las plantillas ya existentes o con una nueva.


Hay varias opciones que son interesantes a la hora de ejecutar la herramienta y simplemente leyendo la ayuda se pueden entender fácilmente, sin embargo las más importantes son las siguientes:

  • -target / -u: Permite indicar una URL sobre la que se van a realizar las pruebas.
  • -list / -l: Permite indicar un listado de objetivos en un fichero de texto, una URL por cada línea en el fichero.
  • -automatic-scan / -as: Ejecuta un escaneo automático utilizando Wappalyzer para la detección de la arquitectura del objetivo.
  • -templates / -t: Listado de plantillas o de directorios que contienen plantillas separado por comas.
  • -tl: Simplemente lista todas las plantillas que detecta nuclei. Si se ejecuta la herramienta sin la opción «-templates» enseñará las plantillas de la comunidad que como se ha indicado antes, se encuentran en el directorio $HOME/nuclei-templates.
  • -validate: Valida las plantillas que se han enviado con la opción «-templates» para comprobar que los ficheros YAML se encuentran bien formados.
  • -et / -exclude-templates: Listado de plantillas o de directorios que contienen plantillas que debe ser ignorado por nuclei separado por comas.
  • -s / –severity: Indica que las plantillas deben ser ejecutadas en función del campo «severity» de la plantilla, en donde los posibles valores pueden ser: info, low, medium, high, critical, unknown
  • -o / -output: Fichero de salida en donde se almacenan los problemas/vulnerabilidades descubiertos por la herramienta.
  • -sresp / -store-resp: Almacena todas las peticiones y respuestas que ha gestionado nuclei en el directorio indicado con la opción «-output».
  • -silent: No enseña trazas, solamente los problemas descubiertos.
  • -config: Permite indicar un fichero de configuración personalizado para modificar el comportamiento por defecto de la herramienta.
  • -update: Actualizar la herramienta
  • -up / -update-templates: Actualizar las plantillas de la comunidad a la versión más reciente.
  • -duc / -disable-update-check: Por defecto Nuclei verifica si las plantillas locales se encuentran actualizadas, con esta opción se deshabilita este comportamiento.

Existen muchas más opciones disponibles, el listado anterior solamente incluye algunas que son habituales cuando se ejecuta ésta herramienta. En todo caso, al leer la salida que enseña el comando «nuclei -h» se pueden ver todas las opciones disponibles y no es muy difícil entender para qué sirven. Por otro lado, hay que tener en cuenta que las opciones por defecto de la herramienta se pueden personalizar o bien manipulando el fichero de configuración ubicado en $HOME/.config/nuclei/config.yaml o indicando uno nuevo.

A continuación, en las siguientes imágenes se enseñan algunos ejemplos de uso, aunque puedes ver el vídeo en YouTube que se encuentra al principio de este post para ver los resultados que genera.



Escaneo de vulnerabilidades con Nuclei


Para realizar un escaneo de vulnerabilidades a una página web en específico es realizado con el siguiente comando.

nuclei -u https://elhacker.net


Visualizamos en la siguiente captura cual es el resultado de realizar el escaner sobre el sitio:

En otro caso si deseamos ejecutar múltiples sitios podemos realizarlo

nuclei -l urls.txt


Si deseamos realizar un escaneo con un HEADER personalizado debemos de usar la flag -H

nuclei -H 'SNIFER:HEADER' -l urls.txt


También podríamos realizar un escaneo con base en alguno de sus tags, especificar el formato que nos devolvera el resultado por ejemplo es realizado con la flag -o

cve, rce, lfi, xss, network, logs, config, ssrf


Para que llegues a sacar un mejor provecho de la herramienta, te recomiendo que revises en profundidad todas las banderas y realices las pruebas respectivas.


Modo básico

Filtros basados en la severidad de los defectos


Ejecución en modo «silencioso».


Filtrado de plantillas por severidad y tags




Nuclei pretende cubrir una necesidad que es evidente cuando se realiza pentesting web:  personalizar y orientar las pruebas a las características concretas de la aplicación que se está auditando. Hay que tener en cuenta que cada aplicación web tiene sus propios modos de funcionamiento y no se puede pretender que herramientas de uso general sean capaces de detectar defectos específicos que se encuentran expuestos en la lógica de negocio de la aplicación, se hace necesario un enfoque manual para detectar fallos de forma mucho más precisa y esto lo han entendido los creadores de esta herramienta ya que es en ese punto donde precisamente Nuclei puede ser de gran ayuda gracias a la «magia» de las plantillas. No obstante y aunque las plantillas de la comunidad pueden ser de gran utilidad, para sacarle un verdadero provecho a esta herramienta se debe conocer la aplicación web a auditar y crear plantillas dirigidas a ella.


Fuentes:

https://thehackerway.com/2022/06/28/descubre-nuclei-herramienta-automatizada-y-personalizable-para-pentesters-y-bug-bounty-hunters/

https://sniferl4bs.com/2022/02/hacking-101-nuclei-escaner-de-vulnerabilidades/

No hay comentarios:

Publicar un comentario