Download - TDC 2012 - PHP

Transcript
Page 1: TDC 2012 - PHP

“Segurança em Sistemas PHP”

Erick Tedeschi

@ericktedeschi

São Paulo 7 de Julho de 2012

Page 2: TDC 2012 - PHP

Tópicos

• Get the facts!!!

• Login

– Armazenamento de Senhas

– User Enumeration

– Brute Force

– HTTPS

• Hardening PHP

• Security Tools

Utilizar os conhecimentos aqui passados somente para fins academicos.

Page 4: TDC 2012 - PHP

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/

Page 5: TDC 2012 - PHP

Afinal como as senhas são

armazenadas?

Page 6: TDC 2012 - PHP

Clear Text – Top Passwords

Seq | Senha | Qtd |

1 | 123456 | 8746 |

2 | 1234 | 2262 |

3 | 102030 | 1782 |

4 | 12345 | 1020 |

5 | 010203 | 750 |

6 | gabriel | 697 |

7 | felipe | 596 |

8 | sucesso | 582 |

9 | 101010 | 571 |

10 | mariana | 561 |

11 | flamengo | 559 |

12 | 123mudar | 529 |

13 | estrela | 521 |

14 | 131313 | 494 |

15 | carolina | 486 |

16 | camila | 466 |

17 | brasil | 460 |

18 | rafael | 447 |

19 | Tricolor | 446 |

20 | rodrigo | 435 |

21 | fernanda | 433 |

22 | felicidade | 430 |

23 | beatriz | 425 |

24 | 121212 | 424 |

25 | gabriela | 421 |

Seq | Senha | Qtd |

26 | juliana | 420 |

27 | LILICA | 418 |

28 | vitoria | 415 |

29 | matheus | 412 |

30 | junior | 407 |

31 | 654321 | 402 |

32 | 123 | 399 |

33 | renata | 391 |

34 | metallica | 390 |

35 | DANIEL | 389 |

36 | marcelo | 385 |

37 | 123456789 | 379 |

38 | amanda | 376 |

39 | eduardo | 356 |

40 | marina | 355 |

41 | 12345678 | 350 |

42 | leonardo | 347 |

43 | gustavo | 345 |

44 | leticia | 340 |

45 | senha | 320 |

46 | palmeiras | 313 |

47 | giovanna | 309 |

48 | madonna | 303 |

49 | santos | 299 |

50 | larissa | 299 |

Page 7: TDC 2012 - PHP

Clear Text -> Nunca

Seq | Senha | Qtd |

1 | 123456 | 8746 |

2 | 1234 | 2262 |

3 | 102030 | 1782 |

4 | 12345 | 1020 |

5 | 010203 | 750 |

6 | gabriel | 697 |

7 | felipe | 596 |

8 | sucesso | 582 |

9 | 101010 | 571 |

10 | mariana | 561 |

11 | flamengo | 559 |

12 | 123mudar | 529 |

13 | estrela | 521 |

14 | 131313 | 494 |

15 | carolina | 486 |

16 | camila | 466 |

17 | brasil | 460 |

18 | rafael | 447 |

19 | Tricolor | 446 |

20 | rodrigo | 435 |

21 | fernanda | 433 |

22 | felicidade | 430 |

23 | beatriz | 425 |

24 | 121212 | 424 |

25 | gabriela | 421 |

Seq | Senha | Qtd |

26 | juliana | 420 |

27 | LILICA | 418 |

28 | vitoria | 415 |

29 | matheus | 412 |

30 | junior | 407 |

31 | 654321 | 402 |

32 | 123 | 399 |

33 | renata | 391 |

34 | metallica | 390 |

35 | DANIEL | 389 |

36 | marcelo | 385 |

37 | 123456789 | 379 |

38 | amanda | 376 |

39 | eduardo | 356 |

40 | marina | 355 |

41 | 12345678 | 350 |

42 | leonardo | 347 |

43 | gustavo | 345 |

44 | leticia | 340 |

45 | senha | 320 |

46 | palmeiras | 313 |

47 | giovanna | 309 |

48 | madonna | 303 |

49 | santos | 299 |

50 | larissa | 299 |

Page 8: TDC 2012 - PHP

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.

Page 9: TDC 2012 - PHP

Senhas vazadas em hash

Page 10: TDC 2012 - PHP

Senhas vazadas em hash:

Como reverter para clear text?

Considerando que pelo menos 85% das senhas tem no máximo 8 caracteres, pode-se gerar todas as combinações de hashes de 8 caracteres por exemplo!

