viernes, 16 de octubre de 2009

La seguridad en KMKey Makhno

0 comentarios
 
Hemos puesto especial empeño en hacer hacer de KMKey Makhno un producto con el máximo de garantías en cuanto a seguridad. Para ello hemos llevado a cabo diversas mejoras, que junto con las ya existentes en versiones anteriores y las propias de la plataforma Zope, ofrecen el máximo de protección frente a posibles intrusiones. Pasamos a detallar a continuación el funcionamiento de los distintos componentes implicados:

1) Seguridad de los datos. Para garantizar que cada objeto es visible únicamente para aquellos usuarios que dispongan de los permisos pertinentes, KMKey confía en la probada robustez de Zope (el servidor de aplicaciones) y su immejorable sistema de permisos y control de accesos sobre ZODB, que permiten granular al máximo la definición de los accesos.
  • 1.1) Errores de programación. Zope verifica que cada acceso a cada objeto esté siendo llevado a cabo por un usuario con permisos, y eso lo hace de forma independiente al código de la aplicación, de manera que un eventual error de programación se traduce en una alerta de seguridad y una negación de acceso, nunca en un acceso a datos restringidos.
  • 1.2) Inyecciones SQL. Puesto que la base de datos usada es ZODB (orientada a objetos, aunque a la postre todos los datos acaben guardados en SQL si así se configura), todo el código de la aplicación está libre de ataques por inyección de SQL, que son uno de los mayores peligros en aplicaciones web clásicas

2) Seguridad en la autentificación. Uno de los puntos vulnerables de cualquier aplicación web o cliente/servidor es aquel en que el usuario se autentifica, es decir, proporciona su usuario y su password, y éste viaja a través de la red. Este proceso es susceptible de ser interceptado por terceros (por ejemplo mediante el uso de sniffers), cosa que les permitiría conocer el usuario y la clave. En este sentido, KMKey proporciona dos niveles de seguridad:
  • 2.1) Conexión no encriptada, autentificación mediante MD5. Para los casos en los que el servidor web no disponga de un certificado de seguridad que permita conexiones seguras HTTPS (posibilidad sólo disponible para servidores dedicados, y de elevado coste si el certificado se firma por una autoridad certificadora), KMKey evita enviar la clave plana a través de la web. En lugar de eso, la propia página de entrada encripta el password con el algoritmo unidireccional MD5. Ello implica que aunque esta clave encriptada fuera interceptada, sería imposible obtener la clave original (puesto que MD5 es un algoritmo de hash, de una sola dirección). Dado que las claves también son almacenadas encriptadas mediante el mismo algoritmo, ello da la posibilidad de autentifcar al usuario de una forma mucho más segura y asegura que ningún "robo" de datos acabará con la obtención de las claves de usuario.
  • 2.2) Conexión encriptada con certificado de servidor. En caso de que el servidor KMKey sea dedicado, existe la posibilidad de instalar un certificado de servidor que permita conexiones seguras HTTPS. En este supuesto, la autentificación se lleva a cabo sobre un canal seguro, y es virtualmente imposible interceptar los datos con los medios actuales. Como inconvenientes a esta opción está la alerta de seguridad que la mayoría de navegadores dan si el certificado de seguridad no se encuentra firmado por una autoridad certificadora, y el elevado coste de obtener esta firma.

3) Seguridad de la sesión. Una vez el usuario ha sido autentificado, para mantener la sesión mientras se usa la aplicación, KMKey utiliza una cookie de sesión. Sabiendo que este sistema puede también ser vulnerable a ataques mediante sniffers, se ha implementado un modelos de sesiones que ofrezca las máximas garantías. Para ello se utiliza una cookie de sesión totalmente aleatoria, imposible de calcular, se hace caducar la sesión a los 20 minutos de inutilización, y se verifica en cada petición que la IP de origen coincide con la del usuario que ha abierto la sesión. De esta forma, aunque una cookie de una sesión en curso fuera "robada", el atacante sería rechazado por la verificación de IP's de origen. La única alternativa más segura que este sistema es el uso de certificados de cliente, pero son usados en muy pocas ocasiones por su complejidad de desplegado (generación de certificados para cada usuario e instalación en todos sus puestos de trabajo).

4) Seguridad de las comunicaciones. Todos los datos que circulan a través de internet sin una conexión segura HTTPS de las descritas anteriormete son susceptibles de ser interceptados y leídos por personas expertas en tráfico de redes. Por ello, si los datos contenidos en KMKey son de elevada confidencialidad, es recomendable el uso de alguna de las siguientes opciones:
  • 4.1) Certificado de seguridad en servidor y conexión HTTPS requerida. Como se ha expuesto anteriormente, es una opción con algunos inconvenientes y reservada para servidores dedicados
  • 4.2) VPN (Virtual Private Network). De forma que la conexión al servidor se realice siempre sobre canales de comunicación seguros, en este caso a más bajo nivel que el certicado HTTPS. A efectos prácticos, requiere que los usuarios se autentifiquen primeramente en la VPN y, una vez conectados a ésta, puedan acceder al servidor KMKey
  • 4.3) Firewall de restricción de IP's. Una opción con menos garantías que las anteriores, pero de implementación mucho más sencilla, es restringir el acceso al servidor a determinados rangos de IP's (para ello debemos conocer previamente los rangos de IP's que pueden tener nuestros usuarios potenciales). Eso consigue evitar accesos de fuera de nuestras oficinas, por ejemplo, aunque también redunda en una limitación de la movilidad de los usuarios.
  • 4.4) Acceso LAN. La opción más restrictiva consiste en limitar el acceso al servidor sólo a los usuarios de la red local, de forma que garantizamos que cualquier acceso proviene del interior de nuestras dependencias
5) Seguridad en el software base. Todo lo anterior puede no servir de nada si nuestro sofware de base, léase el sistema operativo o el servidor de aplicaciones, tiene errores graves de seguridad que permitan un acceso directo al servidor. Por ello recomendamos siempre instalar KMKey sobre servidores GNU/Linux con distribución Debian versión stable, usando apache 2 como servidor web y un firewall como iptables. Con una correcta configuración, son una muy buena protección contra ataques de intrusos.

Consejos prácticos: La seguridad es algo a tener muy en cuenta en la implementación de cualquier herramienta web, y tanto los servidores web como las aplicaciones deben ofrecer las máximas garantías. Ahora bien, debemos tener muy presente que el 90% de los ataques se realizan siempre sobre PC's de escritorio, que suelen ser infinitamente más vulnerables, y una vez conseguido el control del PC local, se actúa contra servidores que lo consideren "de confianza", o incluso se pueden encontrar documentos de usuarios y claves de acceso, o datos confidenciales en los escritorios de trabajo. Por ello, una buena política de cambio de passwords, o una correcta supervisión de los puestos de trabajo pueden ser tanto o más importantes que la seguridad del servidor.

Leave a Reply