Desactivando SIP ALG en Fortinet

SIPALGMencionar que el protocolos de Voz son los mas delicados que existen en el mundo de los servicios de infraestructura no es una novedad, debido primordial mente a que no pueden tener ningún tipo de retardo o falla durante su transmisión y en este caso protocolo SIP en este caso no es la excepción.

Bajo este contexto, algunos equipos perimetrales tipo Router, Firewall, UTM durante estos últimos años vienen implementando lo que llaman “Application Layer Gateway” o ALG evidentemente en favor de la protección ante fallas de seguridad,  ya que lo que hace es interceptar el trafico para administrarlo/gestionarlo antes de dejarlo pasar a su destino final.

SIPALG

Sin embargo este tipo de features no necesariamente surten en favor de uno cuando está desplegando una implementación de VoIP ya que ello va producir problemas durante las llamadas, causando entrecortes o caídas de llamada inesperados inclusive.

En este caso vamos a ver como desactivar SIP ALG de un equipo Fortinet 60D sin embargo puede ser aplicable para cualquier modelo.

1.-Desactivar sip-helper y sip-nat-trace

Ingresamos al CLI console mediante la interfase de administración y desactivamos las opciones de sip-helper y sip-nat-trace de la siguiente forma:

SIPALG

Una vez realizado esto es necesario reiniciar el equipo.

2.-Eliminar SIP dentro de session-helper

Luego ingresamos nuevamente, ahora es necesario identificar el ID del protocolo SIP dentro de la opción session-helper para luego eliminarla, esto se consigue de la siguiente forma:

SIPALGSIPALGComo vemos hemos identificado que el protocolo SIP se encuentra en el ID 13 , ahora procedemos a eliminarlo de la siguiente forma:

SIPALGUna vez que hemos eliminado el ID simplemente cerramos la sesion en la consola.

Espero les sirva.
Saludos
Juan Oliva

 

 

 

Fortinet SSH Backdoor Exploit P.O.C.

fortinet-backdoor-welcomeHace solo un par de semanas el mundo de uno de los mas famosos UTMs del mercado Fortinet, fue remecido por la divulgación de una puerta trasera de acceso a sus equipos.

Inicialmente se reveló un script que sacaba provecho a un método de “soporte” usado por el personal de firma para brindar ayuda, si bien es cierto este método tenia involucrado la generación de claves aleatorias, sin embargo usaba un algoritmo al parecer bastante sencillo.

Por supuesto luego de a ver sido revelado este “método” apareció un script en Python que explota y automatiza la apertura de un shell mediante SSH.

Cabe señalar que la firma emitió un comunicado (ver aquí) en donde aduce que lo revelado se trata de un problema de gestión y no de un puerta trasera, lo real es que ahora la vulnerabilidad afecta a las versiones 4.X hasta las 5.0.7 del sistema operativo.

Aquí el P.O.C. que realicé contra un Fortinet VM

Es claro que todos los equipos que tengan la versiones afectadas y que tengan SSH abierto, es altamente recomendable actualizar (pagar la licencia) para evitar ser comprometidos.

Espero les sirva
Juan Oliva
@jroliva

 

Hacking fortinet – bypassing UTM

English version : https://jroliva.wordpress.com/2015/07/31/hacking-fortinet-bypassing-utm-english-version/

En las pruebas realizadas en el post anterior “Hacking Fortinet – SQLI test”  dejé en claro mi posición respecto a que me sentía inconforme por los resultados obtenidos.

Y no lo mal interpreten, mas allá de que recibimos muy buenos comentarios de la marca Fortinet lo cual es importante, por que como lo indiqué, muestran una posición muy buena y receptiva ante este tipo de estudios, mas allá de eso, era necesario realizar pruebas de seguridad ofensiva un poco mas extendidas, ya que el SQLI no lo es todo y ahora los ataques actuales van mucho mas allá, inclusive combinándose entre si.

Es así que hace unos días, nuevamente en conjunto con mi buen amigo Alexis Torres , desarrollamos los siguientes test que a continuación detallo:

Escenario :

fortinet-esenario

Como se muestra en el escenario implementado es el siguiente:

192.168.100.100 — IP SERVIDOR WEB en LAN
192.168.100.120 — IP MS WINDOWS 7 en LAN
192.168.100.1   — IP UTM en LAN

192.168.13.100 — IP SERVIDOR WEB en WAN
192.168.13.200 — IP UTM en LAN

192.168.13.202-203 — ATACANTE 1 (KALI LINUX)
192.80.190.11X — ATACANTE 2 (VPS CENTOS 6.X)

Setup del equipo

hackingfortinet

Un equipo Fortinet D60 con las licencias de IPS y Antivirus activado como se puede ver a continuación :

fortinet

Así mismo, durante las pruebas que a continuación se detallarán, se probaron varios perfiles de configuración como los siguientes :

