analysis of vulnerabilities in web applications - linuxcon brazil 2010
TRANSCRIPT
Analysis of Vulnerabilities in Web Applications
Como saber se suas aplicações web estão seguras.
2/2
Quem sou eu?
Luiz Vieira
● Construtor 4Linux
● Analista e Consultor de Segurança
● 15 anos de experiência em TI
● Pen-Tester
● Articulista sobre Segurança de vários sites: VivaOLinux, SegurançaLinux, Imasters, HackProofing e etc
● Entusiasta do Software Livre
● Filósofo e Psicoterapeuta
Tópicos de hoje
● Princípios de Sistemas Web● Ataques Web: Origem e Motivação● Princípios da Segurança Web● “all input is evil until proven otherwise”● OWASP● Ferramentas para Análise e Auditoria● Prós e Contras das Ferramentas● Vulnerabilidades Web● Oportunidades● WebGoat● Demo
Princípios de Sistemas Web
• Ótima escolha para mudança de plataforma das aplicações(?)
• A Internet não foi criada visando segurança
• Atualmente é considerada uma selva
Ataques Web: Origem e Motivação
● Roubo de informações– Benefício Próprio– Espionagem Industrial
● Defacement– Mass scaning/defacing
● (Ex-)Funcionários Insatisfeitos– Salários baixos ou demissões injustas
● Worms
Princípios da Segurança Web
● “all input is evil until proven otherwise”.
● Ter uma noção das falhas não é suficiente.
● White List vs Black List
“all input is evil until proven otherwise”
● Entradas visíveis e de fácil manipulação– Campos texto– Variáveis de URL
● Entradas de manipulação intermediária– Campos hidden– Valores de cookies– Demais inputs (select, checkbox, radio etc)
● Entradas de difícil manipulação– Campos de cabeçalhos HTTP
OWASP
● Significado:– Open Web Application Security Project
● Missão:● Promove o desenvolvimento seguro de software● Orientado para o desenvolvimento de serviços baseados na
web● Focado mais em aspectos de desenvolvimento do que em web-
design● Um fórum aberto para discussão● Um recurso gratuito e livre para qualquer equipe de
desenvolvimento
● http://www.owasp.org
OWASP Top 10
● Top 10 Web Application Security Vulnerabilities● Uma lista dos 10 aspectos de segurança mais críticos
● Atualizado periodicamente● Crescente aceitação pela indústria
● Federal Trade Commission (US Gov)● US Defense Information Systems Agency● VISA (Cardholder Information Security Program)
● Está sendo adotado como um padrão de segurança para aplicações web
OWASP Guide
Guia para o Desenvolvimento Seguro de Web Apps● Oferece um conjunto de linhas gerais para o
desenvolvimento de software seguro● Introdução à segurança em geral● Introdução à segurança aplicacional● Discute áreas-chave de implementação
- Arquitetura- Autenticação- Gestão de Sessões- Controle de Acesso e Autorização- Registro de Eventos- Validação de Dados
● Em contínuo desenvolvimento
Ferramentas para Análise e Auditoria● Distribuições
- Backtrack 4- OWASP Live CD
● Ferramentas- WebScarab- Paros Proxy- Firebug- Muitas outras...
● Plugins- Firecat (para Firefox) http://migre.me/RyHN
● Wargames- Webgoat- Série HACME, da Foundstone- www.hackerskills.com
http://projects.webappsec.org/Web-Application-Security-Scanner-List
Prós e Contras das Ferramentas
Prós
Recursos temporais limitados Podem poupar muito
tempo em vulnerabilidades facilmente detectáveis pelas ferramentas
Boas soluções custo/eficáciaRecursos humanos limitadosExige pouco conhecimento
técnicoAutomatização de testes
frequentes
Contras
Confiabilidade das ferramentas
Não são “A” solução Não significa que não
existam falhas se estas não forem encontradas
Têm limitaçõesCustoTempo de scanning
Dependendo da aplicação, o próprio crawling pode demorar dias
Vulnerabilidades Web
● Caminho mais fácil de expor informação.
● Internet não é somente a Web
● Preocupação com vulnerabilidades– Dados valiosos?– E em outro host do mesmo servidor?
Vulnerabilidades Web
O código faz parte do perímetro de segurança
Não é possível usar proteção ao nível da camada de rede (firewall, SSL, IDS, hardening) para parar ou detectar ataques ao nível aplicacional
Isto é preocupante?
● Qual a probabilidade de sucesso de um ataque contra uma aplicação web?➢ Probabilidade elevada➢ Fácil de explorar sem conhecimento e ferramentas especiais➢ Quase indetectável➢ Existem milhares de programadores web, pouco preocupados
com segurança
● Consequências?➢ Corrupção de dados ou destruição de BD➢ Acesso root a servidores web ou aplicacionais➢ Perda de autenticação e de controle de acesso de usuários➢ Defacement➢ Ataques secundários a partir da própria aplicação web
Isto é preocupante?
Principais Vulnerabilidades – OWASP Top 10 2010
● A1: Injeção● A2: Cross Site Scripting (XSS)● A3: Quebra de Autenticação e da Gestão de
Sessões● A4: Referência Insegura Direta a Objetos● A5: Cross Site Request Forgery (CSRF)● A6: Configuração de Segurança Incorreta● A7: Falhas na Restrição de Acesso a URL● A8: Redirecionamentos e Encaminhamentos não-
validados● A9: Armazenamento Criptográfico Inseguro● A10: Proteção Insuficiente da Camada de
Transporte
Cross-Site-Scripting (XSS)● Alta ocorrência
● Baixo impacto (?)- Sequestro de sessão- Alteração de fluxo de dados- Defacement- Vetor para diversos outros ataques
● Execução arbitrária de códigos Javascript
● Má (ou falta de) filtragem dos dados que podem ser manipulados pelo usuário.
● Permite a criação de worms:– Vírus do Orkut (2007)
Exemplo de código vulnerável à XSS
Localização da Vulnerabilidade
Vulnerabilidade de XSS:
A variável "buscar" pode ser facilmente manipulada pelo usuário
A variável é repassada para o navegador sem qualquer tipo de filtro
Exploração da Vulnerabilidade
● Induzir a vítima a acessar o endereço:- http://localhost/AtaquesWeb/xss_exemplo1.php?busca=<script>alert('Vulneravel+a+XSS')</script>
Tentativa de Proteção
Métodos de Ataque
● Procurar esconder (camuflar) a tentativa de ataque:
http://localhost/AtaquesWeb/xss_exemplo1.php?busca=%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%27%56%75%6c%6e%65%72%61%76%65%6c%20%61%20%58%53%53%27%29%3c%2f%73%63%72%69%70%74%3e
● http://localhost/AtaquesWeb/xss_exemplo1.php?busca=<script>alert('Vulneravel a XSS')</script>
OU
● – http://localhost/AtaquesWeb/xss_exemplo1.php?busca=“+onmouseover="javascript:alert('XSS')
Soluções
● Criar uma whitelist ao invés de uma blacklist
● Utilizar funções de tratamento de caracteres que possuem significado no HTML
– PHP: htmlspecialchars()
$txtbuscar = htmlspecialchars($_GET['buscar']);
Cross Site Request Forgery
● Semelhante a XSS ● Qualquer sistema vulnerável a XSS está vulnerável a XSRF
● Nem toda aplicação vulnerável a XSRF está também vulnerável a XSS
● Permite alterar as informações enviadas ao navegados.
● Ataque client-side● Não se baseia em executar código JS● Se baseia em enviar requisições com as credenciais do usuário para o servidor.
Soluções
● Ineficientes:– Blacklist– addslashes() é ineficiente para XSRF
● Eficientes:– Evitar falhas de XSS– Controle próprio de tokens
Armazenamento Criptográfico Inseguro
Definições:● Funções Hash● Funções Criptográficas
– Criptografia Simétrica– Criptografia Assimétrica
● Hash + Criptografia
Ataques:● Senhas fracas
– Brute-force● Senhas fortes
– Wordlist- Rainbowtables + hash sites
Armazenamento Criptográfico InseguroRainbowCrack
● Brute-force Normal:– 350 milhões de senhas (texto puro) por segundo.
● Rainbow:– 62.223 milhões de senhas em texto puro por segundo
● http://www.md5crack.com/
Proteção de dados
● Armazenamento de Senha?
● Dados a serem recuperados?
● Hash puro?
● E criptografia? Proteja bem a chave.
Execução Remota de Arquivos
Características:● Diversas proteções por configuração● Alto Impacto● Execução de Comandos no Servidor
Possibilidades:● Apagar Arquivos● Instalar Programas (keyloggers, sniffers)● Acessar Outras Páginas● Repositório de Arquivos (virus?)● Utilizar o servidor como zumbi (DDoS ?)● O que a imaginação permitir...
Execução Remota de Arquivos – Exemplos de PHP
● include()● require()● include_once()● require_once()
● include → Em caso de erro continua● require → Em caso de erro crash!● _once() → Apenas uma vez
E daí?● Se o arquivo a ser incluído contiver códigos PHP
os mesmos serão executados.
Execução Remota de Arquivos – Exemplo: Formulário de Acesso
Execução Remota de Arquivos – Exemplo: Formulário de Acesso
● É possível notar a utilização das funções citadas.
● Sistema com alta produtividade- Ex: Adicionar um novo item de menu
● O parâmetro de uma das funções include() pode ser manipulada pelo usuário.
Execução Remota de Arquivos – Princípio do Ataque
● http://localhost/AtaquesWeb/rfi/?pagina=home home.php
● http://localhost/AtaquesWeb/rfi/?pagina=historico historico.php
● http://localhost/AtaquesWeb/rfi/?pagina=contato contato.php
● ...● …
● http://localhost/AtaquesWeb/rfi/?pagina=[arquivo_malefico]
Execução Remota de Arquivos – Arquivos Maléficos Famosos
● Explorer de Arquivos, bypass de segurança, etc
- c99.txt- r57.txt- Safe0ver.txt
● Atenção: Cuidado com trapdoors.
Execução Remota de Arquivos – Solução Eficiente
● Criar whitelist, permitindo somente caracteres válidos:
38/2
Oportunidades
●Necessidade de maior nível de segurança
● Previnir X Remediar
●Compliance com normas e metodologias
● Testes automatizados X Testes personalizados
● Funcionário X Consultor
39/2
WebGoat●WebGoat é uma aplicação web J2EE
deliberadamente vulnerável, mantida pelo OWASP e desenvolvida para ensinar lições de segurança em aplicações web.
●http://www.owasp.org/index.php/Category:OWASP_WebGoat_Project
40/2
41/2
Injection Flaws – String SQL Injection
42/2
Injection Flaws – String SQL Injection
●Solução do desafio:
Vieira' OR 'a'='a
43/2
Cross-Site Scripting (XSS) - Stage 1: Stored XSS
44/2
Cross-Site Scripting (XSS) - Stage 1: Stored XSS
●Solução do desafio:
<script>alert("XSS");</script>
OU
<script>alert(document.cookie);</script>
45/2
Cross-Site Scripting (XSS) - Cross Site Request Forgery (CSRF)
46/2
Cross-Site Scripting (XSS) - Cross Site Request Forgery (CSRF)
●Solução do desafio:
<img src="http://127.0.0.1:8080/WebGoat/attack?Screen=9&menu=900&transferFunds=4000"
width="1" height="1" />
47/2
AJAX Security - DOM-Based cross-site scripting
48/2
AJAX Security - DOM-Based cross-site scripting
●Solução do desafio:
●<IMG SRC="images/logos/owasp.jpg"/>
●<img src=x onerror=;;alert('XSS') />
● <IFRAME SRC="javascript:alert('XSS');"></IFRAME>
● Please enter your password:<BR><input type = "password" name="pass"/><button onClick="javascript:alert('I have your password: ' + pass.value);">Submit</button><BR><BR><BR><BR><BR><BR><BR><BR> <BR><BR><BR><BR><BR><BR><BR><BR>
49/2
Parameter Tampering - Exploit Hidden Fields
50/2
Parameter Tampering - Exploit Hidden Fields
Vídeo
51/2
Session Management Flaws - Spoofing an Authentication Cookie
52/2
Session Management Flaws - Spoofing an Authentication Cookie
Vídeo
53/2
54/2
Obrigado!!!!
Luiz Vieira
www.4linux.com.br
hackproofing.blogspot.com
Tel: 55-11-2125-4747