Posts Tagged ‘Seguridad’

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.

Ponencia sobre desarrollo seguro en el Devoxx

Saturday, December 20th, 2008

Durante nuestra estancia en Amberes tuve la oportunidad de asistir a una conferencia sobre seguridad web. La conferencia la ofrecía un miembro del destacado del OWASP. Me pareció interesante el trabajo de esta organización y voy a emplear el presente post para hablaros sobre la misma.

¿Qué es el OWASP?

El proyecto abierto de seguridad en aplicaciones Web (OWASP por sus siglas en inglés) es una comunidad abierta y libre de nivel mundial enfocada en mejorar la seguridad en las aplicaciones de software. Nuestra misión es hacer la seguridad en aplicaciones “visible”, de manera que las organizaciones puedan hacer decisiones informadas sobre los riesgos en la seguridad de aplicaciones. Todo mundo es libre de participar en OWASP y en todos los materiales disponibles bajo una licencia de software libre y abierto. La fundación OWASP es una organización sin ánimo de lucro.

¿Qué puede aportarnos?

El OWASP ofrece dos tipos de aportaciones: proyectos de documentación y proyectos de desarrollo. La documentación está escrita en un lenguaje muy didáctico, pero es a su vez completa. Puede ser interesante como punto de entrada a proyectos cuya componente principal es la seguridad.

¿Qué proyectos de documentación existen?

La documentación es tanto escrita como audiovisual. Los recursos disponibles son los siguientes:

Guía de proceso:

Es una guía que describe una serie de “actividades empaquetadas” orientadas a roles, con el objeto de que el usuario sea capaz de introducirlas dentro de su proceso de desarrollo de software. Es descargable desde aquí.

Vulnerabilidades top 10:

Este proyecto ofrece información acerca de las 10 principales vulnerabilidades existentes en cada momento. Dispone de dos interesantes guías:

  • La guía top 10: Explica cada una de las vulnerabilidades más detectadas en aplicaciones web, y ofrece numerosos links sitios web con información. Es descargable de aquí.
  • La guía top 10 JavaEE: Esta guía ofrece información aplicada a JavaEE. Es descargable desde aquí.

Screencasts:

Anualmente el OWASP realiza una conferencia en estados unidos, de una semana de duración. Las conferencias son descargables desde aquí.

Guías tecnológicas:

Existen tres guías tecnológicas diferentes:

  • Guía de desarrollo: La guía de desarrollo va orientada a arquitectos, desarrolladores, consultores y auditores. Se centra en el diseño, desarrollo y despliegue seguro de aplicaciones. Existen en este momento una guía estable (2.0.1), y una guía en elaboración (3.0). Ambas están disponibles aquí, aunque la 3.0 no es descargable en formato pdf.
  • Guía de revisión: Es una guía orientada a aquellos cuyo trabajo es revisar en código fuente en busca de problemas de seguridad. Es descargable desde aquí.
  • Guía de testing: Es una guía orientada a testers. Tiene una serie de escenarios y casos de prueba recomendables. Descargable desde aquí.

Guía legal:

Esta guía ofrece ayuda para elaborar contratos vinculados a productos de software en los que la seguridad sea un pilar importante. Ofrece un anexo de ejemplo a agregar a los contratos. Es descargable desde aquí.

¿Qué proyectos de desarrollo existen?

Proyecto Web Goat: http://www.owasp.org/index.php/Category:OWASP_WebGoat_Project

Es un proyecto orientado a ofrecer un entorno en el cual se puedan poner en práctica vulnerabilidades y prácticas de seguridad sin problemas legales.

Proyecto Web Scarab: http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project

Es una aplicación que se pone como proxy entre el navegador y los servidores http, y sirve para monitorizar, modificar y estudiar técnicas de seguridad sobre protocolo http.

Proyecto DotNet: http://www.owasp.org/index.php/Category:OWASP_.NET_Project

Este proyecto contiene contenido relacionado con el aseguramiento de aplicaciones y servicios sobre tecnología DotNet.

Proyecto Java: http://www.owasp.org/index.php/Category:OWASP_Java_Project

Este proyecto contiene contenido relacionado con el aseguramiento de aplicaciones y servicios sobre tecnología Java.

Otros proyectos: http://www.owasp.org/index.php/Category:OWASP_Project