Noticias

Seguridad en aplicaciones con conectividad

Con la evolución en la adopción de TI 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. 

Por Armin Bachmann
Coordinador de Soporte de Usuarios para GeneXus Internacional

Con la evolución en la adopción de TI 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, como muestra el estudio Charles Henderson de Trustwave, 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 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 apps suficientemente seguras.Y no estamos hablando de pretender aplicaciones sin vulnerabilidades (esas no existen): el Proyecto de Estadisticas de Seguridad de Aplicaciones Web 2008 de la Web Application Security Consortium (WASC), entre otras cosas, concluye 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 WhiteHat Security muestra las vulnerabilidades por sector (Bancos, Educación, etc.) 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”.
 
La tarea de asegurar una aplicación no es fácil, la arquitectura es cada vez más compleja. Hay para cuidarse en el software y en el ambiente que éste ejecuta. Hablemos del software hoy: 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 aplicaciones nativas –o no– que conectan a esos servicios. Todo esto añade, 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. Un festín para el hacker, y un dolor de cabeza, noches de insomnio y un motivo de arduos estudios en materia de “seguridad” para quien desarrolla.
 
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 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, además, ayuda a disminuir costos de desarrollo y mantenimiento.
 
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 app cien por ciento segura, ya que siempre existen detalles que escapan al modelo, pero con estas facilidades sí le quitamos al desarrollador la responsabilidad de tener que ser prácticamente un hacker para hacer una app segura, y le dejamos pendiente únicamente la etapa de supervisión, 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.

Seguridad en Apps >>>  GeneXus
 
En la comunidad GeneXus, con más de 85 mil desarrolladores de aplicaciones de misión crítica multiplataforma y multidispositivo que desarrollan con GeneXus desde aplicaciones green-screen que corren en poderosos servidores de IBM, hasta aplicaciones que se ejecutan nativamente en los Smart Devices, se adoptó este camino con excelentes resultados.

En su última versión, GeneXus X Evolution 2 genera, además de código para aplicaciones Web HTML 5, también código nativo Objective-C o Java para aplicaciones en iOS, Android y BlackBerry. Es decir, que genera aplicaciones del mismo nivel de complejidad que las antes mencionadas y más, ya que suma a las aplicaciones web las capas de servicios necesarias para las aplicaciones de Smart Devices ocasionalmente conectadas que también genera, acordes con la realidad del 2012.

GeneXus ofrece un ambiente de desarrollo que trae integrado un módulo de seguridad con sus APIs y ejemplos, y que sigue el modelo Role Based Access Control (RBAC). Ese módulo, llamado GeneXus Access Manager, implementa un motor que cumple con los más altos estándares de seguridad como OAUTH 2. En conjunto con el código que genera GeneXus, se logra que las aplicaciones generadas estén a prueba de las 10 vulnerabilidades más clásicas de la OWASP, o que, en su defecto, se pueda lograr automáticamente reportes de código potencialmente vulnerable.

La herramienta provee así una forma para que quienes desarrollen 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.

Con esto solo seguimos el lema de GeneXus, que dice: “Encárguese de su negocio, GeneXus se encarga de la tecnología”. Y de la seguridad también.

-------------------------------------
*  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).
*http://es.wikipedia.org/wiki/Ingenier%C3%ADa_orientada_a_modelos
 
**  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.
http://www.genexus.com/files/wp-desarrollo-basado-en-el-conocimiento?es