SlideShare une entreprise Scribd logo
1  sur  17
{}
Secure Coding

Desenvolvimento de Software Seguro
Charles Fortes
MTAC – Microsoft Technical Audience Contributor
{}
Secure Coding

Desenvolvimento de Software Seguro
@CharlesFortes

Pesquisas realizadas por instituições como o NVD
(National Vulnerability Database) e o OWASP (Open
Web Application Security Project) nos mostram que
a maior parte das vulnerabilidades de software
são resultados de má codificação.

Dave, nosso desenvolvedor
Você já o deve ter conhecido em Plants Vs Zombies
{}
Secure Coding

Desenvolvimento de Software Seguro
@CharlesFortes

Um ataque pode ser feito por diversos caminhos da
aplicação, e ano após ano, a maior causa de
vulnerabilidade é a Injeção de Código (o qual iremos
focar nesta apresentação).

OWASP Top 10 – 2013
A1 – Injeção de código
A2 – Quebra de autenticação e Gerenciamento de
Sessão
A3 – Cross-Site Scripting (XSS)
A4 – Referência Insegura e Direta a Objetos
A5 – Configuração Incorreta de Segurança
A6 – Exposição de Dados Sensíveis
A7 – Falta de Função para Controle do Nível de Acesso
A8 – Cross-Site Request Forgery (CSRF)
A9 – Utilização de Componentes Vulneráveis Conhecidos
A10 – Redirecionamentos e Encaminhamentos Inválidos
{}
Secure Coding

Desenvolvimento de Software Seguro
@CharlesFortes

Um ataque de Injeção de Código é feito em entrada
de dados de seu sistema
 Caixas de texto
 Parâmetros de inicialização
 Arquivos
 Etc.
{}
Secure Coding

Desenvolvimento de Software Seguro
@CharlesFortes

Esta vulnerabilidade ocorre quando passamos o
conteúdo recebido na entrada de dados para ser
usado sem tratamento em uma instrução de nosso
sistema.
O ataque mais conhecido neste segmento é o
SQLInjection, que demonstra bem o problema.

{

‘ or 1 = 1 --

}

Insecure Coding
{}
Secure Coding

Desenvolvimento de Software Seguro
@CharlesFortes

A forma mais comum de SQLInjection está no login
dos sites, quando desenvolvedores usam
concatenação da string digitada no TextBox de
usuário e senha para montar sua instrução de
consulta e autenticar seu usuário

var commandText = “ Select * From [Security].[User] U
Where U.UserName = „” + txtNome.Text + ”‟
and U.Password = „„‟ + txtSenha.Text + ”‟”;
{}
Secure Coding

Desenvolvimento de Software Seguro
@CharlesFortes

Para este caso, basta o atacante usar trechos de
códigos SQL que serão concatenados a instrução
original. Para burlar esta autenticação, basta usar o

comando „ or 1 = 1 -•

A primeira parte do comando “‟” serve para

U.UserName = ‘

fechar a primeira instrução que valida o
nome do usuário
•

A segunda faz com que o a instrução retorne
dados “or 1 = 1”.

•

E a terceira “--” comenta o restante da
instrução invalidando qualquer validação

adicional que o Dave tenha feito...

?

?
??
{}
Secure Coding

Desenvolvimento de Software Seguro
@CharlesFortes

O resultado é um comando SQL que retorna todos
os usuários do banco, e como o primeiro tende a
ser o administrador, o usuário tende a ter acesso
irrestrito a todo o sistema

Select * From [Security].[User] U
Where U.UserName = „‟

or 1 = 1 -- and U.Password „‟

!
{}
Secure Coding

Desenvolvimento de Software Seguro
@CharlesFortes

Neste cenário, o atacante pode usar mais a sua
criatividade, e injetar um comando de DROP em seu
banco de dados, ou listar todas as tabelas do
sistema e seus conteúdos...

CREATE TABLE usuarios (lista_usuarios blob);
LOAD DATA INFILE ‟/etc/passwd‟ INTO TABLE usuarios;

