Archive for the ‘Bases de Datos’ Category

10 Años de SQL Injection

Wednesday, December 31st, 2008

Descubro via Chema Alonso( MVP Seguridad ): Link que el pasado 25 de Diciembre se cumplieron 10 años del paper donde se expone la técnica que más adelante pasaría a llamarse SQL Injection.
Link al paper original

¿ Que no sabes qué es Sql Injection ?. Resumiendo al máximo: es una técnica para atacar una aplicación que maneja sin cuidado la generación de consultas a BD, inyectando sentencias SQL en lugar de los valores esperados.

Según la Wikipedia: Wikipedia

Por poner un ejemplo claro y clásico:

Código de LogIn en la aplicación pide Usuario y Contraseña, accede a la BD y comprueba si existe una fila en la tabla Usuarios con los datos introducidos, si es así el usuario accede a la aplicación.

Si la generación de la consulta se realiza como sigue: ( Quien no lo ha visto en todos los lenguajes de programación posibles?, salvo en LINQ, claro ;) ).

string sql = "SELECT Count(*) FROM Usuarios WHERE NombreUsuario = '" + textBoxNombreUsuario.Text + "' AND Contrasenya = '"+ textBoxContraseñaUsuario.Text + "'";

Bien, si el usuario de la aplicación, espabilado él, introduce por ejemplo, como nombre de usuario: MiUsuario’ OR 1=1 — la consulta resultante sería:

string sql = "SELECT Count(*) FROM Usuarios WHERE NombreUsuario = 'MiUsuario' OR 1=1 -- AND Contrasenya = 'cualquier cosa que ponga'";

Donde “–” en SQL comenta el resto de la línea… por lo que la consulta va a evaluar solamente las filas cuyo usuario sea ‘MiUsuario’ OR 1 sea igual a 1…. que suele serlo :)

Éste es el ejemplo más simple, recordad que SQL permite realizar operaciones en batches, separando cada consulta por ‘;’, con lo que en casos tan extremos como el anterior se pueden llegar a inyectar acciones DML tan “simples” como pueden ser DROP TABLE o DROP DATABASE: MiUsuario’ OR 1=1; DROP TABLE Usuarios —

Evidentemente para que pudieran realizarse operaciones de DML en la Base de Datos el usuario que ejecuta las consultas tendría que tener esos permisos… y no debería tenerlos, debería lo menos crearse un usuario con los menos permisos posibles para ejecutar las consultas de la aplicación y otro administrador para gestionarla … pero igualmente no se deberían crear las consultas dinámicas que estamos viendo, así que mejor verlo junto :)

A partir de aquí surgen distintas variaciones de la técnica, basándose en la información que se puede obtener de la página, como por ejemplo:

-Time-Based SqlInjection: Inyectar queries en las que si se cumple la condición que esperas se ejecuta un delay con el que poder distinguir basándonos en el tiempo de respuesta si la condición se ha cumplido o no. El ejemplo básico sería deducir una password a base de ir encontrando cada caracter, sabiendo si es válido porque cuando lo es la ejecución de la página es más lenta debido a la query inyectada. En TechNet hay un artículo, también de Chema, al respecto: link

Además de las neuronas de quien pone a prueba la aplicación, existen Tools que realizan sofisticados ataques basados en diccionarios, comparando resultados de la página, aplicando Time-Based SQL Injection… un ejemplo de herramienta puede ser :sqlpowerinjector

Bueno, me estoy extendiendo demasiado y se me acaba el año :)

Espero que con este mínimo resumen haya despertado la curiosidad de algunos y elevado el nivel de atención a la seguridad. Recordad que en general estas técnicas son totalmente independientes del lenguaje de programación y de la Base de Datos, cada uno puede tener algún agujero o característica especial, pero las técnicas generales aplican a todos.

El año que viene opinamos sobre qué hacer para evitar estas vulnerabilidades, pero las recetas mágicas no existen y siempre será necesario ser consciente de las técnicas de ataque para intentar evitarlas en lo posible.

Presentación Windows Server 2008, Visual Studio .Net 2008, SQL SERVER 2008 (2/3)

Wednesday, March 26th, 2008

