13 enero 2015

Bluebox-ng Howto (II)


Buenas otra vez, vamos a seguir en donde nos quedamos anteriormente, así que pego el vídeo de nuevo y vamos a comentar cada paso. La idea del orden de los ataques a lanzar es evitar, en la medida de lo posible, que nos bloqueen. O por lo menos que lo hagan lo más tarde posible (ej: fuerza bruta al final).

El primer paso es un escaneo SIP, se hace una petición para saber si el objetivo tiene servicios corriendo de este tipo. De la respuesta se intenta obtener el "User-Agent" (o “Server”) para conocer el servicio y la versión que está corriendo. Realmente, para cada combinación IP/puerto, se lanza una petición utilizando cada uno de los métodos SIP más comunes ("OPTIONS", "REGISTER", "INVITE", "MESSAGE", "BYE", "NOTIFY", "PUBLISH", "SUBSCRIBE") sobre todos los protocolos de transportes que puede operar el protocolo SIP (UDP, TCP, TLS-distintas versiones, WS-Websockets y WSS-seguro). De esta forma sabremos, por un lado, los servidores que están online y, por el otro, de qué alternativas disponemos para jugar. Todas las respuestas recibidas se guardan en el campo "responses" del informe para poder estudiarlas con calma.

Uso módulo auto

A partir de aquí, para cada objetivo encontrado, se siguen las acciones descritas en los siguientes puntos:
  • Obtención de información: Geolocalización, DNS inverso, ping, TCP ping, traceroute, búsqueda de posibles vulnerabilidades conocidas para ese servicio y si SHODAN tiene esa dirección IP indexada. Los resultados esta vez se irán almacenando en el campo del informe correspondiente del módulo que lanzan (“ping”, “traceroute”, “vulns”, etc.).
  • Se hace otro escaneo, que se almacena en el mismo campo (“responses”). Pero esta vez con tipos de peticiones un poco extrañas que, en principio, no deberían requerir respuesta del servidor (o por lo menos una positiva). Ojo, en principio no son vulnerabilidades, pero nos ayuda a conocer un poco más a lo que nos enfrentamos. Asimismo obtenemos una visión bastante clara de la buena o mala configuración del servidor y de la calidad su implementación del protocolo SIP.
  • Llamadas sin autenticar a ver si pasan o no, “sipUnauthCall” en el informe.
  • Ataques de fuerza bruta lentos, pues eso, atacamos primero extensiones y luego contraseñas, pero siempre con una espera bastante larga entre peticiones. El objetivo de ver si nos bloquean ante ataques de este tipo, no obtener las contraseñas de momento. No son los más cómodos, pero pueden ser bastante efectivos con contraseñas débiles y tiempo (campo “sipSlowBrute”).
  • Paquetes maliciosos: Aquí usamos dos módulos:
    • “sipSqli”: En el protocolo SIP también existe este vector, aunque aquí no tenemos el sqlmap … :(. De momento no realizamos la inyección, simplemente enviamos el “payload” a ver si nos bloquea, nos responde o nos descarta la petición.
    • “sipTorture”: Un RFC bastante conocido para este protocolo es el 4475 (“Session Initiation Protocol (SIP) Torture Test Messages”). Como su nombre indica en él se describen distintos tipos de peticiones que podrían estresar al servidor y hacerlo romper. No hemos implementado todos los casos todavía, pero sí un número representativo para conocer, un poco más sobre la calidad de la implementación/configuración.
  • Test de denegación de servicio (“sipDoS”): Simplemente enviamos paquetes consecutivos para ver, como en los dos casos anteriores, si nos responde, nos descarta o cuanto tarda el servidor en bloquearnos.
  • Escaneo de puertos comunes en estos entornos (“nmap” en el informe). Para esto usamos el Nmap, es la única herramienta externa que nos permitimos por el momento. El motivo es que no conocemos ningún escáner decente escrito en Node.
  • Fuerza bruta de extensiones: Como comentamos alguna vez en el blog con este protocolo es posible tratar de adivinar las extensiones. Para ello tenemos dos módulos que son los que se utilizan aquí: “sipBruteExt404” y “sipBruteExt100”. No son las dos únicas vulnerabilidades conocidas de este tipo, pero sí las más extendidas.
  • Fuerza bruta de contraseñas (“sipBrutePass”): Si encontró alguna extensión válida en el paso anterior utilizará esas, en otro caso probará también con una lista. Todo esto lo podéis especificar en el perfil elegido al lanzarlo.
  • Generación del informe
En el post anterior comentamos que la herramienta se podría usar como cualquier otra librería de Node. Esto nos permite desarrollar nuestros propios scripts o herramientas personalizadas. Un ejemplo sencillo podría ser el siguiente, que serviría como base para un sistema de pentesting continuo diseñado para un entorno VoIP. El código está incluido en la carpeta "examples" del proyecto. Por simplicidad vamos a suponer que solo tenemos una dirección IP expuesta en Internet y solo vamos a comprobar SIP sobre UDP (puerto 5060) como protocolo de transporte. Podríamos hacer lo mismo para un rango completo o para un array de direcciones IP, sobre cualquiera de los protocolos de transporte soportados. Si queremos modificar alguno de los parámetros podemos añadirlo o modificarlo en el objeto “moduleOptions”.
  • Búsqueda en Shodan (requiere clave): Comprueba si la dirección IP está indexada en Shodan. Evidentemente solo tiene sentido si se trata de una dirección pública.
  • Escaneo SIP: Para ver si el servidor tiene algún servicio SIP activo.
  • Fuerza bruta de extensiones: Igual que antes intenta enumerar extensiones y/o usuarios si el servidor es vulnerable a dos fallos conocidos: CVE-2009-3727 y CVE-2011-2536.
  • Llamadas sin autenticar.

Uso del script

Finalmente nos gustaría comentar nuestro TODO a partir de ahora:
  • Incluirlo en las distintas distribuciones GNU/Linux, empezando por las de seguridad.
  • Hasta el momento simplemente programamos los vectores que más usábamos, pero nos quedan algunos interesantes y unas cuantas ideas que queremos probar.
  • Como sabemos que hay más gente escribiendo herramientas de seguridad en Node.js nos gustaría unir esfuerzos de alguna manera. A los interesados os queda aquí el enlace: https://gist.github.com/jesusprubio/8f092af4ca252e252eab
Esto es todo por hoy, esperamos noticias vuestras ... ;)

Artículo cortesía de Jesús Pérez y Sergio García

5 comments :

random dijo...

Uf. Menudo temario. ¡A estudiar!
¡Gracias, Suso y Sergio!

Lauskin dijo...

Hay mucho trabajo ahí invertido.
Muy bueno, me pongo en cuanto pueda!

uno mas dijo...

Fantástico!!!
Primera candidata a pentesting continuo, simplemente hacer un daemon del comando auto...
Manos a la obra!!!

celtica dijo...

ya veo que ya está el pentesting continuos.

Ahora también es instalable en BugTraq2 y en VAST:

https://multitic.wordpress.com/2015/01/16/serie-pentesting-voip-2/

Jose Luis dijo...

Gracias, por compartir todo este trabajo !!!


Un saludo