Burlando Waf 2.0

41
1 / 41 ® Burlando um WAF 22 de junho de 2015 ®

Transcript of Burlando Waf 2.0

Page 1: Burlando Waf  2.0

1/41®

Burlando um WAF

22 de junho de 2015

®

Page 2: Burlando Waf  2.0

2/41®

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 Waf  2.0

3/41®

Agenda

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

Page 4: Burlando Waf  2.0

4/41®

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 Waf  2.0

5/41®

Entendendo o Problema

● Filtra tanto Request como Response

Page 6: Burlando Waf  2.0

6/41®

Entendendo o Problema

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

Page 7: Burlando Waf  2.0

7/41®

Entendendo o Problema

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

Page 8: Burlando Waf  2.0

8/41®

Entendendo o Problema

● Block por IP● DoS● E se spoofar ?

Spoofing ?

Page 9: Burlando Waf  2.0

9/41®

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

Page 10: Burlando Waf  2.0

10/41®

Entendendo o Problema● ReDOS (Regular expression denial of service)

● Agrupamento ● Repetição e Alternância com sobreposição

● ([A-Za-z]+)*([0-9]+)*● ([0-9a-z]|\d+)*

Page 11: Burlando Waf  2.0

11/41®

Burlando um WAF

Page 12: Burlando Waf  2.0

12/41®

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 13: Burlando Waf  2.0

13/41®

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 14: Burlando Waf  2.0

14/41®

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 15: Burlando Waf  2.0

15/41®

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 16: Burlando Waf  2.0

16/41®

Burlando um WAFBuffer Overflow

● Crashar aplicação forçando buffer overflow deixa o caminho livre para nossos payloads.

● Exemplos:

● /cars/id/page/=-25+and+(select 2)=(Select 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...])+/*!UnIOn*/+/*!selECt*/+4,5,6,7…

● id=2 and (select 2)=(Select 0xAAAAAAAAAAAAAAAAAAAAA...)+uNIoN+seLecT+2,3,version()...

● Por que isso ocorre ?

● Nem todo WAF segue uma prática correta para limitar o buffer de entrada, logo um payload com tamanho extremo pode causar buffer overflow. funções como strcpy(),strcat() sem devido buffer limitado e definido podem causar estes problemas, por isso o recomendado é usar funções como strncat() ou mesmo strncpy().

Page 17: Burlando Waf  2.0

17/41®

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

Page 18: Burlando Waf  2.0

18/41®

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 19: Burlando Waf  2.0

19/41®

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

burlar filtros de ambientes.

Page 20: Burlando Waf  2.0

20/41®

Burlando um WAF

● Mude o IP use Proxy ● Mude o User Agent

Page 21: Burlando Waf  2.0

21/41®

Burlando um WAF

● Ataques ao mesmo tempo? BLOCK !

● Delay de tempo em cada Request ● Periodicidade no tempo

● Diversidade

-Mudar IP

-Mudar Payload

-Mudar UserAgent

Page 22: Burlando Waf  2.0

22/41®

Burlando um WAF

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

caracter etc...

Page 23: Burlando Waf  2.0

23/41®

Automatizando o ataque● Por que automatizar ?

Page 24: Burlando Waf  2.0

24/41®

Automatizando o ataque● Payloadmask

https://github.com/CoolerVoid/payloadmask

Page 25: Burlando Waf  2.0

25/41®

Page 26: Burlando Waf  2.0

26/41®

● Futuro da ferramenta

github.com/CoolerVoid/payloadmask/issues

Page 27: Burlando Waf  2.0

27/41®

Automatizando o ataque● 0d1n

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

Page 28: Burlando Waf  2.0

28/41®

Automatizando o ataque● 0d1n

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

Page 29: Burlando Waf  2.0

29/41®

Automatizando o ataque

Page 30: Burlando Waf  2.0

30/41®

Automatizando o ataque

Page 31: Burlando Waf  2.0

31/41®

Automatizando o ataque

Page 32: Burlando Waf  2.0

32/41®

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 33: Burlando Waf  2.0

33/41®

Automatizando o ataque

Page 34: Burlando Waf  2.0

34/41®

Automatizando o ataque

Page 35: Burlando Waf  2.0

35/41®

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 36: Burlando Waf  2.0

36/41®

Automatizando o ataque● Futuro da ferramenta...

github.com/CoolerVoid/0d1n/issues

Page 37: Burlando Waf  2.0

37/41®

Automatizando o ataque●

Page 38: Burlando Waf  2.0

38/41®

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 39: Burlando Waf  2.0

39/41®

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 40: Burlando Waf  2.0

40/41®

Perguntas ???

Page 41: Burlando Waf  2.0

41/41®