Palestra demonstrou como é possível encontrar tutorias e dicas em sites conhecidos e famosos trazendo informações incompletas e algumas incoerentes sobre desenvolvimento seguro, influenciando desenvolvedores na criação de códigos vulneráveis. A partir desses exemplos será possível indicar as correções e provar como é fácil criar um código com falhas e se tornar mais uma vítima.
3. Certezas
● Sistemas a prova de balas não existe.
● O sucesso do ataque só existe se o outro lado falhar.
● Sempre falhamos.
● Que ainda seremos atacados.
● Um dia a morte chegará.
4. Incertezas
● Estou realmente seguro ?
● Escrevi o código da forma certa ?
● Meu sistema será mesmo atacado ?
● Como ele invadiu ?
● Como ele invadiu de novo ?
● ET existe ?
5. Hacking VS Desenvolvimento
Alguém conhece este senhor ?
Desenvolvedor do OpenSSL
Programador
Possue origem Alemã
Responsável por uma das maiores
vulnerabilidades de 2014
6. Hacking VS Desenvolvimento
“em uma das novas funcionalidades, infelizmente, eu me
esqueci de validar uma variável contendo um comprimento”
Robin-Seggelmann
Responsável pelo HeartBleed, desde 2011.
Revisor - Dr Stephen Henson, até então não deu sinal.
7. Hacking VS Desenvolvimento
Falha
2412 /* Read type and payload length first */
2413 hbtype = *p++;
2414 n2s(p, payload);
2415 pl = p;
Correção
+ /* Read type and payload length first */
+ if (1 + 2 + 16 > s->s3->rrec.length)
+ return 0; /* silently discard */
+ hbtype = *p++;
+ n2s(p, payload);
+ if (1 + 2 + payload + 16 > s->s3->rrec.length)
+ return 0; /* silently discard per RFC 6520 sec. 4 */
+ pl = p;
13. Sql Injection
Resultados de uma simples
busca resolveria ?
● http://phpbrasil.com/artigo/v5Ejt4VOld2r/anti-sql-injection--solucao-global
● http://www.vivaolinux.com.br/script/Funcao-Anti-MySQL-Injection-Proteja-
sua-aplicacao
Será mesmo ?
14. Sql Injection
Onde está o erro?
Bypass:
“Sele*ct login,senha frofromm tabela_x”
“Select login,senha from tabela_x
Exemplo:
“Select login,senha from tabela_x” =>
“login,senha tabela_x”
preg_replace(sql_regcase("/
(from|select|insert|delete|where|dro
p table|show tables|#|*|--|)/"), ""
,$sql);
15. Sql Injection
Considerações
● Sempre aplique validação nas entradas de dados, exemplo:
○ Inteiros - valide como inteiro
○ Strings - exclua as aspas
○ true, false - converta para bollean
● Utilize camada de abstração de dados (ORM).
● Recurso a Prepared Statements.
19. File Upload
Considerações
● Ajustar as configurações dos serviços WEB;
● IIS merece atenção;
● Não confie apenas no mimetype ou extensão;
● Atenção a permissões de pastas, arquivos e usuários;
● Monitoramento constante;
● Trabalhe com aplicações em ambientes segregados;
● Verifique todas possíbilidades do white ou blacklist da função.
20. Local File Download /
Disclosure
“É a vulnerabilidade que possibilita a
apresentação ou o download de arquivos,
independente da linguagem: php, asp, java,
etc”
21. Resultados de uma simples busca
resolveria ?
● https://www.developphp.com/video/PHP/Force-File-Download-
Dialog-In-Browser-Tutorial
● http://www.devmedia.com.br/forcar-download-de-arquivos-
com-php/17097
Será mesmo ?
Local File Download /
Disclosure
23. Considerações
● Validação do lado do Servidor
● Crie filtros por "whitelist".
● Defina previamente o caminho das pastas.
● Não permita navegação - “../”
● Validação por registro na base de dados.
Local File Download /
Disclosure
25. Conclusão
● Segurança não é uma coisa e sim um estado.
● Segurança em primeiro plano, ela pode acabar detonar sua imagem
● Pense como hacker, pense diferente, ataque a si próprio;
● Monitore seus sistemas;
● Busque utilizer diretrizes de desenvolvimento seguro;
● A equipe de Infraestrutura não é seu inimigo, confie neles.
● Nunca esqueça de fazer "Code review" e "Par programming";
● Use como regra: Pentest em cada ciclo de desenvolvimento;
● Infraestrutura voltada para segurança;
● Analise logs e movimentações estranhas;
● Mantenha informado e atualizado sempre sobre segurança;