El reto de crear aplicaciones seguras

Publicado en Artículos, Seguridad,


Tweet about this on TwitterShare on Google+2Share on Facebook0Share on LinkedIn1

Con la evolución en la adopción de la tecnología a nivel global, también aumentó la complejidad de las aplicaciones que desarrollamos. No solo eso (o incluso a causa de eso): aumentó el grado de exposición que las empresas tienen frente a los ataques informáticos.

Parece que cada vez tenemos más puertas y ventanas por donde pueden entrar los ladrones: Si en los años ochenta el ladrón entraba por la puerta (y hoy no deja de poder hacerlo), con el advenimiento de Internet en los años noventa pudo entrar por la red, luego por un sobre virtual llamado e-mail, y luego por programas de mensajería. Los riesgos siguen en aumento, y nosotros también seguimos aprendiendo a protegernos.

Para el 2010, de acuerdo con el estudio Charles Henderson de Trustwave, ya teníamos que pensar en seguridad y en cómo protegernos, debíamos protegernos de ataques que llegaban por vía física, por red, por correo electrónico, en las aplicaciones, por vía inalámbrica, desde el client-side, a través de los móviles y hasta por las redes sociales. El estudio concluye, entre otras cosas, que las viejas amenazas nunca desaparecen, que las nuevas apuntan al usuario y que las herramientas maliciosas son cada vez más sofisticadas.

Los números que muestran las estadísticas son desastrosos. Parecería que en el área de TI los profesionales de infraestructura y desarrollo no sabemos colocar en el aire aplicaciones suficientemente seguras. Y no estamos hablando de pretender crear aplicaciones sin vulnerabilidades (esas no existen): el Proyecto de Estadísticas de Seguridad de Aplicaciones Web 2008 de la Web Application Security Consortium (WASC), remarca que la probabilidad de detectar un error crítico o urgente en una aplicación Web dinámica es del 49% escaneándola automáticamente y del 96% luego de un análisis por expertos.

Otro estudio de White Hat Security muestra las vulnerabilidades por sector (Bancos, Educación, etcétera) y sigue confirmando los números. ¿Por qué no se corrigen estos problemas? Este último análisis trata de responder: faltan responsables para mantener el código y evitar vulnerabilidades; es más: los desarrolladores no saben ni entienden sobre “vulnerabilidades”, lo cual resulta más peligroso aún.

La tarea de asegurar una aplicación no es fácil, la arquitectura es cada vez más compleja. Porque hay que cuidar el software, pero también el ambiente en que éste ejecuta. Hablemos del software: aplicaciones que tienen sus datos en algún DBMS, su lógica de negocios en un servidor de aplicaciones, servidores web Java o .NET, por ejemplo, sirviendo páginas dinámicas. Entry points para páginas, servicios AJAX, servicios REST y SOAP. En el browser corriendo JavaScript y HTML 5, en los smart devices como aplicaciones nativas –o no– que conectan a esos servicios.

Todo esto suma, a los puntos de acceso –y de vulnerabilidad– existentes en los servidores, las vulnerabilidades del tráfico de datos por el canal, del código ejecutado en el dispositivo, y de los datos cacheados o almacenados con diversa temporalidad localmente. En pocas palabras, se trata de un festín para un posible atacante, y un dolor de cabeza, noches de insomnio y un motivo de arduos estudios en materia de “seguridad” para quienes desarrollan software.

El problema del porqué existen tantos progamas tan vulnerables es que tratar de solucionar esto mientras desarrollamos con equipos que implementan manualmente módulos de seguridad, y equipos que supervisan manualmente el cumplimiento de las políticas de seguridad, es sencillamente una tarea demasiado tediosa, costosa y que ha demostrado ser insuficiente, además de ineficiente e ineficaz.

Resulta más práctico y certero aplicar la seguridad en el desarrollo de software a través de un desarrollo de software orientado a modelos (Model driven development) y además basado en conocimiento (Knowledge-based development), combinados con un ciclo de desarrollo seguro. Esto ayuda a disminuir costos de desarrollo y mantenimiento.

La ingeniería orientada a modelos (MDE) es un paradigma de desarrollo de software centrada en la creación y explotación de modelos de dominio (es decir, representaciones abstractas de los conocimientos y actividades que rigen un dominio de aplicación particular), más que en conceptos informáticos (o algoritmos)Wikipedia

“En el desarrollo basado en conocimiento se trata de construir primero un robusto modelo de datos y luego describir las visiones de los usuarios, para así abarcar todo el conocimiento de los sistemas de negocios y luego, a partir de éste, proyectar, generar y mantener en forma 100% automática los sistemas computacionales de una empresa cualquiera.” Genexus

En este tipo de desarrollos nos abstraemos hacia el conocimiento de las intenciones del desarrollador, y centralizamos la necesidad del expertise en seguridad que se requiere para escribir aplicaciones, pues es el responsable de realizar la herramienta de generación de código quien cuenta con un equipo de expertos en seguridad de alto nivel. Ellos se encargarán de que cuando el generador escriba el código, haga el programa más seguro, y de esta manera los desarrolladores no tendrán que ser expertos en seguridad para poder entregar aplicaciones robustas.

Las herramientas suelen contar, además, con módulos pre-hechos de seguridad a los cuales los desarrolladores se pueden conectar, y que garantizarán que, cuando se genere la aplicación, se cuente con todas las rutinas y chequeos de seguridad que le permitan cumplir con las normas básicas de seguridad y minimizar las vulnerabilidades a niveles mucho menores que si se programara a mano sin los conocimientos de seguridad adecuados.

Por supuesto, hay que destacar que no existe una aplicación cien por ciento segura, ya que siempre existen detalles que escapan al modelo, pero con estas facilidades le quitamos al desarrollador la responsabilidad de tener que ser y pensar prácticamente como un hacker para hacer una aplicación segura, y le dejamos pendiente únicamente la etapa de supervisión, que es indispensable en el desarrollo de cualquier buena aplicación.

De esta manera, una herramienta de desarrollo orientado a modelos y basado en conomiento provee una forma para que quienes desarrollan no tengan que apartar recursos para desarrollar módulos de seguridad, ni deban tener el expertise de un hacker o ser expertos de seguridad para hacer sus aplicaciones. Con ella se logra detectar y corregir las vulnerabilidades durante el propio ciclo de desarrollo, en lugar de hacerlo cuando la aplicación ya se está ejecutando.


vía bSecure

Califica esta entrada

Etiquetas:


Deja un comentario

Cuanto es 14 + 20 ?
Please leave these two fields as-is:
IMPORTANTE! Necesitas resolver la operación matemática para poder continuar.

Newsletter

Redes sociales

Centro de soporte

Centro de recursos