São Paulo 7 de Julho de 2012“Segurança em Sistemas PHP”             Erick Tedeschi             @ericktedeschi
Tópicos• Get the facts!!!• Login    – Armazenamento de Senhas    – User Enumeration    – Brute Force    – HTTPS• Hardening...
Password Leaks• http://www.lastfm.com.br/passwordsecurity• http://www.cbc.ca/news/technology/story/2012/06/08/tech-lastfm-...
Password Leaks• http://blog.linkedin.com/2012/06/06/linkedin-member-passwords-compromised/• http://techcrunch.com/2012/06/...
Afinal como as senhas são       armazenadas?
Clear Text – Top PasswordsSeq    |   Senha        |   Qtd       |   Seq     |   Senha       |   Qtd         |   1   |   12...
Clear Text -> NuncaSeq    |   Senha        |   Qtd       |   Seq     |   Senha       |   Qtd         |   1   |   123456   ...
Afinal como as senhas são         armazenadas?Já Sei!!! Utilizando um algoritmo de hash (md5/sha1/etc). Dessa forma a senh...
Senhas vazadas em hash
Senhas vazadas em hash:  Como reverter para clear text?Considerando que pelo menos 85% das senhas tem nomáximo 8 caractere...
Rainbow TablesFonte: http://ophcrack.sourceforge.net/tables.php
Utilizando ferramenta online  Para reverter os hashes                       Vamos quebrar                         Todos os...
Fazendo a coisa certa!Mas  Como gravar ‘corretamente’ uma senha de acordo  com as recomendações do OWASP: Regra 1 – Utiliz...
Gravando no Bando de DadosObs.: Para fins de entendimento o $globalSalt está no código. Normalmente ele deve              ...
Fazendo Login (comparação)  Ex.: Método authenticate do Zend_Auth_Adapter_Interface
Benchmark da geração de hashesmysql> select benchmark(10000000, md5(rand()));+----------------------------------+| benchma...
User Enumeration
User Enumeration     Independente se o usuário existe ou não na tabela, a     mensagem de erro deve ser igual para ambos o...
Brute Force (Login)     Possibilita o atacante tentar se logar na aplicação     exaustivamente utilizando um dicionário de...
Brute Force (Login)Exemplo de Brute Force utilizando o MetasploitModulo: auxiliary/scanner/http/wordpress_login_enumhttps:...
Controle para Brute Force   - Pode-se persistir um status do usuário (ativo / bloqueado) e   setar um número máximo de ten...
Controle para Brute ForcePlugin de WordPress para proteção contra Brute Forcehttp://wordpress.org/extend/plugins/user-secu...
HTTPSExemplo de configuração de Virtual Host com HTTPSTutorial exemplo: http://onlamp.com/onlamp/2008/03/04/step-by-step-c...
Hardening PHPHardening é um processo de mapeamento dasameaças, mitigação dos riscos e execução dasatividades corretivas, c...
Hardening PHPDicas para deixar o php.ini mais seguro em produçãoEvite que outros saibam a versão do PHP que vocêestá utili...
Hardening PHPLogar todos os erros em arquivo no servidor edesabilitar a visualização de erros por clientes.display_errors ...
Hardening PHPDesabilitar upload de arquivos caso a aplicação nãoutilize esse recurso. Caso sim limitar o tamnho doarquivo....
Hardening PHP   Desabilitar funções maliciosasdisable_functions=exec,passthru,shell_exec,system,proc_open,popen,show_source
Hardening PHP   Limitar o acesso da aplicação ao file system do   servidor:open_basedir = “/usr/share/php/PEAR:/var/www/”
Hardening PHPExemplo de restrição com open_basedir
Guia de teste de segurança para aplicação web:https://www.owasp.org/images/5/56/OWASP_Testing_Guide_v3.pdfGuia de Desenvol...
Ferramentas para Pentest e              Auditoria- Metasploit Frameworkwww.metasploit.com- W3af – Web Application Attack a...
Perguntas?Erick Tedeschihttp://oerick.comE-mail/Gtalk: erick@oerick.comTwitter: @ericktedeschi
Obrigado
Upcoming SlideShare
Loading in...5
×

TDC 2012 - PHP

19,744

Published on

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

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
19,744
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
12
Comments
0
Likes
2
Embeds 0
No embeds

No notes for 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×