Perfil “default” activado en el IPS

hacking-fortinet

Perfil “High Security”  activado en el IPS

hacking fortinet

Perfil “protect_http_server”  activado en el IPS

hacking fortinet

Perfil de AV en modo “default”

hackingfortinet
También se configuró dentro de este perfil, el modo proxy, que permite capturar el trafico en una cache, examinarlo y luego enviarlo al cliente.

Luego para validar que el  IPS se encuentre correctamente configurado realizamos una prueba básica de SQLI para verificar que bloquee correctamente.

hackingfortinetLuego tratar de introducir un SQLI vemos que el equipo lo bloquea:

hackingfortinet

Ahora con todo validado, empezamos con las pruebas.

Test 1 – Session Hijacking usando XSS

El primer ataque que probamos es el robo de sesiones (session hijacking) haciendo uso de XSS almacenado, previamente ya habíamos probado que los XSS reflejados no eran detectados por el IPS de tal forma que al combinarlo con otro tipo de ataque era menos probable aun que sea detectado, como se muestra a continuación :

XSS

Como se muestra, se envía vía el objeto “document.cookie” la sesión actual a una  URL externa http://192.80.190.1XX/b.php

XSSLuego el atacante 2, recibe la cadena disparada por el XSS almacenado de la siguiente forma :

hijackingComo se muestra el resultado del ataque se recibe en el VPS Linux ( ver gráfica) solo abriendo un socket de conexión median netcat al puerto 80 , y se recibe toda la cookie de sesión , que posteriormente servirá para autenticarse en la aplicación web donde estuvo logueada la víctima.

Si no la ven aun 😀 imagínense este escenario.

El atacante, ingresa a la intranet de la empresa, cuyo perfil es solo de invitado, identifica la vulnerabilidad de XSS almacenado sobre un lugar común en la aplicación web e implanta la URL maliciosa, La víctima, se loguea como todos los días en la intranet de la empresa a revisar digamos, los balances del día, en este caso tiene perfil de administrador de la empresa,  hace clic sobre el lugar común donde está la URL maliciosa y envía su cookie de sesión al atacante, luego el atacante usa esa cookie para ingresar a la aplicación con el mismo perfil de la víctima y acceder a toda la información que le permite ese perfil.

Ojalá que ahora si la vean 😀

Una vez completado el ataque, vamos al equipo y vemos que no tenemos el apartado “Security Log/Intrusion Protection” es decir no registra y no lo bloquea.

fortinet

Test 2 – LFI

La inclusión de archivos locales, permite la visualización de archivos que no están en el directorio de publicación del servidor web, como el siguiente ejemplo :

fortinetEn ese caso estamos visualizando el archivo “passwd” en el directorio “etc” del sistema operativo.

El ataque se completa y nunca es detectado por el IPS.

Test 3 – Shell reverso usando File Upload

Es común dentro de las aplicaciones web tiene formularios para cargar o subir archivos, ya sea imágenes, documentos docx, xlsx o pdfs inclusive.

Sin embargo ello representa uno de los principales vectores para un atacante ya que permite la escritura física en el servidor, lo cual es una oportunidad muy apetitosa.

No vamos a ver las innumerables técnicas para como evadir los filtros que tiene que tener un formulario de upload, sin embargo vamos a usar uno básico que consiste en renombrar la extensión al vuelo para subir nuestro archivo que al final disparara el shell reverso.

Entonces iniciemos el proceso.

A.- Descargar y configurar el shell
Descargamos nuestro php reverse shell y lo configuramos de la siguiente forma :

fortinetComo podemos ver en la variable $IP estamos declarando la IP del VPS Linux a la cual se enviará el shell, mediante el puerto de salida 1234 declarado en la variable $port

B.- Renombrar para confundir evadir al upload
Luego cambiamos la extensión del archivo de a jpeg como vemos a continuación:

fortinet
C.- Subir y ejecutar
Con nuestro shell encubierto en un archivo jpeg vamos a subirlo

fortinetLuego haciendo uso de un proxy como “burp suite” vamos a renombrar al vuelo la extensión del archivo.

fortinetVemos un poco mas al detalle el cambio

fortinet

Luego hemos conseguido que suba el archivo y lo ejecutamos en la URL donde se encuentra alojado:

fortinet

El ataque se completa, sin ser bloqueado por el UTM  y se obtiene el shell reverso en el puerto de escucha 1234 del VPS como se muestra a continuación:

fortinetfortinet

Test 4 – Evadiendo el Antivirus de perímetro y ganando shell remota en Windows 7

Contexto: Parte de las características de todo UTM es contar con un antivirus de perímetro, es decir ser la primera defensa ante la entrada de archivos infectados, antes de que estos lleguen a las estaciones de trabajo de los usuarios y puedan comprometer de alguna forma sus estaciones de trabajo, estos ataques son mejor llamados “ataques del lado del cliente”.

