29 de noviembre de 2005

Falla 8: Almacenamiento inseguro

Por lo general las aplicaciones Web necesitan almacenar información sensible, ya sea en una base de datos, en un sistema de archivos o en algún otro medio. Ésta podría ser contraseñas, números de tarjetas de crédito, registros contables o información propietaria que con frecuencia es encriptada para protegerla.

Mientras que la encriptación se ha vuelto relativamente fácil de implementar y usar, los desarrolladores frecuentemente comenten errores de implementación cuando la integran dentro de una aplicación Web ya que generalmenete se sobreestima la protección ganada por el uso de la encriptación y no se cuida el asegurar otros aspectos del sitio.


Algunas áreas donde se cometen errores serían:


  • Fallar en la encriptación de información crucial

  • Almacenamiento inseguro de llaves, certificados y contraseñas

  • Almacenamiento incorrecto de datos sensibles en la memoria.

  • Seleccionar fuentes pobres de aleatorización de datos

  • Elegir algoritmos débiles para encripción

  • Intentar inventar nuevos algoritmos de encriptación

  • Fallar al incluir soporte para cambios en las llaves de encriptación y otros procedimientos requeridos para el mantenimiento.


El impacto de estas debilidades puede ser devastador para la seguridad del sitio Web. La encriptación por lo regular se usa para proteger los activos más sensibles del sitio, los cuales pueden ser totalmente comprometidos por un error como los antes mencionados.


La mayoría de los ambientes de aplicación Web incluyen alguna forma de soporte criptográfico. En el raro caso que tal soporte no se disponga de él hay una gran variedad de productos que se pueden agregar. Sólo los sitios Web que usan encriptación para proteger información almacenada o en tránsito son susceptibles a estos ataques.

Descubrir fallas criptográficas sin acceso al código fuente puede tomar muchísimo tiempo. Sin embargo, es posible examinar tokens, id’s de sesión, cookies y otras credenciales para ver si son o no aleatorias. Todas las estrategias criptoanalíticas pueden ser usadas para intentar descubrir cómo es que un sitio Web usa las funciones criptográficas.

Por mucho, la estrategia más fácil es revisar el código para ver cómo están implementadas las funciones criptográficas por lo que se debe llevar a cabo un cuidadoso escrutinio de la estructura, calidad e implementación de los módulos criptográficos, revisando siempre las metodologías para que las llaves, contraseñas y otros secretos se almacenen, protejan, carguen, procesen y limpien de la memoria.


La manera más fácil de protegerse contra las fallas criptográficas es minimizar el uso de la encriptación y sólo mantener la información que es absolutamente necesaria. Por ejemplo, más que encriptar los números de tarjetas de crédito y guardarlos, simplemente pida a los usuarios que los introduzcan nuevamente. También, en lugar de guardar las contraseñas encriptadas con un algoritmo que utilice llaves, use una función de una vía como SHA-1 para encriptar las contraseñas.

Si se impone el uso de algún método criptografico, escoja siempre una biblioteca que ha sido expuesta al escrutinio público y asegúrese de que no hay vulnerabilidades abiertas. Encapsule las funciones criptográficas que son usadas y revise el código cuidadosamente. Asegúrese de que los secretos, como las llaves, certificados y contraseñas son almacenados de forma segura. Un método interesante podría ser el uso de un secreto maestro dividido en al menos dos ubicaciones que se ensamblara en tiempo de ejecución. Tales ubicaciones pueden incluir archivos de configuración, un servidor externo o dentro del código mismo.

1 comentario:

Unknown dijo...

Hola Alfredo.

¿Eso como podria ponerlo a prueba? ¿Existe alguna aplicación tipo Nessus o el Kali Linux que me permira explotar e identificar esa debilidad y por ende poder corregirla?

También quisiese hacerte algunas preguntas sobre le manejo de errores inadecuados, no se si puedes darme tu mail.

Espero tu respuesta.
Saludos!!