Pode inclusive acessar arquivos e informações do
servidor...

SELECT * FROM usuarios;
{}
Secure Coding

Desenvolvimento de Software Seguro
@CharlesFortes

LiveSample
{}
Secure Coding

Desenvolvimento de Software Seguro
@CharlesFortes

Microsoft UK (julho/2007)
•

Desfiguração do site

Nações Unidas (agosto/2007)
•

Desfiguração do site

Sony Pictures (junho/2011)
•

Mais de 93mil contas roubadas
(senhas, nomes, e-mail, etc)

Yahoo!Voices (julho/2012)
•

Mais de 400mil contas roubadas
(usuários e senhas)
{}
Secure Coding

Desenvolvimento de Software Seguro
@CharlesFortes

O que fazer?
{}
Secure Coding

Desenvolvimento de Software Seguro
@CharlesFortes

O desenvolvedor deve usar APIs e/ou Frameworks
que forneçam uma interface de parâmetros segura.

Para o caso de SQLInjection, podemos usar recursos
como as bibliotecas de dados do .NET e ORMs

sqlCommand.CommandText = "select * from Books where Title = @title";
sqlCommand.Parameters.AddWithValue("title", txtTitle.Text);

para bancos sem suporte nativo a
instruções com parâmetros

como o NHibernate
select * from Books where Title = ‘’’ or 1 = 1 -- ‘

Caracter de escape
Interpreta o código injetado como texto simples
{}
Secure Coding

Desenvolvimento de Software Seguro
@CharlesFortes

O desenvolvedor deve sempre estar atento ao seu código e buscar usar as melhores práticas, além de
componentes seguros e consolidados para construir seus softwares.

Seja em ataques de Injeção de Comando, Quebra de Sessão, Cross-Site-Scripting ou qualquer outro sempre
devemos manter princípios como não confiar na entrada do usuário, usar privilégios mínimos e defesa em
profundidade.
{}
Secure Coding

Desenvolvimento de Software Seguro
@CharlesFortes

Não confiar na entrada do usuário
• Toda entrada de usuário deve ser armazenada e trada como parâmetro

Usar privilégios mínimos
• Não dar permissão Admin ou usar senha root no banco de dados para a aplicação, os privilégios a tabelas e dados
deve ser apenas o necessário para o funcionamento da aplicação

Defesa em profundidade
• As validações e boas práticas não devem estar apenas na camada de interação com o usuário, mas presente em todo o
código. Em uma aplicação web por exemplo, a validação pode ser feita client-side e server-side também.
{}
Secure Coding

Desenvolvimento de Software Seguro
@CharlesFortes

Obrigado

About me on next page
Web
Desktop
Mobile

Charles Fortes

Git
TFS
SVN

Desenvolvimento

Versionamento

Practices
Patterns
Modeling

Arquitetura

SQL
MySQ
L
NoSQ
Bancos de
L
Dados

MTAC - Microsoft Technical Audience Contributor
Comunidade Técnica Microsoft Belo Horizonte

Contenu connexe

Tendances

Introdução ao teste de intrusão em redes
Introdução ao teste de intrusão em redesIntrodução ao teste de intrusão em redes
Introdução ao teste de intrusão em redes
Alisson Fuckner
 

Tendances (10)

Segurança em php
Segurança em phpSegurança em php
Segurança em php
 
Segurança na web
Segurança na webSegurança na web
Segurança na web
 
Apostila metasploit
Apostila metasploitApostila metasploit
Apostila metasploit
 
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
 
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...
 
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEEAppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
 
Construindo uma Aplicação PHP à Prova de Balas - 2010
Construindo uma Aplicação PHP à Prova de Balas - 2010Construindo uma Aplicação PHP à Prova de Balas - 2010
Construindo uma Aplicação PHP à Prova de Balas - 2010
 
