tratando as vulnerabilidades do top 10 com php

60
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP Foundation http://www.owasp.org Tratando as vulnerabilidades do Top 10 do OWASP Php Conference – São Paulo 28/11/2008 Wagner Elias Research & Development Manager Brazilian Chapter Leader http://wagnerelias.com http://www.conviso.com.br

Upload: conviso-application-security

Post on 20-Aug-2015

7.225 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Tratando as vulnerabilidades do Top 10 com php

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 vulnerabilidades 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

Page 2: Tratando as vulnerabilidades do Top 10 com php

Agenda Um pouco de OWASP Top 10 2007

1 – XSS (Cross Site Scripting) 2 – Falhas de Injeção 3 – Execução Maliciosa de Arquivos 4 – Referência Direta a Objetos 5 – CSRF (Cross Site Request Forgery) 6 – Vazamento de Informações 7 – Furo de Autenticação 8 – Armazenamento Criptográfico 9 – Comunicação Insegura 10 – Restrição de Acesso a URL

Encerramento

Page 3: Tratando as vulnerabilidades do Top 10 com php

O que é OWASP?

Open Web Application Security Project Educar e conscientizar segurança para desenvolvedores,

designers, arquitetos e organizações.

Page 4: Tratando as vulnerabilidades do Top 10 com php

Como funciona?

Documentação Wiki e Books

Code Review, Testing Guide, Building, Top Ten, …

Code Projects Projetos ferramentas ofensivas/defensivas Processos, procedimentos … Educação e outros

Chapters (Capítulos) Grupo de usuários +100 e crescendo

Conferências Grandes e pequenos eventos ao redor do mundo

Page 5: Tratando as vulnerabilidades do Top 10 com php

Brazilian Chapter (OWASP-BR)

Positive Security Project Melhorar 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 web Princípios, agentes de ameça, controles, vulnerabilidades e

ataques, impactos de negócio e técnicos Traduções

WebGoat Top Ten Project

Lista de discussão ativa, participe! http://lists.owasp.org/mailman/listinfo/owasp-brazilian

Acompanhe e colabore com o wiki do capítulo http://www.owasp.org/index.php/Brazilian

Page 6: Tratando as vulnerabilidades do Top 10 com php

Patrocinadores / Membros

Page 7: Tratando as vulnerabilidades do Top 10 com php

Quem contribui?

Page 8: Tratando as vulnerabilidades do Top 10 com php

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 vulnerabilidades do Top 10 do OWASP

Top 10 2007

Page 9: Tratando as vulnerabilidades do Top 10 com php

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

Page 10: Tratando as vulnerabilidades do Top 10 com php

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 vulnerabilidades do Top 10 do OWASP

1 – XSS (Cross Site Scripting)

Page 11: Tratando as vulnerabilidades do Top 10 com php

1 - Cross Site Scripting (XSS)

Permite que um atacante insira um script na página que será mostrada à vítima.

Afeta qualquer ambiente web Efeitos:

Seqüestro de sessão Inserção de código ou conteúdo hostilRoubo de informaçõesControle do navegador da vítima

Page 12: Tratando as vulnerabilidades do Top 10 com php

Tipos de Cross Site Scripting

RefletidoQuando o site reflete para o usuário todo

ou parte do conteúdo da requisição

ArmazenadoO script é armazenado em base de dados e

é mostrado às vítimas posteriormente

Inserção DOMOs scripts da página são alterados

Page 13: Tratando as vulnerabilidades do Top 10 com php

Tratando em php

Sanitize os dados usandohtmlentities() ou htmlspecialchars()

Page 14: Tratando as vulnerabilidades do Top 10 com php

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 vulnerabilidades do Top 10 do OWASP

2 – Falha de Injeção

Page 15: Tratando as vulnerabilidades do Top 10 com php

2 - Falhas de Injeção

Várias linguagens envolvidas:SQLLDAPHTMLXSLTXMLComandos de interpretadores do sistema

operacional (cmd, shell, etc)

Page 16: Tratando as vulnerabilidades do Top 10 com php

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

Page 17: Tratando as vulnerabilidades do Top 10 com php

Falhas de Injeção

Ambientes afetados:Quaisquer ambientes que utilizem

interpretadoresMuito comum no acesso a bases de dados

SQL Injection

Page 18: Tratando as vulnerabilidades do Top 10 com php

Dicas

Valide sempre Expressões regulares são sempre uma boa

Adote camada de abstração de dados Bibliotecas 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()) use mysqli_query()

Não confie No usuário e no magic_quotes /addslashes()

Page 19: Tratando as vulnerabilidades do Top 10 com php

Tratando em php

Sanitize os dados usandoescapeshellcmd()

Page 20: Tratando as vulnerabilidades do Top 10 com php

Tratando em php

Evite, mas se precisar interagir com shell useescapeshellarg()

Page 21: Tratando as vulnerabilidades do Top 10 com php

Tratando em php

Referenciando path de forma segura, evitando path traversal realpath()

Page 22: Tratando as vulnerabilidades do Top 10 com php

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

Page 23: Tratando as vulnerabilidades do Top 10 com php

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 vulnerabilidades do Top 10 do OWASP

3 – Execução Maliciosa de Arquivos

Page 24: Tratando as vulnerabilidades do Top 10 com php

3 - Execução Maliciosa de Arquivo

Execução de conteúdo externo ao código da aplicação

Permite realizarExecução remota de código Instalação de rootkits

