*********************************************************************************************
- 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)
*********************************************************************************************
Introducción
Cuando una aplicación va a trabajar con un repositorio de datos externo necesita configurar como debe realizarse el acceso al mismo. El almacen de datos puede ser un fichero en el sistema operativo, una base de datos relacional, un árbol LDAP o una base de datos XML. En cualquier situación debe identificarse la ubicación del repositorio de datos mediante una cadena de conexión.
Las cadenas de conexión en aplicaciones web, como ya se ha dicho, se pueden utilizar para conectarse a bases de datos relacionales. La sintaxis de estas cadenas dependerá tanto del motor de base de datos al que se vaya a conectar como del proveedor o driver que vaya a utilizar el programador para establecer la conexión y definir el intercambio de datos.
De una u otra manera, el programador debe especificar el servidor al que se conecta, el nombre de la base de datos, las credenciales a utilizar y los parámetros de configuración de la conexión, tales como el timeout, bases de datos de respaldo, el protocolo de comunicaciones o las opciones de cifrado de las mismas.
El siguiente ejemplo muestra una cadena de conexión común para conectar a una base de datos Microsoft SQL Server:
“Data Source=Server,Port;
Network Library=DBMSSOCN;
Initial Catalog=DataBase;
User ID=Username;
Password=pwd;”
Como se puede apreciar, una cadena de conexión es una secuencia de parámetros separados por el carácter punto y coma “;” definidos como pares atributo, valor. Los atributos utilizados en el ejemplo se corresponden con los utilizados por “.NET Framework Data Provider for SQL Server”, que es el utilizado por los programadores cuando usan la clase “SqlConnection” en las aplicaciones .NET. Lógicamente es posible realizar conexiones a SQL Server utilizando otros proveedores como “.NET Framewor Data Provider for OLE DB” (oldbConnection), “.NET Framework Data Provider for ODBC” (OdbcConnection), "SQL Native Client 9.0 OLE DB provider", etc...
Lo habitual y recomendado para las conexiones desde aplicaciones .NET a SQL Server es utilizar el proveedor proporcionado por el propio Framework. La sintaxis de la cadena de conexión a utilizar con él es común para las diferentes versiones de SQL Server (7, 2000, 2005 y 2008) y son las utilizadas en este articulo para ilustrar los ejemplos.
Cadenas de Conexión y Google Hacking
Tal como se puede apreciar, la información que acompaña una cadena de conexión es sensible. Puede contener información relativa a ubicaciones de servidores y credenciales del sistema que deben ser protegidas.
No obstante, es secillo encontrar cuentas del sistema y servidores de bases de datos usando un poco de Google Hacking y, con una sencilla búsqueda por los campos Data Source y Password, por ejemplo, pueden aparecer en Internet múltiples sitios dónde la cadena de conexión ha sido indexada.
Figura 1: Credenciales en cadenas de conexión
Esta información no tiene porque ir incluida en el própio código de la aplicación web y, como forma de intercambiar correctamente la información de conexión a una base de datos, existe el formato de fichero UDL [Universal Data Link] con el que se definen los parámetros de la conexión.
Figura 2: Información de conexión en fichero UDL
Al ser un fichero de texto, es fácil localizar en Google este tipo de archivo con información sensible sobre conexiones a bases de datos con una simple búsqueda por ficheros de tipo UDL con la palabra password.
Figura 3: Ficheros UDL en Google
*********************************************************************************************
- 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)
*********************************************************************************************
- 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)
*********************************************************************************************
Introducción
Cuando una aplicación va a trabajar con un repositorio de datos externo necesita configurar como debe realizarse el acceso al mismo. El almacen de datos puede ser un fichero en el sistema operativo, una base de datos relacional, un árbol LDAP o una base de datos XML. En cualquier situación debe identificarse la ubicación del repositorio de datos mediante una cadena de conexión.
Las cadenas de conexión en aplicaciones web, como ya se ha dicho, se pueden utilizar para conectarse a bases de datos relacionales. La sintaxis de estas cadenas dependerá tanto del motor de base de datos al que se vaya a conectar como del proveedor o driver que vaya a utilizar el programador para establecer la conexión y definir el intercambio de datos.
De una u otra manera, el programador debe especificar el servidor al que se conecta, el nombre de la base de datos, las credenciales a utilizar y los parámetros de configuración de la conexión, tales como el timeout, bases de datos de respaldo, el protocolo de comunicaciones o las opciones de cifrado de las mismas.
El siguiente ejemplo muestra una cadena de conexión común para conectar a una base de datos Microsoft SQL Server:
“Data Source=Server,Port;
Network Library=DBMSSOCN;
Initial Catalog=DataBase;
User ID=Username;
Password=pwd;”
Como se puede apreciar, una cadena de conexión es una secuencia de parámetros separados por el carácter punto y coma “;” definidos como pares atributo, valor. Los atributos utilizados en el ejemplo se corresponden con los utilizados por “.NET Framework Data Provider for SQL Server”, que es el utilizado por los programadores cuando usan la clase “SqlConnection” en las aplicaciones .NET. Lógicamente es posible realizar conexiones a SQL Server utilizando otros proveedores como “.NET Framewor Data Provider for OLE DB” (oldbConnection), “.NET Framework Data Provider for ODBC” (OdbcConnection), "SQL Native Client 9.0 OLE DB provider", etc...
Lo habitual y recomendado para las conexiones desde aplicaciones .NET a SQL Server es utilizar el proveedor proporcionado por el propio Framework. La sintaxis de la cadena de conexión a utilizar con él es común para las diferentes versiones de SQL Server (7, 2000, 2005 y 2008) y son las utilizadas en este articulo para ilustrar los ejemplos.
Cadenas de Conexión y Google Hacking
Tal como se puede apreciar, la información que acompaña una cadena de conexión es sensible. Puede contener información relativa a ubicaciones de servidores y credenciales del sistema que deben ser protegidas.
No obstante, es secillo encontrar cuentas del sistema y servidores de bases de datos usando un poco de Google Hacking y, con una sencilla búsqueda por los campos Data Source y Password, por ejemplo, pueden aparecer en Internet múltiples sitios dónde la cadena de conexión ha sido indexada.
Figura 1: Credenciales en cadenas de conexión
Esta información no tiene porque ir incluida en el própio código de la aplicación web y, como forma de intercambiar correctamente la información de conexión a una base de datos, existe el formato de fichero UDL [Universal Data Link] con el que se definen los parámetros de la conexión.
Figura 2: Información de conexión en fichero UDL
Al ser un fichero de texto, es fácil localizar en Google este tipo de archivo con información sensible sobre conexiones a bases de datos con una simple búsqueda por ficheros de tipo UDL con la palabra password.
Figura 3: Ficheros UDL en Google
*********************************************************************************************
- 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)
*********************************************************************************************
Bastante interesante el tema. Esperando las próximas ediciones.
ResponderEliminarSaludos!
pd.- para cuándo un NoLusers?
Excelente articulo, seguire con las demás entradas.
ResponderEliminar