Palestra - Darkmira Tour PHP 2016 - A ilusão das referências sobre desenvolv...
Palestra - Darkmira Tour PHP 2016  - A ilusão das referências sobre desenvolv...Palestra - Darkmira Tour PHP 2016  - A ilusão das referências sobre desenvolv...
Palestra - Darkmira Tour PHP 2016 - A ilusão das referências sobre desenvolv...
 
Programando php com excelência
Programando php com excelênciaProgramando php com excelência
Programando php com excelência
 
Introdução ao teste de intrusão em redes
Introdução ao teste de intrusão em redesIntrodução ao teste de intrusão em redes
Introdução ao teste de intrusão em redes
 

En vedette

En vedette (20)

Apresentação prof e materia
Apresentação prof e materiaApresentação prof e materia
Apresentação prof e materia
 
Metodologias ageis
Metodologias ageisMetodologias ageis
Metodologias ageis
 
Sistemas Operacionais - Aula 5 - Concorrência
Sistemas Operacionais - Aula 5 - ConcorrênciaSistemas Operacionais - Aula 5 - Concorrência
Sistemas Operacionais - Aula 5 - Concorrência
 
Introdução a Desenvolvimento de Jogos HTML 5 para Windows 8 com Html5Quintus
Introdução a Desenvolvimento de Jogos HTML 5 para Windows 8 com Html5QuintusIntrodução a Desenvolvimento de Jogos HTML 5 para Windows 8 com Html5Quintus
Introdução a Desenvolvimento de Jogos HTML 5 para Windows 8 com Html5Quintus
 
Lambda Expressions
Lambda ExpressionsLambda Expressions
Lambda Expressions
 
Sistemas Operacionais - Aula 7 - Processos e Threads
Sistemas Operacionais - Aula 7 - Processos e ThreadsSistemas Operacionais - Aula 7 - Processos e Threads
Sistemas Operacionais - Aula 7 - Processos e Threads
 
Conceitos – Do Homem à Máquina
Conceitos – Do Homem à MáquinaConceitos – Do Homem à Máquina
Conceitos – Do Homem à Máquina
 
Programação Genetica
Programação GeneticaProgramação Genetica
Programação Genetica
 
PE2 - Funções e Structs
PE2 - Funções e StructsPE2 - Funções e Structs
PE2 - Funções e Structs
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Programação Estruturada 2 - Revisão C
Programação Estruturada 2 - Revisão CProgramação Estruturada 2 - Revisão C
Programação Estruturada 2 - Revisão C
 
PE-I - Apresentação Professor
PE-I - Apresentação ProfessorPE-I - Apresentação Professor
PE-I - Apresentação Professor
 
MVC Pattern
MVC PatternMVC Pattern
MVC Pattern
 
Medição de esforço - Como combrar meus freelas
Medição de esforço - Como combrar meus freelasMedição de esforço - Como combrar meus freelas
Medição de esforço - Como combrar meus freelas
 
IA - Apresentação do Professor
IA - Apresentação do ProfessorIA - Apresentação do Professor
IA - Apresentação do Professor
 
Sistemas Operacionais - Aula 9 - Gerencia de Recursos
Sistemas Operacionais - Aula 9 - Gerencia de RecursosSistemas Operacionais - Aula 9 - Gerencia de Recursos
Sistemas Operacionais - Aula 9 - Gerencia de Recursos
 
LPC - aula 1 - Introdução .NET
LPC  - aula 1 - Introdução .NETLPC  - aula 1 - Introdução .NET
LPC - aula 1 - Introdução .NET
 
PE1 - Comandos de Decisão
PE1 - Comandos de DecisãoPE1 - Comandos de Decisão
PE1 - Comandos de Decisão
 
Programação Estruturada 2 - Apresentação do Professor
Programação Estruturada 2 - Apresentação do ProfessorProgramação Estruturada 2 - Apresentação do Professor
Programação Estruturada 2 - Apresentação do Professor
 
Pitagoras - Introdução a Programação Orientada a Objetos - Conceitos
Pitagoras - Introdução a Programação Orientada a Objetos - ConceitosPitagoras - Introdução a Programação Orientada a Objetos - Conceitos
Pitagoras - Introdução a Programação Orientada a Objetos - Conceitos
 

