Evento: 16º Fórum Internacional de Software Livre – Fisl 16
Data: 09/07/2015
Quando se está desenvolvendo, desde do Junior ao Sênior, se você não sabe, não lembra, então qual é a primeira ideia que lhe vem a cabeça?!
Os novos detentores do conhecimento, também denominados, buscados da internet possibilitam uma enorme quantidade de acesso a informações.
Diante disso, podemos afirmar que muito destes informações não estão corretas por completo, especificamente voltadas para o desenvolvimento de software.
Temos diversos exemplos, como tutorias de sites conhecidos e famosos, que por um motivo ou outro deixam de lado um teste de segurança ante de postar, pois eles ensinam aplicar uma camada de segurança que muitas vezes não fazem o que realmente pretendem.
Nosso objetivo é expor quais são as falhas, as principais recomendações de correção propostas nos diversos sites, e provar que sua grande maioria não estão totalmente corretos.
4. Certezas
● Sistemas a prova de balas não existe.
● O sucesso do ataque só existe se o outro lado falhar.
● Sempre falhamos.
● Que ainda será atacado.
● Um dia a morte chegará.
5. Incertezas
● Meu sistema será atacado ?
● Estou realmente seguro ?
● Escrevi o código da forma certa ?
● Como ele invadiu ?
● Como ele invadiu de novo ?
● ET existe mesmo ?
7. Hacking VS Desenvolvimento
● Robin-Seggelmann - Desenvolvedor do Opennssl.
● Responsável pelo HeartBleed, desde 2011.
● Revisor - Dr Stephen Henson, até então não deu sinal.
“em uma das novas funcionalidades, infelizmente, eu me
esqueci de validar uma variável contendo um
comprimento”
8. 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
Artigos relevantes de como evitar sql injection.
Será mesmo ?
● http://phpbrasil.com/artigo/v5Ejt4VOld2r/anti-sql-injection--solucao-global
● http://www.vivaolinux.com.br/script/Funcao-Anti-MySQL-Injection-Proteja-
sua-aplicacao
…. Hackeando dicas ….
14. Sql Injection
Segredo:
*_replace => Age na identificação de algum item setado e altera por outro
parametro que desejar.
Exemplo:
“Select login,senha from tabela_x” => “login,senha tabela_x”
$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop
table|show tables|#|*|--|)/"), "" ,$sql);
Bypass:
“Sele*ct login,senha frofromm tabela_x” =>
“Select login,senha from tabela_x”
15. Sql Injection
Conclusão
● 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.
20. File Upload
Conclusõ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.
21. Local File Download / Disclosure
“É a vulnerabilidade que possibilita
a apresentação ou o download de
arquivos, independente da
linguagem: php, asp, java, etc”
23. Local File Download / Disclosure
Artigos relevantes sobre o tema.
Será mesmo ?
● 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
…. Hackeando dicas ….
24. Local File Download / Disclosure
Segredo:
https://www.developphp.com/video/PHP/Force-File-Download-
Dialog-In-Browser-Tutorial
Alteramos o html do hidden inserindo “../” e o arquivo que
queremos.
http://www.devmedia.com.br/forcar-download-de-arquivos-
com-php/17097
Realmente valida php, mas esquecem que existe arquivos de
configurações em ini,yml,inc.
25. Local File Download / Disclosure
Conclusõ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.
27. 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;