Proteja sua aplicação contra roubo de sessão com a Azion

Saiba o que é cookie tampering e como mitigar este ataque que altera dados do usuário para realizar roubo de sessão, impersonalização e outras ações maliciosas.

Pablo Diehl - Serverless Software Developer
Vivian Seixas - Technical Researcher
Proteja sua aplicação contra roubo de sessão com a Azion

Neste post, apresentamos o que é o ataque de cookie tampering e como a solução de Signed Cookies da Azion pode ser utilizada para prevenir que ele seja executado em nossas aplicações.

Cookie tampering, ou adulteração de cookies em português, é um tipo de ataque no qual o agente mal intencionado altera dados de cookies de sessão no lado do cliente para realizar roubo de sessão, impersonalização e muitas outras ações maliciosas.

Esse tipo de ataque acontece quando a aplicação web utiliza valores de cookies em “texto plano”, ou seja, sem nenhum tipo de criptografia nem qualquer validação no lado do servidor para armazenar dados de sessão que possam dar acesso à conteúdo restrito de determinado usuário.

Imagine o seguinte cenário: temos uma aplicação que, após o login, armazena o identificador do usuário em um cookie para utilizá-lo em requisições futuras.

Imagem mostrando como proteger aplicações contra roubo de sessão

Com o cookie desprotegido, basta alterá-lo com outro usuário. Aqui usamos José por exemplo:

Imagem mostrando como proteger aplicações contra roubo de sessão

E depois de alterado, é possível sequestrar a sessão e acessar dados de outro usuário.

Nesse cenário, caso não tenhamos nenhum recurso de segurança para proteger nosso cookie de sessão contra manipulações no lado do cliente, nossa aplicação estaria exposta e um usuário teria acesso a dados de outro através de uma simples manipulação de cookies.

Passo 1 - Ativar as soluções no Marketplace da Azion

Acesse nosso Marketplace e procure por “Signed Cookies”. Você encontrará duas edge functions diferentes: “Signed Cookies - Hash Generator” e “Signed Cookies - Hash Validator”, sendo ambas necessárias para proteger sua aplicação contra ataques de Cookie Tampering.

E saiba que, para conseguir usar ambas edge functions, você precisa ter as soluções de Edge Functions e Application Acceleration ativas em sua conta.

Imagem da página do Marketplace da Azion

Ambas devem ser adquiridas no nosso Marketplace — e é muito simples! Basta clicar no botão laranja “Get it now”.

Imagem com card da solução Signed Cookies do Marketplace da Azion

Passo 2 - Criar novas instâncias das edge functions adquiridas em seu Edge Application

Primeiramente, caso seu Edge Application ainda não esteja com os módulos de Application Acceleration e Edge Functions ativos, você deve ativá-los na aba Main Settings. Veja como é fácil:

Imagem mostrando como proteger aplicação contra roubo de sessão

Feito isso, o próximo passo é criar uma instância da função “Signed Cookie - Hash Generator”. Essa função será responsável por criar cookies assinados em nossa aplicação. O JSON Args dessa função tem o seguinte formato:

{
"cookie list": [],
"cookie secret": "",
"tampering_cookie_prefix": "",
}

O campo “cookie_list” é um array de strings, onde podemos definir quais cookies queremos assinar. No caso de nossa aplicação de teste, queremos proteger o cookie “user”, logo o valor “cookie_list” deverá ser [“user”].

O campo “cookie_secret” define uma senha para criptografia do cookie assinado, aqui você pode definir uma string qualquer.

O campo “tampering_cookie_prefix” define o prefixo usado para nomear o cookie assinado. Por exemplo, se usarmos o valor “sgnck”, o cookie assinado resultante para nossa aplicação seria “sgnck_user”.

Com isso, nosso JSON Args ficaria assim:

Imagem mostrando como proteger aplicações contra roubo de sessão

O próximo passo é criar uma nova instância da função “Signed Cookie - Hash Validator”, que será responsável por validar se os cookies assinados não foram modificados no lado do cliente. O JSON Args dessa função tem o seguinte formato:

{
"cookie_list": [],
"cookie_secret": "",
"tampering_cookie_prefix": "",
"tampering_violation_header_prefix": ""
}

O campo “cookie_list” define para quais cookies desejamos validar a assinatura.

O campo “cookie_secret” define uma senha para criptografia dos cookies enviados pelo cliente. Note que o cookie _secret deve ser igual ao valor usado na função de geração dos cookies assinados, caso contrário a validação falhará.

O campo “tampering_cookie_prefix” define o prefixo usado para nomear os cookies assinados que foram gerados pela função “Signed Cookie - Hash Generator”. Note que aqui também devemos usar valores iguais aos usados na função de geração dos cookies assinados, caso contrário a validação também falhará.

O campo “tampering_violation_header_prefix” define um prefixo para os headers que serão adicionados na request, caso a função identifique alguma inconformidade nos cookies enviados pelo cliente.

