Burlando Waf 2.0

Post on 13-Aug-2015

141 views 38 download

Transcript of Burlando Waf 2.0

1/41®

Burlando um WAF

22 de junho de 2015

®

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

● acosta@conviso.com.br

● coolerlair@gmail.com

3/41®

Agenda

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

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

5/41®

Entendendo o Problema

● Filtra tanto Request como Response

6/41®

Entendendo o Problema

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

7/41®

Entendendo o Problema

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

8/41®

Entendendo o Problema

● Block por IP● DoS● E se spoofar ?

Spoofing ?

9/41®

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

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+)*

11/41®

Burlando um WAF

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/

● …

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>

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

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

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

17/41®

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

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=

19/41®

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

burlar filtros de ambientes.

20/41®

Burlando um WAF

● Mude o IP use Proxy ● Mude o User Agent

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

22/41®

Burlando um WAF

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

caracter etc...

23/41®

Automatizando o ataque● Por que automatizar ?

24/41®

Automatizando o ataque● Payloadmask

https://github.com/CoolerVoid/payloadmask

25/41®

26/41®

● Futuro da ferramenta

github.com/CoolerVoid/payloadmask/issues

27/41®

Automatizando o ataque● 0d1n

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

28/41®

Automatizando o ataque● 0d1n

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

29/41®

Automatizando o ataque

30/41®

Automatizando o ataque

31/41®

Automatizando o ataque

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

33/41®

Automatizando o ataque

34/41®

Automatizando o ataque

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

36/41®

Automatizando o ataque● Futuro da ferramenta...

github.com/CoolerVoid/0d1n/issues

37/41®

Automatizando o ataque●

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.

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”

40/41®

Perguntas ???

41/41®