Copyright © The OWASP FoundationPermission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.
The OWASP Foundationhttp://www.owasp.org
Tratando as vulnerabil idades do Top 10 do OWASPPhp Conference – São Paulo 28/11/2008
Wagner EliasResearch & Development Manager Brazilian Chapter Leaderhttp://wagnerelias.comhttp://www.conviso.com.br
Agenda Um pouco de OWASP Top 10 2007
1 – XSS (Cross Site Scripting)2 – Falhas de Injeção3 – Execução Maliciosa de Arquivos4 – Referência Direta a Objetos5 – CSRF (Cross Site Request Forgery)6 – Vazamento de Informações7 – Furo de Autenticação8 – Armazenamento Criptográfico9 – Comunicação Insegura10 – Restrição de Acesso a URL
Encerramento
O que é OWASP?
Open Web Application Security Project Educar e conscientizar segurança para desenvolvedores, designers,
arquitetos e organizações.
Como funciona?
DocumentaçãoWiki e Books
Code Review, Testing Guide, Building, Top Ten, …
Code Projects Projetos ferramentas ofensivas/defensivasProcessos, procedimentos …Educação e outros
Chapters (Capítulos)Grupo de usuários+100 e crescendo
ConferênciasGrandes e pequenos eventos ao redor do mundo
Brazil ian Chapter (OWASP-BR)
Positive Security ProjectMelhorar a postura das empresas em relação a segurança em
aplicações Application Security Desk Reference Project (ASDR)
Guia de referência sobre segurança em aplicações webPrincípios, agentes de ameça, controles, vulnerabilidades e
ataques, impactos de negócio e técnicos Traduções
WebGoatTop Ten Project
Lista de discussão ativa, participe!http://lists.owasp.org/mailman/listinfo/owasp-brazilian
Acompanhe e colabore com o wiki do capítulohttp://www.owasp.org/index.php/Brazilian
Patrocinadores / Membros
Quem contribui?
Copyright © The OWASP FoundationPermission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.
The OWASP Foundationhttp://www.owasp.org
Tratando as vulnerabil idades do Top 10 do OWASP
Top 10 2007
O que é?
Estudo da OWASP que busca identificar e classificar as 10 principais vulnerabilidades encontradas em ambientes WEB
Traduzido para vários idiomas e atualizado regularmente Pt-Br:http://www.owasp.org/images/4/42/OWASP_TOP_10_2007_PT-BR.pdf
Copyright © The OWASP FoundationPermission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.
The OWASP Foundationhttp://www.owasp.org
Tratando as vulnerabil idades do Top 10 do OWASP
1 – XSS (Cross Site Scripting)
1 - Cross Site Scripting (XSS)
Permite que um atacante insira um script na página que será mostrada à vítima.
Afeta qualquer ambiente webEfeitos:
Seqüestro de sessãoInserção de código ou conteúdo hostilRoubo de informaçõesControle do navegador da vítima
Tipos de Cross Site Scripting
RefletidoQuando o site reflete para o usuário todo ou parte
do conteúdo da requisiçãoArmazenado
O script é armazenado em base de dados e é mostrado às vítimas posteriormente
Inserção DOMOs scripts da página são alterados
Tratando em php
Sanitize os dados usandohtmlentities() ou htmlspecialchars()
Copyright © The OWASP FoundationPermission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.
The OWASP Foundationhttp://www.owasp.org
Tratando as vulnerabil idades do Top 10 do OWASP
2 – Falha de Injeção
2 - Falhas de Injeção
Várias linguagens envolvidas:SQLLDAPHTMLXSLTXMLComandos de interpretadores do sistema
operacional (cmd, shell, etc)
Falhas de Injeção
Como acontecem:Dados fornecidos por usuários são usados como
parte de comandos ou consultasDados são manipulados para alterar os
comandos enviados ao interpretadorAtacante pode se utilizar das permissões da
aplicação para ler e/ou alterar dadosPode permitir execução de programas
Falhas de Injeção
Ambientes afetados:Quaisquer ambientes que utilizem interpretadoresMuito comum no acesso a bases de dados
SQL Injection
Dicas
Valide sempreExpressões regulares são sempre uma boa
Adote camada de abstração de dadosBibliotecas de ORM são bastante eficazes para evitar
falhas de SQL Injection. Exemplo ADOdb, PDO.Use procedimentos armazenados
Prepared Statements (Bind Variables)Evite usar a chamada padrão de query do MySQL
(mysqli_multi_query()) usemysqli_query()
Não confieNo usuário e no magic_quotes /addslashes()
Tratando em php
Sanitize os dados usandoescapeshellcmd()
Tratando em php
Evite, mas se precisar interagir com shell useescapeshellarg()
Tratando em php
Referenciando path de forma segura, evitando path traversalrealpath()
Tratando em php
Evitando SQL Injection com mysql_escape_string() (não é uma solução definitiva, sujeito a SQL Injection usando técnicas de encode.) Só Bind Variables Salva
Copyright © The OWASP FoundationPermission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.
The OWASP Foundationhttp://www.owasp.org
Tratando as vulnerabil idades do Top 10 do OWASP
3 – Execução Maliciosa de Arquivos
3 - Execução Maliciosa de Arquivo
Execução de conteúdo externo ao código da aplicação
Permite realizarExecução remota de códigoInstalação de rootkits
Execução Maliciosa de Arquivo
Ambientes afetados:Sistemas que aceitam nomes de arquivosSistemas que recebem arquivosAmbientes interpretados
Tratando em php
Desabilite estas funções que são habilitadas por defaultallow_url_fopen e allow_url_include
Cuidado com as funçõeseval()passthru()Streams (stream_*)
Copyright © The OWASP FoundationPermission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.
The OWASP Foundationhttp://www.owasp.org
Tratando as vulnerabil idades do Top 10 do OWASP
4 – Referência Direta aObjetos
4 - Referência Direta a Objeto
Ocorre quando a aplicação expõe referência direta a objeto internoArquivoDiretórioRegistro de base de dadosURLParâmetro
Referência Direta a Objeto
Permite ao atacante manipular a referência e burlar controles de acesso
Exemplo:Aplicação utiliza CPF na URL para identificar
usuárioAtacante manipula a URL e altera o CPFAtacante acessa dados de outros CPFs
Referência Direta a Objeto
Ambientes afetados:Qualquer ambiente web
SoluçãoUsar sessõesArmazenar identificadores internos na sessão do
usuárioUsar identificadores de sessão aleatórios (token)
Tratando em php
O recurso de _autoload é uma boa opção
Copyright © The OWASP FoundationPermission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.
The OWASP Foundationhttp://www.owasp.org
Tratando as vulnerabil idades do Top 10 do OWASP
5 – CSRF (Cross Site Request Forgery)
5 - Cross Site Request Forgery (CSRF)
Usar sessão já aberta pelo usuário para enviar comandos para a aplicaçãoUsuário loga na aplicação alvoUsuário acessa site do atacanteScripts do atacante usam a sessão da aplicação
alvo Enviam comandos em nome do usuário na sessão já
aberta
Cross Site Request Forgery
Quando ocorre:Não há verificação de autorizaçãoAção é executada quando credenciais são
enviadas na URLAs credenciais são submetidas automaticamente
Cookies
Cross Site Request Forgery
A maioria das aplicações atuais estão vulneráveisAplicações de Internet Banking pedem a senha
para operações de atualizaçãoAmbientes afetados:
Todos os ambientes web
Tratando em php
EviteQue funções críticas na aplicação sejam feitas
sem a necessidade de re-autenticaçãoNão use apenas $_REQUEST[‘input‘]
Utilize Corretamente $_COOKIE, $_GET e $_POST Token em todas as requisições
Copyright © The OWASP FoundationPermission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.
The OWASP Foundationhttp://www.owasp.org
Tratando as vulnerabil idades do Top 10 do OWASP
6 – Vazamento de Informações
6 - Vazamento de Informações
Nome completo:Vazamento de informações e tratamento de erros
inapropriadoA própria aplicação informa ao atacante:
ConfiguraçõesArquitetura internaPlataformasDados sigilosos
Vazamento de Informações
Formas de vazamento:Tempo de respostaRespostas diferentes para diferentes entradas
Página de erro com códigos diferentesPáginas de erros com informações de debug
Stack trace na página de erro
Ambientes afetados:Todos
Tratando em php
Cuidado com informações sobre o ambientePhpinfo()Server-Status
Configure no php.inilog_errors = On display_errors = Off
Copyright © The OWASP FoundationPermission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.
The OWASP Foundationhttp://www.owasp.org
Tratando as vulnerabil idades do Top 10 do OWASP
7 – Furo de Autenticação
7 - Furo de Autenticação
Nome completo:Furo de autenticação e gerência de sessão
Problemas mais comuns:Falhas de proteção de credenciaisFalha de proteção de identificadores de sessão
Ambientes afetados:Todos os ambientes
Furo de Autenticação
Conseqüências:Roubos de contasSeqüestro de sessãoViolações de privacidadeAcessos não autorizadosPersonificação de usuários (impersonation)
Dicas
Nunca façaArmazenamento de senhas. Nem mesmo
criptografadasNão use mais md5 e sha-1
FaçaArmazene apenas o hash + salt das senhasFortaleça as configurações de sessão
session.save_path = [diretório protegido] session.cookie_httponly = 1 (acesso apenas por HTTP) session.cookie_secure = 1 (força o uso de HTTPS)
Números aleatórios
Cuidado com as funções geradoras de números aleatóriosrand(), srand(), mt_rand(), mt_srand()
Uma falha na implementação destas funções causou inúmeras falhas em sistemas de autenticação em projetos open source
Tratando em php
Utilize outros algoritmos de hash
Copyright © The OWASP FoundationPermission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.
The OWASP Foundationhttp://www.owasp.org
Tratando as vulnerabil idades do Top 10 do OWASP
8 – Armazenamento Criptográfico
8 - Armazenamento Criptográfico
Nome Completo:Armazenamento Criptográfico Inseguro
Aplicações tem dados sensíveisAlgumas não criptografamOutras criptografam de forma insegura
Algoritmos mal concebidos Mecanismos inapropriados Erros no uso de criptografia
– Mesmo com algoritmos adequados
Armazenamento Criptográfico
Ambientes afetadosTodos
Problemas mais comuns:Não criptografar dados sensíveisUso inseguro de algoritmos fortes
Chaves fracasUso de algoritmos caseiros ou de algoritmos
fracosArmazenar chaves em sistemas de
armazenamento desprotegidos
Tratando em php
UseMcrypt com algoritmos conhecidos de criptografia
CuidadosImplementação do algoritmoArmazenamento da chaveCifra de César e XOR não funcionam
Copyright © The OWASP FoundationPermission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.
The OWASP Foundationhttp://www.owasp.org
Tratando as vulnerabil idades do Top 10 do OWASP
9 – Comunicação Insegura
9 - Comunicações inseguras
Todo o tráfego autenticado da aplicação deve ser criptografadoUsar SSL ou equivalente:
Entre aplicação e cliente Entre aplicação e back-end (base de dados)
Sempre autenticar (ou re-autenticar) antes de transmitir dados sigilosos
Ambientes afetados:todos
Copyright © The OWASP FoundationPermission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.
The OWASP Foundationhttp://www.owasp.org
Tratando as vulnerabil idades do Top 10 do OWASP
10 – Restrições de Acesso a URL
10 - Restrições de acesso a URLs
Nome completo:Falha ao restringir acesso a URLs
Aplicações tem páginas internasEstas páginas só devem ser acessadas:
Por usuários autenticados ou Após determinada operação
O acesso a páginas internas deve ser controlado corretamente
Restrições de acesso a URLs
Ambientes Afetados:Todos
Problemas:Navegação forçada:
Adivinhação de URLs Força bruta
Ocorre porque a página não verifica se usuário deveria acessar
Tratando em php
Controle de acessoEstabeleça um bom controle de acesso as
informações da aplicaçãoHardening de sessão
A sessão é responsável por manter o estado das conexões, garanta que as sessões terão segurança adequada
Copyright © The OWASP FoundationPermission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.
The OWASP Foundationhttp://www.owasp.org
Tratando as vulnerabil idades do Top 10 do OWASP
Encerrando
Fiquem de olho
Port do projeto ESAPI para phpBiblioteca completa para tratar as
vulnerabilidades do Top 10AppSec Latin America 2009
Conferência que será realizada no Brasil e irá unir especialistas do mundo todo para tratar de segurança em aplicações WEB
REFERÊNCIAS
http://www.owasp.orgCode Review Guide
www.owasp.org/index.php/Category:OWASP_Code_Review_Project
Development Guide www.owasp.com.br/index.php/Category:OWASP_Guide_Project
Testing Guide www.owasp.com.br/index.php/Category:OWASP_Testing_Project
Application Security Desk Reference www.owasp.com.br/index.php/Category:OWASP_ASDR_Project
Top Ten Project www.owasp.com.br/index.php/Category:OWASP_Top_Ten_Project
http://br.php.net/manual/
Perguntas
Obrigado