Busqueda local

Loading

miércoles, 11 de febrero de 2015

Seguridad en MVC (Primera parte).

Hoy en día, el tema más caliente sobre una aplicación que se expone a internet, es la seguridad con la que cuenta; los mecanismos de defensa que se han implementado y los posibles errores o descuidos que podrían hacer que nuestra valiosa información sea robada por qué un hacker ha logrado vulnerar nuestra aplicación.

image

Un descuido o la simple falta de experiencia de un programador, podría crear una aplicación con puertas traseras que ni siquiera el mismo conoce. Ninguna aplicación expuesta a internet estará 100% segura, todos los días se descubren errores y todos los días salen nuevos parches para corregir la vulnerabilidad. Entonces que nos ofrece MVC en este sentido?

 

Falta de actualización.

Las técnicas y sus variantes para atacar a un sitio web son muchas, además surgen todo el tiempo nuevas técnicas, así que es posible que al leer este artículo descubran que han omitido algo y deban correr a hacer los cambios.

image

Los ataques suelen suceder en servidores con configuraciones que no han sido actualizadas, lo cual deja la posibilidad para que un atacante, logre entrar a través del sistema operativo, el firewall, la base de datos, el código de nuestra aplicación, el sistema para cargar o descargar archivos, el correo o simplemente porque una clave de acceso resulto ser: 1234.

 

Y si todo esta actualizado?

Tal vez los encargados de la red y los servidores sean muy cuidadosos, lo cual significara un problema menos por el cual debamos preocuparnos; en estos casos siempre existe la posibilidad que surja algo nuevo, así que no debemos confiarnos.

image

Ah!, pero no crean que eso no es nuestro problema, si los de redes y los encargados de los servidores están protegidos, entonces somos nosotros los que podríamos permitir el acceso por no saber programar con seguridad.

 

Que puede salir mal?

Es mucho más sencillo de lo que creemos. Para poder atacarnos el hacker debe determinar nuestra plataforma, a veces resulta tan sencillo como ver la URL. Además los servidores suelen comunicar en el paquete de datos el nombre del servidor y la versión de software que están ejecutando.

Una vez que han identificado nuestra plataforma podrán usar varias técnicas que conocen para tratar de obtener información adicional.

Por ejemplo:

  • Revisar los campos ocultos en la página.
  • Jugar con los parámetros que se envían en las URLs.
  • Forzar los mecanismos de carga o descarga de archivos desde las páginas.
  • Explotar Validaciones incorrectas.
  • Ocasionar errores para obtener Mensajes de error con información sensible.
  • Revisar los Formularios que ejecutan código Javascript.
  • Añadir código en los Campos que permiten instrucciones de SQL.

Esto es por mencionar algunas de las técnicas que podrían poner en práctica contra nuestra aplicación. En este punto deben estar revisando mentalmente cuales de estas aplican en su caso, verdad?

 

Que podemos hacer para protegernos?

Muy fácil: deben considerar los esquemas de seguridad desde el principio. Cuando escribimos los requerimientos de nuestras aplicaciones pocas veces o tal vez nunca consideramos los aspectos de seguridad entre esos requerimientos, creemos que podemos añadirnos al final.

image

Esto es un error común, ya que la seguridad debe estar considerada desde el principio. Si creen que la seguridad es algo que no se debe incluir como parte de estos requerimientos, están incurriendo en la mayor omisión de seguridad que existe cuando se habla de seguridad y lo peor de todo es que están poniendo a sus clientes o empresa en riesgo de ser blanco de algún hacker.

 

Principios fundamentales.

Como programadores, debemos apropiarnos de algunos principios básicos, que resultan fundamentales para lograr que nuestra aplicación no sea el punto de entrada para un hacker; recuerden que nuestra aplicación es la capa más expuesta, detrás de esta se encuentra el servidor, la base de datos y desde luego la empresa de nuestro cliente.

Algunos principios:

  1. Código a la defensiva: consideren la necesidad de incluir varias capas de seguridad en sus aplicaciones, no se limiten a validar el acceso, este es solo el primer nivel. Además deben establecer estándares para escribir el código de validación de datos, el manejo de errores también debe ser controlado, incluso el registro de la actividad, etc.
  2. Desconfiar de los datos que llegan: Sin importar cual sea el origen, siempre debemos desconfiar de los datos que nos envía un usuario. Toda la información que llegue a nuestra aplicación debe ser verificada y validada antes de ser procesada. Si los datos que hemos recibido no son los correctos, nuestra aplicación debe ser capaz de atender la situación sin presentar un error no controlado.
  3. Mensajes de error: Como programadores creemos que los mensajes de error son para nosotros, y nos sirven para probar lo que estamos haciendo; sin embargo y a pesar de toda nuestra experiencia siempre habrá un escenario que no se considero en la etapa de pruebas. Lo mejor es incluir un sistema para manejar los errores de todo tipo desde el principio, que sea útil para los usuarios finales y para nosotros en la fase de desarrollo, que evite que nuestra aplicación se detenga o peor aún, que el servidor proporcione información sensible.
  4. Mecanismo de autenticación: por lo general los programadores evitamos incluir la parte en la cual se debe capturar el nombre de usuario y la clave durante la etapa de programación y testeo, con la sola idea de simplificar este proceso que debemos repetir una y otra vez. La mejor forma de prevenir ataques es implementando un estrategia de registro, acceso y autenticación antes de empezar a escribir cualquier otra porción del código.
  5. Evitar usar el Administrador para programar: La mayoría de nosotros tiene un usuario con privilegios de Administrador del sistema operativo, el cual nos simplifica el proceso de administración del sistema operativo y el proceso de codificación. Sin embargo nuestra aplicación publicada en la red necesitara muy pocos privilegios a nivel del sistema operativo, la mejor practica es crear un usuario con un mínimo de privilegios para probar código de nuestra aplicación.

Comentario final.

Cuando desarrollamos una aplicación, ya sea de escritorio, en la web o en un dispositivo móvil, escribimos código para múltiples requerimientos, que se han convertido en funcionalidades y servicios, de los cuales nos sentimos orgullosos.

Cada uno de estos puntos, representa un posible acceso a nuestro sistema; si tenemos esto en mente, entonces seremos capaces de escribir código donde la seguridad sea el estado por default y no una funcionalidad adicional que pusimos al final como la cereza de un pastel.

La seguridad es parte importante de la receta y debe estar entre los ingredientes…no lo olviden.

Suerte.

No hay comentarios:

Publicar un comentario