Então nós comparamos o hash ‘vazado’ com a tabela de hashes gerados!

SELECT senha_clear FROM hashes WHERE hash = ‘b6dd81aba52f079571e6659c7271a8c3bb9af1f3’;Can you reverse this hash?!

Page 11: TDC 2012 - PHP

Rainbow Tables

Fonte: http://ophcrack.sourceforge.net/tables.php

Page 12: TDC 2012 - PHP

Utilizando ferramenta online

Para reverter os hashes

Vamos quebrarTodos os hashes

Page 13: TDC 2012 - PHP

Fazendo a coisa certa!Mas

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!)

Como gravar ‘corretamente’ uma senha de acordo com as recomendações do OWASP:

Fonte: https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet

Page 14: TDC 2012 - PHP

Gravando no Bando de Dados

Obs.: Para fins de entendimento o $globalSalt está no código. Normalmente ele deve ficar em um arquivo de configuração de difícil acesso.

Page 15: TDC 2012 - PHP

Fazendo Login (comparação)

Ex.: Método authenticate do Zend_Auth_Adapter_Interface

Page 16: TDC 2012 - PHP

mysql> 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)

Benchmark da geração de hashes

Page 17: TDC 2012 - PHP

User Enumeration

Page 18: TDC 2012 - PHP

User Enumeration

https://www.owasp.org/index.php/Testing_for_user_enumeration_%28OWASP-AT-002%29

Independente se o usuário existe ou não na tabela, a mensagem de erro deve ser igual para ambos os casos.

Page 19: TDC 2012 - PHP

Brute Force (Login)

https://www.owasp.org/index.php/Testing_for_Brute_Force_%28OWASP-AT-004%29

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.

Page 20: TDC 2012 - PHP

Brute Force (Login)

https://www.owasp.org/index.php/Testing_for_Brute_Force_%28OWASP-AT-004%29

Exemplo de Brute Force utilizando o MetasploitModulo: auxiliary/scanner/http/wordpress_login_enum

Page 21: TDC 2012 - PHP

Controle para Brute Force

https://www.owasp.org/index.php/Testing_for_Brute_Force_%28OWASP-AT-004%29

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

Page 22: TDC 2012 - PHP

Controle para Brute Force

Plugin de WordPress para proteção contra Brute Forcehttp://wordpress.org/extend/plugins/user-security-tools/

Page 23: TDC 2012 - PHP

HTTPS

Exemplo de configuração de Virtual Host com HTTPSTutorial exemplo: http://onlamp.com/onlamp/2008/03/04/step-by-step-configuring-ssl-under-apache.html

Page 24: TDC 2012 - PHP

Hardening PHP

Hardening é um processo de mapeamento das ameaças, mitigação dos riscos e execução das atividades corretivas, com foco na infra-estrutura e objetivo principal de torná-la preparada para enfrentar tentativas de ataque.

Fonte: http://pt.wikipedia.org/wiki/Hardening

Page 25: TDC 2012 - PHP

Hardening PHP

Dicas para deixar o php.ini mais seguro em produção

Evite que outros saibam a versão do PHP que você está utilizando:

expose_php = Off

Page 26: TDC 2012 - PHP

Hardening PHP

Logar todos os erros em arquivo no servidor e desabilitar a visualização de erros por clientes.

display_errors = Offlog_errors = Onerror_log = /var/log/php/error.log

Page 27: TDC 2012 - PHP

Hardening PHP

Desabilitar upload de arquivos caso a aplicação não utilize esse recurso. Caso sim limitar o tamnho do arquivo.

file_uploads = Off

# ou se utilizarfile_uploads = Offupload_max_filesize = 1M

Page 28: TDC 2012 - PHP

Hardening PHP

Desabilitar funções maliciosas

disable_functions=exec,passthru,shell_exec,system,proc_open,popen,show_source

Page 29: TDC 2012 - PHP

Hardening PHP

Limitar o acesso da aplicação ao file system do servidor:

open_basedir = “/usr/share/php/PEAR:/var/www/”

Page 30: TDC 2012 - PHP

Exemplo de restrição com open_basedir

Hardening PHP

Page 32: TDC 2012 - PHP

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

Ferramentas para Pentest e

Auditoria

Page 33: TDC 2012 - PHP

Erick Tedeschi

http://oerick.com

E-mail/Gtalk: [email protected]

Twitter: @ericktedeschi

Perguntas?

Page 34: TDC 2012 - PHP

Obrigado