palestra - darkmira tour php 2016 - a ilusão das referências sobre desenvolvimento seguro
TRANSCRIPT
Thiago Dieb
Gerente de Desenvolvimento de Sistemas e consultor em Segurança da informação
http://dieb.com.brhttp://aszone.com.br /thiagodieb
CERTEZAS :
● NÃO EXISTE sistemas à prova de balas !● Sempre haverá FALHAS !
● Em algum momento seremos VÍTIMAS !
● A MORTE CHEGARÁ PRA TODOS !
Autobahn
INCERTEZAS:
● Como construir SISTEMAS SEGUROS ?● Meu sistema têm VULNERABILIDADES ?
● Como fui INVADIDO?● Como ele INVADIU novamente ?
● Extraterrestre EXISTE?
Conhecem este senhor ?
Realidade ?
● Programador● Origem Alemã● Desenvolvedor do OpenSSL● Responsável por uma das maiores vulnerabilidades de 2014
“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.
Realidade ?
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;
Realidade ?
Desenvolvimento Seguro
● Muitos desafios● Procedimentos complexos● Poucos conhecem● Não há garantia de 100% de segurança
OWASP - Top 10
● A1 - Injection
● A2 - Broken Authentication and Session Management
● A3 - Cross-Site Scripting (XSS)
● A4 - Insecure Direct Object References
● A5 - Security Misconfiguration
● A6 - Sensitive Data Exposure
● A7 - Missing Function Level Access Control
● A8 - Cross-Site Request Forgery (CSRF)
● A9 - Using Components with Known Vulnerabilities
● A10 - Unvalidated Redirects and Forwards
Sql Injection
Ataque que proporciona o invasor inserir ou manipular consultas SQL`s utilizadas por uma aplicação
Sql Injection
Resultado de uma simples busca no google :
http://www.vivaolinux.com.br/script/Funcao-Anti-MySQL-Injection-Proteja-sua-aplicacao
http://phpbrasil.com/artigo/v5Ejt4VOld2r/anti-sql-injection--solucao-global
Sql Injection
Bypass:
● “Sele*ct login,senha frofromm tabela_x”
● “Select login,senha from tabela_x
Onde está o erro?
Implementações sugeridas pelos artigos:
● “Select login,senha from tabela_x” => “login,senha tabela_x”
● preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"), "" ,$sql);
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.
File Upload
Vulnerabilidade que permite efetuar upload de algum arquivo, no qual o sistema não está preparado.
File Upload
Resultado de uma simples busca no google :
http://www.uolhost.com.br/faq/hospedagem/como-fazer-o-upload-de-arquivos-via-php.html#rmcl
http://wiki.locaweb.com/pt-br/PHP_-_Upload_de_arquivos
File Upload
Implementações sugeridas pelos artigos:
● Simplesmente não valida nada, e ainda diz pra usar 777 na pasta.
● if (!(eregi(".php$", $_FILES[arquivo][name]))) {● Esqueceu que apache interpreta, .php3, .php5
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 nas 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.
Local File Download / Disclosure
É a vulnerabilidade que possibilita a apresentação ou o download de arquivos, independente da linguagem: php, asp, java..
https://www.developphp.com/video/PHP/Force-File-Download-Dialog-In-Browser-Tutorial
Local File Download / Disclosure
http://www.devmedia.com.br/forcar-download-de-arquivos-com-php/17097
Resultado de uma simples busca no google :
Local File Download / Disclosure
Implementações sugeridas pelos artigos:
● Inclusão das informações no lado do cliente.● input hidden inserindo “../” e o arquivo que queremos.
● Validação total dos arquivos php● Mas esquecem que existe arquivos de configurações em
ini,yml,inc.
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
● Segurança não é uma "coisa" e sim um "estado".● Pense como hacker, pense diferente, ataque a si próprio;● Utilizer diretrizes de desenvolvimento seguro;● Monitore seus sistemas;● A equipe de Infraestrutura não é seu inimigo, confie neles.● Pratique "Code review" e "Par programming";● Pentest em cada ciclo de desenvolvimento;● Aplique infraestrutura voltada para segurança;● Analise logs e movimentações estranhas;● Mantenha informado e atualizado sempre sobre
segurança;
Desenvolvimento Seguro