TDC 2012 - PHP

  • View
    19.692

  • Download
    2

Embed Size (px)

DESCRIPTION

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

Text of TDC 2012 - PHP

  • 1. So Paulo 7 de Julho de 2012Segurana em Sistemas PHP Erick Tedeschi @ericktedeschi

2. Tpicos 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. Password Leaks http://www.lastfm.com.br/passwordsecurity http://www.cbc.ca/news/technology/story/2012/06/08/tech-lastfm-passwords-leak.html 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. Afinal como as senhas so armazenadas? 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. 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. Afinal como as senhas so armazenadas?J Sei!!! Utilizando um algoritmo de hash (md5/sha1/etc). Dessa forma a senha criptografada e no pode voltar a suaforma original. 9. Senhas vazadas em hash 10. Senhas vazadas em hash:Como reverter para clear text?Considerando que pelo menos 85% das senhas tem nomximo 8 caracteres, pode-se gerar todas ascombinaes de hashes de 8 caracteres por exemplo!Ento ns comparamos o hash vazado com a tabela dehashes gerados!SELECT senha_clear FROM hashes WHERE hash =b6dd81aba52f079571e6659c7271a8c3bb9af1f3;Can you reverse this hash?! 11. Rainbow TablesFonte: http://ophcrack.sourceforge.net/tables.php 12. Utilizando ferramenta onlinePara reverter os hashes Vamos quebrar Todos oshashes 13. Fazendo a coisa certa!MasComo gravar corretamente uma senha de acordocom as recomendaes do OWASP: Regra 1 Utilize um algoritmo de hash moderno Regra 2 Criar um salt nico para cada usurio Regra 3 Iterar o hash (64k vezes!)Fonte: https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet 14. Gravando no Bando de DadosObs.: Para fins de entendimento o $globalSalt est no cdigo. Normalmente ele deve ficar em um arquivo de configurao de difcil acesso. 15. Fazendo Login (comparao)Ex.: Mtodo authenticate do Zend_Auth_Adapter_Interface 16. Benchmark da gerao 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. User Enumeration 18. User Enumeration Independente se o usurio existe ou no 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. Brute Force (Login) Possibilita o atacante tentar se logar na aplicao exaustivamente utilizando um dicionrio de usurios e senhas. A mensagem de erro fornecida pela aplicao pode ajudar na automatizao do ataque. Pois quando a credencial for vlida, a mensagem Usurio e/ou senha invlidos no ir mais aparecer por exemplo.https://www.owasp.org/index.php/Testing_for_Brute_Force_%28OWASP-AT-004%29 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. Controle para Brute Force - Pode-se persistir um status do usurio (ativo / bloqueado) e setar um nmero mximo de tentativas de login. - Somente o admin pode desbloquearo usurio.https://www.owasp.org/index.php/Testing_for_Brute_Force_%28OWASP-AT-004%29 22. Controle para Brute ForcePlugin de WordPress para proteo contra Brute Forcehttp://wordpress.org/extend/plugins/user-security-tools/ 23. HTTPSExemplo de configurao de Virtual Host com HTTPSTutorial exemplo: http://onlamp.com/onlamp/2008/03/04/step-by-step-configuring-ssl-under-apache.html 24. Hardening PHPHardening um processo de mapeamento dasameaas, mitigao dos riscos e execuo 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. Hardening PHPDicas para deixar o php.ini mais seguro em produoEvite que outros saibam a verso do PHP que vocest utilizando:expose_php = Off 26. Hardening PHPLogar todos os erros em arquivo no servidor edesabilitar a visualizao de erros por clientes.display_errors = Offlog_errors = Onerror_log = /var/log/php/error.log 27. Hardening PHPDesabilitar upload de arquivos caso a aplicao noutilize esse recurso. Caso sim limitar o tamnho doarquivo.file_uploads = Off# ou se utilizarfile_uploads = Offupload_max_filesize = 1M 28. Hardening PHP Desabilitar funes maliciosasdisable_functions=exec,passthru,shell_exec,system,proc_open,popen,show_source 29. Hardening PHP Limitar o acesso da aplicao ao file system do servidor:open_basedir = /usr/share/php/PEAR:/var/www/ 30. Hardening PHPExemplo de restrio com open_basedir 31. Guia de teste de segurana para aplicao web:https://www.owasp.org/images/5/56/OWASP_Testing_Guide_v3.pdfGuia de Desenvolvimento Seguro (em construo):http://code.google.com/p/owasp-development-guide/wiki/Introduction 32. Ferramentas para Pentest eAuditoria- 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 Interceptaohttp://portswigger.net/burp/ 33. Perguntas?Erick Tedeschihttp://oerick.comE-mail/Gtalk: erick@oerick.comTwitter: @ericktedeschi 34. Obrigado