Similaire à Desenvolvimento de software seguro

Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesPalestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Clavis Segurança da Informação
 

Similaire à Desenvolvimento de software seguro (20)

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)
 
Sql injection
Sql injectionSql injection
Sql injection
 
Desenvolvimento Web - Palestra Coding Night #3 - Microsoft
Desenvolvimento Web - Palestra Coding Night #3 - MicrosoftDesenvolvimento Web - Palestra Coding Night #3 - Microsoft
Desenvolvimento Web - Palestra Coding Night #3 - Microsoft
 
Palestra - Desenvolvimento Seguro de Aplicações WEB - IFC 2013-09-29
Palestra - Desenvolvimento Seguro de Aplicações WEB - IFC 2013-09-29Palestra - Desenvolvimento Seguro de Aplicações WEB - IFC 2013-09-29
Palestra - Desenvolvimento Seguro de Aplicações WEB - IFC 2013-09-29
 
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesPalestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
 
OWASP - Ferramentas
OWASP - FerramentasOWASP - Ferramentas
OWASP - Ferramentas
 
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
 
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
 
Segurança em Aplicativos Web
Segurança em Aplicativos WebSegurança em Aplicativos Web
Segurança em Aplicativos Web
 
Antar ferreira
Antar ferreiraAntar ferreira
Antar ferreira
 
Vulnerabilidade Out-of-bounds-Write (CWE-787)
Vulnerabilidade Out-of-bounds-Write (CWE-787)Vulnerabilidade Out-of-bounds-Write (CWE-787)
Vulnerabilidade Out-of-bounds-Write (CWE-787)
 
Java security
Java securityJava security
Java security
 
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...
 
InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...
InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...
InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...
 
Workshop Web - Do Pensamento ao Desenvolvimento - Design, Programação e Banco...
Workshop Web - Do Pensamento ao Desenvolvimento - Design, Programação e Banco...Workshop Web - Do Pensamento ao Desenvolvimento - Design, Programação e Banco...
Workshop Web - Do Pensamento ao Desenvolvimento - Design, Programação e Banco...
 
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
 
Ferranentas OWASP
Ferranentas OWASPFerranentas OWASP
Ferranentas OWASP
 
Owasp web app_flaws
Owasp web app_flawsOwasp web app_flaws
Owasp web app_flaws
 
Segurança na web
Segurança na webSegurança na web
Segurança na web
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando selenium
 

Plus de Charles Fortes

Plus de Charles Fortes (15)

Acesso a banco de dados com entity framework
Acesso a banco de dados com entity frameworkAcesso a banco de dados com entity framework
Acesso a banco de dados com entity framework
 
Pdm -final
Pdm  -finalPdm  -final
Pdm -final
 
Pitagoras - Introdução a Programação Orientada a Objetos - Revisão Final
Pitagoras - Introdução a Programação Orientada a Objetos - Revisão FinalPitagoras - Introdução a Programação Orientada a Objetos - Revisão Final
Pitagoras - Introdução a Programação Orientada a Objetos - Revisão Final
 
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...
 
inteligência artificial - fuzzy - mineração
inteligência artificial - fuzzy - mineraçãointeligência artificial - fuzzy - mineração
inteligência artificial - fuzzy - mineração
 
IA - Introdução Inteligência Artificial
IA - Introdução Inteligência ArtificialIA - Introdução Inteligência Artificial
IA - Introdução Inteligência Artificial
 
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
 
LPC - Apresentação do Professor
LPC - Apresentação do ProfessorLPC - Apresentação do Professor
LPC - Apresentação do Professor
 
Sistemas Operacionais - Aula 8 - Sincronização e Comunicação entre Processos
Sistemas Operacionais - Aula 8 - Sincronização e Comunicação entre ProcessosSistemas Operacionais - Aula 8 - Sincronização e Comunicação entre Processos
Sistemas Operacionais - Aula 8 - Sincronização e Comunicação entre Processos
 
