La seguridad, en informática
como en otras áreas, se basa en la protección de activos. Estos activos pueden
ser elementos tan tangibles como un servidor o una base de datos, o pueden ser
la reputación de una empresa. Generalmente podemos evaluar la seguridad de un
activo en base a tres aspectos principales que no necesitan explicación:
integridad, disponibilidad, confidencialidad.
Estos tres aspectos a su vez
dependen de otros tres elementos principales que engloban prácticamente todos
los distintos controles que se pueden establecer en un sistema informático:
- Autenticación: los clientes de nuestras aplicaciones o servicios deben ser identificados de forma única, sean usuarios finales, otros servicios o computadoras externas.
- Autorización: no solo es necesario saber quiénes acceden a nuestros activos, también es necesario establecer que es lo que pueden hacer con ellos. Un nivel de autorización dado determina qué tipo de operaciones o transacciones puede efectuar un cliente dado sobre un recurso dado.
- Registro y Auditoria: luego de efectuada una operación, es importante que esta sea registrada adecuadamente, en particular es esencial si queremos evitar el repudio de transacciones efectuada por un cliente.
Todos estos conceptos son
especialmente válidos en el entorno de Internet, y particularmente importantes
dado el crecimiento explosivo de los servicios y aplicaciones accesibles a
través de Internet. Si bien cuando se habla de la seguridad de aplicaciones web
se deben considerar no sólo las amenazas externas a la compañía sino también
las internas (administradores malintencionados, usuarios que provocan
accidentes, etc), en el presente trabajo nos enfocaremos principalmente en las
externas, por ser (generalmente) las más peligrosas e impredecibles.
Es sabido
por otro lado que las aplicaciones más robustas y resistentes a ataques son
aquellas en las cuales las cuestiones de seguridad fueron consideradas desde
las primeras etapas del desarrollo. En las próximas secciones
exploraremos los problemas particulares de seguridad que presentan las
aplicaciones web, y enumeraremos los distintos tipos de ataques o amenazas
externas a las que se puede enfrentar.
Desarrollaremos algunos de
ellos, en particular concentrándonos en aquellos ataques que burlan lo que la
aplicación espera recibir por entrada del usuario; mostraremos cómo se los
puede evitar o mitigar, especialmente desde la perspectiva del desarrollo.
Finalmente, a partir de los
elementos vistos y otros adicionales elaboraremos una lista de elementos de
seguridad que deben ser tenidos en cuenta tanto por desarrolladores,
diseñadores y administradores de la aplicación, como por una eventual auditoría
de sistemas.
Riesgos inherentes al entorno Web
Se ha comprobado que en los
últimos años, 75% o más de los ataques electrónicos fueron a nivel de
aplicación (y no a nivel de host o de red).
Blancos atractivos.
Todo tipo de transacciones se
realizan actualmente en la web, y cada vez en mayor proporción. Detalles de
cuentas bancarias, tarjetas de crédito y todo tipo de información confidencial
y de valor circulan en enormes cantidades y continuamente. Es por ende lógico
que la mayoría de los esfuerzos de hackers y demás atacantes se centre en
vulnerar estas aplicaciones.
Presiones de negocio
La variedad y complejidad de
los requerimientos de usuarios finales continúa creciendo, y con ellos aumenta
la complejidad de las aplicaciones, la cantidad de funcionalidades y fases de
testeo. Esto sumado al incremento en la competencia y en la necesidad de
superarla en el time-to-market, implican sacrificios importantes en los
aspectos no-funcionales de la aplicación y específicamente en los aspectos de
seguridad.
Especialmente cuando no existe una conciencia de seguridad a nivel
corporativo, se tiende a generar una alta presión para terminar el trabajo sin
considerar suficientemente las posibles vulnerabilidades.
Debilidades de HTTP.
Las aplicaciones web están en
parte definidas por su uso del protocolo HTTP como medio de comunicación entre
cliente y servidor. Este protocolo:
- Es simple y basado en ASCII - no se requiere gran esfuerzo para generar pedidos y descifrar el contenido de las respuestas.
- Utiliza un puerto TCP bien conocido – de poco sirve un firewall para proteger una aplicación si tiene que admitir el tráfico a través del puerto 80.
Se puede decir que uno de los
puntos más críticos de la seguridad en Internet son las herramientas que
interactúan de forma directa con los usuarios, en este caso los servidores web.
Es común escuchar sobre fallas en los sistemas de protección de los servidores
más frecuentemente utilizados, por ejemplo Apache, NGINX, IIS, etc. (Build
With, 2016) O en los lenguajes de programación en que son escritas las
aplicaciones. Sin embargo, la mayoría de los problemas detectados en servicios
web no son provocados por fallas de ninguna de estas partes, si no que los
problemas se generan por malas prácticas de parte de los programadores.
Debemos entender que programar
aplicaciones web seguras no es una tarea fácil, ya que requiere por parte del
programador, no sólo cumplir con el objetivo funcional básico de la aplicación,
sino una concepción general de los riesgos que puede correr la información
procesada por el sistema.
Gran parte de los problemas de
seguridad en las aplicaciones web son causados por la falta de seguimiento en
dos rubros muy importantes de los que depende cualquier aplicación, las
entradas y salidas del sistema.
Además de verificar estos 2
rubros, es importante considerar la exposición accidental de datos que pueden
ser empleados en un posible ataque sobre el sistema.
Los mensajes de error
enviados por el servidor, que suelen ser de gran utilidad durante el proceso de
desarrollo de la aplicación, pueden ser empleados maliciosamente cuando siguen
apareciendo en un entorno de producción, por lo que es necesario deshabilitar
todos estos mensajes y editar algunos otros (como los que se envían cuando el
servidor no encuentra algún archivo en particular) los cuales también pueden
ser utilizados por los atacantes para obtener información sobre nuestro
sistema.
No hay comentarios.:
Publicar un comentario