TDC 2012 - PHP

20.271 visualizações

Publicada em

Recomendações de como armazenar corretamente senhas no banco de dados.
E deixa

0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
20.271
No SlideShare
0
A partir de incorporações
0
Número de incorporações
12
Ações
Compartilhamentos
0
Downloads
18
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

TDC 2012 - PHP

  1. 1. São Paulo 7 de Julho de 2012“Segurança em Sistemas PHP” Erick Tedeschi @ericktedeschi
  2. 2. Tópicos• Get the facts!!!• Login – Armazenamento de Senhas – User Enumeration – Brute Force – HTTPS• Hardening PHP• Security ToolsUtilizar os conhecimentos aqui passados somente para fins academicos.
  3. 3. Password Leaks• http://www.lastfm.com.br/passwordsecurity• http://www.cbc.ca/news/technology/story/2012/06/08/tech-lastfm-passwords- leak.html
  4. 4. Password Leaks• http://blog.linkedin.com/2012/06/06/linkedin-member-passwords-compromised/• http://techcrunch.com/2012/06/06/6-5-million-linkedin-passwords-reportedly-leaked- linkedin-is-looking-into-it/
  5. 5. Afinal como as senhas são armazenadas?
  6. 6. Clear Text – Top PasswordsSeq | Senha | Qtd | Seq | Senha | Qtd | 1 | 123456 | 8746 | 26 | juliana | 420 | 2 | 1234 | 2262 | 27 | LILICA | 418 | 3 | 102030 | 1782 | 28 | vitoria | 415 | 4 | 12345 | 1020 | 29 | matheus | 412 | 5 | 010203 | 750 | 30 | junior | 407 | 6 | gabriel | 697 | 31 | 654321 | 402 | 7 | felipe | 596 | 32 | 123 | 399 | 8 | sucesso | 582 | 33 | renata | 391 | 9 | 101010 | 571 | 34 | metallica | 390 | 10 | mariana | 561 | 35 | DANIEL | 389 | 11 | flamengo | 559 | 36 | marcelo | 385 | 12 | 123mudar | 529 | 37 | 123456789 | 379 | 13 | estrela | 521 | 38 | amanda | 376 | 14 | 131313 | 494 | 39 | eduardo | 356 | 15 | carolina | 486 | 40 | marina | 355 | 16 | camila | 466 | 41 | 12345678 | 350 | 17 | brasil | 460 | 42 | leonardo | 347 | 18 | rafael | 447 | 43 | gustavo | 345 | 19 | Tricolor | 446 | 44 | leticia | 340 | 20 | rodrigo | 435 | 45 | senha | 320 | 21 | fernanda | 433 | 46 | palmeiras | 313 | 22 | felicidade | 430 | 47 | giovanna | 309 | 23 | beatriz | 425 | 48 | madonna | 303 | 24 | 121212 | 424 | 49 | santos | 299 | 25 | gabriela | 421 | 50 | larissa | 299 |
  7. 7. Clear Text -> NuncaSeq | Senha | Qtd | Seq | Senha | Qtd | 1 | 123456 | 8746 | 26 | juliana | 420 | 2 | 1234 | 2262 | 27 | LILICA | 418 | 3 | 102030 | 1782 | 28 | vitoria | 415 | 4 | 12345 | 1020 | 29 | matheus | 412 | 5 | 010203 | 750 | 30 | junior | 407 | 6 | gabriel | 697 | 31 | 654321 | 402 | 7 | felipe | 596 | 32 | 123 | 399 | 8 | sucesso | 582 | 33 | renata | 391 | 9 | 101010 | 571 | 34 | metallica | 390 | 10 | mariana | 561 | 35 | DANIEL | 389 | 11 | flamengo | 559 | 36 | marcelo | 385 | 12 | 123mudar | 529 | 37 | 123456789 | 379 | 13 | estrela | 521 | 38 | amanda | 376 | 14 | 131313 | 494 | 39 | eduardo | 356 | 15 | carolina | 486 | 40 | marina | 355 | 16 | camila | 466 | 41 | 12345678 | 350 | 17 | brasil | 460 | 42 | leonardo | 347 | 18 | rafael | 447 | 43 | gustavo | 345 | 19 | Tricolor | 446 | 44 | leticia | 340 | 20 | rodrigo | 435 | 45 | senha | 320 | 21 | fernanda | 433 | 46 | palmeiras | 313 | 22 | felicidade | 430 | 47 | giovanna | 309 | 23 | beatriz | 425 | 48 | madonna | 303 | 24 | 121212 | 424 | 49 | santos | 299 | 25 | gabriela | 421 | 50 | larissa | 299 |
  8. 8. Afinal como as senhas são armazenadas?Já Sei!!! Utilizando um algoritmo de hash (md5/sha1/etc). Dessa forma a senha é criptografada e não pode voltar a sua forma original.
  9. 9. Senhas vazadas em hash
  10. 10. Senhas vazadas em hash: Como reverter para clear text?Considerando que pelo menos 85% das senhas tem nomáximo 8 caracteres, pode-se gerar todas ascombinações de hashes de 8 caracteres por exemplo!Então nós comparamos o hash ‘vazado’ com a tabela dehashes gerados!SELECT senha_clear FROM hashes WHERE hash =‘b6dd81aba52f079571e6659c7271a8c3bb9af1f3’;Can you reverse this hash?!
  11. 11. Rainbow TablesFonte: http://ophcrack.sourceforge.net/tables.php
  12. 12. Utilizando ferramenta online Para reverter os hashes Vamos quebrar Todos os hashes
  13. 13. Fazendo a coisa certa!Mas Como gravar ‘corretamente’ uma senha de acordo com as recomendações do OWASP: Regra 1 – Utilize um algoritmo de hash moderno Regra 2 – Criar um ‘salt’ único para cada usuário Regra 3 – Iterar o hash (64k vezes!)Fonte: https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet
  14. 14. Gravando no Bando de DadosObs.: Para fins de entendimento o $globalSalt está no código. Normalmente ele deve ficar em um arquivo de configuração de difícil acesso.
  15. 15. Fazendo Login (comparação) Ex.: Método authenticate do Zend_Auth_Adapter_Interface
  16. 16. Benchmark da geração de hashesmysql> select benchmark(10000000, md5(rand()));+----------------------------------+| benchmark(10000000, md5(rand())) |+----------------------------------+| 0 |+----------------------------------+1 row in set (18.92 sec)mysql> select benchmark(10000000, sha1(rand()));+-----------------------------------+| benchmark(10000000, sha1(rand())) |+-----------------------------------+| 0 |+-----------------------------------+1 row in set (22.34 sec)mysql> select benchmark(10000000, sha2(rand(),512));+---------------------------------------+| benchmark(10000000, sha2(rand(),512)) |+---------------------------------------+| 0 |+---------------------------------------+1 row in set (26.85 sec)
  17. 17. User Enumeration
  18. 18. User Enumeration Independente se o usuário existe ou não na tabela, a mensagem de erro deve ser igual para ambos os casos.https://www.owasp.org/index.php/Testing_for_user_enumeration_%28OWASP-AT-002%29
  19. 19. Brute Force (Login) Possibilita o atacante tentar se logar na aplicação exaustivamente utilizando um dicionário de usuários e senhas. A mensagem de erro fornecida pela aplicação pode ajudar na automatização do ataque. Pois quando a credencial for válida, a mensagem ‘Usuário e/ou senha inválidos’ não irá mais aparecer por exemplo.https://www.owasp.org/index.php/Testing_for_Brute_Force_%28OWASP-AT-004%29
  20. 20. Brute Force (Login)Exemplo de Brute Force utilizando o MetasploitModulo: auxiliary/scanner/http/wordpress_login_enumhttps://www.owasp.org/index.php/Testing_for_Brute_Force_%28OWASP-AT-004%29
  21. 21. Controle para Brute Force - Pode-se persistir um status do usuário (ativo / bloqueado) e setar um número máximo de tentativas de login. - Somente o admin pode ‘desbloquear’o usuário.https://www.owasp.org/index.php/Testing_for_Brute_Force_%28OWASP-AT-004%29
  22. 22. Controle para Brute ForcePlugin de WordPress para proteção contra Brute Forcehttp://wordpress.org/extend/plugins/user-security-tools/
  23. 23. HTTPSExemplo de configuração de Virtual Host com HTTPSTutorial exemplo: http://onlamp.com/onlamp/2008/03/04/step-by-step-configuring-ssl-under-apache.html
  24. 24. Hardening PHPHardening é um processo de mapeamento dasameaças, mitigação dos riscos e execução dasatividades corretivas, com foco na infra-estrutura eobjetivo principal de torná-la preparada paraenfrentar tentativas de ataque.Fonte: http://pt.wikipedia.org/wiki/Hardening
  25. 25. Hardening PHPDicas para deixar o php.ini mais seguro em produçãoEvite que outros saibam a versão do PHP que vocêestá utilizando:expose_php = Off
  26. 26. Hardening PHPLogar todos os erros em arquivo no servidor edesabilitar a visualização de erros por clientes.display_errors = Offlog_errors = Onerror_log = /var/log/php/error.log
  27. 27. Hardening PHPDesabilitar upload de arquivos caso a aplicação nãoutilize esse recurso. Caso sim limitar o tamnho doarquivo.file_uploads = Off# ou se utilizarfile_uploads = Offupload_max_filesize = 1M
  28. 28. Hardening PHP Desabilitar funções maliciosasdisable_functions=exec,passthru,shell_exec,system,proc_open,popen,show_source
  29. 29. Hardening PHP Limitar o acesso da aplicação ao file system do servidor:open_basedir = “/usr/share/php/PEAR:/var/www/”
  30. 30. Hardening PHPExemplo de restrição com open_basedir
  31. 31. Guia de teste de segurança para aplicação web:https://www.owasp.org/images/5/56/OWASP_Testing_Guide_v3.pdfGuia de Desenvolvimento Seguro (em construção):http://code.google.com/p/owasp-development-guide/wiki/Introduction
  32. 32. Ferramentas para Pentest e Auditoria- Metasploit Frameworkwww.metasploit.com- W3af – Web Application Attack and Audit Frameworkhttp://w3af.sourceforge.net- THC Hydra (brute force de senha)http://www.thc.org/thc-hydra- John The Ripper (brute force de senha)http://www.openwall.com/john- BurpSuite – Proxy de Interceptaçãohttp://portswigger.net/burp/
  33. 33. Perguntas?Erick Tedeschihttp://oerick.comE-mail/Gtalk: erick@oerick.comTwitter: @ericktedeschi
  34. 34. Obrigado

×