Economia global: França e Inglaterra
Economia global: França e InglaterraEconomia global: França e Inglaterra
Economia global: França e Inglaterra
 
Sistemas Operacionais - Aula 6 - Estrutura do Sistema Operacional
Sistemas Operacionais - Aula 6 - Estrutura do Sistema OperacionalSistemas Operacionais - Aula 6 - Estrutura do Sistema Operacional
Sistemas Operacionais - Aula 6 - Estrutura do Sistema Operacional
 
Sistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 4 - Revisão e ExercíciosSistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 4 - Revisão e Exercícios
 
Sistemas Operacionais - Aula 3 - Hardware e Software
Sistemas Operacionais - Aula 3 - Hardware e SoftwareSistemas Operacionais - Aula 3 - Hardware e Software
Sistemas Operacionais - Aula 3 - Hardware e Software
 
Sistemas Operacionais - Aula 2 - Visão Geral de Sistemas Operacionais
Sistemas Operacionais - Aula 2 - Visão Geral de Sistemas OperacionaisSistemas Operacionais - Aula 2 - Visão Geral de Sistemas Operacionais
Sistemas Operacionais - Aula 2 - Visão Geral de Sistemas Operacionais
 
Sistemas Operacionais - Aula 1 - História e Introdução a SO
Sistemas Operacionais - Aula 1 - História e Introdução a SOSistemas Operacionais - Aula 1 - História e Introdução a SO
Sistemas Operacionais - Aula 1 - História e Introdução a SO
 

