domingo, 14 de marzo de 2010

Los 25 errores de programación mas peligrosos + Posible Panacea

La segunda semana de 2009 se celebró en Washington D.C. una convección de seguridad en la que se presentó un documento elaborado por SANS y MITRE en la que se analizaban los 25 errores de programación mas peligrosos que solían cometer los desarrolladores.

Este año han actualizado esta lista de vulnerabilidades entre las que se encuentran las conocidas SQL Injection (segundas en la lista), XSS (a la cabeza de la lista), PHP File Inclusion (la 13 en la lista), etc. La verdad este documento da que pensar en que en muchas ocasiones se sigue sin tener en cuenta la seguridad a la hora de desarrollar las aplicaciones. Este documento es una buena recomendación aunque solo sea para comenzar a concienciar a los desarrolladores.

En mi web os he colgado los documentos del 2009 y del 2010 para que podáis comparar la lista del año pasado con la de este, podéis bajároslas desde aquí:

http://elblogdecalles.es/estandares.html

A raíz de este documento he comenzado a desarrollar un entorno de ataque y de securización como proyecto para la asignatura de Arquitecturas de Servicios de Software. En ella estoy programando un servicio web muy parecido a Google Docs, en la que un usuario podrá utilizar un pequeño Excel y almacenar su contenido en una BBDD. Para ello solo necesitará un navegador web como cliente. Este servicio requerirá para entrar pasar un login. El sistema contará con dos usuarios que podrán acceder y utilizar el servicio, un usuario llamado Admin, y un usuario llamado jacalles, con sus credenciales almacenadas en la misma base de datos que la información almacenada del Excel.

Todo el sistema lo estoy programando con vulnerabilidades de SQL Injection, por lo que podremos saltarnos el campo de login inicial y entrar en el servicio con cualquiera de los dos usuarios. Además, desde el propio servicio podremos inyectar queries, con las que podremos entre otras cosas, eliminar la BBDD o generarnos una Shell Remota.

Tras conseguir simular el problema en el que se encuentran aún numerosos servicios web y aplicaciones en general, llega la hora de preguntarse ¿Es necesario modificar el código de estas aplicaciones para tener un sistema seguro?. Hay dos respuestas posibles SI y NO.

Si, ya que las consultas a la BBDD deberían haberse hecho parametrizando las consultas para que las queries inyectadas no se ejecutasen como código y solo fuesen interpretadas como texto, como siempre predica mi amigo Alekuxu en todos los cursos y charlas que imparte. Pero también hay una posible NO, y esa va a ser la que aplique en este proyecto.

La respuesta NO, se tiene en cuenta en el caso de seamos una organización con una gran cantidad de aplicaciones y nos cueste una gran inversión modificar el código de todas estas aplicaciones para securizarlas, es en este caso cuando buscaremos una panacea que nos solucione todas las aplicaciones de golpe.

Una posible panacea y es la que voy a proponer, en este caso para las empresas usuarias de Microsoft Server 2008 o 2008 R2 y IIS 7.0 o 7.5, es la inclusión de un nuevo módulo en el servidor que permita filtrar las peticiones al servidor que tengan de regalo una bonita inyección de código. Para ello, desde el propio módulo, que será un programa mas al fin y al cabo, se buscaría patrones de posibles códigos que pueden formar parte de una inyección en las peticiones que envíe un cliente al servidor y se rechazarán devolviendo un mensaje de error detallado, en el que le comentemos que le hemos cazado =).

Para este proyecto yo me voy a centrar únicamente en la detección de SQL Inyection, que es la única vulnerabilidad que he incluido (al menos que me haya dado cuenta =) ) en el servicio web que estoy desarrollando.

La programación del módulo para el Servidor IIS DE MS Server 2008 es una tarea algo compleja, pero que espero os sea un poco menos con los post que escribí hace unos meses sobre desarrollo de aplicaciones para IIS7:

Programación de módulos para IIS7 (I de IV)
Programación de módulos para IIS7 (II de IV)
Programación de módulos para IIS7 (III de IV)

Os iré comentando en próximos post como va avanzando el proyecto e incluso intentaré colgar las partes mas importantes para que lo simuléis vosotros y podáis trastear con él. De momento os dejo con una captura del login al sistema ;)

Dibujo

saludos!

No hay comentarios: