Cargando



ASP.NET MVC - Ataque CSRF

En este tutorial veremos en que consiste el ataque de Cross Site Request Forgery y algunas formas de cómo evitarlo.


jul 19 2014 23:09
Avanzado
jul 21 2014 12:10
Existe un tipo de ataque al que somos propensos y que muchas veces pasamos por alto, este es el Cross Site Request Forgery o CSRF, este se encarga de engañar a nuestra aplicación para que reciba datos que no provienen del dominio donde está alojada.

Este tipo de ataque es bastante dañino ya que hace que un usuario que haya sido engañado pueda utilizar su autenticación para introducir datos en nuestra base de datos, imaginemos que con un ataque de este tipo se logre ingresar un usuario administrativo o tal vez una noticia falsa en nuestra sección de novedades.

¿Cómo Funciona el CSRF?


Como explicábamos este ataque engaña a nuestra aplicación para recibir datos que no provienen de ella misma, para ello se aprovecha de la forma en la que funcionan los protocolos como HTTP y sus diferentes métodos, con ello un atacante puede crear un formulario y apuntar a nuestro controlador.

Para ilustrar este ataque veamos el siguiente controlador que es vulnerable a este tipo de ataques:

asp_csrf.jpg


Aquí podemos observar como obtenemos los datos directamente de nuestro formulario y esto no está mal, el único problema es que no le decimos a nuestra aplicación que debe validar el origen del mismo, con ello un atacante puede generar un script como el siguiente:



Aquí es claro lo que sucede, en la carga de esta página se envía el formulario que apunta a un registro en específico de la base de datos, este formulario apunta a un controlador válido, por lo que si un usuario autenticado es dirigido a esta página probablemente estemos en algunos aprietos.

¿Cómo Evitar este Ataque?


A pesar de lo fatalista que pueda verse, este ataque es evitable, para ello solo debemos hacer algunas validaciones que garanticen que los datos recibidos vienen de nuestra aplicación, para ello podemos emplear algunas de estas técnicas:

Referencia de dominio
Esto consiste en verificar de que dominio viene la petición, con ello garantizamos que sea justo del dominio donde está alojada nuestra aplicación, el único problema o desventaja es que si migramos nuestra aplicación de dominio pudiéramos tener que reconstruir la validación en caso que no la hayamos hecho dinámica. También es posible hacer una falsa referencia aprovechando las vulnerabilidades de aplicaciones como Adobe Flash.

Token Generado
Con esta opción lo que hacemos es que dentro de nuestro formulario se genere un token el cual es único por usuario, así nuestra aplicación al recibir los formularios valida que el token sea el mismo, de esta forma permite que se acepten los datos o no. Esta es la opción más utilizada ya que es muy fácil de implementar y tiene pocas o ninguna desventaja.


En el caso del token generado ASP.NET MVC contiene algunos métodos que nos pueden ayudar, el principal es @Html.AntiForgeryToken() el cual genera la clave secreta por la cual nuestra aplicación puede validar los formularios.

Vemos entonces que existen más áreas de las que pensamos y que debemos cuidar en nuestras aplicaciones, por ello debemos informarnos y estar al tanto de como ocurren los ataques para poder idear formas de evitarlos.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X