Seguindo esses passos, o JSON Args deve ficar assim:

Imagem ensinando a proteger aplicações contra roubo de sessão

Passo 3 - Adicionar as instâncias criadas no Rules Engine

Uma vez criadas as instâncias, o próximo passo é utilizá-las no Rules Engine do nosso Edge Application.

Primeiramente, precisaremos criar uma regra na Request Phase para que nosso Edge Application execute o behavior de “Forward Cookies” – sem ele não conseguiremos gerar os cookies assinados.

Imagem mostrando como proteger aplicações contra roubo de sessão

O criteria da imagem acima é meramente ilustrativo e você pode adaptá-lo às necessidades individuais da sua aplicação. O único requisito é que ele seja compatível com o criteria usado para a execução das funções de Signed Cookies que criaremos a seguir.

Na sequência, devemos criar uma regra de Response Phase para a execução da função “Signed Cookies - Hash Generator”.

Imagem mostrando como proteger aplicações contra roubo de sessão

Com isso, toda vez que a origem da nossa aplicação retornar um header Set Cookie que inclua algum cookie protegido, a nossa edge function criará novos cookies assinados para cada um dos cookies protegidos.

Imagem mostrando como proteger aplicações contra roubo de sessão

Na imagem acima, temos um exemplo em que a origem responde um set-cookie para o cookie “user”, fazendo com que a edge function crie o cookie “<prefixo>_user”.</prefixo>

Porém, ainda não estamos validando esses cookies. Para isso acontecer, o próximo passo é criarmos uma função de Request Phase para executar a função “Signed Cookies - Hash Validator”.

Imagem mostrando como proteger aplicações contra roubo de sessão

Neste momento, o Rules Engine deve estar assim:

Imagem mostrando como proteger aplicações contra roubo de sessão

Com isso, nossa aplicação passa a validar manipulações de cookies no front-end. Observe como novos request headers são adicionados à nossa requisição quando algum cookie tem o valor alterado no lado do cliente.

Imagem mostrando como proteger aplicações contra roubo de sessão

Quando a função de validação de cookies identifica alguma violação, novos headers são adicionados na requisição. “<prefixo>-Any” recebe o valor “true” sempre que qualquer violação for identificada. “<prefixo>-Counter” contabiliza quantas violações aconteceram na requisição em questão. “<prefixo>-List” recebe uma string com o nome de todos os cookies violados (os nomes são separados por vírgula, caso exista mais de um cookie). Além disso, para cada cookie violado, é adicionado um header de mesmo nome com o valor “violation”, como no caso da nossa aplicação de teste, em que foi incluído o header “user” com valor “violation”.</prefixo></prefixo></prefixo>

Porém, ainda não tomamos nenhuma ação em nosso Edge Application para impedir que alguma violação de cookie aconteça – e isso nos leva ao nosso próximo e derradeiro passo.

Para bloquear efetivamente um ataque de cookie tampering, precisamos definir uma ação para nosso Edge Application realizar quando identificarmos uma violação de cookie.

Com nossa função de validação adicionando headers no momento em que uma violação de cookie acontece, podemos, por exemplo, executar um behavior de Deny para impedir que um usuário que esteja usando a técnica de cookie tampering acesse nossa aplicação.

Para isso, podemos utilizar um dos headers criados pela função de “Signed Cookies - Hash Validator” como critério de uma regra de Request Phase para a execução do behavior de Deny.

Imagem mostrando como proteger aplicações contra roubo de sessãoImagem mostrando como proteger aplicações contra roubo de sessão

Assim, quando qualquer usuário violar algum cookie protegido em nossa aplicação, ele receberá uma resposta estática com status code 403 diretamente das edge locations da Azion, sem sequer chegar à origem.

Na imagem a seguir, temos cookies originalmente entregues pelo Edge Application ao usuário.

Imagem ensinando a proteger aplicação contra roubo de sessão

Na imagem abaixo, um usuário tenta efetuar ataque de cookie tampering.

Imagem ensinando a proteger aplicação contra roubo de sessão

A imagem a seguir mostra quando a Edge Application identifica violação de cookie e retorna uma resposta estática para o usuário.

Imagem com error 403 forbidden
Com isso, nossa aplicação está protegida contra alterações de cookies no lado do cliente!

No exemplo acima, utilizamos o behavior de Deny para impedir que o usuário acesse nossa aplicação, mas você também pode utilizar quaisquer outros recursos que a Azion oferece, como fazer um redirecionamento, setar uma origem diferente, ou escolher outras inúmeras possibilidades!

Clique aqui e proteja suas aplicações no edge agora!

E mais: se você ainda não está no edge, você ganha US$ 300 em créditos para utilizar em nossa plataforma.

CRIAR CONTA AGORA

Azion

De devs para devs. Seu código, nossa infraestrutura.

Inscreva-se na nossa Newsletter