En esta publicación te presentamos qué es un ataque de modificación de cookies (cookie tampering) y cómo utilizar Signed Cookies de Azion para evitar este ataque en nuestras aplicaciones.
¿Cómo funciona un ataque de modificación de cookies?
En un ataque de modificación de cookies el actor malicioso altera los datos de las cookies de la sesión del cliente para efectuar un robo de sesión, una impersonalización u otras acciones maliciosas.
Este tipo de ataque se hace posible cuando la aplicación web agredida utiliza valores de cookies en texto plano, es decir, sin ningún tipo de encriptación ni validación en el lado del servidor para almacenar datos de sesión que puedan dar acceso a contenido restringido de un usuario determinado.
¿Cómo utilizar Signed Cookies de Azion para evitar ataques de modificación de cookies directamente en el edge?
Imagina el siguiente escenario: tenemos una aplicación que después de iniciar sesión almacena el identificador del usuario en una cookie para usarlo en futuras solicitudes.
En esta cookie desprotegida, basta con alterar ese identificador, para José por ejemplo.
Hecho esto ya es posible secuestrar la sesión y acceder a los datos de otro usuario.
En este escenario, si no tenemos ningún recurso de seguridad para proteger nuestra cookie de sesión contra manipulaciones del lado del cliente, nuestra aplicación estará abierta a invasiones, pues un usuario podrá tener acceso a los datos de otro a través de una simple manipulación de cookies.
Paso 1 - Activar soluciones en Azion Marketplace
Accede al Marketplace de Azion y busca el servicio de “Signed Cookies”. Encontrarás dos Edge Functions diferentes: “Signed Cookies - Hash Generator” y “Signed Cookies - Hash Validator”, para proteger tu aplicación contra ataques de modificación de cookies.
Para poder usarlas deberás tener activas en tu cuenta las soluciones Edge Functions y Application Acceleration.
Hacerlo es algo muy simple, basta con hacer clic en el botón “Get it now” (obtenlo ahora), ¡y listo!
Paso 2 - Crear nuevas instancias de edge adquiridas en tu edge application
Primero, si tu Edge Application aún no tiene activos los módulos Application Acceleration y Edge Functions, deberás activarlos en la pestaña “Main Settings” (configuraciones principales). Mira lo fácil que es:
Una vez que las hayas activado, el siguiente paso será crear una instancia de la función “Signed Cookie - Hash Generator”. Dicha función será la encargada de crear “signed cookies” (cookies firmadas) en nuestra aplicación. El JSON Args de esta función tiene el siguiente formato:
{
"cookie_list": [],
"cookie_secret": "",
"tampering_cookie_prefix": "",
}
El campo “cookie_list” es una matriz de argumentos (strings) donde podemos definir qué cookies queremos firmar. En nuestra aplicación de prueba queremos proteger la cookie “user” (usuario), por lo que el valor “cookie_list” deberá ser [“user”].
El campo “cookie_secret” define una contraseña para el cifrado de la cookie firmada, aquí puedes definir cualquier argumento.
El campo “tampering_cookie_prefix” define el prefijo usado para nombrar la cookie firmada. Por ejemplo, si usamos el valor “sgnck”, la cookie firmada resultante para nuestra aplicación será “sgnck_user”.
Con ello, nuestro JSON Args se verá así:
El siguiente paso es crear una nueva instancia de la función “Signed Cookie - Hash Validator”, que se encargará de confirmar que las cookies firmadas no han sido modificadas por parte del cliente. El JSON Args de esta función tiene el siguiente formato:
{
"cookie_list": [],
"cookie_secret": "",
"tampering_cookie_prefix": "",
"tampering_violation_header_prefix": ""
}
El campo “cookie_list” define para qué cookies queremos validar la firma.
El campo “cookie_secret” define una contraseña para el cifrado de las cookies enviadas por el cliente. Observa que la cookie_secret debe ser igual al valor utilizado en la función de generación de cookies firmadas; de lo contrario, la validación fallará.
El campo “tampering_cookie_prefix” define el prefijo utilizado para nombrar las cookies firmadas que fueron generadas por la función “Signed Cookie - Hash Generator”. Ten en cuenta que aquí debemos usar los mismos valores que los utilizados en la función de generación de cookies firmadas; de lo contrario, la validación también fallará.
El campo “tampering_violation_header_prefix” define un prefijo para los encabezados que se agregarán a la solicitud en el caso de que la función identifique alguna no conformidad en las cookies enviadas por el cliente.
Siguiendo estos pasos, el JSON Args deberá verse así:
Paso 3 - Agregar las instancias creadas en Rules Engine
Una vez creadas las instancias, el siguiente paso es utilizarlas en Rules Engine de nuestro Edge Application.
Primero, necesitaremos crear una regla en “Request Phase” (fase de solicitud) para que Edge Application ejecute el comportamiento “Forward Cookies” (reenviar cookies). Sin ella, no podremos generar las cookies firmadas.
Este criterio en la imagen de arriba es meramente ilustrativo y podrás adaptarlo a tu realidad. El único requisito es que sea compatible con los criterios utilizados para realizar las funciones de Signed Cookies que crearemos a continuación.
Seguidamente, deberemos crear una regla de “Response Phase” para ejecutar la función “Signed Cookies - Hash Generator”.
Con ello, cada vez que el origen de nuestra aplicación devuelve un encabezado de set-cookie (header Set Cookie) que incluye alguna cookie protegida, nuestra edge function creará nuevas cookies firmadas para cada una de las cookies protegidas.
En la imagen de arriba tenemos un ejemplo en que el origen responde a una set-cookie establecida para la cookie “user”, lo que hace que la edge function cree la cookie “<prefijo>_user”.</prefijo>
Sin embargo, aún no estamos validando estas cookies. Para que esto suceda, el siguiente paso será crear una función “Request Phase” (fase de solicitud) para ejecutar la función “Signed Cookies - Hash Validator”.
En este momento, el Rules Engine deberá verse así:
Con ello, nuestra aplicación pasa a comprobar las manipulaciones de cookies en el front-end. Observe cómo se agregan nuevos “request headers” (encabezados de solicitud) a nuestra solicitud cuando se altera el valor de alguna cookie en el lado del cliente.
Cuando la función de validación de cookies identifica alguna infracción, se agregan nuevos encabezados (headers) a la solicitud. “<prefijo>-Any” recibe el valor “true” (verdad) cada vez que se identifica una infracción. “<prefijo>-Counter” registra cuántas violaciones ocurrieron en la solicitud en cuestión. “<prefijo>-List” recibe un argumento (string) con el nombre de todas las cookies violadas (los nombres se separan con comas si hay más de una cookie). Además, por cada cookie violada se agrega un encabezado del mismo nombre con el valor “violation” (violación), como en el caso de nuestra aplicación de prueba, donde se incluyó el encabezado “user” con el valor “violation”.</prefijo></prefijo></prefijo>
Sin embargo, todavía no hemos adoptado ninguna medida en Edge Application para evitar que ocurran infracciones de cookies, lo que nos lleva al próximo y último paso.
Paso 4 - Actuar para identificar violaciones de cookies
Para bloquear efectivamente un ataque de modificación de cookies tenemos que definir una acción que Edge Application realizará cuando identifique una violación de cookies.
Con nuestra función de validación agregando encabezados en el momento en que ocurre una violación de cookies podremos, por ejemplo, ejecutar un compotamiento “Deny” (denegar) para evitar que un usuario que quiera aplicar un ataque de modificación de cookies acceda a nuestra aplicación.
Para ello, podemos utilizar uno de los headers creados por la función “Signed Cookie - Hash Validator” como criterio de una regla “Request Phase” para ejecutar el comportamiento “Deny”.
Así, cuando un usuario viole alguna cookie protegida en nuestra aplicación, recibirá una respuesta estática con el código de estado 403 directamente desde las edgle locations de Azion, sin ni siquiera llegar al origen.
En la siguiente imagen, tenemos cookies entregadas originalmente por Edge Application al usuario.
En la imagen de abajo, el usuario intenta efectuar un ataque de modificación de cookies.
La siguiente imagen muestra cuándo el Edge Application identifica la violación de cookies y le devuelve una respuesta estática al usuario.
¡Con ello, nuestra aplicación queda protegida contra alteraciones de cookies en el lado del cliente!
En el ejemplo anterior hemos usado el comportamiento “Deny” para evitar que el usuario acceda a nuestra aplicación, pero también puedes usar cualquier otro recurso de Azion, como efectuar un redireccionamiento o establecer un origen diferente, entre muchas otras posibilidades.
Haz clic aquí y protege tus aplicaciones en el edge.
Y más: si aún no estás en el edge, recibirás 300 USD en créditos para usarlos en hasta 12 meses en nuestra plataforma.