17
Falsificação de solicitação entre sites - CSRF RAFAEL TAVARES ANDRADE TOLEDO CROSS-SITE REQUEST FORGERY

Falsificação de solicitação entre sites csrf.html

Embed Size (px)

Citation preview

Page 1: Falsificação de solicitação entre sites   csrf.html

Falsificação de solicitação entre sites - CSRF

RAFAEL TAVARES ANDRADE TOLEDO

CROSS-SITE REQUEST FORGERY

Page 2: Falsificação de solicitação entre sites   csrf.html

Agenda

Historia

Conceito

Funcionamento

Possibilidades de Ataques

O Ataque – Exemplo

Politica de mesma origem – Same-origin policy

A Solução

Referências

Page 3: Falsificação de solicitação entre sites   csrf.html

Historia

Primeiros casos 2001. Cerca de 18 milhões de usuários do eBay na Coréia perdeu a

informação pessoais em fevereiro de 2008.  Os clientes de um banco em México foram atacados no início

de 2008 com uma tag de imagem em e-mail. O link da tag de imagem mudou a entrada DNS para o banco em seu roteador ADSL para apontar para um site malicioso se passando pelo banco

Page 4: Falsificação de solicitação entre sites   csrf.html

Conceito

O Cross-site request forgery é um tipo de exploração maliciosa de um website pelo qual comandos não autorizados são transmitidos para um site malicioso. Ao contrário do XSS, que explora a confiança de um usuário para um site particular, o CSRF explora a confiança que um site tem no navegador do usuário.

Page 5: Falsificação de solicitação entre sites   csrf.html

Funcionamento – CSRF

Page 6: Falsificação de solicitação entre sites   csrf.html

Possibilidades de Ataques Tags

<img src=“https://bank.com/fn?param=1”>

<iframe src=“https://bank.com/fn?param=1”>

<script src=“https://bank.com/fn?param=1”>

Posts automáticos em forms<body onload="document.forms[0].submit()">

<form method="POST" action=“https://bank.com/fn”>

<input type="hidden" name="sp" value="8109"/>

</form>

XmlHttpRequest Sujeito a politica de mesma origem

Page 7: Falsificação de solicitação entre sites   csrf.html

O Ataque

Alice deseja transferir R$ 100,00 a João usando banco.com.br. O pedido gerado por Alice será semelhante ao seguinte:

No entanto, percebe que Maria da mesma aplicação web irá executar a mesma transferência usando parâmetros de URL da seguinte forma:

Page 8: Falsificação de solicitação entre sites   csrf.html

O Ataque

Maria decide agora para explorar esta vulnerabilidade de aplicações web usando Alice como sua vítima. Maria primeiro constrói a seguinte URL, que vai transferir R$ 100.000,00 da conta de Alice à sua conta:

Agora que seu pedido mal-intencionado é gerado, Maria  tem truque para apresentar o pedido. O método mais básico é o de enviar um e-mail HTML para Alice contendo o seguinte:

Page 9: Falsificação de solicitação entre sites   csrf.html

O Ataque

Supondo que Alice esta autenticada com a aplicação, quando ela clica no link, a transferência de R$ 100.000 para a conta de Maria irá ocorrer.

No entanto, Maria percebe que se Alice clica no link, em seguida, Alice vai notar que a transferência ocorreu.

Por isso, Maria decide esconder o ataque em uma imagem de zero bytes:

Page 10: Falsificação de solicitação entre sites   csrf.html

O Ataque

Se essa tag de imagem for incluída no e-mail, Alice só vê uma pequena caixa que indica que o navegador não pode processar a imagem. No entanto, o navegador continua a enviar a solicitação para banco.com.br sem qualquer indicação visual de que atransferência tenha ocorrido.

Page 11: Falsificação de solicitação entre sites   csrf.html

A Solução

A solução para o problema de CSRF é gerar uma chave única quando o usuário visita a página com o formulário.

Vamos definir esta chave na $_SESSION, bem como um campo hidden no formulário.

Quando o formulário for enviado, vamos verificar a chave armazenada na sessão e a chave enviada pelo formulário. Se eles são os mesmos então nós sabemos que o usuário submeteu nosso formulário. Se eles não são iguais (ou a $_SESSION está vazia), então sabemos que algo nocivo está acontecendo e nós podemos seguramente redirecionar o usuário (e não tomar nenhuma ação).

Page 12: Falsificação de solicitação entre sites   csrf.html

Solução

Page 13: Falsificação de solicitação entre sites   csrf.html

Solução

Podemos acrescentar um nível adicional de segurança, certificando-se o usuário veio a partir da página que contém o formulário.

Page 14: Falsificação de solicitação entre sites   csrf.html

Funcionamento – Politica de mesma origem

A política de mesma origem restringe como um documento ou script carregado a partir de uma origem pode interagir com um recurso de outra origem. 

Page 15: Falsificação de solicitação entre sites   csrf.html

Funcionamento – Politica de mesma origem Mozilla considera duas páginas para ter a mesma origem, se o protocolo, porta (se

informado), e o host/domínio são os mesmos para ambas as páginas. Para ilustrar, esta tabela dá exemplos de comparações origem para o URL http://store.company.com/dir/page.html .

Page 16: Falsificação de solicitação entre sites   csrf.html

Solução

RequestPolicy 

Page 17: Falsificação de solicitação entre sites   csrf.html

Referências

https://www.w3.org/Security/wiki/Same_Origin_Policy

http://www.owasp.org/index.php/Cross-Site_Request_Forgery

http://www.cgisecurity.com/articles/csrf-faq.shtml

http://www.darkreading.com/document.asp?doc_id=107651&WT.svl=news1_2

HTTP://RAFAELTAVARES.CO/APRESENTACOES