… ou: Como fazer com que um pobre usuário não consiga acessar um site específico. No caso deste post, o Twitter.com .
Ok, antes de irmos direto ao assunto, vamos ao conceito.
Quando seu navegador faz uma requisição HTTP, ele envia um cabeçalho contendo uma série de informações. Tal cabeçalho (ou Header) é constituido, entre outras coisas, de seu user-agent, o arquivo a ser chamado, tipo de requisição (get, post, etc), campos de formulários, codificação dos caracteres, tipo de conteúdo, cookies, etc. Cookies! hmm! Preste atenção nele aí!
Servidores Web costumam ter configurações que especificam quantos bytes serão permitidos no cabeçalho de uma requisição HTTP. Se a soma de todo o header passar dessa quantidade de bytes, ele anula o pedido, retornando erro. No caso do Apache 2.0, o comando que especifica esse valor é o LimitRequestFieldsize, e seu valor-padrão é 8190
Daí a idéia: Se conseguirmos fazer com que um usuário (Lê-se vítima), sempre que acessar um site, esteja com algo em seu header que ultrapasse esse limite, impossibilitariamos o seu acesso. … e esse alvo, são os cookies!
Pra quem não sabe, “Cookie é um grupo de dados trocados entre o navegador e o servidor de páginas, colocado num arquivo de texto criado no computador do utilizador.” (definição da wikipedia em português) .
Tudo bem, mas… como faremos para definir um cookie no navegador da vítima, para aquele site específico?
Sirdarckcat, autor da idéia, descobriu no Google Analytics, sistema de estatísticas para websites da Google usado em diversos sites, a solução. Para tratar suas estatísticas, o Google Analytics utiliza diversos cookies. Entre eles, os dois abaixo são ideais para o ataque:
1- Cookie para determinar visitante vindo de um site de busca – o “Search result – organic referers”
Nas estatísticas geradas pelo Google Analytics, é possível ver quais termos em sites de buscas o rendeu visita. Segundo Sirdarckcat, é possível “fingir” uma busca no google usando links como:
http://google.seudominio.com/search?q=search-term
Ao passar um termo de busca grande, o mesmo ocupará um bom espaço no header. Porém, ele, sozinho, não quebrará o limite padrão dos web-servers, pois o limite para cada cookie é de 4192 bytes. A solução? Bem… definir mais um cookie!
2- Google Analytics Site Overlay – GASO
Para definir o cookie de nome GASO, basta acessar qualquer página que use o Google Analytics adicionando #gaso=VALOR no final da URL. (ex: http://site.com/pagina.php#gaso=valor-do-cookie)
A junção destes dois cookies usando todo o espaço de 4192 bytes resultará no estouro do limite de espaço para o cabeçalho. O site alvo ficará inacessível até que os cookies sejam excluidos.
Sirdarckcat fez um script para demonstrar esta idéia em ação.
Twitter sem SSL: http://google.sirdarckcat.net/?v=http://twitter.com/
Twitter com SSL: http://google.sirdarckcat.net/?v=https://twitter.com/
… e por falar em Twitter, com o uso frequente de encurtadores de URL, seria fácil que pessoas se tornem vítimas deste tipo de “ataque”, não?
FONTE: http://sirdarckcat.blogspot.com/ e http://httpd.apache.org/docs/2.0/mod/core.html#limitrequestfieldsize
Diogo said on Friday, June 26, 2009, 20:14
Muito bom o blog, continue assim, estarei sempre vendo as novidades. Obrigado.
Gabriel Coutinho de Lima said on Monday, June 29, 2009, 3:22
Opa, Diogo! Obrigado cara.
As coisas andam meio paradas por aqui, mas logo logo volta a ativa. Quando pensei que férias resultariam em mais posts, uma série de trabalhos andam me ocupando. Tem um vídeo que to louco pra gravar pra postar, mas até agora não deu.. quem sabe até sexta tá aí!
Abraços, novamenet obrigado, e seja bem vindo =)
Ranieri Marinho de Souza said on Sunday, July 12, 2009, 21:13
Ótimo post, suas informações são muito importantes, boa iniciativa
Abraços,
Ranieri Marinho de Souza
Segurança da Informação
http://blog.segr.com.br/