Desenvolvimento de software seguro

  • 1. {} Secure Coding Desenvolvimento de Software Seguro Charles Fortes MTAC – Microsoft Technical Audience Contributor
  • 2. {} Secure Coding Desenvolvimento de Software Seguro @CharlesFortes Pesquisas realizadas por instituições como o NVD (National Vulnerability Database) e o OWASP (Open Web Application Security Project) nos mostram que a maior parte das vulnerabilidades de software são resultados de má codificação. Dave, nosso desenvolvedor Você já o deve ter conhecido em Plants Vs Zombies
  • 3. {} Secure Coding Desenvolvimento de Software Seguro @CharlesFortes Um ataque pode ser feito por diversos caminhos da aplicação, e ano após ano, a maior causa de vulnerabilidade é a Injeção de Código (o qual iremos focar nesta apresentação). OWASP Top 10 – 2013 A1 – Injeção de código A2 – Quebra de autenticação e Gerenciamento de Sessão A3 – Cross-Site Scripting (XSS) A4 – Referência Insegura e Direta a Objetos A5 – Configuração Incorreta de Segurança A6 – Exposição de Dados Sensíveis A7 – Falta de Função para Controle do Nível de Acesso A8 – Cross-Site Request Forgery (CSRF) A9 – Utilização de Componentes Vulneráveis Conhecidos A10 – Redirecionamentos e Encaminhamentos Inválidos
  • 4. {} Secure Coding Desenvolvimento de Software Seguro @CharlesFortes Um ataque de Injeção de Código é feito em entrada de dados de seu sistema  Caixas de texto  Parâmetros de inicialização  Arquivos  Etc.
  • 5. {} Secure Coding Desenvolvimento de Software Seguro @CharlesFortes Esta vulnerabilidade ocorre quando passamos o conteúdo recebido na entrada de dados para ser usado sem tratamento em uma instrução de nosso sistema. O ataque mais conhecido neste segmento é o SQLInjection, que demonstra bem o problema. { ‘ or 1 = 1 -- } Insecure Coding
  • 6. {} Secure Coding Desenvolvimento de Software Seguro @CharlesFortes A forma mais comum de SQLInjection está no login dos sites, quando desenvolvedores usam concatenação da string digitada no TextBox de usuário e senha para montar sua instrução de consulta e autenticar seu usuário var commandText = “ Select * From [Security].[User] U Where U.UserName = „” + txtNome.Text + ”‟ and U.Password = „„‟ + txtSenha.Text + ”‟”;
  • 7. {} Secure Coding Desenvolvimento de Software Seguro @CharlesFortes Para este caso, basta o atacante usar trechos de códigos SQL que serão concatenados a instrução original. Para burlar esta autenticação, basta usar o comando „ or 1 = 1 -• A primeira parte do comando “‟” serve para U.UserName = ‘ fechar a primeira instrução que valida o nome do usuário • A segunda faz com que o a instrução retorne dados “or 1 = 1”. • E a terceira “--” comenta o restante da instrução invalidando qualquer validação adicional que o Dave tenha feito... ? ? ??
  • 8. {} Secure Coding Desenvolvimento de Software Seguro @CharlesFortes O resultado é um comando SQL que retorna todos os usuários do banco, e como o primeiro tende a ser o administrador, o usuário tende a ter acesso irrestrito a todo o sistema Select * From [Security].[User] U Where U.UserName = „‟ or 1 = 1 -- and U.Password „‟ !
  • 9. {} Secure Coding Desenvolvimento de Software Seguro @CharlesFortes Neste cenário, o atacante pode usar mais a sua criatividade, e injetar um comando de DROP em seu banco de dados, ou listar todas as tabelas do sistema e seus conteúdos... CREATE TABLE usuarios (lista_usuarios blob); LOAD DATA INFILE ‟/etc/passwd‟ INTO TABLE usuarios; Pode inclusive acessar arquivos e informações do servidor... SELECT * FROM usuarios;
  • 10. {} Secure Coding Desenvolvimento de Software Seguro @CharlesFortes LiveSample
  • 11. {} Secure Coding Desenvolvimento de Software Seguro @CharlesFortes Microsoft UK (julho/2007) • Desfiguração do site Nações Unidas (agosto/2007) • Desfiguração do site Sony Pictures (junho/2011) • Mais de 93mil contas roubadas (senhas, nomes, e-mail, etc) Yahoo!Voices (julho/2012) • Mais de 400mil contas roubadas (usuários e senhas)
  • 12. {} Secure Coding Desenvolvimento de Software Seguro @CharlesFortes O que fazer?
  • 13. {} Secure Coding Desenvolvimento de Software Seguro @CharlesFortes O desenvolvedor deve usar APIs e/ou Frameworks que forneçam uma interface de parâmetros segura. Para o caso de SQLInjection, podemos usar recursos como as bibliotecas de dados do .NET e ORMs sqlCommand.CommandText = "select * from Books where Title = @title"; sqlCommand.Parameters.AddWithValue("title", txtTitle.Text); para bancos sem suporte nativo a instruções com parâmetros como o NHibernate select * from Books where Title = ‘’’ or 1 = 1 -- ‘ Caracter de escape Interpreta o código injetado como texto simples
  • 14. {} Secure Coding Desenvolvimento de Software Seguro @CharlesFortes O desenvolvedor deve sempre estar atento ao seu código e buscar usar as melhores práticas, além de componentes seguros e consolidados para construir seus softwares. Seja em ataques de Injeção de Comando, Quebra de Sessão, Cross-Site-Scripting ou qualquer outro sempre devemos manter princípios como não confiar na entrada do usuário, usar privilégios mínimos e defesa em profundidade.
  • 15. {} Secure Coding Desenvolvimento de Software Seguro @CharlesFortes Não confiar na entrada do usuário • Toda entrada de usuário deve ser armazenada e trada como parâmetro Usar privilégios mínimos • Não dar permissão Admin ou usar senha root no banco de dados para a aplicação, os privilégios a tabelas e dados deve ser apenas o necessário para o funcionamento da aplicação Defesa em profundidade • As validações e boas práticas não devem estar apenas na camada de interação com o usuário, mas presente em todo o código. Em uma aplicação web por exemplo, a validação pode ser feita client-side e server-side também.
  • 16. {} Secure Coding Desenvolvimento de Software Seguro @CharlesFortes Obrigado About me on next page

Notes de l'éditeur

  1. No modo Apresentação de Slides, clique na seta para entrar no PowerPoint Getting Started Center.