domingo, 25 de octubre de 2015

Tipos de ataque: XSS. ¿Qué es y como funciona?

10:40 p.m. Posted by LanreB OgeiD , , , No comments
Todo sitio web lleva detrás de sí miles de líneas de código que se encargan de mostrar todo tal cual lo ves y su funcionamiento.
Cuando se escribes todas esas líneas de código, es muy importante que no dejemos ninguna ‘puerta abierta’ por la cual no arrepintamos cuando suframos algún tipo de ataque, problema que puede provocar desde cambiar la información de la web, el envío continuo de mensajes molestos (spam) o incluso lo peor, el que obtengan datos críticos que puedan poner en peligro la página, o incluso la empresa y a los clientes.
Hoy en día son muy comunes los ataques a páginas web por descuidos, hay varios tipos de vulnerabilidades que se pueden encontrar al pasar desapercibidas en el momento de programar nuestra página web, pero en este articulo nos centraremos especialmente en al ataque XSS, es decir, Cross Site Scripting.

¿Qué es Cross Site Scripting?

Los ataques por secuencias de comandos entre páginas web (o XSS) son ataques dirigidos a las páginas web con ciertas fallas al momento de programarlas, es decir, estas fallas ocurre al momento de no verificar o ‘filtrar’ la información que ingresa el usuario común, ya sea mediante un formulario o en una URL o de algún otra forma. Este tipo de ataque obliga a la página web mostrar el texto ingresado tal cual se envió, por lo tanto al momento de mostrarlo lo hará como sólo de una forma y es en código HTML.
El código “inyectado” en una página web vulnerable se considera malintencionado o código malisioso.



image
El código malicioso utilizado en este tipo de ataque está compuesto por cadena de datos: scripts completos contenidos en enlaces o ejecutados desde formularios vulnerables.
Por ejemplo, si un usuario escribiera en una caja de texto el siguiente script, donde no se controle o filtre la entrada de los datos, estaríamos consiguiendo que se mostrara una pequeña ventana con un mensaje.


image

La forma de aprovechar esta vulnerabilidad es sabiendo de Javascript, ya que es el lenguaje de programación web útil, es decir, también se puede ingresar código html, pero no serviría de mucho, por las limitaciones que tiene, por no ser un lenguaje de programación sino de maquetado.
Javascript es el lenguaje que se encarga de hacer más dinámica la página, aunque ahora con HTML5 su uso se disminuyo en ciertas cosas, pero aun se sigue usando mucho por su utilidad al hacer dinámicas las paginas web.

Clasificación de los ataques Cross Site Scripting

Los tipos de ataque de Cross Site scripting que nos podemos encontrar son catalogado en dos grandes grupos: XSS persistente o directo, y XSS reflejado o indirecto.

1.- XSS persistente o directo

Este tipo de ataque consiste en inyectar (o embeber) codigo HTML en sitio que lo permita por medio de etiquetas <script> o <iframe>. Es el tipo más grave ya que el código se queda implantado en la web de manera interna y se ejecuta una y otra vez al abrir la página web hasta no ser “reseteada” la página o eliminado ese código en concreto del sitio.
Local. Es una de las variantes del XSS directo, uno de sus objetivos consiste en explotar las vulnerabilidades del mismo código fuente o página web. Esas vulnerabilidades son resultado del uso indebido del DOM (Modelo de Objetos del Documento, es un conjunto estandarizado de objetos para representar páginas web) con JavaScript, lo cual permite abrir otra página web con código malicioso JavaScript incrustado, afectando el código de la primera página en el sistema local.

2.- XSS reflejado o indirecto

Es el tipo de ataque XSS más habitual y consiste solo en editar los valores que pasan mediante URL, ingresando el código malicioso haciendo que se ejecute en dicho sitio. En otras palabras, sucede cuando se envía un mensaje o ruta en una URL, una cookie o en la cabecera HTTP.

Métodos de inyección de código utilizado en los ataques.

A la hora de lanzar un ataque de este tipo, los atacantes pueden utilizar varios tipos de inyección de código distinto. Veamos a continuación cuáles son los más utilizados.
1.- Inyección en un formulario
Se trata del ataque más sencillo. Consiste en inyectar código en un formulario que después al enviarlo al servidor, será incluido en el código fuente de alguna página. Una vez insertado en el código fuente, cada vez que se cargue la página se ejecutará el código insertado en ella.

2.- Inyección por medio de elementos
En este tipo de sistema de inyección de código se utiliza cualquier elemento que viaje entre el navegador y la aplicación, como pueden ser los atributos usados en las etiquetas HTML utilizadas en el diseño de la página.

3.- Inyección por medio de recursos
Aparte de los elementos en la url y los formularios, hay otras formas en la que se puede actuar como son las cabeceras HTTP. Estas cabeceras son mensajes con los que se comunican el navegador y el servidor.
Aquí entran en juego las cookies, las sesiones, campo referer…

Operación de un ataque XSS

Maneras de evitar los ataques

Por suerte, prevenir estos ataques es sencillo, y una vez que aprendamos cómo hacerlo es algo que siempre deberíamos tener presente para evitarlos.
A continuación veremos algunos consejos prácticos que podemos llevar a cabo para proteger nuestras aplicaciones web mediante la validación de entrada de datos, asegurándonos que cada uno de los campos que utilicemos no contengan código que pueda afectar nuestra aplicación o a nuestros usuarios.

1.- Limitar los caracteres de entrada
Lo primero que debemos hacer es limitar los caracteres que un usuario puede introducir en los campos de texto. Por ejemplo, si tenemos un campo para introducir el nombre del usuario, no vamos a dejarlo abierto para que se puedan introducir un número indefinido de caracteres, sino que lo vamos a limitar por ejemplo a 20 o 30 caracteres. Para limitar el número de caracteres, podemos utilizar la variable “maxlength” que nos proporciona el estándar HTML.
2.- Sanear los datosCuando hablamos de sanear los datos, nos estamos refiriendo a quedarnos únicamente con la información que nos interesa, eliminando las etiquetas HTML que pueden ser incluidas en una caja de texto. Por ejemplo, si estamos almacenando el nombre de una persona, de poco nos sirve que el usuario lo introduzca en negrita, ya que lo único que nos interesa es su nombre.
Para lograr esta limpieza, podemos utilizar la función “strip_tags”. Por ejemplo:
$comentario = strip_tags($_POST[‘comentario’]);

3.- Escapar los datos
Para proteger los datos y mostrarlos tal y como el usuario los introdujo, deberíamos “escapar” los datos al presentarlos al usuario. Es decir, caracteres que deben ser representados por entidades HTML si se desea preservar su significado (por ejemplo las comillas dobles hay que transformarlas en &quot; que es como se representa en HTML). Con esto evitamos que el navegador lo ejecute y evalúe el código.
Para lograr esto, podemos utilizar la función “htmlspecialchars”. Por ejemplo:
echo “Mostrando resultados de: ”.htmlspecialchars($_GET['busqueda’]);
Pero aparte de tomar medidas de seguridad para impedir ataques XSS en nuestros sitios, debemos evitar almacenar información relevante de nuestros visitantes en las Cookies, y además encriptar las sesiones de usuario para que en caso de que las capturen no puedan acceder a la información almacenada en ella.

Esto ha sido todo por el momento, más adelante veremos como realizar estos ataques con facilidad.

0 comentarios:

Publicar un comentario