sábado, 20 de marzo de 2010

Security Module (Parte I)

Buenas a todos, hace unos días, en el post sobre los 25 errores de programación mas peligrosos, os comentaba que andaba desarrollando un pequeño módulo para IIS7 e IIS7.5, los servidores web de Vista, 7, 2008 y 2008 R2. Con este módulo trato de mitigar los problemas causados por la mala programación de las aplicaciones web, en concreto, en las vulnerabilidades en el acceso a las BBDD, que permiten que los usuarios puedan inyectar entre otras cosas código SQL en determinados campos de una página web.

Es muy común que algunos desarrolladores no tengan en cuenta la seguridad a la hora de diseñar sus proyectos. Además la revisión y solución de errores de las aplicaciones desarrolladas tras la implantación en la organización puede suponer un alto coste, sobretodo si la cantidad de software inseguro es muy grande. Por ello os proponía el otro día la idea de desarrollar un módulo, en este caso para el servidor web antes comentado y la base de datos SQL Server, con el que realizaría una protección en los accesos a la base de datos, evitando que las inyecciones de código maliciosas lleguen a la Base de Datos.

Para probar el módulo he desarrollado un servicio web, en el que el usuario podrá acceder a un pequeño Excel online, y podrá guardar datos en el y recuperarlos cuando desee.

El sistema podría haberlo simulado con otras tecnología, como Apache, Mysql , etc., ya que IIS7 en adelante y SQL Server son bastante mas seguros que estos y poseen numerosas alternativas ya desarrolladas para securizarlos aún mas, pero he utilizado las de Microsoft porque son con las que mas me manejo, y porque las posibilidades que ofrece la programación de un módulo para IIS, son impresionantes.

En el siguiente gráfico os enseño como sería el proceso de autenticación para acceder al servicio web Excel:

grafico

Como veis, en la primera imagen el usuario se autentica con sus datos para acceder al servicio web, estos datos son enviados a la base de datos, donde se encuentra la tabla de usuarios y contraseñas admitidos, y devuelve al servicio web la respuesta de si tiene acceso al servicio o no.

En la segunda imagen ocurre lo mismo, pero el usuario se ha colado en el sistema utilizando una inyección de código, aprovechándose de una sentencia SELECT mal programada (no parametrizada) en un procedimiento almacenado de la base datos.

En la tercera imagen, se muestra como debería funcionar el módulo, que trataría de frenar la petición del usuario en el servidor web, sin interaccionar nada con la base de datos para protegerla.

En la siguiente gráfica os muestro con mucho mas detalle el sistema que estoy desarrollando.

En primer lugar tenemos al usuario que realiza una petición al servidor web para utilizar un servicio.

En segundo lugar tenemos el servidor web del que cuelgan tres elementos, el servicio web, que será un mini-excel, el “security module”, que será un modulo para IIS7 e IIS7.5 que filtrará todas las queries que contengan las inyecciones SQL que aparezcan en el tercer elemento del servidor web, un Metaservicio XML donde se encontrará un listado actualizado de las posibles queries que podrá lanzar un usuario contra la BBDD.

Finalmente contaremos con la Base de Datos, donde habrá una tabla con los usuarios y contraseñas admitidos en el sistema y una tabla para cada usuario donde se almacenan los datos del Excel.

Diagrama security module

Como se puede intuir, la seguridad del sistema la proporcionará la riqueza de los ejemplos de inyecciones contenidos en el Metaservicio XML, por ello está siendo implementado como un Servicio aparte y no en el propio “Security Module”, para que pueda ser actualizado individualmente por una organización experta y en cualquier momento sin modificar el funcionamiento del modulo.

En próximos post os iré contando mas cosas sobre el proyecto.

Saludos!

2 comentarios:

Thor dijo...

Mira que inyecciones mas raras hay por ahí:
http://websec.wordpress.com/2010/03/19/exploiting-hard-filtered-sql-injections/

Espero que sirva para alimentar el xml.

Un saludo.

Juan Antonio Calles dijo...

Gracias por la info Thor :)

un saludo!