Analysis of vulnerabilities in web applications - LinuxCon Brazil 2010

Preview:

Citation preview

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

luizwt@gmail.com

luiz.vieira@4linux.com.br

www.4linux.com.br

hackproofing.blogspot.com

Tel: 55-11-2125-4747