Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
TDC 2012 - PHP
1. São Paulo 7 de Julho de 2012
“Segurança em Sistemas PHP”
Erick Tedeschi
@ericktedeschi
2. 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.
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.
10. 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?!
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. 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.
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. 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. Brute Force (Login)
Exemplo de Brute Force utilizando o Metasploit
Modulo: auxiliary/scanner/http/wordpress_login_enum
https://www.owasp.org/index.php/Testing_for_Brute_Force_%28OWASP-AT-004%29
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. Controle para Brute Force
Plugin de WordPress para proteção contra Brute Force
http://wordpress.org/extend/plugins/user-security-tools/
23. HTTPS
Exemplo de configuração de Virtual Host com HTTPS
Tutorial exemplo: http://onlamp.com/onlamp/2008/03/04/step-by-step-configuring-ssl-under-
apache.html
24. 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
25. 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
26. Hardening PHP
Logar todos os erros em arquivo no servidor e
desabilitar a visualização de erros por clientes.
display_errors = Off
log_errors = On
error_log = /var/log/php/error.log
27. 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 utilizar
file_uploads = Off
upload_max_filesize = 1M
31. Guia de teste de segurança para aplicação web:
https://www.owasp.org/images/5/56/OWASP_Testing_Guide_v3.pdf
Guia de Desenvolvimento Seguro (em construção):
http://code.google.com/p/owasp-development-guide/wiki/Introduction
32. Ferramentas para Pentest e
Auditoria
- Metasploit Framework
www.metasploit.com
- W3af – Web Application Attack and Audit Framework
http://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ção
http://portswigger.net/burp/