Todos os posts tagados scanner

DOM XSS – Parte 1

dom_xss

Nesta primeira parte, num total de três, vou explicar o funcionamento do DOM XSS e demonstrar como encontrar falhas nesta variante do XSS – um tipo de ataque muito utilizado/comum hoje em dia para roubo de sessões, phishing e propagação de malware utilizando o XSS Persistente [mais perigoso que o XSS Refletido, pois o XSS Persistente fica armazenado na aplicação web].

Vou também fornecer referências e vídeos que ajudam a complementar este artigo.

Tive conhecimento do DOM XSS[1] há alguns anos, altura em que li o livro XSS Attacks: Cross Site Scripting Exploits and Defense de Seth Fogie[2], com a participação do Robert ‘RSnake’ Hansen[3]. Foi exatamente no site – ha.ckers.org – do RSnake que despertei o interesse pelo XSS.

O DOM XSS tem sido bastante popular na segurança informática, muito devido às recompensas nos programas de divulgação responsável de vulnerabilidades de diversas empresas [Google, Yahoo!, PayPal, etc]. Quem sabe se, com esta leitura, poderá ser uma oportunidade para o leitor ganhar uns trocados :-)
Essa popularidade também é originada pelo aumento da utilização de JavaScript [e por sua vez, AJAX] nas aplicações web [sites]. Ataques XSS baseados no DOM ainda são muito comuns encontrar nas aplicações web, muito por causa da complexidade de analisar códigos JavaScript [situação agravada quando o código está comprimido ou ofuscado].

Mas afinal o que é o DOM XSS?
DOM XSS é um ataque XSS[5] onde a ação nociva é executada como resultado de uma modificação no DOM [Document Object Model] do browser da vítima, presente num script do lado do cliente. Isto significa que, a resposta HTTP não é modificada mas o código do lado do cliente é executado de uma forma “diferente” [ou maliciosa] do habitual.
Ao contrário de outros ataques XSS, o DOM XSS opera do lado do cliente [client-side] e não no lado do servidor [server-side].
Por outras palavras, geralmente, uma aplicação web contém códigos em JavaScript que gerem o input do utilizador no HTML. Estes códigos controlam a aplicação web através do DOM. Uma injeção de código arbitrário no DOM é intitulado de DOM XSS.

Dependendo do tipo de vulnerabilidade, um utilizador malicioso pode utilizar ataques DOM XSS para roubo de dados de autenticação, phishing e até mesmo para propagar malware. Como os ataques DOM XSS são executados no browser da vítima, monitorizar este tipo de atividade pode ser uma tarefa difícil. Digo isto porque em determinados casos, o vector de ataque DOM XSS não passa sequer pelo servidor. Se a ação nociva estiver inserida num identificador hash (após o caracter #), os browsers não enviam essa parte do URL para os servidores.
Esta situação não ocorre apenas nos identificadores hash mas também em algumas novas funcionalidades HTML5, como o LocalStorage e o IndexedDB.
Tome como exemplo o seguinte código JavaScript numa página index.html:

var foobar = location.hash;
document.write(foobar);

domxss_1

Se aceder ao endereço com o browser Mozilla Firefox [Google Chrome bloqueia algumas tentativas de XSS – mas não todas :-)]:

http://site-que-nao-existe.pt/index.html

Não vai surgir nada no ecrã. No entanto se colocar:

http://site-que-nao-existe.pt/index.html#1234

Irá surgir no ecrã #1234 [valor da propriedade hash do objeto location].
Dado que não existe qualquer tipo de validação do input do utilizador, é possível injetar código HTML.
Testamos então injetar no location.hash o seguinte:

#1234<img src=x onerror=prompt(1);>

domxss_2

Acabou de explorar uma falha DOM XSS.
Convém referir que nem todas as falhas DOM XSS são fáceis de detetar. Na maioria dos casos, é necessário ter um conhecimento mais avançado da linguagem Javascript.

Mas existem formas mais automáticas para analisar este tipo de falha.
Poderá programar a sua própria ferramenta, utilizando as expressões regulares disponibilizadas pelo DOM XSS Wiki[4]:

Detetar fontes [é a origem do conteúdo, ou seja, donde vem a informação – por exemplo: document.URL]:

/(location\s*[\[.])|([.\[]\s*["']?\s*(arguments|dialogArguments|innerHTML|write(ln)?|open(Dialog)?|showModalDialog|cookie|URL|documentURI|baseURI|referrer|name|opener|parent|top|
content|self|frames)\W)|(localStorage|sessionStorage|Database)/

Detetar sinks [funções de JavaScript que poderão permitir executar strings como JavaScript]:

/((src|href|data|location|code|value|action)\s*["'\]]*\s*\+?\s*=)|((replace|assign|navigate|getResponseHeader|open(Dialog)?|showModalDialog|eval|evaluate|execCommand|execScript|setTimeout|setInterval)\s*["'\]]*\s*\()/

Caso contrário, já existem muitas ferramentas que auxiliam na pesquisa por DOM XSS:

No artigo DOM XSS – Parte 3 irei focar-me numa destas ferramentas, com exemplos práticos e dicas de utilização.

Como um vídeo vale mais do 1,8 milhões palavras, penso que é importante salientar estas duas apresentações em vídeo porque demonstram muito bem, pela voz de dois grandes especialistas, o que é o DOM XSS.

In the DOM – No one will hear you scream By Mario Heiderich

Sapo CodeBits V – Stefano di Paola

Como corrigir?
São imensos os casos que podem ocorrer para corrigir falhas DOM XSS. Passa sempre por filtrar [um bom lema para os programadores web – encode and sanitize] todos os parâmetros possíveis de modificação por parte de um utilizador.
A OWASP[6] tem uma página[7] dedicada exclusivamente à prevenção de falhas DOM XSS. Essa página explora vários tipos de cenários e contribui bastante para uma boa regra de etiqueta na programação de aplicações web.

Na segunda parte deste artigo, irei fornecer 3 exemplos de casos reais que irão ajudar o leitor a entender melhor esta matéria.

Até lá!

Referências:
[1] https://www.owasp.org/index.php/DOM_Based_XSS
[2] http://www.amazon.com/XSS-Attacks-Scripting-Exploits-Defense/dp/1597491543
[3] http://www.websegura.net/entrevista-com-robert-hansen/
[4] https://code.google.com/p/domxsswiki/
[5] https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29
[6] http://www.owasp.org
[7] https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet

Lista de scanners de SSL para testes de intrusão

Foi publicado no PenTestIT uma lista de ferramentas que pode ser útil aos pentesters.
Tem software para todos os gostos, quero dizer, sistemas operativos…

Análise ao WPScan – WordPress Security Scanner

Esta semana testei a ferramenta WPScan do ethicalhack3r e surpreendeu-me pela positiva.
Programado em Ruby, o WPScan pode ser bastante útil a admins de blogues WordPress ou pentesters que queiram avaliar, de certa forma, a segurança do sistema de blogues mais popular da actualidade.

Esta ferramenta utiliza uma aproximação blackbox, ou seja, analisa sem qualquer conhecimento prévio o que está instalado no blogue WordPress.

Entre as principais características saliento:

  • Enumeração de nomes de utilizador (querystring do autor e do cabeçalho location)
  • Ataques força bruta ao painel de login (multithread)
  • Enumeração de vulnerabilidades (baseada na versão)
  • Enumeração de plugins (os 2220 plugins mais populares)
  • Outras verificações (nome do template, listagem de directórios, etc)

Testei no Mac OS X e no Ubuntu e a única coisa que tive de instalar foram as dependências (typhoeus e xml-simple):

sudo gem install –user-install typhoeus
sudo gem install –user-install xml-simple

Presumo que também deverá correr no sistema operativo Windows, desde que seja preenchido todos os requisitos.

Nos testes que realizei, ficando apenas de parte a força bruta, fiquei satisfeito com o resultado do WPScan que basicamente obtem a maioria das informações via código fonte da página (tal como o ScanPW).

(Teste que demonstra o nome do template utilizada no WordPress)

(Teste que demonstra a versão do WordPress, neste caso desactualizada, e a presença do ficheiro readme.html)

(Teste que demonstra possíveis vulnerabilidades)

Ainda numa versão alpha, é sem dúvida uma ferramenta a seguir e ter em conta.

Download:

svn checkout http://wpscan.googlecode.com/svn/trunk/ wpscan-read-only

STUXNET Scanner identifica computadores infectados com o Stuxnet

TrendLabs criou a ferramenta STUXNET Scanner para ajudar os administradores a detectarem a presença do Stuxnet nos computadores presentes na rede.

Podem fazer o download aqui.