Tratando as vulnerabilidades do Top 10 com php

7,565 views
7,421 views

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,565
On SlideShare
0
From Embeds
0
Number of Embeds
166
Actions
Shares
0
Downloads
276
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Tratando as vulnerabilidades do Top 10 com php

  1. 1. 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
  2. 2. Agenda <ul><li>Um pouco de OWASP </li></ul><ul><li>Top 10 2007 </li></ul><ul><ul><li>1 – XSS (Cross Site Scripting) </li></ul></ul><ul><ul><li>2 – Falhas de Injeção </li></ul></ul><ul><ul><li>3 – Execução Maliciosa de Arquivos </li></ul></ul><ul><ul><li>4 – Referência Direta a Objetos </li></ul></ul><ul><ul><li>5 – CSRF (Cross Site Request Forgery) </li></ul></ul><ul><ul><li>6 – Vazamento de Informações </li></ul></ul><ul><ul><li>7 – Furo de Autenticação </li></ul></ul><ul><ul><li>8 – Armazenamento Criptográfico </li></ul></ul><ul><ul><li>9 – Comunicação Insegura </li></ul></ul><ul><ul><li>10 – Restrição de Acesso a URL </li></ul></ul><ul><li>Encerramento </li></ul>
  3. 3. O que é OWASP? <ul><li>Open Web Application Security Project </li></ul><ul><li>Educar e conscientizar segurança para desenvolvedores, designers, arquitetos e organizações. </li></ul>
  4. 4. Como funciona? <ul><li>Documentação </li></ul><ul><ul><li>Wiki e Books </li></ul></ul><ul><ul><ul><li>Code Review, Testing Guide, Building, Top Ten, … </li></ul></ul></ul><ul><li>Code Projects </li></ul><ul><ul><li>Projetos ferramentas ofensivas/defensivas </li></ul></ul><ul><ul><li>Processos, procedimentos … </li></ul></ul><ul><ul><li>Educação e outros </li></ul></ul><ul><li>Chapters (Capítulos) </li></ul><ul><ul><li>Grupo de usuários </li></ul></ul><ul><ul><li>+100 e crescendo </li></ul></ul><ul><li>Conferências </li></ul><ul><ul><li>Grandes e pequenos eventos ao redor do mundo </li></ul></ul>
  5. 5. Brazilian Chapter (OWASP-BR) <ul><li>Positive Security Project </li></ul><ul><ul><li>Melhorar a postura das empresas em relação a segurança em aplicações </li></ul></ul><ul><li>Application Security Desk Reference Project (ASDR) </li></ul><ul><ul><li>Guia de referência sobre segurança em aplicações web </li></ul></ul><ul><ul><li>Princípios, agentes de ameça, controles, vulnerabilidades e ataques, impactos de negócio e técnicos </li></ul></ul><ul><li>Traduções </li></ul><ul><ul><li>WebGoat </li></ul></ul><ul><ul><li>Top Ten Project </li></ul></ul><ul><li>Lista de discussão ativa, participe! </li></ul><ul><ul><li>http://lists.owasp.org/mailman/listinfo/owasp-brazilian </li></ul></ul><ul><li>Acompanhe e colabore com o wiki do capítulo </li></ul><ul><ul><li>http://www.owasp.org/index.php/Brazilian </li></ul></ul>
  6. 6. Patrocinadores / Membros
  7. 7. Quem contribui?
  8. 8. Tratando as vulnerabilidades do Top 10 do OWASP Top 10 2007
  9. 9. O que é? <ul><li>Estudo da OWASP que busca identificar e classificar as 10 principais vulnerabilidades encontradas em ambientes WEB </li></ul><ul><li>Traduzido para vários idiomas e atualizado regularmente </li></ul><ul><ul><ul><li>Pt-Br:http://www.owasp.org/images/4/42/OWASP_TOP_10_2007_PT-BR.pdf </li></ul></ul></ul>
  10. 10. Tratando as vulnerabilidades do Top 10 do OWASP 1 – XSS (Cross Site Scripting)
  11. 11. 1 - Cross Site Scripting (XSS) <ul><li>Permite que um atacante insira um script na página que será mostrada à vítima. </li></ul><ul><li>Afeta qualquer ambiente web </li></ul><ul><li>Efeitos: </li></ul><ul><ul><li>Seqüestro de sessão </li></ul></ul><ul><ul><li>Inserção de código ou conteúdo hostil </li></ul></ul><ul><ul><li>Roubo de informações </li></ul></ul><ul><ul><li>Controle do navegador da vítima </li></ul></ul>
  12. 12. Tipos de Cross Site Scripting <ul><li>Refletido </li></ul><ul><ul><li>Quando o site reflete para o usuário todo ou parte do conteúdo da requisição </li></ul></ul><ul><li>Armazenado </li></ul><ul><ul><li>O script é armazenado em base de dados e é mostrado às vítimas posteriormente </li></ul></ul><ul><li>Inserção DOM </li></ul><ul><ul><li>Os scripts da página são alterados </li></ul></ul>
  13. 13. Tratando em php <ul><li>Sanitize os dados usando </li></ul><ul><ul><li>htmlentities() ou htmlspecialchars() </li></ul></ul>
  14. 14. Tratando as vulnerabilidades do Top 10 do OWASP 2 – Falha de Injeção
  15. 15. 2 - Falhas de Injeção <ul><li>Várias linguagens envolvidas: </li></ul><ul><ul><li>SQL </li></ul></ul><ul><ul><li>LDAP </li></ul></ul><ul><ul><li>HTML </li></ul></ul><ul><ul><li>XSLT </li></ul></ul><ul><ul><li>XML </li></ul></ul><ul><ul><li>Comandos de interpretadores do sistema operacional (cmd, shell, etc) </li></ul></ul>
  16. 16. Falhas de Injeção <ul><li>Como acontecem: </li></ul><ul><ul><li>Dados fornecidos por usuários são usados como parte de comandos ou consultas </li></ul></ul><ul><ul><li>Dados são manipulados para alterar os comandos enviados ao interpretador </li></ul></ul><ul><ul><li>Atacante pode se utilizar das permissões da aplicação para ler e/ou alterar dados </li></ul></ul><ul><ul><li>Pode permitir execução de programas </li></ul></ul>
  17. 17. Falhas de Injeção <ul><li>Ambientes afetados: </li></ul><ul><ul><li>Quaisquer ambientes que utilizem interpretadores </li></ul></ul><ul><ul><li>Muito comum no acesso a bases de dados </li></ul></ul><ul><ul><ul><li>SQL Injection </li></ul></ul></ul>
  18. 18. Dicas <ul><li>Valide sempre </li></ul><ul><ul><li>Expressões regulares são sempre uma boa </li></ul></ul><ul><li>Adote camada de abstração de dados </li></ul><ul><ul><li>Bibliotecas de ORM são bastante eficazes para evitar falhas de SQL Injection. Exemplo ADOdb, PDO. </li></ul></ul><ul><li>Use procedimentos armazenados </li></ul><ul><ul><li>Prepared Statements (Bind Variables) </li></ul></ul><ul><li>Evite usar a chamada padrão de query do MySQL ( mysqli_multi_query()) use </li></ul><ul><ul><li>mysqli_query() </li></ul></ul><ul><li>Não confie </li></ul><ul><ul><li>No usuário e no magic_quotes /addslashes()  </li></ul></ul>
  19. 19. Tratando em php <ul><li>Sanitize os dados usando </li></ul><ul><ul><li>escapeshellcmd() </li></ul></ul>
  20. 20. Tratando em php <ul><li>Evite, mas se precisar interagir com shell use </li></ul><ul><ul><li>escapeshellarg() </li></ul></ul>
  21. 21. Tratando em php <ul><li>Referenciando path de forma segura, evitando path traversal </li></ul><ul><ul><li>realpath() </li></ul></ul>
  22. 22. Tratando em php <ul><ul><li>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  </li></ul></ul>
  23. 23. Tratando as vulnerabilidades do Top 10 do OWASP 3 – Execução Maliciosa de Arquivos
  24. 24. 3 - Execução Maliciosa de Arquivo <ul><li>Execução de conteúdo externo ao código da aplicação </li></ul><ul><li>Permite realizar </li></ul><ul><ul><li>Execução remota de código </li></ul></ul><ul><ul><li>Instalação de rootkits </li></ul></ul>
  25. 25. Execução Maliciosa de Arquivo <ul><li>Ambientes afetados: </li></ul><ul><ul><li>Sistemas que aceitam nomes de arquivos </li></ul></ul><ul><ul><li>Sistemas que recebem arquivos </li></ul></ul><ul><ul><li>Ambientes interpretados </li></ul></ul>
  26. 26. Tratando em php <ul><li>Desabilite estas funções que são habilitadas por default </li></ul><ul><ul><li>allow_url_fopen e allow_url_include </li></ul></ul><ul><li>Cuidado com as funções </li></ul><ul><ul><li>eval() </li></ul></ul><ul><ul><li>passthru() </li></ul></ul><ul><ul><li>Streams (stream_*) </li></ul></ul>
  27. 27. Tratando as vulnerabilidades do Top 10 do OWASP 4 – Referência Direta a Objetos
  28. 28. 4 - Referência Direta a Objeto <ul><li>Ocorre quando a aplicação expõe referência direta a objeto interno </li></ul><ul><ul><li>Arquivo </li></ul></ul><ul><ul><li>Diretório </li></ul></ul><ul><ul><li>Registro de base de dados </li></ul></ul><ul><ul><li>URL </li></ul></ul><ul><ul><li>Parâmetro </li></ul></ul>
  29. 29. Referência Direta a Objeto <ul><li>Permite ao atacante manipular a referência e burlar controles de acesso </li></ul><ul><li>Exemplo: </li></ul><ul><ul><li>Aplicação utiliza CPF na URL para identificar usuário </li></ul></ul><ul><ul><li>Atacante manipula a URL e altera o CPF </li></ul></ul><ul><ul><li>Atacante acessa dados de outros CPFs </li></ul></ul>
  30. 30. Referência Direta a Objeto <ul><li>Ambientes afetados: </li></ul><ul><ul><li>Qualquer ambiente web </li></ul></ul><ul><li>Solução </li></ul><ul><ul><li>Usar sessões </li></ul></ul><ul><ul><li>Armazenar identificadores internos na sessão do usuário </li></ul></ul><ul><ul><li>Usar identificadores de sessão aleatórios (token) </li></ul></ul>
  31. 31. Tratando em php <ul><li>O recurso de _autoload é uma boa opção </li></ul>
  32. 32. Tratando as vulnerabilidades do Top 10 do OWASP 5 – CSRF (Cross Site Request Forgery)
  33. 33. 5 - Cross Site Request Forgery (CSRF) <ul><li>Usar sessão já aberta pelo usuário para enviar comandos para a aplicação </li></ul><ul><ul><li>Usuário loga na aplicação alvo </li></ul></ul><ul><ul><li>Usuário acessa site do atacante </li></ul></ul><ul><ul><li>Scripts do atacante usam a sessão da aplicação alvo </li></ul></ul><ul><ul><ul><li>Enviam comandos em nome do usuário na sessão já aberta </li></ul></ul></ul>
  34. 34. Cross Site Request Forgery <ul><li>Quando ocorre: </li></ul><ul><ul><li>Não há verificação de autorização </li></ul></ul><ul><ul><li>Ação é executada quando credenciais são enviadas na URL </li></ul></ul><ul><ul><li>As credenciais são submetidas automaticamente </li></ul></ul><ul><ul><ul><li>Cookies </li></ul></ul></ul>
  35. 35. Cross Site Request Forgery <ul><li>A maioria das aplicações atuais estão vulneráveis </li></ul><ul><ul><li>Aplicações de Internet Banking pedem a senha para operações de atualização </li></ul></ul><ul><li>Ambientes afetados: </li></ul><ul><ul><li>Todos os ambientes web </li></ul></ul>
  36. 36. Tratando em php <ul><li>Evite </li></ul><ul><ul><li>Que funções críticas na aplicação sejam feitas sem a necessidade de re-autenticação </li></ul></ul><ul><ul><li>Não use apenas $_REQUEST[‘input‘] </li></ul></ul><ul><li>Utilize </li></ul><ul><ul><li>Corretamente $_COOKIE, $_GET e $_POST </li></ul></ul><ul><ul><li>Token em todas as requisições </li></ul></ul>
  37. 37. Tratando as vulnerabilidades do Top 10 do OWASP 6 – Vazamento de Informações
  38. 38. 6 - Vazamento de Informações <ul><li>Nome completo: </li></ul><ul><ul><li>Vazamento de informações e tratamento de erros inapropriado </li></ul></ul><ul><li>A própria aplicação informa ao atacante: </li></ul><ul><ul><li>Configurações </li></ul></ul><ul><ul><li>Arquitetura interna </li></ul></ul><ul><ul><li>Plataformas </li></ul></ul><ul><ul><li>Dados sigilosos </li></ul></ul>
  39. 39. Vazamento de Informações <ul><li>Formas de vazamento: </li></ul><ul><ul><li>Tempo de resposta </li></ul></ul><ul><ul><li>Respostas diferentes para diferentes entradas </li></ul></ul><ul><ul><ul><li>Página de erro com códigos diferentes </li></ul></ul></ul><ul><ul><li>Páginas de erros com informações de debug </li></ul></ul><ul><ul><ul><li>Stack trace na página de erro </li></ul></ul></ul><ul><li>Ambientes afetados: </li></ul><ul><ul><li>Todos </li></ul></ul>
  40. 40. Tratando em php <ul><li>Cuidado com informações sobre o ambiente </li></ul><ul><ul><li>Phpinfo() </li></ul></ul><ul><ul><li>Server-Status </li></ul></ul><ul><li>Configure no php.ini </li></ul><ul><ul><li>log_errors = On </li></ul></ul><ul><ul><li>display_errors = Off </li></ul></ul>
  41. 41. Tratando as vulnerabilidades do Top 10 do OWASP 7 – Furo de Autenticação
  42. 42. 7 - Furo de Autenticação <ul><li>Nome completo: </li></ul><ul><ul><li>Furo de autenticação e gerência de sessão </li></ul></ul><ul><li>Problemas mais comuns: </li></ul><ul><ul><li>Falhas de proteção de credenciais </li></ul></ul><ul><ul><li>Falha de proteção de identificadores de sessão </li></ul></ul><ul><li>Ambientes afetados: </li></ul><ul><ul><li>Todos os ambientes </li></ul></ul>
  43. 43. Furo de Autenticação <ul><li>Conseqüências: </li></ul><ul><ul><li>Roubos de contas </li></ul></ul><ul><ul><li>Seqüestro de sessão </li></ul></ul><ul><ul><li>Violações de privacidade </li></ul></ul><ul><ul><li>Acessos não autorizados </li></ul></ul><ul><ul><li>Personificação de usuários ( impersonation ) </li></ul></ul>
  44. 44. Dicas <ul><li>Nunca faça </li></ul><ul><ul><li>Armazenamento de senhas. Nem mesmo criptografadas </li></ul></ul><ul><ul><li>Não use mais md5 e sha-1 </li></ul></ul><ul><li>Faça </li></ul><ul><ul><li>Armazene apenas o hash + salt das senhas </li></ul></ul><ul><ul><li>Fortaleça as configurações de sessão </li></ul></ul><ul><ul><ul><li>session.save_path = [diretório protegido] </li></ul></ul></ul><ul><ul><ul><li>session.cookie_httponly = 1 (acesso apenas por HTTP) </li></ul></ul></ul><ul><ul><ul><li>session.cookie_secure = 1 (força o uso de HTTPS) </li></ul></ul></ul>
  45. 45. Números aleatórios <ul><li>Cuidado com as funções geradoras de números aleatórios </li></ul><ul><ul><li>rand(), srand(), mt_rand(), mt_srand() </li></ul></ul><ul><ul><li>Uma falha na implementação destas funções causou inúmeras falhas em sistemas de autenticação em projetos open source </li></ul></ul>
  46. 46. Tratando em php <ul><li>Utilize outros algoritmos de hash </li></ul>
  47. 47. Tratando as vulnerabilidades do Top 10 do OWASP 8 – Armazenamento Criptográfico
  48. 48. 8 - Armazenamento Criptográfico <ul><li>Nome Completo: </li></ul><ul><ul><li>Armazenamento Criptográfico Inseguro </li></ul></ul><ul><li>Aplicações tem dados sensíveis </li></ul><ul><ul><li>Algumas não criptografam </li></ul></ul><ul><ul><li>Outras criptografam de forma insegura </li></ul></ul><ul><ul><ul><li>Algoritmos mal concebidos </li></ul></ul></ul><ul><ul><ul><li>Mecanismos inapropriados </li></ul></ul></ul><ul><ul><ul><li>Erros no uso de criptografia </li></ul></ul></ul><ul><ul><ul><ul><li>Mesmo com algoritmos adequados </li></ul></ul></ul></ul>
  49. 49. Armazenamento Criptográfico <ul><li>Ambientes afetados </li></ul><ul><ul><li>Todos </li></ul></ul><ul><li>Problemas mais comuns: </li></ul><ul><ul><li>Não criptografar dados sensíveis </li></ul></ul><ul><ul><li>Uso inseguro de algoritmos fortes </li></ul></ul><ul><ul><ul><li>Chaves fracas </li></ul></ul></ul><ul><ul><li>Uso de algoritmos caseiros ou de algoritmos fracos </li></ul></ul><ul><ul><li>Armazenar chaves em sistemas de armazenamento desprotegidos </li></ul></ul>
  50. 50. Tratando em php <ul><li>Use </li></ul><ul><ul><li>Mcrypt com algoritmos conhecidos de criptografia </li></ul></ul><ul><li>Cuidados </li></ul><ul><ul><li>Implementação do algoritmo </li></ul></ul><ul><ul><li>Armazenamento da chave </li></ul></ul><ul><ul><li>Cifra de César e XOR não funcionam </li></ul></ul>
  51. 51. Tratando as vulnerabilidades do Top 10 do OWASP 9 – Comunicação Insegura
  52. 52. 9 - Comunicações inseguras <ul><li>Todo o tráfego autenticado da aplicação deve ser criptografado </li></ul><ul><ul><li>Usar SSL ou equivalente: </li></ul></ul><ul><ul><ul><li>Entre aplicação e cliente </li></ul></ul></ul><ul><ul><ul><li>Entre aplicação e back-end (base de dados) </li></ul></ul></ul><ul><li>Sempre autenticar (ou re-autenticar) antes de transmitir dados sigilosos </li></ul><ul><li>Ambientes afetados: </li></ul><ul><ul><li>todos </li></ul></ul>
  53. 53. Tratando as vulnerabilidades do Top 10 do OWASP 10 – Restrições de Acesso a URL
  54. 54. 10 - Restrições de acesso a URLs <ul><li>Nome completo: </li></ul><ul><ul><li>Falha ao restringir acesso a URLs </li></ul></ul><ul><li>Aplicações tem páginas internas </li></ul><ul><ul><li>Estas páginas só devem ser acessadas: </li></ul></ul><ul><ul><ul><li>Por usuários autenticados ou </li></ul></ul></ul><ul><ul><ul><li>Após determinada operação </li></ul></ul></ul><ul><li>O acesso a páginas internas deve ser controlado corretamente </li></ul>
  55. 55. Restrições de acesso a URLs <ul><li>Ambientes Afetados: </li></ul><ul><ul><li>Todos </li></ul></ul><ul><li>Problemas: </li></ul><ul><ul><li>Navegação forçada: </li></ul></ul><ul><ul><ul><li>Adivinhação de URLs </li></ul></ul></ul><ul><ul><ul><li>Força bruta </li></ul></ul></ul><ul><li>Ocorre porque a página não verifica se usuário deveria acessar </li></ul>
  56. 56. Tratando em php <ul><li>Controle de acesso </li></ul><ul><ul><li>Estabeleça um bom controle de acesso as informações da aplicação </li></ul></ul><ul><li>Hardening de sessão </li></ul><ul><ul><li>A sessão é responsável por manter o estado das conexões, garanta que as sessões terão segurança adequada </li></ul></ul>
  57. 57. Tratando as vulnerabilidades do Top 10 do OWASP Encerrando
  58. 58. Fiquem de olho <ul><li>Port do projeto ESAPI para php </li></ul><ul><ul><li>Biblioteca completa para tratar as vulnerabilidades do Top 10 </li></ul></ul><ul><li>AppSec Latin America 2009 </li></ul><ul><ul><li>Conferência que será realizada no Brasil e irá unir especialistas do mundo todo para tratar de segurança em aplicações WEB </li></ul></ul>
  59. 59. REFERÊNCIAS <ul><li>http://www.owasp.org </li></ul><ul><ul><li>Code Review Guide </li></ul></ul><ul><ul><ul><li>www.owasp.org/index.php/Category:OWASP_Code_Review_Project </li></ul></ul></ul><ul><ul><li>Development Guide </li></ul></ul><ul><ul><ul><li>www.owasp.com.br/index.php/Category:OWASP_Guide_Project </li></ul></ul></ul><ul><ul><li>Testing Guide </li></ul></ul><ul><ul><ul><li>www.owasp.com.br/index.php/Category:OWASP_Testing_Project </li></ul></ul></ul><ul><ul><li>Application Security Desk Reference </li></ul></ul><ul><ul><ul><li>www.owasp.com.br/index.php/Category:OWASP_ASDR_Project </li></ul></ul></ul><ul><ul><li>Top Ten Project </li></ul></ul><ul><ul><ul><li>www.owasp.com.br/index.php/Category:OWASP_Top_Ten_Project </li></ul></ul></ul><ul><li>http://br.php.net/manual/ </li></ul>
  60. 60. Perguntas <ul><ul><ul><li>Obrigado </li></ul></ul></ul>

×