Mostrando entradas con la etiqueta CSPP. Mostrar todas las entradas
Mostrando entradas con la etiqueta CSPP. Mostrar todas las entradas

jueves, agosto 01, 2024

Test de uso de GenAI para la detección de bugs de "Connection String Parameter Pollution" (CSPP) usando Ollama

En la primera parte de este artículo de ayer, titulado "Cómo utilizar GenAI para la detección de bugs en ficheros Web.config usando Ollama" explicaba cómo de bien detectaba el motor de GenAI basado en Ollama con diferentes LLMs los fallos de configuración de un fichero Web.config en aplicaciones ASP.NET , pero en la presentación del trabajo, me llevé deberes para casa, que os voy a contar ahora.

Figura 1: Test de uso de GenAI para la detección

Y es que cuando terminé de exponer mi trabajo con lo visto hasta el momento, Chema Alonso comentó que le gustaría probar cómo se comportaría este sistema frente a los ataques a los parámetros de las cadenas de conexión a bases de datos.

Vulnerabilidades de Connection String Injection

Chema Alonso y José Palazón presentaron en DEF CON 18 este tipo de ataques, donde destacan los ataques de Connnection String Parameter Pollution (CSPP). Tienes un paper publicado sobre estos ataques en BlackHat y una serie de artículos sobre Connection String Attacks en este blog.


Figura 2: Connection String Attacks en DefCON18

Aunque hay varias formas en las que se puede explotar esta vulnerabilidad, nos centraremos en el escenario de delegación de la autenticación en el motor de BD.  Es decir, tenemos una aplicación que recoge las credenciales del usuario y la cadena de conexión a la BD se calcula dinámicamente con estas. 

Cada usuario puede tener o no permisos de conexión a la BD y permisos de lectura o no a ciertas tablas. En el siguiente código C# de una aplicación ASP.NET se puede ver la idea:

private void EnlazarGrid(string usuario, string contraseña)
{
string cadenaConexion = $"Server=UK5FCMI;Database=WebApp;User Id={usuario};Password={contraseña};"; 
using (SqlConnection con = new SqlConnection(cadenaConexion))
{
using (SqlCommand cmd = new SqlCommand("SELECT * FROM Products"))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
GridViewProductos.DataSource = dt;
GridViewProductos.DataBind();
}
}
}
}
}    

El método construye, mediante interpolación de cadenas, una cadena de conexión a una BD tipo SQL Server a partir de los parámetros de usuario y contraseña. Estos parámetros no se validan en ningún momento (ni en el llamador). Con esta cadena de conexión, se lanza una conexión contra la BD y se lee la información de la tabla Products (si el usuario de BD tiene permisos SELECT sobre dicha tabla) para mostrarla en la grid del formulario ASPXTodos estos ataques se explican en mucho detalle en el libro "Hacking Web Technologies 2ª Edición" de 0xWord.

donde Chema Alonso habla de los Connection String Attacks

Una forma de explotarlo sería, por ejemplo, introducir como contraseña la cadena ;Integrated Security=True;, con cualquier usuario. Si se permite la autenticación integrada en SQL Server y el usuario del pool de IIS con que se está ejecutando la aplicación tiene permisos de conexión y consulta a la BD de la aplicación, podemos conseguir acceder a información que no nos corresponde. 

Utilizando el mismo prompt que ya hemos diseñado, vamos a pedir al modelo de Llama 3.1 que evalúe la seguridad del código.

Figura 5: Análisis de vulnerabilidad de inyección en la cadena de conexión

El modelo detecta un problema en la cadena de conexión, identificando que los parámetros de usuario y contraseña, que provienen de los campos de un formulario, no se han validado ni comprobado. Detecta que esto puede presentar un problema de SQL Injection, sin embargo, la propuesta de solución NO es acertada. En la cadena de conexión, elimina los parámetros de usuario y contraseña:

string cadenaConexion = $"Server=UK5FCMI;Database=WebApp;";
using (SqlConnection con = new SqlConnection(cadenaConexion))
{
...

Y propone utilizar consultas parametrizadas, de la siguiente manera:

using (SqlCommand cmd = new SqlCommand("SELECT * FROM Products WHERE Usuario = @Usuario AND Contraseña = @Contraseña"))
{
cmd.Parameters.AddWithValue("@Usuario", usuario);
cmd.Parameters.AddWithValue("@Contraseña", contraseña);
...

} 

Pero esto NO funcionará. En primer lugar, no se podrá conectar a la BD sin un usuario y contraseña en la cadena de conexión. Y la consulta modificada de la tabla Products tampoco funcionará porque Usuario y Contraseña no son campos de dicha tabla.

Parece que el modelo está intentando encajar la solución de una SQL Injection clásica a este tipo de vulnerabilidad. Una solución podría ser utilizar la clase SqlConnectionStringBuilder, de la que Chema habla en la segunda parte de su serie en el blog.


Al ser Llama un modelo general, se probó también con un par de modelos especializados en código. Por ejemplo, el modelo Code Llama de Meta (basado en Llama 2), es un modelo especializado en código y está entrenado, entre otros, con lenguajes C#. El análisis de este modelo (en su versión 13B) del código anterior fue muy similar a Llama 3.1, proponiendo como solución la consulta parametrizada que incluye los parámetros de usuario y contraseña en la SELECT de productos.

Figura 7: Análisis de vulnerabilidad de Connection String Injection
 con Code Llama 13B

El modelo CodeGemma 7B también propuso el uso de consultas parametrizadas y además sacar la cadena de conexión a la sección ConnectionStrings del fichero Web.config. Esto tampoco soluciona la vulnerabilidad, aunque se saque la cadena a otro sitio.

Figura 8: Análisis de vulnerabilidad de Connection String Injection
con CodeGemma 7B

Es cierto que descubre que hay una inyección, pero no acierta con el tipo, y por lo tanto la solución no es correcta, lo que hace que para este caso, tenga una bonita alucinación. Así que queda tarea que hacer para conseguir que estas vulnerabilidades se puedan detectar y corregir correctamente.

miércoles, abril 08, 2015

Cómo explotar un SSRF (Server Side Request Forgery) y hacer un XSPA (Cross Site Port Attacks) a una DMZ

Las vulnerabilidades SSRF (Server Side Request Forgery) y los ataques de XSPA (Cross Site Port Attacks) son dos fallos de seguridad que van casi siempre de la mano. Los bugs de SSRF se producen en aplicaciones web inseguras que permiten a un atacante forzar al servidor web a realizar peticiones desde dentro del sistema hacia el exterior. Usando esas conexiones, los ataques de XSPA tratan de conocer, en base a las respuestas obtenidas, la lista de puertos que se encuentran abiertos o por el contrario cerrados en el servidor al que se fuerza la conexión.

Figura 1: Cómo explotar un SSRF y hacer un XSPA a una DMZ

Es importante tener claro que estas vulnerabilidades afectan al Back-End y que vienen conducidas por una mala validación en el Front-End o API al poder ser manipuladas las direcciones a las que se le van a realizar peticiones desde el Back-End. La principal ventaja para un atacante de que las peticiones sean realizadas desde dentro de la red en la que se encuentra el sistema vulnerable es que le van a permitir acceder a sitios que de otra manera no podría (pivoting), tal como sucede cuando estamos conectados a nuestro router y podemos acceder a las maquinas conectadas a nuestra red local.

SSRF & XSPA en buscadores y paneles de administración con CSPP 

Estos fallos son muy típicos, y ya los hemos visto en un buen número de sitios. En el artículo de Buscadores como arma de destrucción masiva se hablaba de posibles ataques de SSRF utilizando la indexación maliciosa o los agregadores de noticias, que permitían por ejemplo que un servidor lanzara un ataque de SQL Injection sin interacción alguna del atacante.

Figura 2: Ejemplo de utilización de un agregador de noticias para realizar ataques SSRF

Un caso curioso de SSRF son los paneles de administración expuestos en Internet, como sitios de configuración de impresoras HP que permiten escanear la DMZ completa, o los casos de bugs de Connection String Parameter Polution, tanto de bases de datos MySQL como de tecnologías .NET. Con ellos hemos visto lo fácil que es realizar ataques de XSPA (Cross Site Port Attacks) aprovechando estas vulnerabilidades de SSRF o CSPP, como en el caso de las herramietnas MyLittleAdmin.

Figura  3: XSPA en MyLittleAdmin for SQL Server

Como se ve, aprovechando la ventaja de que sea el Back-End el encargado de realizar peticiones internamente y que estas a su vez puedan ser manipuladas, permitiría a un atacante apuntar a direcciones IP internas y ya sea visualizando la respuesta o en base a tiempos dibujar un mapa de los activos de la red interna o conocer los puertos abiertos. A continuación les dejo una serie de enlaces donde se documenta cómo explotaron este fallo en sitios de Yahoo!, Facebook o Coinbase, por poner solo algunos ejemplos:
Yahoo! SSRF/XSPA Vulnerability
XSPA / SSRF bug with Facebook's Developer Web Application
SSRF/XSPA Bug in Coinbase
SSRF/XSSA usando ScreenShots

El siguiente caso que les traigo me pareció interesante, vendría a ser algo así como SSRF/XSSA aprovechando un sistema implementado para hacer ScreenShots en aplicaciones web. Esto es algo similar a lo que se publicó por aquí en el artículo de "Jugando con los ojos", donde aprovechando un sistema de captura de pantallas en distintos navegadores se hacían ataques a terceros servidores.

En este caso se trata de una aplicación web hecha en ruby on rails que a través de un sencilla interfaz web, recibe una URL o dominio que luego es enviada a un servicio externo que consulta en su base de datos quién es el propietario del dominio - lo que viene a ser un Whois -. Una vez el servicio Whois devuelve una respuesta a la aplicación web, ésta - además de imprimir dichos datos a través del navegador- seguidamente realizará una captura de pantalla levantando un navegador que visitará la misma dirección.

Figura 4: Funcionamiento normal de la web con el screenshot de Google

Como se puede ver en el navegador aparece en la parte inferior derecha una imagen de la página principal de google.com, al inspeccionar el elemento se puede comprobar que el nombre de la imagen parece ser un Hash MD5 por los 32 caracteres de longitud, que efectivamente corresponde a la concatenación del dominio más un slash tal que así google.com/.

Figura 5: Nombre de la imagen vinculada al screenshot

Escaneando la DMZ interna

Entonces, recordando la ventaja que supone que sea el servidor web el encargado de realizar la petición, por su conectividad con el resto de máquinas de su red interna, se podría realizar un escaneo completo de la DMZ. Para ello sería cuestión de ir probando a enviar por el parámetro uri, diferentes direcciones IP locales con la esperanza de obtener capturas de pantalla de máquinas de la red interna que tengan corriendo en el puerto 80 aplicaciones con interfaz web. Para ello bata con lanzar varias peticiones enviado varias direcciones IP locales, desde la 192.168.0.1 a la 192.168.0.24, y una vez el servicio externo hubiese procesado la dirección IP y devuelto la respuesta, se realizaría la captura de pantalla contra el servidor web en dicha dirección IP.

Figura 6: Resultados del escaneo completo de la DMZ

Ya por último teniendo un listado de las rutas a las imágenes que contiene las capturas realizadas, bastaría con acceder a cada una de ellas para comprobar si contenían algo interesante o simplemente estaban en blanco.

Figura 7: Resultados obtenidos con Burp

Después de realizar peticiones e intentar acceder a cada uno los enlaces con las imágenes, pude ver que algunas tenían un peso mayor que otras, dando a entender que algunas capturas realizadas contra algunas direcciones IP locales SÍ contenían información,  y por lo consiguiente alguna aplicación web corriendo sobre la máquina con dicha dirección IP. Ordene el listado de las imágenes por peso y fui visualizando cada una de ellas, algunas contenían información muy sensible y otras simplemente el típico banner de un servidor Apache.

Nota de reflexión final

Por supuesto, este tipo de vulnerabilidades son muy peligrosas, ya que desde el servidor no solo se puede hacer el escaneo de puertos, sino que se pueden hacer ataques de SQL Injection a servidores internos, Heartbleed o ShellShock, por poner algunos casos, así que hay que tener mucho cuidado con ellas.

Autor: Ricardo Martín (@ricardo090489)
Security QA Engineer en Eleven Paths

martes, diciembre 09, 2014

Connection String Parameter Pollution en aplicaciones Windows publicadas en Citrix o Terminal Services

Este puente ha tenido lugar el Cybercamp, y entre los ponentes se encontraba Stefano Di Paola, padre de las técnicas de ataque HPP (HTTP Parameter Pollution). En un rato en la sala de ponentes del evento estuvimos hablando y además de aprovechar para tirarnos una foto juntos le conté que cuando descubrimos las técnicas de ataque de Connection String Parameter Pollution fue porque desde que vimos su charla queríamos polucinar todo lo polucionable, y al final fueron las cadenas de conexión a bases de datos las que nos dieron el premio.

Figura 1: Ataques CSPP en aplicaciones Windows publicadas en Citrix

En aquel momento, cuando estábamos escribiendo el paper de Connection String Parameter Pollution, hubo un software vulnerable al que no le hicimos mucho caso, pues no tenía mucho sentido en aquel entonces el entorno de ataque. Me refiero a la Consola de Administración de SQL Server 2000, que permite la inyección de un punto y coma en cualquier campo y como consecuencia la polución de los parámetros de la cadena de conexión.


No tuvo mucho sentido para nosotros publicar que era vulnerable a CSPP, pues no encontramos un entorno de ataque donde tener la Consola de Administración de SQL Server 2000, que ya de por sí permite configurar todos los parámetros para hacer una conexión a una base de datos, diera alguna ventaja al atacante pero lo cierto es que lo era y se podrían inyectar comandos.


Figura 3: Presentación de Connection String Parameter Pollution en DEFCON 18

Sin embargo, quiso el destino que ayer mismo me topara con un servidor Citrix que estaba publicando una aplicación Windows que realizaba la autenticación contra una base de datos Microsoft SQL Server. Como se puede apreciar, es un panel de login en el que no se puede elegir ni el motor de la base de datos, ni tampoco se podía tocar el nombre del servidor y la base de datos, que venían prefijado y sin posibilidad de manipular. Solo se pueden introducir valores en el campo de usuario y contraseña. 

Figura 4: Un aplicación Windows publicada en un servidor Citrix con una conexión a SQL Server

Para probar si estaba ante una cadena de conexión a bases de datos inyectable y polucionable, en el campo de Usuario introduje una cadena con el carácter ";" en medio, para ver si conseguía generar un nuevo elemento en la configuración de la conexión. Como se puede ver en el siguiente mensaje de error obtenido, mi carácter ";" aparece en la cadena como uno de los caracteres de control introducidos por el programador, así que podría probar otras cosas.

Figura 5: Mensaje de error ODBC que muestra la cadena inyectada

Teniendo en cuenta que esta aplicación está en un entorno Citrix la cosa podría ser más que interesante. Al final, al haberse publicado esta aplicación, se está publicando un usuario del sistema operativo Windows sobre el que está corriendo, lo que podría permitir hacer un ataque de Jailbreak, pero al mismo tiempo podríamos utilizar un parámetro Integrated Security en la cadena de conexión para utilizar ese usuario Windows en el motor de la base de datos.

El resultado, como puede verse en este ejemplo concreto es que ese usuario de Windows concreto sobre el que está corriendo esta aplicación Windows publicada en este entorno Citrix no tiene los privilegios de acceso a este motor SQL Server en particular, pero el ataque podría haberse realizado si hubiera estado configurado con otro usuario podría haber tenido éxito.

Figura 6: Error. El usuario no está dentro de una conexión de confianza

Al final, con esta aplicación en concreto se daba otra singularidad negativa, y es que el nombre de la base de datos había sido agregado al final de la cadena de conexión. Esto, conociendo que en la polución de los parámetros hace que el "último gane", significa que desde el campo de usuario pudieramos manipular todos los parámetros anteriores menos el nombre de la base de datos.

En este último ejemplo se puede ver como se ha polucionado el valor Server de esta cadena de conexión para obtener un resultado de que en Localhost no hay instalado ningún servidor SQL Server. Esta polución nos permitiría buscar todos los servidores SQL Server dentro de la DMZ de la organización - uno de los entornos de ataque descritos en nuestra presentación de DEFCON - e intentar realizar realizar una conexión a algún entorno de backup no publicado en Internet.

Figura 7: Conexión a server Localhost con polución de parámetro SERVER

Al final como se puede ver, aunque las técnicas de Connection String Parameter Pollution las pensamos más en aplicaciones web, con aplicaciones Windows publicadas en entornos de Citrix y/o Terminal Services en los que ya hay un usuario con una sesión abierta, también tienen su cabida. 

Saludos Malignos!

miércoles, octubre 29, 2014

Cómo robar las BBDD de la empresa atacando al jefe

Cuando se trata de hacer un ataque a los servidores internos de una empresa siempre hay que buscar un punto de apoyo en el que apuntalar el ataque. Hace tiempo, antes de que Apple arreglara en iOS 6 las opciones de seguridad por defecto en la carga de las imágenes en los correos electrónicos que se visualizaban en el cliente iOS Mail, escribí un artículo sobre cómo aprovechar esto para hacer ataques de SQL Injection a la web de la empresa usando al jefe o hacer ataques de CSRF, y después salió alguna prueba de concepto que hacía algo similar con un CSRF usando passwords por defecto y debilidades en alertas de navegadores. Pequeñas debilidades que sumadas dan owned!.

Figura 1: Cómo robar la base de datos de la empresa usando a un empleado de la organización

En este caso, para el Security Innovation Day 2014 en Eleven Paths preparamos un ataque similar, pero usando un fichero Excel, una macro VBA (Visual Basic for Applications) y una cadena de conexión con autenticación del lado del servidor. Os lo explico.

Figura 2: Un panel de control para cocinar el ataque
La idea era demostrar como un atacante podría utilizar pequeñas debilidades en una empresa para conseguir robar una base de datos completa SQL Server sin ni tan siquiera hacer mucho ruido. Para ello, el primer paso es sencillo, un correo dirigido con una buena excusa, y adjuntar en él un fichero Excel.

Figura 3: El correo electrónico le llega a la víctima sin ningún aviso de seguridad

Si es un jefe, seguro que se te ocurren mil y una excusas para enviar un correo electrónico con un Excel adjunto. Así que usa tu imaginación en esta parte del proceso. Nosotros no le dimos demasiada importancia a esto, pero si encima el target tiene una configuración relajada del registro SPF podrás incluso suplantar a algún empleado interno de la empresa con facilidad.

Figura 4: El fichero se guarda en el equipo local con un Drag & Drop para evitar la alerta de zona de Internet

Una vez que el fichero adjunto se abra se mostrará una alerta indicando que hay algún contenido que ha sido deshabilitado, para conseguir engañar al usuario, de nuevo, puedes hacer uso de algún truco de ingeniería social. En este caso el truco es que se está cargando una imagen externa.

Figura 5: Falta una imagen porque no has aceptado la alerta de seguridad

Si el jefe activa el contenido, lo que realmente sucede es que se carga una macro VBA que realiza todo el trabajo. Para la demo hicimos una cadena de conexión con Autenticación Integrada, al igual que realizábamos en los ataques de Connection String Parameter Pollution. Para que el usuario se quede tranquilo, nosotros le mostramos la imagen como si fuera lo único que hubiera pasado en su equipo.

Figura 6: Ahora aparece la imagen en el fichero Excel

Como para la demo sabíamos el nombre del servidor SQL Server, la forma en la que se hace la cadena de conexión es muy sencilla, pero se podría haber realizado un escaneo de toda la red al estilo de Scanner CSPP que creamos, probando a conectarse a todo el rango de direcciones IP de la red.

Figura 7: La macro que se conecta al Servidor SQL Server con Autenticación Integrada, roba los datos y los manda al C&C

Cuando encuentre el servidor SQL Server y se pueda autenticar en él con las credenciales que la víctima haya utilizado para abrir su sistema operativo Windows, entonces se podría hacer un recorrido completo por el diccionario de datos y traer absolutamente todo. Para este ejemplo, tiramos una consulta contra una tabla de la base de datos y listo, eso sí, usando el For XML al estilo de los ataques de Serialized SQL Injection.

Figura 8: Datos reportados al C&C

El último paso es fácil, reportar todo a un panel de control en la web de la forma más silenciosa o sencilla. Para esta demo no quisimos complicarlo y se enviaba como parámetro GET de una petición, lo que permitía recoger la info que había en la base de datos.

Figura 9: Ningún AV de Virus Total muestra ninguna alerta de seguridad


Al final era un pequeño ejemplo de cómo la suma de pequeñas debilidades, como fugas de información de versiones utilizadas, nombres de personas de la organización, reglas relajadas en los filtros anti-spoofing SPF, políticas de seguridad de la aplicación Excel o el uso de Autenticación Integrada en SQL Server, podrían llevar a un atacante a tener éxito en el robo de datos de tu organización de forma sencilla.


Figura 10: Bosses Love Excel, Hackers Too!

Por supuesto, este fichero Excel cocinado a medida para este ejemplo no es detectado por ningún motor antimalware como algo malicioso o sospechoso. Solo es un Excel, y como dijimos Juan Garrido y yo en la charla de Defcon 19 donde explicábamos la cantidad de cosas que se pueden hacer con él, "Bosses love Excel, Hackers Too!".

Saludos Malignos!

miércoles, noviembre 17, 2010

Descubrir servidores SQL Server con MylittleBackup

El otro día me puse tan contento cuando alguien en twitter puso que en un proceso de pentesting había podido utilizar las técnicas de Connection String Parameter Pollution. Mola cuando a más gente le resulta útil el trabajo.


Figura 0: No me puedo decir cuál era la aplicación

Cuando estabamos escribiendo el artículo y preparando las demos, nos dimos cuenta de que a veces costaba encontrar los servidores internos de la empresa. Saber la lista de servidores SQL Server de la empresa es necesario para polucionar el parámetro Data Source de la cadena de conexión.

Posteriormente a que se pasara la oleada de charlas presentando el trabajo, en el SOCtano se miraron los productos vulnerables a las técnicas de CSPP, y nos llevamos la sorpresa de que los productos MyLittleAdmin y MiLittleBackup utilizan un fichero de configuración config.xml que está en el path principal donde está instalado el producto.

Es decir, que cuando te encuentras la pantalla de Login como esta:


Figura 1: Login de myLittleBackup

Lo que tienes que hacer es pedir, en la misma ruta, config.xml... y voilá.


Figura 2: Config.XML de un mylittlebackup

Ahí lo tienes, la lista de servidores SQL Servers que están siendo administrados por la herramienta, la forma de conectarse internamente -que viene muy bien para hacer la polución del parámetro Data Source- y un montón de información de usuarios, roles y rutas.

Como está la ruta de los ficheros de log, y tienes acceso al formato de los nombres, solo tienes que solicitar el fichero de log y leer más datos aún.


Figura 3: Log con información de usuarios

Mirando por Internet, hay algunos que tienen toda la granja de servidores SQL Server publicados.


Figura 4: Config.xml de MyLittleBackup con lista de servidores SQL Server

En fin, que cuando menos te lo esperas, te encuentras el mapa de la red interna publicado, y sin FOCA ni ná.

Saludos Malignos!

PD: Para los que no estén al día de lo de CSPP, os dejo la presentación de la Ekoparty (la primera que dimos) sobre este tema.

Connection String Attacks - ekoparty Security Conference 5th edition from ekoparty on Vimeo.



viernes, octubre 15, 2010

Charlista

En muchas ocasiones voy justo de tiempo... vale, casi siempre voy justo de tiempo. Esto es porque me apunto a todas las charlas a las que me invitan... vale, a casi todas las que me invitan. Para demostrar esto, os dejo aquí el material de alguna de las charlas.

Vídeo de Connection String Attacks en Defcon 18


Presentación de "Apadrina un Malware"
(Bolivia/Argentina/Perú)


Training de Learn About FOCA 2.5.5


Si tardo en contestarte un mail, no me crucifiques, que siempre es porque estoy dando una charla... vale, casi siempre.

Saludos Malignos!

miércoles, marzo 17, 2010

Sin descanso pero muy agradecido

Si alguien se ha molestado en mirar en el blog el componente de "Próximos Eventos" se habrá dado cuenta de que a partir del mes de Marzo estaba vacío. La explicación a este fenómeno es algo tan sencillo y mundando como que el físico no me da para más si no descanso un poco. Desde luego no pienso quejarme de mi trabajo y de las mil cosas que hago, ya que me siento agradecido por poder hacer algo que me gusta tanto, pero a partir de Abril necesito algo de tiempo para acabar dos proyectos personales que tengo a medias: Un libro sobre seguridad web y el documento final de la tesis doctoral.

Este es el plan original, y por ello no hay eventos más allá de las vacaciones de Semana Santa. Sin embargo, voy a tener que rectificar ese planing inicial por razones de "fuerza mayor" ya que nos han seleccionado para Black Hat Europe 2010 con la charla de Connection String Parameter Pollution Attacks.

Si, no es nueva, pero parece que gustó en BlackHat DC y nos han metido en la agenda de la edición europea de 2010 y eso es una razón de fuerza mayor para modificar un poco los planes iniciales. Más cuando en la agenda hay gente como Don Ero Carrera, Moxie Marlinspike, Mariano Nuñez (que bueno volver a verte!), FX, Sirdarkcat y un largo etcétera... Además, el viaje es corto para mí, ya que estoy a un vuelo de AVE, y estoy en casa, así que podré hacer de guía y sacar a los speakers a cenar por ahí en algún fiestorrillo.

Es la tercera vez consecutiva que presentamos un trabajo en BlackHat Europe y, aunque esté destrozado físicamente, y ya no sea una novedad ni la charla y estar en BlackHat, sigo sintiendome agradecido por estar allí.

Saludos Malignos!

miércoles, febrero 03, 2010

(more) Connection String Attacks

Una vez finalizada la charla, os dejamos aquí la información que hemos utilizado. Las dispositvas han cambiado un poco, no demasiado, para intentar hacerse más claras y permitir una mejor explicación de los conceptos. Como tienen animaciones, tal vez sea mejor que te las descargues.


El escanner, si lo quieres pobar, también esta disponible para descarga en la siguiente URL: CSPP Scanner.


Nuevo módulo de ataque por diccionario

Se le ha añadido un módulo de ataque por diccionario, así que si subes esto a una web y lo utilizas para hacer maldades es cosa tuya. Si se puede conectar a un SQL Server te ofrece un interfaz de comandos sql para que sea similar al SQL Query Analizer.

Recuerda que tienes un artículo largo sobre las técnicas de Connection String Attacks para leer y un video de la charla en castellano que di en el décimo aniversario de Informática64.

Saludos Malignos!

viernes, enero 29, 2010

Scanner CSPP

Hoy es el día límite para entregar las diapositivas que vamos a utilizar en BlackHat DC 2010 y, como es habitual, aun no las tengo terminadas. Esta será la tarea de hoy por la mañana, además de otras mil más, pero.. ¿quién dijo miedo?

Entre las cosas que estamos preparando en la maleta para Wahsington, irá una tool que empezamos a desarrollar para la Ekoparty y que ya está bastante terminadita. Es un Scanner de servidores SQL Server usando CSPP para descubrir servidores detrás del Firewalll y, si se puede con CSPP, intentar conectarse a ellos.

El funcionamiento es sencillo, subes el programita al servidor web, le das a escanear servidores con SQL Server y, en todos ellos, intentas una conexión con integrated security=true. A ver si cuela la manivela.


Figura 1: El resultado del scanneo

Nosotros lo estamos probando con hostings gratuitos, y hay alguna que otra sorpresa chula que enseñaremos la semana que viene. La idea es que, al estar el programita corriendo ya en el servidor web, te has quitado el firewall externo, con lo existe mucha más probabilidad de poder conectarte a los puertos del servidor SQL Server.


Figura 2: El intento de conexión con autenticación integrada

Si consigues la conexión, lo que se te ofrece es un interfaz de comandos SQL para que lances tus queries al gusto. Además, le hemos añadido el Rogue Attack por si quieres que se intente conectar contigo para poder robar el hash de la cuenta.

Seguramente liberemos este scanner tras la Black Hat DC para que lo probéis, así que… ya nos diréis que os parece, que se puede mejorar, y que resultados os da.

Saludos Malignos!

jueves, noviembre 12, 2009

Mentiría

Mentiría si dijera que no me gusta mi trabajo. Mentiría si dijera que cuando voy a dar una charla a esa Pamplona que me trata tan bien voy sufriendo. Mentiría si dijera que cuando voy a Galicia voy forzado a dar una conferencia o que cuando mi público son estudiantes o gente empezando con la seguridad informática lo hago a disgusto. Sería un gran mentiroso si dijera que cuando me dan un micrófono, conectan mi portátil a la salida de vídeo y es mi turno de hablar en una charla en Valladolid o Valencia estoy sufriendo o pensando en cuando se va a terminar. Diría otra mentira si dijera que cada vez que me subo al escenario del auditorio de Barcelona no tengo recuerdos buenos de todas las veces que he estado allí o que cuando en Madrid se monta un evento en el auditorio de Getafe, Kinépolis o los mega escenarios del auditorio de Congresos o el Juan Carlos I no me siento contento. Mentiría si dijera que ahora que estamos preparando nuestro viaje a las islas dijera que no estamos preparando ya una cena y cachondeo para nosotros.

Me gusta mi trabajo y aun, cuando después de tantos años parece que uno se puede llegar a cansar de este trabajo, todavía hay veces que abro el correo y disfruto como la primera vez.

Ayer me llegó la confirmación de que la charla de Connection String Parameter Pollution ha sido aceptada para la próxima Black Hat USA DC 2010 que tendrá lugar en Febrero en Whasington DC y mentiría si dijera que no me revolucioné y revolucioné a los compañeros.


Mail de confirmación

Estas conferencias, como espero que tenga la RootedCon en Madrid, tienen siempre algo de especial, por todo. La temática, los ponentes, el ambiente, la pasión que trae la gente y las cosas que se aprenden allí, no sólo en las charlas, también en los bares.

Es la tercera vez que voy a hablar en Black Hat, pero la primera en USA, y tenía muchas ganas de estar allí. Durante estos dos años y medio que hace que me decidí a dar charlas en inglés, he tenido la suerte de estar en conferencias muy chulas pero tenía ganas de ir a una BH USA. Cuando terminamos la charla en I64, sabíamos que tenía muchas posibilidades de ser aceptada, pero, como quería tener un detalle con mis amigos de la Ekoparty de Argentina, decidí que, aunque no nos la aceptaran en BH por haber sido “cantada” con anterioridad, primeramente se iba a estrenar en Buenos Aires.

Al final, todos contentos, porque me voy a la BH USA DC 2010 y mentiría si no estoy encantado.

Saludos Malignos!

viernes, noviembre 06, 2009

Décimo Aniversario Informática64

El pasado 1 de Octubre celebramos el décimo aniversario de Informática64. El evento tuvo muchas más cosas a parte de la sesión plenaria, pero al menos os dejamos aquí las charlas de la misma.

Juan Luis G. Rambla: MS Forefront Threat Management Gateway



Alejandro Martín Bailón: MetaShield Protector



Joshua Sáenz: MS Exchange Server 2010, Message Stats & Apolo



Chema Alonso: Connection String Attacks



Saludos Malignos!

sábado, octubre 10, 2009

Connection String Attacks (VI de VI)

*********************************************************************************************
- Connection String Attacks (I de VI)
- Connection String Attacks (II de VI)
- Connection String Attacks (III de VI)
- Connection String Attacks (IV de VI)
- Connection String Attacks (V de VI)
- Connection String Attacks (VI de VI)
*********************************************************************************************

Soluciones

La primera, y más evidente, de las medidas de protección contra este tipo de ataques es filtrar correctamente los valores de entrada. En este caso, aunque el carácter igual [=] es uno de los necesarios para introducir pares de parámetro/valor, el más importante a filtrar es el carácter punto y coma [;].

Si se está utilizando este esquema de autenticación en una aplicación, web o de escritorio, con .NET se deben utilizar las clases de ConnectionStringBuilder. El establecimiento del valor de cada uno de los parámetros de una cadena de conexión se realiza mediante funciones parametrizadas seguras contra la inyección de comandos.

Respecto a los ataques descritos, y desde el punto de vista de la administración de seguridad, es importante restringir las cuentas del sistema con que corre una determinada aplicación web en un servidor para poder limitar su acceso, restringir las cuentas de un sistema que pueden tener acceso a un servidor de bases de datos concreto y, por supuesto, restringir en el firewall de perímetro el tipo de conexiones que puede realizar un servidor concreto hacia el exterior. Un servidor web no debería poder establecer conexiones con cualquier puerto hacia el exterior. Los servidores web IIS 7 o IIS 7.5 permiten el uso de cuentas restringidas para poder correr los pool de aplicaciones con los menores privilegios posibles.

Es conveniente revisar periódicamente los resultados que devuelven los motores de búsquedas, para que no aparezca ningún dato sensible de las cadenas de conexión o los ficheros UDL de tu sitio entre ellos.

Si tienes un sitio de administración web al que te conectas en remoto, quizá es conveniente que restringas las conexiones a ese sitio web con alguna medida de protección extra: Filtrado de IP, autenticación IPSec, VPNs, etc… para que no se pueda conectar a él cualquiera desde Internet.

Respecto a los programas descritos en este artículo, en cada uno de los ejemplos de ataques, se deben tomar las medidas correctoras pertinentes.

myLittleTools: myLittleAdmin & myLittleBackup

Los programas software de administración de bases de datos de la compañía myLittleTools, es decir, myLittleBackup y myLittleAdmin, deben ser actualizados con el parche de seguridad que la empresa hizo público. Este advisory, aunque inicialmente fue publicado como “minor security update”, al final se presentó como un “security update” que debe ser instalado lo antes posible.

Figura 21: Minor y no minor security update

Además, hay que tener en cuenta que estos productos son bastantes populares y en la propia web de los productos aparecen algunas de las empresas que los están utilizando. Esto podría situarles como empresas especialmente sensibles al impacto de estos ataques.


Figura 22: Empresas utilizando este software

Además, aunque los programas de administración de servidores siempre deben tener una protección extra, es sencillo, mediante consultas en buscadores de Internet, descubrir software vulnerable expuesto a Internet sin una protección extra.

SQL Web Data Administrator

Este software fue publicado inicialmente por Microsoft como una herramienta freeware. En el año 2004 se decidió liberar este producto como una solución OpenSource que fuera mantenida y gestionada por la comunidad. La versión publicada por Microsoft, lamentablemente, es insegura, mientras que la versión que se debe instalar, la liberada como OpenSource no lo es. Sin embargo, por desgracia, el yugo del pagerank y la importancia de los sitios web publicadores de ambas herramientas hacen que cuando alguien busca en cualquier motor de búsqueda en Internet, el primer link que obtiene es el publicado por Microsoft, llevando a muchos a instalar un software vulnerable.

Se debe, por tanto, instalar la versión no vulnerable a esta técnica que se encuentra disponible en CodePlex.


Figura 23: SQL Web data Adminsitrator en CodePlex

ASP.NET Enterprise Manager

Este software, como tal, está abandonado. A pesar de que es posible encontrar el software en múltiples de los portales que se dedican a hacer backup de software público con el objetivo de ganar visitas y publicidad, la web original del proyecto está abandonada. No obstante, este producto está incorporado dentro de los paneles Plex para administrar sitios en hosting, asi que es de suponer que ellos son los que están manteniendo la seguridad del producto.

Sin embargo, si se encuentra instalado este software, puede ser parcheado manualmente. El código muestra una construcción de la cadena de conexión de forma insegura como se puede ver en la siguiente Imagen.


Figura 24: ASP.NET Enterpise Manager. Construcción insegura de cadena de conexión

Este error se repite en muchas partes a lo largo de todos los archivos que componen el aplicativo. La solución consiste en actualizar el Framework en el servidor donde corra esta aplicación a la versión 2.0 o superior y parchear el código como se puede ver en la imagen siguiente.


Figura 25: Fix para ASP.NET Enterprise Manager

En ella se ha creado una clase para establecer la cadena de conexión de forma segura y deberá ser invocado el método de BuildconnectionString() en todos los puntos en los que se encuentre la cadena insegura.

Conclusiones finales

Este tipo de vulnerabilidades pueden ser especialmente peligrosas si no se tiene en cuenta pues pueden llegar a permitir a cualquier atacante tener una conexión dentro de una base de datos. Si un atacante puede realizar desde un servidor web una conexión a la base de datos y estos dos servidores se encuentran en la DMZ, el firewall de perímetro no puede proteger las conexiones contra la base de datos. El atacante se encontraría dentro de la DMZ y el mismo servidor web se convertiría en la máquina enemiga. Debe por tanto aplicarse siempre un concepto de Defensa en Profundidad, es decir, aplicar todas las medidas de seguridad que sean posibles teniendo en cuenta que todas las medidas anteriores pueden haber fallado.

Referencias

- Diapositivas de Connection String Attacks
- El video de la charla de Connection String Attacks en el décimo aniversario de Informática64
- myLittleTools [myLittleAdmin/myLittleBackup]
- SQL Web data Administrator [versión de Microsoft]
- SQL Web data Administrator [versión Codeplex]
- ASP.NET Enterprise Manager
- Connection String Builders
- Using the SqlConnectionStringBuilder to guard against Connection String Injection Attacks [/bill's House O Insomnia]

*********************************************************************************************
- Connection String Attacks (I de VI)
- Connection String Attacks (II de VI)
- Connection String Attacks (III de VI)
- Connection String Attacks (IV de VI)
- Connection String Attacks (V de VI)
- Connection String Attacks (VI de VI)
*********************************************************************************************

Entrada destacada

+300 referencias a papers, posts y talks de Hacking & Security con Inteligencia Artificial

Hace un mes comencé a recuperar en un post mi interés en los últimos años, donde he publicado muchos artículos en este blog , y he dejado mu...

Entradas populares