burlando um waf

37
1 / 37 ® Burlando um WAF 25 de maio de 2015 ®

Upload: cooler-freenode

Post on 31-Jul-2015

277 views

Category:

Internet


7 download

TRANSCRIPT

Page 1: burlando um WAF

1/37®

Burlando um WAF

25 de maio de 2015

®

Page 2: burlando um WAF

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

[email protected]

[email protected]

Page 3: burlando um WAF

3/37®

Agenda

● Entendendo o problema● Burlando um WAF● Automatizando o ataque● Sugestões para mitigação

Page 4: burlando um WAF

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

Page 5: burlando um WAF

5/37®

Entendendo o Problema

● Filtra tanto Request como Response

Page 6: burlando um WAF

6/37®

Entendendo o Problema

● Request exemplo:GET /sell/cars.php?search=<script>alert(document.cookie)</script >

Page 7: burlando um WAF

7/37®

Entendendo o Problema

● Match exato● BlackList...● “alert(”,● ”union”● “select”● “script”● “eval”...

Page 8: burlando um WAF

8/37®

Entendendo o Problema

● Block por IP● DoS

Spoofing ?

Page 9: burlando um WAF

9/37®

Entendendo o Problema● Regras não são suficientes... ● Expressão regular “regex” não faz matching

Page 10: burlando um WAF

10/37®

Burlando um WAF

Page 11: burlando um WAF

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/

● …

Page 12: burlando um WAF

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>

Page 13: burlando um WAF

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

Page 14: burlando um WAF

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()– -

Page 15: burlando um WAF

15/37®

Burlando um WAF● Outras formas... ● Objetivo é o mesmo burlar

Page 16: burlando um WAF

16/37®

Burlando um WAFEncodes

● 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

PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ=

Page 17: burlando um WAF

17/37®

Burlando um WAF● HPP(HTTP Parameter Pollution) ● Uma técnica que visa enviar muitos parâmetros para assim

burlar filtros de ambientes.

Page 18: burlando um WAF

18/37®

Burlando um WAF

● Mude o IP use Proxy ● Mude o User Agent

Page 19: burlando um WAF

19/37®

Burlando um WAF

● Outras formas... ● obfuscar ● encodar apenas um

caracter etc...

Page 20: burlando um WAF

20/37®

Automatizando o ataque● Por que automatizar ?

Page 21: burlando um WAF

21/37®

Automatizando o ataque● Payloadmask

https://github.com/CoolerVoid/payloadmask

Page 22: burlando um WAF

22/37®

Page 23: burlando um WAF

23/37®

● Futuro da ferramenta

github.com/CoolerVoid/payloadmask/issues

Page 24: burlando um WAF

24/37®

Automatizando o ataque● 0d1n

https://github.com/CoolerVoid/0d1n

Page 25: burlando um WAF

25/37®

Automatizando o ataque● 0d1n

https://github.com/CoolerVoid/0d1n

Page 26: burlando um WAF

26/37®

Automatizando o ataque

Page 27: burlando um WAF

27/37®

Automatizando o ataque

Page 28: burlando um WAF

28/37®

Automatizando o ataque

Page 29: burlando um WAF

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

Page 30: burlando um WAF

30/37®

Automatizando o ataque

Page 31: burlando um WAF

31/37®

Automatizando o ataque

Page 32: burlando um WAF

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

Page 33: burlando um WAF

33/37®

Automatizando o ataque● Futuro da ferramenta...

github.com/CoolerVoid/0d1n/issues

Page 34: burlando um WAF

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.

Page 35: burlando um WAF

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”

Page 36: burlando um WAF

36/37®

Perguntas ???

Page 37: burlando um WAF

37/37®