Hay muchas cuestiones de seguridad que los desarrolladores web deben tener en cuenta durante la construcción de una aplicación web. Si tu aplicación trabaja con datos personales, bancos o criptomonedas, esta información es un buen punto de partida. Cada vulnerabilidad en tu aplicación puede costar mucho en el futuro, así que no tengas miedo de pasar algún tiempo examinando los patrones de seguridad más comunes.
Negación de servicio
El ataque de denegación de servicio se utiliza para ralentizar o bloquear el acceso a un servidor web. El concepto principal de un servidor web es manejar una solicitud y enviar una respuesta. Cada servidor tiene recursos limitados con los que trabajar. Cuando la cantidad o la calidad de las peticiones se hace demasiado grande puede congelar o aplastar un servidor. Hay algunas formas comunes de realizar este escenario:
- Desbordamiento del búfer (buffer overrun): un exploit muy popular en los 90’s – principios de los 2000’s y puede ser actual. El búfer es la ubicación en la memoria RAM que contiene datos temporales durante el procesamiento antes de almacenarlos en el disco duro (SSD). Puede contener cualquier dato de procesamiento: cadenas, matrices, etc. Un atacante encuentra la manera de enviar más datos de los que el buffer puede contener. El resultado suele ser la corrupción de datos, la caída del sistema y el reinicio del servidor. Si la vulnerabilidad no se arregla el hacker puede mantener el servidor en el reinicio infinito. Se puede arreglar mediante la validación.
- Inundación SYN (ataque SYN): ataque basado en un handshake de tres vías en TCP. Puede ralentizar o bloquear las conexiones del servidor enviando una gran cantidad de mensajes SYN (de sincronización). Puede solucionarse mediante filtrado, caché SYN o cookies SYN, o utilizando cortafuegos y proxies.
- Teardrop: este ataque consiste en transferir al servidor paquetes fragmentados y superpuestos. En las versiones más antiguas de los sistemas operativos no se pueden reensamblar y aplastar. Puede solucionarse mediante una actualización del sistema. Smurf – implica un gran número de paquetes ICMP (Internet Control Message Protocol) enviados al servidor. El comportamiento por defecto de la mayoría de los dispositivos es responder al cliente. Esto provoca una inundación de tráfico y la indisponibilidad del servidor. Puede solucionarse mediante la configuración del router.
Denegación de Servicio Distribuida (DDoS)
DDoS es un ataque DoS desde una gran cantidad de máquinas distribuidas. Para la mayoría de los ataques DDoS hoy en día los hackers utilizan botnets – una red de dispositivos con conexión a Internet con malware que coordina su trabajo. La cafetera o tetera, la aspiradora robótica o el smartphone pueden ser utilizados para atacar recursos remotos sin que lo sepamos gracias a un código malicioso procedente de la web. La defensa puede variar desde diferentes ángulos del tipo de ataque pero la práctica más común es utilizar la protección DDoS de tus proveedores o hardware/software especial.
Man-in-the-Middle (MITM)
Este tipo de ataque se basa en la inyección en la comunicación entre dos o más partes. El tipo de ataque más popular se llama escucha activa en el que las víctimas no pueden darse cuenta de que el atacante tiene acceso a su canal de comunicación. Dado que la mayoría de los ataques rara vez se puede prevenir por los desarrolladores caso más común es minimizar los efectos del secuestro. Aquí 3 técnicas básicas:
- Robo de sesión: Usando el MITM el criminal puede robar el token de sesión u otro tipo de identificador para obtener acceso al recurso.
- Sniffing: Este tipo se basa en el análisis del tráfico. Se escucha el tráfico de la red y se capturan paquetes de red para recuperar información sensible.
- SSL Stripping (ataques de degradación HTTP): Un atacante intercepta la redirección de HTTP a HTTPS de un usuario y se convierte en un puente entre el servidor y el usuario. Los principales pasos para prevenir o reducir el daño del ataque Man-in-the-Middle son utilizar sólo HTTPS (forzar HTTPS es ahora una práctica común en la web moderna) y utilizar la autenticación basada en clave pública.
Inyección SQL
La inyección SQL es una de las técnicas más comunes para manipular datos. Usando una petición correcta con código SQL arbitrario en ella. Un hacker puede lograr diferentes objetivos: obtener datos personales, añadir algunos datos sin ninguna verificación o simplemente dejar caer toda tu base de datos. Se puede solucionar validando los datos de la petición y utilizando escapes para los caracteres especiales.
XSS
El XSS permite a un atacante comprometer cualquier operación del usuario con una aplicación web. Hay categorías principales de este tipo de ataque: reflejado, almacenado y basado en el DOM. El reflejado es el más simple pero el más popular, y utiliza parámetros de petición HTTP o formulario HTML. El enfoque principal es crear una URL a un recurso de confianza pero con código malicioso en su interior. El XSS almacenado es mucho más complicado, puede ayudar a obtener acceso al servidor. El ángulo de ataque más frecuente son los archivos de usuario o el texto que se puede almacenar en un servidor sin la validación adecuada. El tercero, basado en el DOM puede modificar el contenido y la estructura de los documentos del DOM (Document Object Model). Todos estos ataques pueden evitarse con una validación adecuada.
CSRF
El CSRF es un ataque muy peligroso centrado en los usuarios. Un atacante utiliza el mecanismo de autenticación de cookies para obtener autorización en la aplicación web. Este exploit puede ser utilizado debido a que algunos tipos de autenticación envían automáticamente cookies a cada solicitud a un sitio web. Se puede arreglar con el uso de la autenticación basada en token de cabecera (pero es menos seguro en otros aspectos) o CSRF-token (parcialmente).