Siguiendo el post de César del 11 de marzo sobre el evento de Microsoft “The Evolution Show (Lanzamiento Windows Server 2008, Visual Studio 2008 y SQL Server 2008)” celebrado hace ya casi un mes, os comento algunas de las novedades que nos proporcionará Katmai (el codename o frikinombre de SQL Server 2008).

A día de hoy lo que tenemos disponible es la sexta CTP. Algunas de las fabulosas nuevas funcionalidades que enumeramos más abajo no estarán disponibles hasta el verano que es cuando se supone que se publicará la RTM, la supuesta versión final.

Microsoft se esfuerza en destacar las siguientes de entre las nuevas características de SQL 2008:

  1. Uso de una sintaxis consistente para consultar diferentes conjuntos de datos…

    Es decir, LINQ, que en verdad fue una de las estrellas del evento en lo que a desarrollo se refiere.

  2. Mapeo de estructuras de datos a entidades de negocio usando ADO .NET Entity Framework (ahora mismo en beta 3).

    Este framework incluirá LINQ To Entities que se unirá al resto de “sabores” de LINQ disponibles desde la salida de .Net Framework 3.5 en noviembre de 2007.

  3. Extensión de las posibilidades de almacenamiento de datos con los nuevos tipos de datos geométricos, geo-espaciales y de contenido no estructurado.

  4. SQL Server 2008 Compact Edition y Synchronization Services para el desarrollo de aplicaciones de movilidad y otras soluciones con capacidades de almacenamiento de datos on-line y off-line.

En lo que se refiere al primer punto nos hartamos de presenciar demos con diferentes formas de consumir datos de fuentes heterogéneas (BDs relacionales, .Net DataSets, XML Documents, colecciones, objetos en memoria…) y de cómo construir aplicaciones con sus clásicas tres capitas atacando a SQL Server (LINQ To SQL) con muy pocas líneas y en cuestión de minutos. Microsoft apuesta fuerte por LINQ y sus capacidades son muchas y variadas, pero todo esto sería materia de otro post.

LINQ Project “Home” Page

101 LINQ Samples

ADO .NET Entity Framework tiene muy buena pinta, demasiado buena. Su objetivo no es sólo ser un ORM, incluirá LINQ to Entities como tal, sino proveer de toda una serie de servicios de consulta y reporting. Se trata de resolver la diferencia de visión entre los mundos relacionales y orientados a datos (lo que alguien ha bautizado poéticamente Object-Relational impedance mismatch), de abstraerse de la forma en que los datos son almacenados y preocuparse sólo de consumirlos.

MSDN Overview

Anatomy of the ADO .NET Entity Framework .pdf

CodePlex Samples

La inclusión de contenido no estructurado como un nuevo tipo de dato tiene también posibilidades muy interesantes. Hasta ahora las opciones se reducían a almacenar estos contenidos en BLOBs, o en el File System guardando en tabla sus correspondientes apuntadores, rutas o la forma de acceder a ellos. Con el nuevo tipo FILESTREAM este contenido se guarda también en un sistema de ficheros pero podemos tratarlo como un campo más en nuestras consultas ocupándose el motor de base de datos de la transaccionalidad, de su inclusión en las políticas de back-up y de las mismas posibilidades de gestión de los datos de cualquier otro campo. Claro que esto no es más que una abstracción, ya que T-SQL seguirá usando BLOBs para acceder a estos contenidos y que la API de Win32 también tiene acceso a los ficheros donde se guarden estos datos no estructurados.

SQL2008UnstructuredData.doc

También tuvimos ocasión de ver en acción los nuevos tipos GEOMETRY para datos espaciales planos y GEOGRAPHY para datos espaciales geodésicos y unas cuantas funciones para manipularlos de diferentes formas y ejecutar operaciones aparentemente complejas. En concreto poder obtener la distancia entre Madrid y Melbourne con una simple llamada a una función en la lista de campos de una sentencia select o recalcular y visualizar en un mapa el contorno de las aguas territoriales de Australia con un tiempo de respuesta razonable parece bastante espectacular, sobre todo para quien trabaje con mapas.

SpatialData.doc

Como digo al principio, esto no es más que una breve puntualización de lo que hemos podido ver en directo y con un sesgo claramente desarrollador, pero SQL Server 2008 incorpora una gran cantidad de novedades para administración y sobre todo para Business Intelligence que pueden ser de igual o mayor interés.

