viernes, 30 de agosto de 2013

Seguridad en aplicaciones GeneXus

En la reunión de ayer del GUG Montevideo, Diego Rostagnol hizo una presentación sobre seguridad en aplicaciones GeneXus que estuvo interesante.

La charla generó una discusión que estuvo buena, porque se plantearon posibles problemas de seguridad en distintos niveles de la aplicación. Diego planteó algunos casos que yo en particular no había considerado, y creo que los aportes del público sirvieron para aclarar otros que tal vez no estaban del todo correctos.

No me considero un experto en seguridad ni mucho menos, pero igual quería dejar escrito acá más o menos los temas que se hablaron ayer, más que nada porque creo que estos temas son muy importantes y en general no se le dedica el tiempo suficiente.

GeneXus resuelve una buena parte de los problemas de seguridad, y eso es muy bueno, pero también tiene un lado negativo: como GeneXus resuelve cosas de forma automática, podemos pensar que está todo resuelto. Y eso no es así.

Veamos los puntos que surgieron ayer de la reunión, y algún otro que puede haber faltado.

La propiedad Encrypt URL Parameters no evita que se pueda acceder a otros registros

Diego lo mostró ayer en una demo: una URL encriptada se puede desencriptar fácilmente si se conoce el SiteKey o SessionKey que se usa para encriptar.

El problema es que GeneXus usa una clave por defecto, que si no la cambiamos, cualquiera la conoce...

Ver la documentación en el Wiki por más información.

Un campo oculto o "disabled" en un Web Panel no garantiza que no se modifique

Recuerden que el HTML está del lado del cliente, y en general los navegadores permiten modificarlo.

Lo que mostró ayer Diego fue un filtro que el usuario no debería modificar porque no tiene permisos, pero que va como un combo con Enabled = false en el form del Web Panel, que igual se puede modificar y ver los datos que se supone que el usuario no tiene permisos.

Esto en realidad era así porque estaba mal resuelto, se tiene que hacer el control en el for each y no asumir que lo que viene del cliente es válido. Pero de todas formas, es interesante como ejemplo.

HTTPS es obligatorio

Es obligatorio por lo menos en dos lugares:
  • pantalla de login Web, o cualquier otro objeto web que tenga que mandar datos sensibles del usuario
  • servicios REST de las aplicaciones SD.
En realidad, hoy en día no hay ningún buen motivo para no poner HTTPS en toda la aplicación. En algún momento pudo haber diferencia de performance por agregarle el encriptado, pero hoy en día es algo mínimo.

GAM por si solo no resuelve la seguridad

El GAM es un gran avance con respecto a lo que teníamos antes, USENLO!

Lo que había antes, era cada uno programando su esquema de seguridad a mano. Pero igual, GAM por si solo, no resuelve el problema.

En particular, si no usamos HTTPS, cualquiera que pueda ver el tráfico entre el dispositivo y el servidor, puede "robar" el token de autenticación y usarlo sin haberse logueado.

Nunca guarden la contraseña del usuario en su aplicación

En serio, no lo hagan. Si están guardando contraseñas, lo están haciendo mal.

Hay otras formas de autenticar usuarios, contra Google, Facebook, Twitter, OpenId, o lo que sea...

Si de todas formas tienen que guardar usuarios y contraseñas, nunca, nunca, NUNCA, las guarden en texto plano. Tampoco usen algoritmos de encriptación, las contraseñas jamás se tienen que poder desencriptar.

La forma de guardar contraseñas es usando algún algoritmo de hash, pero averigüen antes cuál es seguro (MD5 no lo es), y si pueden apliquen el algoritmo varias veces y agregándole algún código extra que solo conoce la aplicación.

Pero de nuevo, seguramente si guardan contraseñas lo están haciendo mal...

Security Scanner

No se habló nada en la charla de ayer, pero hay una extensión en el Marketplace, que sirve para detectar posibles problemas de seguridad en las aplicaciones.

En particular no la he usado, pero se que hay gente que sí, y que sirve. Les recomiendo que por lo menos la miren y evaluen si les sirve.

Conclusión

La seguridad es un tema delicado.

Lo peor que podemos hacer es confiarnos que está todo resuelto, porque no es así. GeneXus ayuda mucho en varios puntos, pero tenemos que trabajar también nosotros para que las aplicaciones sean realmente seguras.
 

3 comentarios:

  1. Buen artículo sobre un tema sensible Marcos. Estaría bueno profundizar un poco aprovechando la proximidad del evento, no?

    ResponderEliminar
    Respuestas
    1. Seguramente haya alguna charla de seguridad en el evento, pero no mía. A mi me toca hablar de otro tema... ya habrá novedades :)

      Eliminar
  2. Buenisimo Marcos !!! Muchas gracias por tu excelente aporte a la Comunidad GX.
    Una abrazo grande,
    Marcelo.

    ResponderEliminar