El ataque: En post pasado “Evadiendo Antivirus con Shellter y Metasploit” mostré como se podía evadir el antivirus local , sin embargo ahora, tenemos un antivirus de perímetro que no debería dejar descargar el archivo infectado.

– Creando el archivo infectado
Vamos a crear un archivo infectado con shellter de la siguiente forma:

hackingfortinetComo se ve en la captura, se configura que la IP 192.179.13.203 será quien reciba el shell reverso en el puerto 5555 , en el caso de que se ejecute el archivo infectado.

– Levantando el handler en Mestasploit
ahora levantamos un handler de escucha para recibir el shell reverso

hackingfortinetComo se muestra se está esperando el shell en el puerto 5555

– Descargando el archivo infectado en el cliente.
Ahora desde la estación Windows,  vamos descargar el archivo infectado, en donde el antivirus de perímetro debería reaccionar.

hackingfortinethackingfortinet11830837_10153137243563160_817221665_n

Como se puede ver , es posible descargar completamente el archivo infectado.

– Ganando shell remota
Ahora lo que sigue es ejecutar el archivo para obtener la shell reversa, aquí quiero detenerme a explicar lo siguiente.

Comportamientos peculiares
Cuando se ejecutó las primeras veces el archivo se puedo completar su ejecución y se obtuvo la shell reversa, sin embargo luego de repetir algunas veces el proceso esto ya no se pudo , es decir el UTM detecto y bloqueo la shell reversa, pero repito después de amenos a ver obtenido 2 o 3 veces la shell reversa.

Comportamiento negativo – Obtención de la shell

hackingfortinet

hackingfortinet

hackingfortinet

hackingfortinet

Comportamiento positivo – bloqueo de la shell
Como se aprecia en las capturas anteriores al menos se pudo obtener en todos oportunidades se pudo completar el ataque (se obtuvo la shell) pero luego esto ya no fue posible, no se lograba obtener el shell

hackingfortinetComo se puede ver, el handler no puede obtener completar el proceso de obtener la sesión de meterpreter .

Y evidentemente la razón fue por que el IPS detecto el ataque

hackingfortinet

Comportamiento anómalo – obtención de la shell
Como lo indicamos en un momento el IPS detecto la shell reversa , analizando un poco los paquetes pudimos ver que el shell era bloqueada, no en el momento cuando en Windows expulsa el paquete al handler, si no era cuando este, regresaba nuevamente al Windows ( paquete de entrada) y en ese momento era detectado por el IPS.

Debido a esto, cambiamos la configuración del nuestro archivo infectado para que envié la shell al VPS Linux y este fue el resultado.

hackingfortinet
Como se puede ver luego de ejecutar el archivo, se puede recibir la conexión en el VPS.

Conclusiones

Juan Oliva

  • Las pruebas del lado del pentester fueron de tipo GrayBox, es decir no se tenia conocimiento del tipo de configuración que tenia el equipo UTM, pero si de las direcciones IP de los objetivos.
  • Las pruebas realizadas son muy utilizadas por delincuentes informáticos, sobre todo al realizar combinaciones de técnicas es posible tener mayor probabilidad de éxito.
  • Es necesario implementar sistemas complementarios para monitorear ataques.
  • Es necesario generar reglas personalizadas en el UTM , para cada tipo de situación.

Alexis Torres

  • En las pruebas de AV del lado del cliente, solo fueron realizadas con un tipo de payload, “meterpreter” que es mostrado en las firmas IPS como “Shell reversing” habría que tener en cuenta que no es el único tipo de payload y que el target es directo, es decir hacia Windows (firma conocida).
  • No se usa ningún tipo de crypter, encoder, reassembler sino un injector de código dinámico al PE para crear el ejecutable malicioso, el cual como se muestra otorga un canal de comunicación, entre el evilVPS y el target.
  • Con mi experiencia en despliegues de seguridad perimetral para empresas, he podido constatar la gran confianza que se tiene a los UTMs como un “all in one” debido a que son económicos y contienen diversas firmas de seguridad en contenidos, cuando realmente estos equipos son solo la primera línea de defensa.
  • Además de la actualización de firmas y pago en licencias, se debe tener en cuenta las configuraciones realizadas por el consultor o experto que por mala praxis suelen proveer blancos directos sin necesidad de mucho esfuerzo para el atacante :D.

Finalmente, las pruebas realizadas no tienen la intensión de desprestigiar de alguna forma a una marca en particular, por el contrario, tienen el espíritu de que se realicen con otro tipo de equipos y por supuesto, mejorar la seguridad de las aplicaciones empresariales.

Por ejemplo personalmente esta pendiente realizar pruebas con un equipo de la misma marca que es FortiWeb , que es un equipo mucho mas especializado en protección de ataques web,

Esperen esas pruebas!!

Saludos
Juan Oliva
@jroliva