22 de noviembre de 2005

Falla 7: Manejo inadecuado de errores

El manejo inadecuado de errores puede introducir variados problemas de seguridad a un sitio Web. El error mas común es cuando se le muestra al usuario (posiblemente un usuario mal intensionado), información detallada de mensajes reporte de problemas como rastreos de pila, volcados de BD y códigos de error. Éstos revelan detalles de la implementación que nunca deberían ser revelados.
Tales detalles pueden proveer a los piratas informáticos de pistas importantes sobre potenciales fallas en el sitio y tales mensajes de error son también perturbadores para los usuarios normales.

Las aplicaciones Web frecuentemente generan condiciones de error durante su operación normal. Falta de memoria,
excepciones por punteros nulos, llamadas fallidas a sistema, BD no disponible, tiempo de espera de red agotado y cientos
de otras condiciones comunes pueden causar que los errores sean generados. Estos errores deben ser manejados de
acuerdo a un esquema bien pensado que provea al usuario de un mensaje de error con sentido, información de diagnostico
para quienes mantienen el sitio, y ninguna información útil para un atacante.

Incluso cuando los mensajes de error no proveen muchos detalles, las inconsistencias en tales mensajes pueden revelar
pistas importantes de cómo funciona un sitio y qué información esta presente bajo la cubierta. Por ejemplo, cuando un
usuario trata de acceder a un archivo que no existe, el mensaje de error tradicionalmente indica “archivo no encontrado”.
Cuando se accede a un archivo al que el usuario no está autorizado, se indica “acceso negado”. Se supone que el usuario
no debe saber siquiera si existe el archivo, pero tales inconsistencias claramente revelan la presencia o ausencia de
archivos inaccesibles o la estructura de directorios del sitio.

Un problema común de seguridad causado por el manejo inadecuado de errores es la prueba de seguridad de apertura de
archivos. Todos los mecanismos de seguridad deben negar el acceso hasta que sea específicamente otorgado, y no otorgar
acceso hasta que sea negado, lo cual es una razón común de porque ocurren los errores de apertura de archivos. Otros
errores pueden causar que el sistema se caiga o consuma recursos significativos, negando o reduciendo efectivamente el
servicio a usuarios legítimos.

Un buen mecanismo de manejo de errores debe ser capaz de manejar cualquier conjunto de entradas posible, mientras
fomenta una seguridad apropiada. Mensajes de error simples deben ser producidos y registrados de tal manera que su
causa, ya sea un error en el sitio o un intento de ataque, pueda ser revisada. El manejo de errores debe no sólo enfocarse
en las entradas proveídas por el usuario, sino que deben también incluir cualquier error que pueda ser generado por
componentes internos tales como llamadas al sistema, consultas de BD o cualquier otra función interna.

Tradicionalmente una revisión simple puede determinar cómo responde su sitio a varios tipos de errores de entrada.
Pruebas más profundas son usualmente requeridas para hacer que ocurran errores internos y ver cómo se comporta el sitio.
Otra estrategia importante es tener una revisión detallada del código que busque en éste la lógica en el manejo de errores.
El manejo de errores debe ser consistente a través de todo el sitio y cada pieza debe ser parte de un esquema bien
diseñado. Una revisión de código revelará cómo pretende el sistema manejar varios tipos de errores. Si encuentra que no hay organización en el esquema de manejo de errores o que parece que hay muchos esquemas diferentes, muy
posiblemente hay un problema.

Una política especifica de cómo manejar errores debería ser documentada, Incluyendo los tipos de errores a ser manejados
y, para cada uno de ellos, qué información debe ser reportada al usuario y qué información será registrada. Todos los
desarrolladores necesitan entender la política y asegurarse que su código la siga.

En la implementación, asegúrese de que el sitio está construido para manejar elegantemente todos los posibles errores.
Cuando los errores ocurran, el sitio debe responder con un resultado específicamente diseñado que sea de ayuda al
usuario, sin que revele detalles internos innecesarios. Ciertas clases de errores deben ser registrados para ayudar a detectar
errores de implementación en el sitio y/o intentos de ataque.

Muy pocos sitios tienen alguna habilidad de detección de intrusos en su aplicación Web, pero es ciertamente concebible que
una aplicación Web pueda rastrear repetidos intentos fallidos y generar alertas. Note que la vasta mayoría de ataques a
aplicaciones Web no son detectados nunca porque muy pocos sitios tienen la capacidad para hacerlo. Por lo tanto, el éxito
de los ataques contra la seguridad de aplicaciones Web parece ser seriamente subestimado.

1 comentario:

Anónimo dijo...

Gracias por articulo, me fue de gran ayuda.



Marcos R.
MTY NL