Pretendo apresentar o que a Zend solicita na certificação sobre segurança de aplicações PHP, iremos gerar juntos algumas simples invasões em um pequeno sistema e pretende com o exemplo explicar como podemos nos defender com alguma técnicas que serão ensinadas e que são pedidas na prova da Zend.
1. PROGRAMANDO PHP COM MAIS Segurança
Programando PHP Com Mais Segurança!
Nome: Michael Araújo
Julho/2016
2. CONHECENDO O PALESTRANTE
Criador e mantenedor:
https://www.facebook.com/groups/silexbrasil
https://www.facebook.com/groups/laravelsp
https://www.facebook.com/groups/doctrinebrasil
https://www.facebook.com/group/sonicpibrasil
Instrutor:
4 Linux
Webschool.io
6. LARAVEL CONFERENCE BRASIL
Laravel Conference Brasil
http://laraconfbrasil.com.br
Data do Evento:
08 de Outubro de 2016
Serão sorteados 2 ingressos:
Combinado hoje iremos verificar com a
PHP SP :) - By Marcelo!
7. INTRODUÇÃO
PHP é uma linguagem poderosa e sua curva de aprendizagem é
mais curta!
12. PHP.INI EM DETALHES
PHP possui alguns recursos dinâmicos que podem ser
interessantes porem trazem consigo alguns potenciais
riscos, por exemplo, controle de gravação de arquivos.
13. PHP.INI EM DETALHES
A grande questão fica no que devemos limitar em nossa
configuração do arquivo php.ini.
14. PHP.INI EM DETALHES
Mais uma questão que fica, devemos virar especialistas de
arquivo php.ini, Alguns exemplos!
15. ALLOW_URL_FOPEN E ALLOW_URL_INCLUDE
● Permite que arquivos que não estão no mesmo servidor da sua
aplicação possam incluir arquivos.
● Então, se eu precisar habilitar ?
○ allow_url_fopen = On
○ allow_url_include = On
● E com esse simples exemplo, podemos ter problemas com: RFI
(Remote File Inclusion).
16. MAX_EXECUTION_TIME E MAX_IMPUT_TIME
● Configurações que determinam em segundos o quanto seus scripts
estão permitidos a executar.
● Max_execution_time: Tempo máximo, em segundos.
● Max_input_time: Tempo máximo, em segundos, que um script está
permitido a interpretar, por exemplo, GET E POST.
○ max_execution_time = 30
○ max_input_time = 60
17. UTILIZAÇÃO DE MEMÓRIA
● Configurações de limite de memória determinam o máximo de
memória que seu script poderá alocar.
● Ajuda você a mitigar um problema onde o invasor tenta consumir
toda a memória do seu servidor. Exemplos:
○ memory_limit = 16M
○ upload_max_filesize = 2M
○ post_max_size = 8M
○ max_input_nesting_levels = 64M
Configurações do PHP um mundo a ser explorado !
18. CRIPTOGRAFIA DE DADOS
● O ganho que possuímos com criptografia é que protegemos nossa
informação de um invasor. Ou seja, agora, para o invasor
decodificar esses dados, ele precisará conhecer o padrão de
criptografia que foi usado.
● Uma das criptografias mais famosas é o MD5.
● Porém será que só ao utilizar MD5 já estou com senhas seguras?
● Existe um site: https://hashkiller.co.uk/md5-decrypter.aspx ela
quebra todos os tipos de cálculo de hash MD5?
19. MD5
● Trabalha com um algoritmo conhecido como RSA Data Security.
● O RSA aplicado a uma quantidade arbitrária de dados gera um hash
de tamanho fixo de 128 bits.
● Em php para utilizar a função: md5().
● Hash Md5 123456: e10adc3949ba59abbe56e057f20f883e
● Facilmente hashkiller saberá sua senha:
https://hashkiller.co.uk/md5-decrypter.aspx
20. SHA1
● Mais um algoritmo muito utilizado por desenvolvedores PHP.
● Para utilizar em PHP basta chamar a função sha1().
● Hash sha1 123456: 7c4a8d09ca3762af61e59520943dc26494f8941b
● Facilmente hashkiller saberá sua senha:
https://hashkiller.co.uk/sha1-decrypter.aspx
● MD5 e SHA1, pode ser bem prático, porém não tende a ser tão
seguro da forma que o implementamos!
21. PASSWORD SALT
● Técnica que ajuda a melhor a segurança dos cálculos de Hash
MD5, SHA1 e etc.
● Gera uma lógica que apenas o seu sistema conhece e que saiba
descriptografar.
● Só de implementar SALT em minhas senhas já posso dormir
tranquilo?
● Não! Pois o invasor pode descobrir através das seguintes formas:
○ O salt presente em um arquivo de configuração.
○ O salt presente no banco de dados.
○ O atacante pode gerar uma Rainbow Table.
22. RAINBOW TABLE
● Consiste em uma tabela (como a de um banco de dados) que o
invasor cria para realizar consultas de transação na memória RAM.
● Os resultados computados serão armazenados nessa tabela e, com
isso, ele pode descobrir seu algoritmo de hash.
● Programas que fazem Rainbow Table:
○ http://rainbowtables.shmoo.com
○ http://ophcrack.sourceforge.net
25. SALT DINÂMICO
● O ideal é que você não deixe o hash de suas senhas fixas.
● Solucionar o problema não é tão complexo assim!
● A solução é unir um salt dinâmico com nosso hash de senha.
● A cada nova requisição de criação de senha, ou atualização, seu
sistema gera um novo padrão para o nosso usuário.
31. PASSWORD HASHING API
● Ainda bem que existe password_hash().
● O segundo parâmetro é algoritmo a ser utilizado para o cálculo de
hash que são:
○ PASSWORD_DEFAULT - Usa o algoritmo bcrypt
○ PASSWORD_BCRYPT - o algoritmo utilizado será o
CRYPT_BLOWFISH
38. CROSS-SITE SCRIPTING
● Alguns conhecem o ataque XSS (Cross-site scripting) mas não se
importam muito.
● Java script é inofensivo não preciso ficar preocupado com isso!
● E se o invasor conseguir a sessão do seu usuário?