Page 25: Tratando as vulnerabilidades do Top 10 com php

Execução Maliciosa de Arquivo

Ambientes afetados:Sistemas que aceitam nomes de arquivosSistemas que recebem arquivosAmbientes interpretados

Page 26: Tratando as vulnerabilidades do Top 10 com php

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_*)

Page 27: Tratando as vulnerabilidades do Top 10 com php

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 vulnerabilidades do Top 10 do OWASP

4 – Referência Direta aObjetos

Page 28: Tratando as vulnerabilidades do Top 10 com php

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

Page 29: Tratando as vulnerabilidades do Top 10 com php

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

Page 30: Tratando as vulnerabilidades do Top 10 com php

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)

Page 31: Tratando as vulnerabilidades do Top 10 com php

Tratando em php

O recurso de _autoload é uma boa opção

Page 32: Tratando as vulnerabilidades do Top 10 com php

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 vulnerabilidades do Top 10 do OWASP

5 – CSRF (Cross Site Request Forgery)

Page 33: Tratando as vulnerabilidades do Top 10 com php

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

Page 34: Tratando as vulnerabilidades do Top 10 com php

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

Page 35: Tratando as vulnerabilidades do Top 10 com php

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ção

Ambientes afetados:Todos os ambientes web

Page 36: Tratando as vulnerabilidades do Top 10 com php

Tratando em php

EviteQue funções críticas na aplicação sejam

feitas sem a necessidade de re-autenticação

Não use apenas $_REQUEST[‘input‘]

Utilize Corretamente $_COOKIE, $_GET e $_POST Token em todas as requisições

Page 37: Tratando as vulnerabilidades do Top 10 com php

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 vulnerabilidades do Top 10 do OWASP

6 – Vazamento de Informações

Page 38: Tratando as vulnerabilidades do Top 10 com php

6 - Vazamento de Informações

Nome completo:Vazamento de informações e tratamento de

erros inapropriado

A própria aplicação informa ao atacante:ConfiguraçõesArquitetura internaPlataformasDados sigilosos

Page 39: Tratando as vulnerabilidades do Top 10 com php

Vazamento de Informações

Formas de vazamento:Tempo de respostaRespostas diferentes para diferentes

entradas Página de erro com códigos diferentes

Páginas de erros com informações de debug Stack trace na página de erro

Ambientes afetados:Todos

Page 40: Tratando as vulnerabilidades do Top 10 com php

Tratando em php

Cuidado com informações sobre o ambientePhpinfo()Server-Status

Configure no php.ini log_errors = On display_errors = Off

Page 41: Tratando as vulnerabilidades do Top 10 com php

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 vulnerabilidades do Top 10 do OWASP

7 – Furo de Autenticação

Page 42: Tratando as vulnerabilidades do Top 10 com php

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

Page 43: Tratando as vulnerabilidades do Top 10 com php

Furo de Autenticação

Conseqüências:Roubos de contasSeqüestro de sessãoViolações de privacidadeAcessos não autorizadosPersonificação de usuários (impersonation)

Page 44: Tratando as vulnerabilidades do Top 10 com php

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)

Page 45: Tratando as vulnerabilidades do Top 10 com php

Números aleatórios

Cuidado com as funções geradoras de números aleatórios rand(), 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

Page 46: Tratando as vulnerabilidades do Top 10 com php

Tratando em php

Utilize outros algoritmos de hash

Page 47: Tratando as vulnerabilidades do Top 10 com php

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 vulnerabilidades do Top 10 do OWASP

8 – Armazenamento Criptográfico

Page 48: Tratando as vulnerabilidades do Top 10 com php

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

Page 49: Tratando as vulnerabilidades do Top 10 com php

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

Page 50: Tratando as vulnerabilidades do Top 10 com php

Tratando em php

UseMcrypt com algoritmos conhecidos de

criptografia

Cuidados Implementação do algoritmoArmazenamento da chaveCifra de César e XOR não funcionam

Page 51: Tratando as vulnerabilidades do Top 10 com php

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 vulnerabilidades do Top 10 do OWASP

9 – Comunicação Insegura

Page 52: Tratando as vulnerabilidades do Top 10 com php

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

Page 53: Tratando as vulnerabilidades do Top 10 com php

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 vulnerabilidades do Top 10 do OWASP

10 – Restrições de Acesso a URL

Page 54: Tratando as vulnerabilidades do Top 10 com php

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

Page 55: Tratando as vulnerabilidades do Top 10 com php

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

Page 56: Tratando as vulnerabilidades do Top 10 com php

Tratando em php

Controle de acessoEstabeleça um bom controle de acesso as

informações da aplicação

Hardening de sessãoA sessão é responsável por manter o

estado das conexões, garanta que as sessões terão segurança adequada

Page 57: Tratando as vulnerabilidades do Top 10 com php

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 vulnerabilidades do Top 10 do OWASP

Encerrando

Page 58: Tratando as vulnerabilidades do Top 10 com php

Fiquem de olho

Port do projeto ESAPI para phpBiblioteca completa para tratar as

vulnerabilidades do Top 10

AppSec Latin America 2009Conferência que será realizada no Brasil e

irá unir especialistas do mundo todo para tratar de segurança em aplicações WEB

Page 59: Tratando as vulnerabilidades do Top 10 com php

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/

Page 60: Tratando as vulnerabilidades do Top 10 com php

Perguntas

Obrigado