SlideShare uma empresa Scribd logo
1 de 29
Defensive
Programming
Alcyon Junior
Aviso Legal
Meu empregador não tem qualquer
responsabilidade sobre o que será
tratado aqui. Este documento contém
informações confidenciais e/ou
privilegiadas.
AVISO DE CONFIDENCIALIDADE
Se você não for o destinatário ou a
pessoa autorizada a receber este
documento, não deve usar, copiar ou
divulgar as informações nele contidas
ou tomar qualquer ação baseada nessas
informações.
Alcyon Junior
Head of Cyber Security na
POUPEX
Três graduações
Redes de
Computadores
Pós em Redes pela
Cisco | MBA em
Governança de TI |
Pós em
CyberSecurity
Mestrado em
Segurança
Cibernética
Autor de livros
sobre Segurança
Cibernética
EHF | ISO27002
| ITILF | CNAP |
CEH | MVM |
LPIC-1
Instrutor
credenciado
pela EXIN e
Líder da OWASP
BSB
#WHOAMI
Autor do capítulo 19
Configurações de segurança
http://t.me/SecCastOficial http://t.me/devsecica
@seccast @devsecica
CONCEITOS
DESAFIOS DA SEGURANÇA DA
INFORMAÇÃO
CONCEITOS
Por que os desenvolvedores não escrevem código seguro?
Nós não estamos falando ainda outra vez sobre "código limpo" aqui. Estamos
falando de algo mais, em uma perspectiva prática pura, segurança e segurança
do software. Sim, porque um software inseguro é praticamente inútil. Vamos
ver o que significa software inseguro
DESAFIOS DA SEGURANÇA DA
INFORMAÇÃO
CONCEITOS
• O voo 501 do Ariane 5 da Agência Espacial Europeia foi
destruído 40 segundos após a decolagem (4 de junho de
1996). O protótipo de foguete de US $ 1 bilhão foi
destruído devido a um bug no software de orientação a
bordo
• Um bug no código que controla a máquina de terapia por
radiação Therac-25 foi diretamente responsável por pelo
menos cinco mortes de pacientes nos anos 80, quando
administrou quantidades excessivas de raios-X.
• O erro de software de um MIM-104 Patriot fez com que o
relógio do sistema se desviasse um terço de segundo em
um período de cem horas - resultando na falha de localizar
e interceptar um míssil de entrada. O míssil iraquiano teve
impacto em um complexo militar em Dhahran, na Arábia
Saudita (25 de fevereiro de 1991), matando 28 americanos
DESAFIOS DA SEGURANÇA DA
INFORMAÇÃO
CONCEITOS
S Spoofing Forjamento de Identidade
Fingir ser alguém ou algo
que você não é
Autenticação
A2-Broken Authentication
and Session Management;
A3-Cross-Site Scripting (XSS)
T Tampering Adulteração de Dados
Modificar dados
armazenados ou dados
em trânsito
Integridade
A1-Injection;
A3-Cross-Site Scripting (XSS);
A4- Insecure Direct Object
References;
A6- Sensitive Data Exposure
R Repudiation Rejeição
Negar que fez ou não fez
algo
Não Repúdio
AA2-Broken Authentication and
Session Management;
A10-Unvalidated Redirects and
Forwards
I
Information
Discosure
Divulgação de
Informações
Ver informações que você
não está permitido a ver
Confidencialidade
A1-Injection;
A3- Cross-Site Scripting (XSS);
A4- Insecure Direct Object
References;
A6- Sensitive Data Exposure
D Denial of Service Recusa de Serviço
Negar um serviço, deixar o
sistema indisponível.
Disponibilidade
A5-Security Misconfiguration;
A9- Using Components with Known
Vulnerabilities
E
Elevation of
Privilege
Elevação de Privilégio Fazer algo sem permissão Autorização
A2-Broken Authentication and
Session Management;
A7- Missing Function Level Access
Control;
A8- Cross-Site Request Forgery (CSRF)
DEFENSIVE PROGRAMMING
DESAFIOS DA SEGURANÇA DA
INFORMAÇÃO
DEFENSIVE PROGRAMMING
Por que eu acho que a Programação Defensiva é uma boa
abordagem para resolver esses problemas em certos tipos de
projetos?
Defenda-se contra o impossível, porque o impossível acontecerá.
A programação defensiva é uma forma de design defensivo
destinado a garantir a função contínua de um software em
circunstâncias imprevistas. Práticas de programação defensiva
são frequentemente usadas onde alta disponibilidade,
segurança ou segurança são necessárias - Wikipedia
DESAFIOS DA SEGURANÇA DA
INFORMAÇÃO
DEFENSIVE PROGRAMMING
Nunca confie na entrada do usuário
Suponha sempre que você vai receber algo que você não espera. Esta deve
ser sua abordagem como um programador defensivo, contra a entrada do
usuário ou, em geral, coisas que entram no seu sistema. Isso porque, como
dissemos, podemos esperar o inesperado.
• Tente ser o mais rigoroso possível.
• Imponha os seus valores de entrada.
As listas de desbloqueio que não são listas negras, por exemplo, ao
validar uma extensão de imagem, não verificam os tipos inválidos, mas
verificam os tipos válidos, excluindo todo o restante. No PHP, no
entanto, você também tem um número infinito de bibliotecas de validação
de código aberto para tornar seu trabalho mais fácil.
A melhor defesa é um bom ataque. Seja rigoroso
DESAFIOS DA SEGURANÇA DA
INFORMAÇÃO
DEFENSIVE PROGRAMMING
Use abstração de banco de dados
A primeira das 10 principais vulnerabilidades de segurança do OWASP é a
injeção. Isso significa que alguém (muitas pessoas por aí) ainda não está
usando ferramentas seguras para consultar seus bancos de dados.
Por favor, use pacotes e bibliotecas de abstração de banco de dados. No
PHP você pode usar o PDO para garantir proteção básica contra injeção .
TOP 10 OWASP 2013-2017
DESAFIOS DA SEGURANÇA DA
INFORMAÇÃO
DEFENSIVE PROGRAMMING
Não reinvente a roda
Você não usa um framework (ou micro framework)?
Bem, você gosta de fazer um trabalho extra sem motivo, parabéns! Não se
trata apenas de frameworks, mas também de novos recursos nos quais você
poderia facilmente usar algo que já existe, bem testado, confiável por
milhares de desenvolvedores e estável , em vez de criar algo sozinho
apenas por causa disso. As únicas razões pelas quais você deve construir
algo por si mesmo é que você precisa de algo que não existe ou que
existe, mas não se encaixa nas suas necessidades (mau desempenho, falta
de recursos, etc.)
Isso é o que é chamado de reutilização de código inteligente. Abrace
isso!!!
DESAFIOS DA SEGURANÇA DA
INFORMAÇÃO
DEFENSIVE PROGRAMMING
Não confie em desenvolvedores
A programação defensiva pode estar relacionada a algo chamado Direção
Defensiva.
Na Direção Defensiva, assumimos que todos ao nosso redor podem,
potencialmente e possivelmente, cometer erros. Portanto, temos que ter
cuidado até mesmo com o comportamento dos outros.
O mesmo conceito se aplica à Programação Defensiva onde nós, como
desenvolvedores, não devemos confiar no código de outros desenvolvedores.
Nós não devemos confiar em nosso código também.
Em grandes projetos, onde muitas pessoas estão envolvidas, podemos ter
muitas maneiras diferentes de escrever e organizar o código. Isso também
pode levar a confusão e até mais bugs.
É por isso que devemos impor estilos de codificação e detector erro para
tornar nossa vida mais fácil.
DESAFIOS DA SEGURANÇA DA
INFORMAÇÃO
DEFENSIVE PROGRAMMING
Escrever código seguro
Essa é a parte difícil para um programador (defensivo), escrever código
que não é ruim. E isso é uma coisa que muitas pessoas conhecem e falam,
mas ninguém realmente se importa ou coloca a quantidade certa de atenção
e esforço nisso para alcançar o código sólido.
DESAFIOS DA SEGURANÇA DA
INFORMAÇÃO
DEFENSIVE PROGRAMMING
<?php
//In order to set the XXSSProtection header, you'll have to add the following code to the head of your application:
header("XXSSProtection:1; mode=block");
?>
DESAFIOS DA SEGURANÇA DA
INFORMAÇÃO
DEFENSIVE PROGRAMMING
<?php
class passwordPolicy{
public function createPassword($pwd){
$proceed = true;
//Recommended to use a small phrase instead of a password:
if(strlen($pwd) < 8 ){
$error .= "Password too short!";
$proceed = false;
}
$pattern = array("/[09]+/","/[az]+/","/[AZ]+/","/W+/");
/*
The password should include at least one number, a small letter, a CAPS,
and a special character as defined in the patterns array:
*/
foreach($pattern as $value){
if(!preg_match($value, $pwd)){
$error .= "Password incomplete";
$proceed = false;
}
}
DESAFIOS DA SEGURANÇA DA
INFORMAÇÃO
DEFENSIVE PROGRAMMING
$file = file_get_contents('badpasswords.txt');
$pattern = explode(',', $file);
foreach($pattern as $password){
if(preg_match($password, $pwd)){
$error .= "Your password was matched with the bad password list, please try
again.";
$proceed = false;
}
}
if($proceed == true){
echo "Your password is allowed!";
return true;
}else{
echo "Password validation failure(your choice is weak): $error";
return false
}
}
}
DESAFIOS DA SEGURANÇA DA
INFORMAÇÃO
DEFENSIVE PROGRAMMING
<?php
class includeXSL{
public function including($whiteListing, $inputParam, $countLevel){
//Include the classes of which you want to use objects from
include_once("classes.php");
$whitelist = new whitelisting();
$continue = true;
if($whitelist>checkpattern($whiteListing, $inputParam, $countLevel) == false)
{$continue = false;}
//If all went good we do the function
if($continue == true){
LOAD XML FILE
// Load the XML source
$xml = new DOMDocument;
$xml>load('test.xml');
$xsl = new DOMDocument('1.0','UTF8');
$xsl>load($inputParam);
// Configure the transformer
$proc = new XSLTProcessor;
$proc>importStyleSheet($xsl); // attach the xsl rules
echo $proc>transformToXML($xml);
DESAFIOS DA SEGURANÇA DA
INFORMAÇÃO
DEFENSIVE PROGRAMMING
Escrever testes
Eu ainda preciso dizer isso?
Escrever testes unitários ajudará você a aderir a princípios comuns, como
Alta Coesão, Responsabilidade Única, Baixo Acoplamento e composição de
objetos corretos. Ele ajuda você não só a testar o caso de unidade
pequena de trabalho, mas também a maneira como você estruturou seu
objeto.
Na verdade, você verá claramente ao testar suas pequenas funções quantos
casos você precisa testar e quantos objetos você precisa reproduzir para
obter uma cobertura de código de 100%.
CONCLUSÃO
VAMOS PENSAR UM POUCO?
“- aquele que conhece o inimigo e a si mesmo,
lutará cem batalhas sem perigo de derrota;
- para aquele que não conhece o inimigo, mas
conhece a si mesmo, as chances para a vitória ou
para a derrota serão iguais;
- aquele que não conhece nem o inimigo e nem a si
próprio, será derrotado em todas as batalhas.”
Sun Tzu (A arte da Guerra)
Alcyon Junior
alcyon@portaltic.com
alcyon.junior@owasp.org
Telegram @alcyjones
Facebook - facebook.com/alcyon.junior
Linkedin - linkedin.com/in/alcyon/

Mais conteúdo relacionado

Mais procurados

Aula 02 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 02 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Aula 02 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 02 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Alcyon Ferreira de Souza Junior, MSc
 
Segurança em aplicações web: pequenas ideias, grandes resultados
Segurança em aplicações web: pequenas ideias, grandes resultadosSegurança em aplicações web: pequenas ideias, grandes resultados
Segurança em aplicações web: pequenas ideias, grandes resultadosAlex Camargo
 
Teste seguranca aplicacoes web security testing
Teste seguranca aplicacoes web security testingTeste seguranca aplicacoes web security testing
Teste seguranca aplicacoes web security testingCristiano Caetano
 
Segurança em Aplicações Web
Segurança em Aplicações WebSegurança em Aplicações Web
Segurança em Aplicações WebCassio Ramos
 
Segurança em Aplicações Web conforme OWASP
Segurança em Aplicações Web conforme OWASPSegurança em Aplicações Web conforme OWASP
Segurança em Aplicações Web conforme OWASPFabiano Pereira
 
OWASP Top 10 - Experiência e Cases com Auditorias Teste de Invasão em Aplicaç...
OWASP Top 10 - Experiência e Cases com Auditorias Teste de Invasão em Aplicaç...OWASP Top 10 - Experiência e Cases com Auditorias Teste de Invasão em Aplicaç...
OWASP Top 10 - Experiência e Cases com Auditorias Teste de Invasão em Aplicaç...Clavis Segurança da Informação
 
Teste de segurança em aplicações web ( sites )
Teste de segurança em aplicações web ( sites )Teste de segurança em aplicações web ( sites )
Teste de segurança em aplicações web ( sites )Pablo Ribeiro
 
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerra
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerraAprendendo a atacar (e proteger) aplicações web através de jogos de guerra
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerraClavis Segurança da Informação
 
Global Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
Global Azure Bootcamp - Recursos de Segurança para Aplicações no AzureGlobal Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
Global Azure Bootcamp - Recursos de Segurança para Aplicações no AzureRubens Guimarães - MTAC MVP
 
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...Clavis Segurança da Informação
 
Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação
Desenvolvimento Seguro de Software - 10o Workshop SegInfo - ApresentaçãoDesenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação
Desenvolvimento Seguro de Software - 10o Workshop SegInfo - ApresentaçãoClavis Segurança da Informação
 
Explorando 5 falhas graves de segurança que os programadores sempre cometem
Explorando 5 falhas graves de segurança que os programadores sempre cometemExplorando 5 falhas graves de segurança que os programadores sempre cometem
Explorando 5 falhas graves de segurança que os programadores sempre cometemAlcyon Ferreira de Souza Junior, MSc
 
"Técnicas e Ferramentas para Auditorias Testes de Invasão"
"Técnicas e Ferramentas para Auditorias Testes de Invasão" "Técnicas e Ferramentas para Auditorias Testes de Invasão"
"Técnicas e Ferramentas para Auditorias Testes de Invasão" Clavis Segurança da Informação
 
Desenvolvimento Seguro Android GDG RIO
Desenvolvimento Seguro Android GDG RIODesenvolvimento Seguro Android GDG RIO
Desenvolvimento Seguro Android GDG RIOAugusto Marinho
 

Mais procurados (20)

Aula 02 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 02 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Aula 02 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 02 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
 
Segurança em aplicações web: pequenas ideias, grandes resultados
Segurança em aplicações web: pequenas ideias, grandes resultadosSegurança em aplicações web: pequenas ideias, grandes resultados
Segurança em aplicações web: pequenas ideias, grandes resultados
 
Teste seguranca aplicacoes web security testing
Teste seguranca aplicacoes web security testingTeste seguranca aplicacoes web security testing
Teste seguranca aplicacoes web security testing
 
Segurança em Aplicações Web
Segurança em Aplicações WebSegurança em Aplicações Web
Segurança em Aplicações Web
 
Segurança em Aplicações Web conforme OWASP
Segurança em Aplicações Web conforme OWASPSegurança em Aplicações Web conforme OWASP
Segurança em Aplicações Web conforme OWASP
 
Testes de segurança em aplicações web
Testes de segurança em aplicações webTestes de segurança em aplicações web
Testes de segurança em aplicações web
 
OWASP Top 10 - Experiência e Cases com Auditorias Teste de Invasão em Aplicaç...
OWASP Top 10 - Experiência e Cases com Auditorias Teste de Invasão em Aplicaç...OWASP Top 10 - Experiência e Cases com Auditorias Teste de Invasão em Aplicaç...
OWASP Top 10 - Experiência e Cases com Auditorias Teste de Invasão em Aplicaç...
 
Ameacas e Vulnerabilidades em Apps Web-2013
Ameacas e Vulnerabilidades em Apps Web-2013Ameacas e Vulnerabilidades em Apps Web-2013
Ameacas e Vulnerabilidades em Apps Web-2013
 
Teste de segurança em aplicações web ( sites )
Teste de segurança em aplicações web ( sites )Teste de segurança em aplicações web ( sites )
Teste de segurança em aplicações web ( sites )
 
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerra
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerraAprendendo a atacar (e proteger) aplicações web através de jogos de guerra
Aprendendo a atacar (e proteger) aplicações web através de jogos de guerra
 
THE WebSec
THE WebSecTHE WebSec
THE WebSec
 
Global Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
Global Azure Bootcamp - Recursos de Segurança para Aplicações no AzureGlobal Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
Global Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
 
Webgoat Project - Apresentação
Webgoat Project - ApresentaçãoWebgoat Project - Apresentação
Webgoat Project - Apresentação
 
Webgoat como ferramenta de aprendizado
Webgoat como ferramenta de aprendizadoWebgoat como ferramenta de aprendizado
Webgoat como ferramenta de aprendizado
 
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
 
Testes de Segurança de Software (tech-ed 2008)
Testes de Segurança de Software (tech-ed 2008)Testes de Segurança de Software (tech-ed 2008)
Testes de Segurança de Software (tech-ed 2008)
 
Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação
Desenvolvimento Seguro de Software - 10o Workshop SegInfo - ApresentaçãoDesenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação
Desenvolvimento Seguro de Software - 10o Workshop SegInfo - Apresentação
 
Explorando 5 falhas graves de segurança que os programadores sempre cometem
Explorando 5 falhas graves de segurança que os programadores sempre cometemExplorando 5 falhas graves de segurança que os programadores sempre cometem
Explorando 5 falhas graves de segurança que os programadores sempre cometem
 
"Técnicas e Ferramentas para Auditorias Testes de Invasão"
"Técnicas e Ferramentas para Auditorias Testes de Invasão" "Técnicas e Ferramentas para Auditorias Testes de Invasão"
"Técnicas e Ferramentas para Auditorias Testes de Invasão"
 
Desenvolvimento Seguro Android GDG RIO
Desenvolvimento Seguro Android GDG RIODesenvolvimento Seguro Android GDG RIO
Desenvolvimento Seguro Android GDG RIO
 

Semelhante a Defensive Programming para segurança

[GUTS-RS] - Testes de Segurança: O que preciso saber para planejar
 [GUTS-RS] - Testes de Segurança: O que preciso saber para planejar [GUTS-RS] - Testes de Segurança: O que preciso saber para planejar
[GUTS-RS] - Testes de Segurança: O que preciso saber para planejarGUTS-RS
 
Segurança em PHP - Blinde seu código de você mesmo!
Segurança em PHP - Blinde seu código de você mesmo!Segurança em PHP - Blinde seu código de você mesmo!
Segurança em PHP - Blinde seu código de você mesmo!Gustavo Neves
 
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...Magno Logan
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPFlavio Souza
 
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEBFIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEBErick Belluci Tedeschi
 
Engenharia de Software II - Teste de segurança de software
Engenharia de Software  II - Teste de segurança de softwareEngenharia de Software  II - Teste de segurança de software
Engenharia de Software II - Teste de segurança de softwareJuliano Padilha
 
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...As Zone
 
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...Thiago Dieb
 
Seguranca e Criptografia de Dados
Seguranca e Criptografia de DadosSeguranca e Criptografia de Dados
Seguranca e Criptografia de DadosFelipe Plattek
 
Construindo uma Aplicação PHP à Prova de Balas
Construindo uma Aplicação PHP à Prova de BalasConstruindo uma Aplicação PHP à Prova de Balas
Construindo uma Aplicação PHP à Prova de BalasRafael Jaques
 
Construindo uma aplicação PHP à Prova de Balas - Rafael Jaques
Construindo uma aplicação PHP à Prova de Balas - Rafael JaquesConstruindo uma aplicação PHP à Prova de Balas - Rafael Jaques
Construindo uma aplicação PHP à Prova de Balas - Rafael JaquesTchelinux
 
Desenvolvimento de software seguro
Desenvolvimento de software seguroDesenvolvimento de software seguro
Desenvolvimento de software seguroCharles Fortes
 
PHP & Segurança: Blindando Aplicações Web - Rafael Jaques - Tchelinux Bento G...
PHP & Segurança: Blindando Aplicações Web - Rafael Jaques - Tchelinux Bento G...PHP & Segurança: Blindando Aplicações Web - Rafael Jaques - Tchelinux Bento G...
PHP & Segurança: Blindando Aplicações Web - Rafael Jaques - Tchelinux Bento G...Tchelinux
 

Semelhante a Defensive Programming para segurança (20)

[GUTS-RS] - Testes de Segurança: O que preciso saber para planejar
 [GUTS-RS] - Testes de Segurança: O que preciso saber para planejar [GUTS-RS] - Testes de Segurança: O que preciso saber para planejar
[GUTS-RS] - Testes de Segurança: O que preciso saber para planejar
 
Segurança em PHP
Segurança em PHPSegurança em PHP
Segurança em PHP
 
Segurança em PHP - Blinde seu código de você mesmo!
Segurança em PHP - Blinde seu código de você mesmo!Segurança em PHP - Blinde seu código de você mesmo!
Segurança em PHP - Blinde seu código de você mesmo!
 
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHP
 
Antar ferreira
Antar ferreiraAntar ferreira
Antar ferreira
 
Java security
Java securityJava security
Java security
 
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEBFIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
FIEB - WebVibe - Desenvolvimento Seguro de Aplicações WEB
 
Engenharia de Software II - Teste de segurança de software
Engenharia de Software  II - Teste de segurança de softwareEngenharia de Software  II - Teste de segurança de software
Engenharia de Software II - Teste de segurança de software
 
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
 
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
 
Segurança de código
Segurança de códigoSegurança de código
Segurança de código
 
Seguranca e Criptografia de Dados
Seguranca e Criptografia de DadosSeguranca e Criptografia de Dados
Seguranca e Criptografia de Dados
 
Construindo uma Aplicação PHP à Prova de Balas
Construindo uma Aplicação PHP à Prova de BalasConstruindo uma Aplicação PHP à Prova de Balas
Construindo uma Aplicação PHP à Prova de Balas
 
Construindo uma aplicação PHP à Prova de Balas - Rafael Jaques
Construindo uma aplicação PHP à Prova de Balas - Rafael JaquesConstruindo uma aplicação PHP à Prova de Balas - Rafael Jaques
Construindo uma aplicação PHP à Prova de Balas - Rafael Jaques
 
Desenvolvimento de software seguro
Desenvolvimento de software seguroDesenvolvimento de software seguro
Desenvolvimento de software seguro
 
PHP & Segurança: Blindando Aplicações Web - Rafael Jaques - Tchelinux Bento G...
PHP & Segurança: Blindando Aplicações Web - Rafael Jaques - Tchelinux Bento G...PHP & Segurança: Blindando Aplicações Web - Rafael Jaques - Tchelinux Bento G...
PHP & Segurança: Blindando Aplicações Web - Rafael Jaques - Tchelinux Bento G...
 
Pentest com Kali Linux - LatinoWare 2015
Pentest com Kali Linux  - LatinoWare 2015Pentest com Kali Linux  - LatinoWare 2015
Pentest com Kali Linux - LatinoWare 2015
 
Sql injection
Sql injectionSql injection
Sql injection
 
Segurança de Aplicações WEB e OpenSource
Segurança de Aplicações WEB e OpenSourceSegurança de Aplicações WEB e OpenSource
Segurança de Aplicações WEB e OpenSource
 

Mais de Alcyon Ferreira de Souza Junior, MSc

SEGURANÇA DA INFORMAÇÃO​ E A TRANSFORMAÇÃO DIGITAL: COMO SOBREVIVER NESTE NOV...
SEGURANÇA DA INFORMAÇÃO​ E A TRANSFORMAÇÃO DIGITAL: COMO SOBREVIVER NESTE NOV...SEGURANÇA DA INFORMAÇÃO​ E A TRANSFORMAÇÃO DIGITAL: COMO SOBREVIVER NESTE NOV...
SEGURANÇA DA INFORMAÇÃO​ E A TRANSFORMAÇÃO DIGITAL: COMO SOBREVIVER NESTE NOV...Alcyon Ferreira de Souza Junior, MSc
 
7 segredos para a criação de malware - Campus Party Brasil 2018
7 segredos para a criação de malware - Campus Party Brasil 20187 segredos para a criação de malware - Campus Party Brasil 2018
7 segredos para a criação de malware - Campus Party Brasil 2018Alcyon Ferreira de Souza Junior, MSc
 
Segurança cibernetica na era do software livre utilizando o BackTrack - Debi...
Segurança cibernetica na era do software livre utilizando o BackTrack - Debi...Segurança cibernetica na era do software livre utilizando o BackTrack - Debi...
Segurança cibernetica na era do software livre utilizando o BackTrack - Debi...Alcyon Ferreira de Souza Junior, MSc
 
7 Segredos sobre o PenTest e o Softeware Livre que todos deveriam saber - Con...
7 Segredos sobre o PenTest e o Softeware Livre que todos deveriam saber - Con...7 Segredos sobre o PenTest e o Softeware Livre que todos deveriam saber - Con...
7 Segredos sobre o PenTest e o Softeware Livre que todos deveriam saber - Con...Alcyon Ferreira de Souza Junior, MSc
 

Mais de Alcyon Ferreira de Souza Junior, MSc (19)

Defensive programming - MindTheSec São Paulo 2019
Defensive programming - MindTheSec São Paulo 2019Defensive programming - MindTheSec São Paulo 2019
Defensive programming - MindTheSec São Paulo 2019
 
Dica 01 - Hash de Senhas e sua utilização Segura
Dica 01 - Hash de Senhas e sua utilização SeguraDica 01 - Hash de Senhas e sua utilização Segura
Dica 01 - Hash de Senhas e sua utilização Segura
 
Mapa mental de Desenvolvimento seguro de software
Mapa mental de Desenvolvimento seguro de softwareMapa mental de Desenvolvimento seguro de software
Mapa mental de Desenvolvimento seguro de software
 
A nova onda da Segurança Cibernética e seus times coloridos
A nova onda da Segurança Cibernética e seus times coloridosA nova onda da Segurança Cibernética e seus times coloridos
A nova onda da Segurança Cibernética e seus times coloridos
 
Como hackear tudo! na Campus Party BSB 2
Como hackear tudo! na Campus Party BSB 2Como hackear tudo! na Campus Party BSB 2
Como hackear tudo! na Campus Party BSB 2
 
SEGURANÇA DA INFORMAÇÃO​ E A TRANSFORMAÇÃO DIGITAL: COMO SOBREVIVER NESTE NOV...
SEGURANÇA DA INFORMAÇÃO​ E A TRANSFORMAÇÃO DIGITAL: COMO SOBREVIVER NESTE NOV...SEGURANÇA DA INFORMAÇÃO​ E A TRANSFORMAÇÃO DIGITAL: COMO SOBREVIVER NESTE NOV...
SEGURANÇA DA INFORMAÇÃO​ E A TRANSFORMAÇÃO DIGITAL: COMO SOBREVIVER NESTE NOV...
 
7 segredos para a criação de malware - Campus Party Brasil 2018
7 segredos para a criação de malware - Campus Party Brasil 20187 segredos para a criação de malware - Campus Party Brasil 2018
7 segredos para a criação de malware - Campus Party Brasil 2018
 
7 segredos sobre o PenTest e software livre - VI Engitec
7 segredos sobre o PenTest e software livre - VI Engitec 7 segredos sobre o PenTest e software livre - VI Engitec
7 segredos sobre o PenTest e software livre - VI Engitec
 
PenTest com Kali linux - VI Engitec
PenTest com Kali linux - VI EngitecPenTest com Kali linux - VI Engitec
PenTest com Kali linux - VI Engitec
 
Google hacking e SQL Injection: Tudo junto e misturado!
Google hacking e SQL Injection: Tudo junto e misturado!Google hacking e SQL Injection: Tudo junto e misturado!
Google hacking e SQL Injection: Tudo junto e misturado!
 
Red Teaming and Alternative Analysis
Red Teaming and Alternative AnalysisRed Teaming and Alternative Analysis
Red Teaming and Alternative Analysis
 
PenTest com Kali Linux - Palestra na UPIS 2014
PenTest com Kali Linux - Palestra na UPIS 2014PenTest com Kali Linux - Palestra na UPIS 2014
PenTest com Kali Linux - Palestra na UPIS 2014
 
Segurança da Informação na era do software livre - Volday III
Segurança da Informação na era do software livre - Volday IIISegurança da Informação na era do software livre - Volday III
Segurança da Informação na era do software livre - Volday III
 
Palestra alcyon junior - LatinoWare 2016
Palestra alcyon junior - LatinoWare 2016Palestra alcyon junior - LatinoWare 2016
Palestra alcyon junior - LatinoWare 2016
 
7 segredos para a criação de malware - LatinoWare 2017
7 segredos para a criação de malware - LatinoWare 20177 segredos para a criação de malware - LatinoWare 2017
7 segredos para a criação de malware - LatinoWare 2017
 
Segurança cibernetica na era do software livre utilizando o BackTrack - Debi...
Segurança cibernetica na era do software livre utilizando o BackTrack - Debi...Segurança cibernetica na era do software livre utilizando o BackTrack - Debi...
Segurança cibernetica na era do software livre utilizando o BackTrack - Debi...
 
7 Segredos sobre o PenTest e o Softeware Livre que todos deveriam saber - Con...
7 Segredos sobre o PenTest e o Softeware Livre que todos deveriam saber - Con...7 Segredos sobre o PenTest e o Softeware Livre que todos deveriam saber - Con...
7 Segredos sobre o PenTest e o Softeware Livre que todos deveriam saber - Con...
 
Pentest com BackTrack - Campus Party Brasil 2013
Pentest com BackTrack - Campus Party Brasil 2013Pentest com BackTrack - Campus Party Brasil 2013
Pentest com BackTrack - Campus Party Brasil 2013
 
Google Hacking e SQL Injection: Tudo junto e misturado!
Google Hacking e SQL Injection: Tudo junto e misturado!Google Hacking e SQL Injection: Tudo junto e misturado!
Google Hacking e SQL Injection: Tudo junto e misturado!
 

Defensive Programming para segurança

  • 2. Aviso Legal Meu empregador não tem qualquer responsabilidade sobre o que será tratado aqui. Este documento contém informações confidenciais e/ou privilegiadas. AVISO DE CONFIDENCIALIDADE Se você não for o destinatário ou a pessoa autorizada a receber este documento, não deve usar, copiar ou divulgar as informações nele contidas ou tomar qualquer ação baseada nessas informações.
  • 3. Alcyon Junior Head of Cyber Security na POUPEX Três graduações Redes de Computadores Pós em Redes pela Cisco | MBA em Governança de TI | Pós em CyberSecurity Mestrado em Segurança Cibernética Autor de livros sobre Segurança Cibernética EHF | ISO27002 | ITILF | CNAP | CEH | MVM | LPIC-1 Instrutor credenciado pela EXIN e Líder da OWASP BSB #WHOAMI
  • 4. Autor do capítulo 19 Configurações de segurança
  • 5.
  • 8. DESAFIOS DA SEGURANÇA DA INFORMAÇÃO CONCEITOS Por que os desenvolvedores não escrevem código seguro? Nós não estamos falando ainda outra vez sobre "código limpo" aqui. Estamos falando de algo mais, em uma perspectiva prática pura, segurança e segurança do software. Sim, porque um software inseguro é praticamente inútil. Vamos ver o que significa software inseguro
  • 9. DESAFIOS DA SEGURANÇA DA INFORMAÇÃO CONCEITOS • O voo 501 do Ariane 5 da Agência Espacial Europeia foi destruído 40 segundos após a decolagem (4 de junho de 1996). O protótipo de foguete de US $ 1 bilhão foi destruído devido a um bug no software de orientação a bordo • Um bug no código que controla a máquina de terapia por radiação Therac-25 foi diretamente responsável por pelo menos cinco mortes de pacientes nos anos 80, quando administrou quantidades excessivas de raios-X. • O erro de software de um MIM-104 Patriot fez com que o relógio do sistema se desviasse um terço de segundo em um período de cem horas - resultando na falha de localizar e interceptar um míssil de entrada. O míssil iraquiano teve impacto em um complexo militar em Dhahran, na Arábia Saudita (25 de fevereiro de 1991), matando 28 americanos
  • 10.
  • 11. DESAFIOS DA SEGURANÇA DA INFORMAÇÃO CONCEITOS S Spoofing Forjamento de Identidade Fingir ser alguém ou algo que você não é Autenticação A2-Broken Authentication and Session Management; A3-Cross-Site Scripting (XSS) T Tampering Adulteração de Dados Modificar dados armazenados ou dados em trânsito Integridade A1-Injection; A3-Cross-Site Scripting (XSS); A4- Insecure Direct Object References; A6- Sensitive Data Exposure R Repudiation Rejeição Negar que fez ou não fez algo Não Repúdio AA2-Broken Authentication and Session Management; A10-Unvalidated Redirects and Forwards I Information Discosure Divulgação de Informações Ver informações que você não está permitido a ver Confidencialidade A1-Injection; A3- Cross-Site Scripting (XSS); A4- Insecure Direct Object References; A6- Sensitive Data Exposure D Denial of Service Recusa de Serviço Negar um serviço, deixar o sistema indisponível. Disponibilidade A5-Security Misconfiguration; A9- Using Components with Known Vulnerabilities E Elevation of Privilege Elevação de Privilégio Fazer algo sem permissão Autorização A2-Broken Authentication and Session Management; A7- Missing Function Level Access Control; A8- Cross-Site Request Forgery (CSRF)
  • 12.
  • 13.
  • 15. DESAFIOS DA SEGURANÇA DA INFORMAÇÃO DEFENSIVE PROGRAMMING Por que eu acho que a Programação Defensiva é uma boa abordagem para resolver esses problemas em certos tipos de projetos? Defenda-se contra o impossível, porque o impossível acontecerá. A programação defensiva é uma forma de design defensivo destinado a garantir a função contínua de um software em circunstâncias imprevistas. Práticas de programação defensiva são frequentemente usadas onde alta disponibilidade, segurança ou segurança são necessárias - Wikipedia
  • 16. DESAFIOS DA SEGURANÇA DA INFORMAÇÃO DEFENSIVE PROGRAMMING Nunca confie na entrada do usuário Suponha sempre que você vai receber algo que você não espera. Esta deve ser sua abordagem como um programador defensivo, contra a entrada do usuário ou, em geral, coisas que entram no seu sistema. Isso porque, como dissemos, podemos esperar o inesperado. • Tente ser o mais rigoroso possível. • Imponha os seus valores de entrada. As listas de desbloqueio que não são listas negras, por exemplo, ao validar uma extensão de imagem, não verificam os tipos inválidos, mas verificam os tipos válidos, excluindo todo o restante. No PHP, no entanto, você também tem um número infinito de bibliotecas de validação de código aberto para tornar seu trabalho mais fácil. A melhor defesa é um bom ataque. Seja rigoroso
  • 17. DESAFIOS DA SEGURANÇA DA INFORMAÇÃO DEFENSIVE PROGRAMMING Use abstração de banco de dados A primeira das 10 principais vulnerabilidades de segurança do OWASP é a injeção. Isso significa que alguém (muitas pessoas por aí) ainda não está usando ferramentas seguras para consultar seus bancos de dados. Por favor, use pacotes e bibliotecas de abstração de banco de dados. No PHP você pode usar o PDO para garantir proteção básica contra injeção .
  • 18. TOP 10 OWASP 2013-2017
  • 19. DESAFIOS DA SEGURANÇA DA INFORMAÇÃO DEFENSIVE PROGRAMMING Não reinvente a roda Você não usa um framework (ou micro framework)? Bem, você gosta de fazer um trabalho extra sem motivo, parabéns! Não se trata apenas de frameworks, mas também de novos recursos nos quais você poderia facilmente usar algo que já existe, bem testado, confiável por milhares de desenvolvedores e estável , em vez de criar algo sozinho apenas por causa disso. As únicas razões pelas quais você deve construir algo por si mesmo é que você precisa de algo que não existe ou que existe, mas não se encaixa nas suas necessidades (mau desempenho, falta de recursos, etc.) Isso é o que é chamado de reutilização de código inteligente. Abrace isso!!!
  • 20. DESAFIOS DA SEGURANÇA DA INFORMAÇÃO DEFENSIVE PROGRAMMING Não confie em desenvolvedores A programação defensiva pode estar relacionada a algo chamado Direção Defensiva. Na Direção Defensiva, assumimos que todos ao nosso redor podem, potencialmente e possivelmente, cometer erros. Portanto, temos que ter cuidado até mesmo com o comportamento dos outros. O mesmo conceito se aplica à Programação Defensiva onde nós, como desenvolvedores, não devemos confiar no código de outros desenvolvedores. Nós não devemos confiar em nosso código também. Em grandes projetos, onde muitas pessoas estão envolvidas, podemos ter muitas maneiras diferentes de escrever e organizar o código. Isso também pode levar a confusão e até mais bugs. É por isso que devemos impor estilos de codificação e detector erro para tornar nossa vida mais fácil.
  • 21. DESAFIOS DA SEGURANÇA DA INFORMAÇÃO DEFENSIVE PROGRAMMING Escrever código seguro Essa é a parte difícil para um programador (defensivo), escrever código que não é ruim. E isso é uma coisa que muitas pessoas conhecem e falam, mas ninguém realmente se importa ou coloca a quantidade certa de atenção e esforço nisso para alcançar o código sólido.
  • 22. DESAFIOS DA SEGURANÇA DA INFORMAÇÃO DEFENSIVE PROGRAMMING <?php //In order to set the XXSSProtection header, you'll have to add the following code to the head of your application: header("XXSSProtection:1; mode=block"); ?>
  • 23. DESAFIOS DA SEGURANÇA DA INFORMAÇÃO DEFENSIVE PROGRAMMING <?php class passwordPolicy{ public function createPassword($pwd){ $proceed = true; //Recommended to use a small phrase instead of a password: if(strlen($pwd) < 8 ){ $error .= "Password too short!"; $proceed = false; } $pattern = array("/[09]+/","/[az]+/","/[AZ]+/","/W+/"); /* The password should include at least one number, a small letter, a CAPS, and a special character as defined in the patterns array: */ foreach($pattern as $value){ if(!preg_match($value, $pwd)){ $error .= "Password incomplete"; $proceed = false; } }
  • 24. DESAFIOS DA SEGURANÇA DA INFORMAÇÃO DEFENSIVE PROGRAMMING $file = file_get_contents('badpasswords.txt'); $pattern = explode(',', $file); foreach($pattern as $password){ if(preg_match($password, $pwd)){ $error .= "Your password was matched with the bad password list, please try again."; $proceed = false; } } if($proceed == true){ echo "Your password is allowed!"; return true; }else{ echo "Password validation failure(your choice is weak): $error"; return false } } }
  • 25. DESAFIOS DA SEGURANÇA DA INFORMAÇÃO DEFENSIVE PROGRAMMING <?php class includeXSL{ public function including($whiteListing, $inputParam, $countLevel){ //Include the classes of which you want to use objects from include_once("classes.php"); $whitelist = new whitelisting(); $continue = true; if($whitelist>checkpattern($whiteListing, $inputParam, $countLevel) == false) {$continue = false;} //If all went good we do the function if($continue == true){ LOAD XML FILE // Load the XML source $xml = new DOMDocument; $xml>load('test.xml'); $xsl = new DOMDocument('1.0','UTF8'); $xsl>load($inputParam); // Configure the transformer $proc = new XSLTProcessor; $proc>importStyleSheet($xsl); // attach the xsl rules echo $proc>transformToXML($xml);
  • 26. DESAFIOS DA SEGURANÇA DA INFORMAÇÃO DEFENSIVE PROGRAMMING Escrever testes Eu ainda preciso dizer isso? Escrever testes unitários ajudará você a aderir a princípios comuns, como Alta Coesão, Responsabilidade Única, Baixo Acoplamento e composição de objetos corretos. Ele ajuda você não só a testar o caso de unidade pequena de trabalho, mas também a maneira como você estruturou seu objeto. Na verdade, você verá claramente ao testar suas pequenas funções quantos casos você precisa testar e quantos objetos você precisa reproduzir para obter uma cobertura de código de 100%.
  • 28. VAMOS PENSAR UM POUCO? “- aquele que conhece o inimigo e a si mesmo, lutará cem batalhas sem perigo de derrota; - para aquele que não conhece o inimigo, mas conhece a si mesmo, as chances para a vitória ou para a derrota serão iguais; - aquele que não conhece nem o inimigo e nem a si próprio, será derrotado em todas as batalhas.” Sun Tzu (A arte da Guerra)
  • 29. Alcyon Junior alcyon@portaltic.com alcyon.junior@owasp.org Telegram @alcyjones Facebook - facebook.com/alcyon.junior Linkedin - linkedin.com/in/alcyon/