SlideShare uma empresa Scribd logo
{}
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

Mais conteúdo relacionado

PDF
Exploits
PDF
Segurança em Aplicações ASP.NET (XSS e CSRF)
PPTX
Palestra criando aplicações seguras com php (2)
PPT
Tratando as vulnerabilidades do Top 10 com php
PPTX
Desenvolvendo sistemas seguros com PHP
PDF
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
PDF
PHP Desenvolvimento Seguro
PPTX
Segurança em PHP - Blinde seu código de você mesmo!
Exploits
Segurança em Aplicações ASP.NET (XSS e CSRF)
Palestra criando aplicações seguras com php (2)
Tratando as vulnerabilidades do Top 10 com php
Desenvolvendo sistemas seguros com PHP
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
PHP Desenvolvimento Seguro
Segurança em PHP - Blinde seu código de você mesmo!

Mais procurados (10)

PDF
Segurança em php
PPTX
Segurança na web
PDF
Apostila metasploit
PPTX
Segurança de Aplicações WEB e OpenSource
PDF
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
PPTX
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
KEY
Construindo uma Aplicação PHP à Prova de Balas - 2010
PDF
Palestra - Darkmira Tour PHP 2016 - A ilusão das referências sobre desenvolv...
PPTX
Programando php com excelência
PPTX
Introdução ao teste de intrusão em redes
Segurança em php
Segurança na web
Apostila metasploit
Segurança de Aplicações WEB e OpenSource
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
AppSec Latam 2011 - Treinamento OWASP Top 10 + JavaEE
Construindo uma Aplicação PHP à Prova de Balas - 2010
Palestra - Darkmira Tour PHP 2016 - A ilusão das referências sobre desenvolv...
Programando php com excelência
Introdução ao teste de intrusão em redes
Anúncio

Destaque (20)

PPTX
Apresentação prof e materia
PPTX
Metodologias ageis
PPTX
Sistemas Operacionais - Aula 5 - Concorrência
PPSX
Introdução a Desenvolvimento de Jogos HTML 5 para Windows 8 com Html5Quintus
PPT
Lambda Expressions
PPTX
Sistemas Operacionais - Aula 7 - Processos e Threads
PPTX
Conceitos – Do Homem à Máquina
PPTX
Programação Genetica
PPTX
PE2 - Funções e Structs
PDF
Introdução ao TDD
PPTX
Programação Estruturada 2 - Revisão C
PPTX
PE-I - Apresentação Professor
PPTX
MVC Pattern
PPTX
Medição de esforço - Como combrar meus freelas
PPTX
IA - Apresentação do Professor
PPTX
Sistemas Operacionais - Aula 9 - Gerencia de Recursos
PPTX
LPC - aula 1 - Introdução .NET
PPTX
PE1 - Comandos de Decisão
PPTX
Programação Estruturada 2 - Apresentação do Professor
PPTX
Pitagoras - Introdução a Programação Orientada a Objetos - Conceitos
Apresentação prof e materia
Metodologias ageis
Sistemas Operacionais - Aula 5 - Concorrência
Introdução a Desenvolvimento de Jogos HTML 5 para Windows 8 com Html5Quintus
Lambda Expressions
Sistemas Operacionais - Aula 7 - Processos e Threads
Conceitos – Do Homem à Máquina
Programação Genetica
PE2 - Funções e Structs
Introdução ao TDD
Programação Estruturada 2 - Revisão C
PE-I - Apresentação Professor
MVC Pattern
Medição de esforço - Como combrar meus freelas
IA - Apresentação do Professor
Sistemas Operacionais - Aula 9 - Gerencia de Recursos
LPC - aula 1 - Introdução .NET
PE1 - Comandos de Decisão
Programação Estruturada 2 - Apresentação do Professor
Pitagoras - Introdução a Programação Orientada a Objetos - Conceitos
Anúncio

Semelhante a Desenvolvimento de software seguro (20)

PPT
Testes de Segurança de Software (tech-ed 2008)
PPT
Sql injection
PPTX
Desenvolvimento Web - Palestra Coding Night #3 - Microsoft
PDF
Palestra - Desenvolvimento Seguro de Aplicações WEB - IFC 2013-09-29
PDF
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
PPTX
OWASP - Ferramentas
PPTX
Engenharia de Software II - Teste de segurança de software
PPTX
Global Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
PDF
Segurança em Aplicativos Web
PDF
Antar ferreira
PDF
Vulnerabilidade Out-of-bounds-Write (CWE-787)
PPTX
Java security
PDF
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
PDF
InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...
PPTX
Workshop Web - Do Pensamento ao Desenvolvimento - Design, Programação e Banco...
PDF
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
PDF
Ferranentas OWASP
PPT
Owasp web app_flaws
PPTX
Segurança na web
PPTX
Introdução a testes de software utilizando selenium
Testes de Segurança de Software (tech-ed 2008)
Sql injection
Desenvolvimento Web - Palestra Coding Night #3 - Microsoft
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
OWASP - Ferramentas
Engenharia de Software II - Teste de segurança de software
Global Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
Segurança em Aplicativos Web
Antar ferreira
Vulnerabilidade Out-of-bounds-Write (CWE-787)
Java security
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...
Workshop Web - Do Pensamento ao Desenvolvimento - Design, Programação e Banco...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Ferranentas OWASP
Owasp web app_flaws
Segurança na web
Introdução a testes de software utilizando selenium

Mais de Charles Fortes (15)

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

Último (11)

PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Jira Software projetos completos com scrum
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Eng. Software - pontos essenciais para o início
PPTX
Tipos de servidor em redes de computador.pptx
PPT
Conceitos básicos de Redes Neurais Artificiais
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PPTX
Utilizando code blockes por andre backes
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Manejo integrado de pragas na cultura do algodão
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Jira Software projetos completos com scrum
Viasol Energia Solar -Soluções para geração e economia de energia
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Eng. Software - pontos essenciais para o início
Tipos de servidor em redes de computador.pptx
Conceitos básicos de Redes Neurais Artificiais
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Utilizando code blockes por andre backes

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

Notas do Editor

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