Como últimos apuntes señalar la enorme utilidad del Intellisense LINQ, que nos ayuda, en tiempo de diseño, a evitar errores en la sintaxis de las sentencias de consulta chequeando tipos y deletreo de campos. Por cierto, que para habilitar esto LINQ tiene la curiosa exigencia de poner la clausula from en primer lugar.

Y, por fin, también tenemos Intellisense en el editor de consultas lo cual era largamente demandado por desarrolladores SQL, que tenían que instalarse o usar complementos y herramientas de terceros del estilo SQL Prompt de RedGate o TOAD. Claro que sólo funciona para las sentencias SELECT y siempre que hayas escrito el from antes.

Sun compra MySql ( y Oracle BEA )

Wednesday, February 13th, 2008

Tenéis una discusión en

¿ Cuales creéis que serán las consecuencias, ventajas y desventajas ?

¿ 1.000 millones de dólares por una empresa que regala su producto ?, está claro que la “guinda del pastel” en la compra son las versiones “enterprise” y “mantenimiento”.

¿ Se notará en el mundo no Java esta compra ?

Sale la nueva versión de OpenToro

Tuesday, October 17th, 2006

Recientemente ha salido el OpenToro v4.0 Beta: AJAX.

OpenToro es una herramienta que facilita y automatiza el desarrollo de aplicaciones web que acceden a bases de datos, de modo que no tengamos que escribir tanto SQL.

Además, con la inclusión de nuevas características AJAX, tendremos otros beneficios como la posibilidad de recargar combos dependientes entre sí, o la carga embebida de formularios, listados y registros (todo esto sin necesidad de recargar la página).

La versión incluye una base de datos embebida (hsqldb) y configurada para evaluar el OpenToro, de modo que nosotros no tenemos que configurar nada.

Podéis ver el funcionamiento en el siguiente video:
http://prdownloads.sourceforge.net/opentoro/OpenToro4_VideoDemo_Spanish.rar?download

SQLyog se convierte en software libre

Wednesday, September 27th, 2006

Webyog, acaba de sacar la nueva versión SQLyog Community Edition bajo licencia GPLv2, liberando así el codigo.

Como ya sabeis, SQLyog es una herramienta GUI de administración de MySQL.Las diferencias entre esta versión, y la versión Enterprise, podeis encontrarlas en http://www.webyog.com/en/sqlyog_feature_matrix.php

Así mismo, se ha creado un proyecto en http://code.google.com/p/sqlyog/

Oracle 10 XE - Nueva Versión Gratuita de Oracle

Wednesday, November 2nd, 2005

Oracle tiene intención de incorporar a su línea de productos una base de datos gratuita, Oracle 10 Express Edition. Se trata de una versión limitada de su base de datos: sólo funciona en servidores con un único procesador, está limitada 4GB de espacio de disco y 1 GB de memoria. Ya está disponible una versión beta de la base de datos tanto para Linux como para Windows.

Parece que los fabricantes de bases de datos están optando por esta estrategia para intentar ganar terreno, o al menos perder menos, respecto a las bases de datos libres. Recordemos que IBM en octubre empezó a distribuir una versión gratuita de DB2 junto con el paquete de desarrollo PHP Zend Core. Por otro lado, Microsoft tiene intención de liberar este mes una versión gratuita de SQL Server 2005. Si hace un año todos los fabricantes de bases de datos empezado a vender versiones limitadas de sus productos a precios muy asequibles (de 100 a 300 $) ahora los regalan.

Si relacionamos esta noticia con la liberación por parte de IBM de servidor open source IBM WAS CE y otras similares, parece cada vez más claro que las empresas apuestan por un modelo de negocio basado en darle valor añadido en forma de servicios al software base, “regalando” muchas veces ese software base… Aunque en el caso de esta base de datos de Oracle bien podría tratarse de una respuesta al movimiento de SQL Server 2005.

Mas Info en Oracle

Seminarios Oracle

Monday, October 10th, 2005

Oracle vuelve a reponer el conjunto de seminarios online que tiene para sus herramientas.
Las inscripción es libre.
Más información sobre dichos cursos online la podéis encontrar en este post.

La inscripción se puede llevar a cabo desde aquí.