Con el crecimiento de la Web como un medio para hacer negocios y ofrecer servicios, los sitios web son constantemente susceptibles de ser atacados. El objetivo de los “hackers” será comprometer la red de la corporación, o a los usuarios finales.

En este post vamos a realizar un repaso de las técnicas más extendidas entre los amigos de lo ajeno para intentar lograr sus objetivos, incidiremos en sus causas y proporcionaremos algunas pautas para evitarlas.

La mayoría de los ataques a aplicaciones web ocurren a través de dos técnicas muy extendidas en la actualidad: cross-site scripting (XSS) e inyección SQL. Éste último suele darse a causa  una programación deficiente y que carece de protección en las entradas y salidas de la aplicación. Estos ataques permiten a un ciberatacante, ejecutar comandos en una web para robar datos, modificarlos o eliminarlos.

El escenario de amenazas para la seguridad en aplicaciones cambia constantemente, principalmente debido a la aparición de nuevas técnicas para realizar ataques web, pero tabién debido a nuevas funcionalidades que se extienden tanto en el software como en las plataformas que los hospedan, abriendo un nuevo abanico de posibilidades.. Estos son los principales cambios en los últimos 10 años:

Captura de pantalla 2019-05-16 a las 23.42.08

Las más famosas son:

  • Inyección SQL

La inyección de código SQL es la vulnerabilidad número uno en el top de OWASP. Para que exista una vulnerabilidad de SQL Injection se requieren dos fallos por parte del programador:

–  Fallos en el filtrado de los datos.

–  Fallos en el salida de los datos al enviarlos a la base de datos (escapado de salida).

Captura de pantalla 2019-05-16 a las 23.49.59

Ninguno de estos pasos debe ser omitido, y los dos pasos requieren especial atención para poder minimizar los errores. Afortunadamente los ataques de SQL Injection son fácilmente evitables, mientras filtremos y escapemos las salidas.

*Escapar un carácter es anteponer una contra barra detrás de él para que en su compilación no se abran las cadenas ni se mal interprete el código.

  • Ataques de Cross-Site Scripting 

Cross-Site Scripting (XSS) es un tipo de vulnerabilidad de seguridad informática típicamente encontrada en aplicaciones web que permiten la inyección de código por usuarios maliciosos en páginas web. Los atacantes típicamente se valen de código HTML y de scripts ejecutados en el cliente. Por ejemplo:

<script>alert(document.cookie); </script>

Estos ataques han descendido en los último años en gran parte gracias a los propios navegadores y a nuevas herramientas que evitan la inyección de códigos de terceros en la aplicación.

  • Exposición de datos sensibles y pérdida de la autenticación

Uno de los asuntos principales a ser cuidados cuando se utiliza una base de datos es el almacenamiento de las credenciales de acceso a ella.

Los datos de usuario y password son considerados sensibles, por lo que deben tener garantizada una atención especial. En archivos de configuración es común encontrar estos datos los cuales se encuentran como texto en claro.

Captura de pantalla 2019-05-16 a las 23.55.59

Si por alguna razón fuera posible localizar el archivo que contiene esta información fuera del directorio raíz, es necesario configurar el servidor web para rechazar las peticiones de recursos que no deben ser accesibles.

Todo programador debe tener en la mente que en el manejo de las peticiones, para aceptarlas o rechazarlas, los datos recibidos no cumplan con las características esperadas o predefinidas. Todas las entradas del sistema deben pasar por el filtrado de los datos. Además para el programador debe ser claro y fácil de identificar cuando una variable ya ha sido sometida al proceso de limpieza, de esta forma evitaremos tener que confiar en la memorización o tener que hacer un mapa de los procesos ejecutados por cada línea de código ejecutada de manera previa.

Otro aspecto importante a considerar son los procesos de salida de la información del sistema. Es importante siempre considerar el significado que pueda tener la información enviada en su nuevo contexto, y en el caso de poder crear problemas de interpretación de las salidas, “escaparlas” para preservarlas. Al igual que en el proceso de entrada, es importante mantener un control sobre la codificación que tienen los datos antes de enviarlos a su nuevo contexto.

La seguridad en aplicaciones Web involucra principalmente al desarrollador, aunque con gran frecuencia se encuentran defectos que pueden ser aprovechados por atacantes en las tecnologías en que se basan los sistemas web (Sistemas Operativos, Servidores Web, Servidor de Base de Datos, etc.). La atención principal debe dirigirse a los defectos propios en el desarrollo de nuestras aplicaciones para asegurarnos de que en  este nivel hemos tomado todas las precauciones necesarias. Pero no será suficiente; desde el atacante hasta el servicio web concurren toda una diversidad de elementos, sobre los que el servicio se soporta, que deberemos vigilar y mantener adecuadamente. En este caso, no siempre tenemos la solución en nuestras manos, sino que dependemos de las actualizaciones del fabricante. Es por tanto crucial una correcta política de actualizaciones y de revisión de versiones para garantizar que nuestro entorno cumple con el mayor grado de seguridad. Basándose en las vulnerabilidades de sistemas, dispositivos de red y software que no se encuentra correctamente actualizado, los hackers pueden desplegar ataques muy sofisticados (smurf, DDoS, ARP poisoning, etc), que pueden comprometer a las corporaciones más solventes por los errores más sencillos, como a veces podemos ver las noticias.

Más aún, un gran número de ataques no dependen sólo del dominio de la tecnología, sino de otros factores. Se afirma en el mundo del underground que el hacking es un 10% de dominio tecnológico y un 90% del arte de engañar (lo que se conoce como ingeniería social). La técnica del engaño es otra habilidad sobre la que tendremos que estar preparados, y la mejor solución consiste en implementar políticas adicionales en lo que se refiere a la provisión de datos sensibles a fuentes no autenticadas debidamente, y a la correcta formación de los empleados para desconfiar de cualquier solicitud de datos que, supuestamente, un proveedor de servicios ya debe tener.

Entre estas técnicas de engaño, podemos citar como ejemplo el phishing, que habitualmente consistirá en hacernos creer que un proveedor de servicios (nuestro operador, o incluso nuestro banco) nos está solicitando información para cumplir un proceso en apariencia inocuo, pero que esconde la intención de obtener información o credenciales cuya entrega podemos lamentar con amargura. En estos casos se juega con el miedo del usuario, pudiendo amenazar con la pérdida de su cuenta, la necesidad de actualizarse a un determinado software, o simplemente el requerimiento de confirmar sus datos de acceso para comprobar que el usuario es el correcto. Pero contra este tipo de ataques, prima fundamentalmente el sentido común: ¿de verdad nuestro proveedor de servicios necesita unos datos de los que ya debería disponer en sus BBDD?. Ante la duda, lo mejor es realizar la llamada inversa y comunicar con dicho proveedor por canales oficiales para confirmar que es el auténtico emisor del mensaje, y en caso contrario, advertirlo para que se tomen las medidas oportunas.

En resumen, el abanico de posibilidades por los que un hacker puede encontrar un recodo por el que hacer de las suyas es amplio, constantemente cambiante y amenazador para la continuidad de nuestros servicios. La mejor política general es una vigilancia constante, una trazabilidad de las peticiones regular para identificar intentos previos, una correcta formación de los operadores, la buena práctica de mantener actualizados nuestros sistemas y plataformas, y el empleo de desarrolladores cualificados para garantizar que nuestro servicio web está preparado para soportar las técnicas que hemos mencionado aquí.