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 :
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
Un equipo Fortinet D60 con las licencias de IPS y Antivirus activado como se puede ver a continuación :
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
Perfil «High Security» activado en el IPS
Perfil «protect_http_server» activado en el IPS
Perfil de AV en modo «default»
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.
Luego tratar de introducir un SQLI vemos que el equipo lo bloquea:
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 :
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
Luego el atacante 2, recibe la cadena disparada por el XSS almacenado de la siguiente forma :
Como 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.
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 :
En 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 :
Como 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:
C.- Subir y ejecutar
Con nuestro shell encubierto en un archivo jpeg vamos a subirlo
Luego haciendo uso de un proxy como «burp suite» vamos a renombrar al vuelo la extensión del archivo.
Vemos un poco mas al detalle el cambio
Luego hemos conseguido que suba el archivo y lo ejecutamos en la URL donde se encuentra alojado:
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:
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:
Como 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
Como 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.
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
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
Como 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
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.
Como se puede ver luego de ejecutar el archivo, se puede recibir la conexión en el VPS.
Conclusiones
- 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.
- 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
Deja una respuesta Cancelar la respuesta
Latest Tweets
- RT @Alra3ees: “How I get +10 SQLi and +30 XSS via Automation Tool” by 0xElkot link.medium.com/QwuE8fnRuyb https://t.co/VEbfP4jU4P 5 days ago
- RT @owasp: #OWASP MASVS 2.0 helps developers improve the security of their apps. Automate #mobileappsecurity testing across all MASVS categ… 1 week ago
- RT @PortSwigger: In search of a web vulnerability scanner? Here are three simple steps to help you find the best product for detecting secu… 3 weeks ago
- RT @bughuntar: 403 bypass methodology 😍 Credit: @ManieshNeupane https://t.co/1uPEUYhY81 1 month ago
- RT @IssabelIP: Today we celebrate the birthday of our CEO, Boris Garfias. Boris, the whole Issabel team wishes you the best, Happy Birthda… 1 month ago
Posts Más Vistos
- Elastix Callcenter ¨La guia total¨
- Desactivando SIP ALG en Fortinet
- Asterisk Rest Interface (ARI) en Issabel
- Configurar OPENVPN en equipos YEALINK
- Capturando Credenciales con Responder.py
- Integración de Jenkins + SonarQube [DevSecOps]
- Alta disponibilidad con Issabel PBX
- Unión Elastix y Asterisk puro vía sip trunk
- Sistema de llamadas desatendidas para Elastix - AudioElastixdialer 0.1
- Hacking Fortinet - WAF TEST (English version)
si tengo acceso a una tablet como puedo sacar su usuario y contraseña esta configurado a no pedirla, a si que no estan guardadas en el navegador