Tratando as vulnerabilidades do Top 10 do OWASP Php Conference – São Paulo 28/11/2008 Wagner Elias Research & Development Manager  Brazilian Chapter Leader http://wagnerelias.com http://www.conviso.com.br
Agenda Um pouco de OWASP Top 10 2007  1 – XSS (Cross Site Scripting) 2 – Falhas de Injeção 3 – Execução Maliciosa de Arquivos 4 – Referência Direta a Objetos 5 – CSRF (Cross Site Request Forgery) 6 – Vazamento de Informações 7 – Furo de Autenticação 8 – Armazenamento Criptográfico 9 – Comunicação Insegura 10 – Restrição de Acesso a URL Encerramento
O que é OWASP? Open Web Application Security Project   Educar e conscientizar segurança para desenvolvedores, designers, arquitetos e organizações.
Como funciona? Documentação Wiki e Books Code Review, Testing Guide, Building, Top Ten, … Code Projects  Projetos ferramentas ofensivas/defensivas Processos, procedimentos … Educação e outros Chapters (Capítulos) Grupo de usuários +100 e crescendo Conferências Grandes e pequenos eventos ao redor do mundo
Brazilian Chapter (OWASP-BR) Positive Security Project Melhorar a postura das empresas em relação a segurança em aplicações Application Security Desk Reference Project (ASDR) Guia de referência sobre segurança em aplicações web Princípios, agentes de ameça, controles, vulnerabilidades e ataques, impactos de negócio e técnicos Traduções WebGoat Top Ten Project Lista de discussão ativa, participe! http://lists.owasp.org/mailman/listinfo/owasp-brazilian Acompanhe e colabore com o wiki do capítulo http://www.owasp.org/index.php/Brazilian
Patrocinadores / Membros
Quem contribui?
Tratando as vulnerabilidades do Top 10 do OWASP Top 10 2007
O que é? Estudo da OWASP que busca identificar e classificar as 10 principais vulnerabilidades encontradas em ambientes WEB Traduzido para vários idiomas e atualizado regularmente Pt-Br:http://www.owasp.org/images/4/42/OWASP_TOP_10_2007_PT-BR.pdf
Tratando as vulnerabilidades do Top 10 do OWASP 1 – XSS (Cross Site Scripting)
1 - Cross Site Scripting (XSS) Permite que um atacante insira um script na página que será mostrada à vítima. Afeta qualquer ambiente web Efeitos: Seqüestro de sessão Inserção de código ou conteúdo hostil Roubo de informações Controle do navegador da vítima
Tipos de Cross Site Scripting Refletido Quando o site reflete para o usuário todo ou parte do conteúdo da requisição Armazenado O script é armazenado em base de dados e é mostrado às vítimas posteriormente Inserção DOM Os scripts da página são alterados
Tratando em php Sanitize os dados usando htmlentities() ou htmlspecialchars()
Tratando as vulnerabilidades do Top 10 do OWASP 2 – Falha de Injeção
2 - Falhas de Injeção Várias linguagens envolvidas: SQL LDAP HTML XSLT XML Comandos de interpretadores do sistema operacional (cmd, shell, etc)
Falhas de Injeção Como acontecem: Dados fornecidos por usuários são usados como parte de comandos ou consultas Dados são manipulados para alterar os comandos enviados ao interpretador Atacante pode se utilizar das permissões da aplicação para ler e/ou alterar dados Pode permitir execução de programas
Falhas de Injeção Ambientes afetados: Quaisquer ambientes que utilizem interpretadores Muito comum no acesso a bases de dados SQL Injection
Dicas Valide sempre Expressões regulares são sempre uma boa Adote camada de abstração de dados Bibliotecas de ORM são bastante eficazes para evitar falhas de SQL Injection. Exemplo ADOdb, PDO. Use procedimentos armazenados Prepared Statements (Bind Variables) Evite usar a chamada padrão de query do MySQL ( mysqli_multi_query()) use mysqli_query() Não confie No usuário e no magic_quotes /addslashes()  
Tratando em php Sanitize os dados usando escapeshellcmd()
Tratando em php Evite, mas se precisar interagir com shell use escapeshellarg()
Tratando em php Referenciando path de forma segura, evitando path traversal realpath()
Tratando em php Evitando SQL Injection com mysql_escape_string() (não é uma solução definitiva, sujeito a SQL Injection usando técnicas de encode.) Só Bind Variables Salva  
Tratando as vulnerabilidades do Top 10 do OWASP 3 – Execução Maliciosa de Arquivos
3 - Execução Maliciosa de Arquivo Execução de conteúdo externo ao código da aplicação Permite realizar Execução remota de código Instalação de  rootkits
Execução Maliciosa de Arquivo Ambientes afetados: Sistemas que aceitam nomes de arquivos Sistemas que recebem arquivos Ambientes interpretados
Tratando em php Desabilite estas funções que são habilitadas por default allow_url_fopen e allow_url_include Cuidado com as funções eval() passthru() Streams (stream_*)
Tratando as vulnerabilidades do Top 10 do OWASP 4 – Referência Direta a Objetos
4 - Referência Direta a Objeto Ocorre quando a aplicação expõe referência direta a objeto interno Arquivo Diretório Registro de base de dados URL Parâmetro
Referência Direta a Objeto Permite ao atacante manipular a referência e burlar controles de acesso Exemplo: Aplicação utiliza CPF na URL para identificar usuário Atacante manipula a URL e altera o CPF Atacante acessa dados de outros CPFs
Referência Direta a Objeto Ambientes afetados: Qualquer ambiente web Solução Usar sessões Armazenar identificadores internos na sessão do usuário Usar identificadores de sessão aleatórios (token)
Tratando em php O recurso de _autoload é uma boa opção
Tratando as vulnerabilidades do Top 10 do OWASP 5 – CSRF (Cross Site Request Forgery)
5 - Cross Site Request Forgery (CSRF) Usar sessão já aberta pelo usuário para enviar comandos para a aplicação Usuário loga na aplicação alvo Usuário acessa site do atacante Scripts do atacante usam a sessão da aplicação alvo Enviam comandos em nome do usuário na sessão já aberta
Cross Site Request Forgery Quando ocorre: Não há verificação de autorização Ação é executada quando credenciais são enviadas na URL As credenciais são submetidas automaticamente Cookies
Cross Site Request Forgery A maioria das aplicações atuais estão vulneráveis Aplicações de Internet Banking pedem a senha para operações de atualização Ambientes afetados: Todos os ambientes web
Tratando em php Evite Que funções críticas na aplicação sejam feitas sem a necessidade de re-autenticação Não use apenas  $_REQUEST[‘input‘] Utilize Corretamente $_COOKIE, $_GET e $_POST Token em todas as requisições
Tratando as vulnerabilidades do Top 10 do OWASP 6 – Vazamento de Informações
6 - Vazamento de Informações Nome completo: Vazamento de informações e tratamento de erros inapropriado A própria aplicação informa ao atacante: Configurações Arquitetura interna Plataformas Dados sigilosos
Vazamento de Informações Formas de vazamento: Tempo de resposta Respostas diferentes para diferentes entradas Página de erro com códigos diferentes Páginas de erros com informações de debug Stack trace na página de erro Ambientes afetados: Todos
Tratando em php Cuidado com informações sobre o ambiente Phpinfo() Server-Status Configure no php.ini log_errors = On  display_errors = Off
Tratando as vulnerabilidades do Top 10 do OWASP 7 – Furo de Autenticação
7 - Furo de Autenticação Nome completo: Furo de autenticação e gerência de sessão Problemas mais comuns: Falhas de proteção de credenciais Falha de proteção de identificadores de sessão Ambientes afetados: Todos os ambientes
Furo de Autenticação Conseqüências: Roubos de contas Seqüestro de sessão Violações de privacidade Acessos não autorizados Personificação de usuários ( impersonation )
Dicas Nunca faça Armazenamento de senhas. Nem mesmo criptografadas Não use mais md5 e sha-1 Faça Armazene apenas o hash + salt das senhas Fortaleça as configurações de sessão session.save_path = [diretório protegido] session.cookie_httponly = 1 (acesso apenas por HTTP) session.cookie_secure = 1 (força o uso de HTTPS)
Números aleatórios Cuidado com as funções geradoras de números aleatórios rand(), srand(), mt_rand(), mt_srand() Uma falha na implementação destas funções causou inúmeras falhas em sistemas de autenticação em projetos open source
Tratando em php Utilize outros algoritmos de hash
Tratando as vulnerabilidades do Top 10 do OWASP 8 – Armazenamento Criptográfico
8 - Armazenamento Criptográfico  Nome Completo: Armazenamento Criptográfico Inseguro Aplicações tem dados sensíveis Algumas não criptografam Outras criptografam de forma insegura Algoritmos mal concebidos Mecanismos inapropriados Erros no uso de criptografia Mesmo com algoritmos adequados
Armazenamento Criptográfico Ambientes afetados Todos Problemas mais comuns: Não criptografar dados sensíveis Uso inseguro de algoritmos fortes Chaves fracas Uso de algoritmos caseiros ou de algoritmos fracos Armazenar chaves em sistemas de armazenamento desprotegidos
Tratando em php Use Mcrypt com algoritmos conhecidos de criptografia Cuidados Implementação do algoritmo Armazenamento da chave Cifra de César e XOR não funcionam
Tratando as vulnerabilidades do Top 10 do OWASP 9 – Comunicação Insegura
9 - Comunicações inseguras Todo o tráfego autenticado da aplicação deve ser criptografado Usar SSL ou equivalente: Entre aplicação e cliente Entre aplicação e back-end (base de dados) Sempre autenticar (ou re-autenticar) antes de transmitir dados sigilosos Ambientes afetados: todos
Tratando as vulnerabilidades do Top 10 do OWASP 10 – Restrições de Acesso a URL
10 - Restrições de acesso a URLs Nome completo: Falha ao restringir acesso a URLs Aplicações tem páginas internas Estas páginas só devem ser acessadas: Por usuários autenticados ou Após determinada operação O acesso a páginas internas deve ser controlado corretamente
Restrições de acesso a URLs Ambientes Afetados: Todos Problemas: Navegação forçada: Adivinhação de URLs Força bruta Ocorre porque a página não verifica se usuário deveria acessar
Tratando em php Controle de acesso Estabeleça um bom controle de acesso as informações da aplicação Hardening de sessão A sessão é responsável por manter o estado das conexões, garanta que as sessões terão segurança adequada
Tratando as vulnerabilidades do Top 10 do OWASP Encerrando
Fiquem de olho Port do projeto ESAPI para php Biblioteca completa para tratar as vulnerabilidades do Top 10 AppSec Latin America 2009 Conferência que será realizada no Brasil e irá unir especialistas do mundo todo para tratar de segurança em aplicações WEB
REFERÊNCIAS http://www.owasp.org Code Review Guide www.owasp.org/index.php/Category:OWASP_Code_Review_Project Development Guide www.owasp.com.br/index.php/Category:OWASP_Guide_Project Testing Guide www.owasp.com.br/index.php/Category:OWASP_Testing_Project Application Security Desk Reference www.owasp.com.br/index.php/Category:OWASP_ASDR_Project Top Ten Project www.owasp.com.br/index.php/Category:OWASP_Top_Ten_Project http://br.php.net/manual/
Perguntas Obrigado

Tratando as vulnerabilidades do Top 10 com php

  • 1.
    Tratando as vulnerabilidadesdo Top 10 do OWASP Php Conference – São Paulo 28/11/2008 Wagner Elias Research & Development Manager Brazilian Chapter Leader http://wagnerelias.com http://www.conviso.com.br
  • 2.
    Agenda Um poucode OWASP Top 10 2007 1 – XSS (Cross Site Scripting) 2 – Falhas de Injeção 3 – Execução Maliciosa de Arquivos 4 – Referência Direta a Objetos 5 – CSRF (Cross Site Request Forgery) 6 – Vazamento de Informações 7 – Furo de Autenticação 8 – Armazenamento Criptográfico 9 – Comunicação Insegura 10 – Restrição de Acesso a URL Encerramento
  • 3.
    O que éOWASP? Open Web Application Security Project Educar e conscientizar segurança para desenvolvedores, designers, arquitetos e organizações.
  • 4.
    Como funciona? DocumentaçãoWiki e Books Code Review, Testing Guide, Building, Top Ten, … Code Projects Projetos ferramentas ofensivas/defensivas Processos, procedimentos … Educação e outros Chapters (Capítulos) Grupo de usuários +100 e crescendo Conferências Grandes e pequenos eventos ao redor do mundo
  • 5.
    Brazilian Chapter (OWASP-BR)Positive Security Project Melhorar a postura das empresas em relação a segurança em aplicações Application Security Desk Reference Project (ASDR) Guia de referência sobre segurança em aplicações web Princípios, agentes de ameça, controles, vulnerabilidades e ataques, impactos de negócio e técnicos Traduções WebGoat Top Ten Project Lista de discussão ativa, participe! http://lists.owasp.org/mailman/listinfo/owasp-brazilian Acompanhe e colabore com o wiki do capítulo http://www.owasp.org/index.php/Brazilian
  • 6.
  • 7.
  • 8.
    Tratando as vulnerabilidadesdo Top 10 do OWASP Top 10 2007
  • 9.
    O que é?Estudo da OWASP que busca identificar e classificar as 10 principais vulnerabilidades encontradas em ambientes WEB Traduzido para vários idiomas e atualizado regularmente Pt-Br:http://www.owasp.org/images/4/42/OWASP_TOP_10_2007_PT-BR.pdf
  • 10.
    Tratando as vulnerabilidadesdo Top 10 do OWASP 1 – XSS (Cross Site Scripting)
  • 11.
    1 - CrossSite Scripting (XSS) Permite que um atacante insira um script na página que será mostrada à vítima. Afeta qualquer ambiente web Efeitos: Seqüestro de sessão Inserção de código ou conteúdo hostil Roubo de informações Controle do navegador da vítima
  • 12.
    Tipos de CrossSite Scripting Refletido Quando o site reflete para o usuário todo ou parte do conteúdo da requisição Armazenado O script é armazenado em base de dados e é mostrado às vítimas posteriormente Inserção DOM Os scripts da página são alterados
  • 13.
    Tratando em phpSanitize os dados usando htmlentities() ou htmlspecialchars()
  • 14.
    Tratando as vulnerabilidadesdo Top 10 do OWASP 2 – Falha de Injeção
  • 15.
    2 - Falhasde Injeção Várias linguagens envolvidas: SQL LDAP HTML XSLT XML Comandos de interpretadores do sistema operacional (cmd, shell, etc)
  • 16.
    Falhas de InjeçãoComo acontecem: Dados fornecidos por usuários são usados como parte de comandos ou consultas Dados são manipulados para alterar os comandos enviados ao interpretador Atacante pode se utilizar das permissões da aplicação para ler e/ou alterar dados Pode permitir execução de programas
  • 17.
    Falhas de InjeçãoAmbientes afetados: Quaisquer ambientes que utilizem interpretadores Muito comum no acesso a bases de dados SQL Injection
  • 18.
    Dicas Valide sempreExpressões regulares são sempre uma boa Adote camada de abstração de dados Bibliotecas de ORM são bastante eficazes para evitar falhas de SQL Injection. Exemplo ADOdb, PDO. Use procedimentos armazenados Prepared Statements (Bind Variables) Evite usar a chamada padrão de query do MySQL ( mysqli_multi_query()) use mysqli_query() Não confie No usuário e no magic_quotes /addslashes() 
  • 19.
    Tratando em phpSanitize os dados usando escapeshellcmd()
  • 20.
    Tratando em phpEvite, mas se precisar interagir com shell use escapeshellarg()
  • 21.
    Tratando em phpReferenciando path de forma segura, evitando path traversal realpath()
  • 22.
    Tratando em phpEvitando SQL Injection com mysql_escape_string() (não é uma solução definitiva, sujeito a SQL Injection usando técnicas de encode.) Só Bind Variables Salva 
  • 23.
    Tratando as vulnerabilidadesdo Top 10 do OWASP 3 – Execução Maliciosa de Arquivos
  • 24.
    3 - ExecuçãoMaliciosa de Arquivo Execução de conteúdo externo ao código da aplicação Permite realizar Execução remota de código Instalação de rootkits
  • 25.
    Execução Maliciosa deArquivo Ambientes afetados: Sistemas que aceitam nomes de arquivos Sistemas que recebem arquivos Ambientes interpretados
  • 26.
    Tratando em phpDesabilite estas funções que são habilitadas por default allow_url_fopen e allow_url_include Cuidado com as funções eval() passthru() Streams (stream_*)
  • 27.
    Tratando as vulnerabilidadesdo Top 10 do OWASP 4 – Referência Direta a Objetos
  • 28.
    4 - ReferênciaDireta a Objeto Ocorre quando a aplicação expõe referência direta a objeto interno Arquivo Diretório Registro de base de dados URL Parâmetro
  • 29.
    Referência Direta aObjeto Permite ao atacante manipular a referência e burlar controles de acesso Exemplo: Aplicação utiliza CPF na URL para identificar usuário Atacante manipula a URL e altera o CPF Atacante acessa dados de outros CPFs
  • 30.
    Referência Direta aObjeto Ambientes afetados: Qualquer ambiente web Solução Usar sessões Armazenar identificadores internos na sessão do usuário Usar identificadores de sessão aleatórios (token)
  • 31.
    Tratando em phpO recurso de _autoload é uma boa opção
  • 32.
    Tratando as vulnerabilidadesdo Top 10 do OWASP 5 – CSRF (Cross Site Request Forgery)
  • 33.
    5 - CrossSite Request Forgery (CSRF) Usar sessão já aberta pelo usuário para enviar comandos para a aplicação Usuário loga na aplicação alvo Usuário acessa site do atacante Scripts do atacante usam a sessão da aplicação alvo Enviam comandos em nome do usuário na sessão já aberta
  • 34.
    Cross Site RequestForgery Quando ocorre: Não há verificação de autorização Ação é executada quando credenciais são enviadas na URL As credenciais são submetidas automaticamente Cookies
  • 35.
    Cross Site RequestForgery A maioria das aplicações atuais estão vulneráveis Aplicações de Internet Banking pedem a senha para operações de atualização Ambientes afetados: Todos os ambientes web
  • 36.
    Tratando em phpEvite Que funções críticas na aplicação sejam feitas sem a necessidade de re-autenticação Não use apenas $_REQUEST[‘input‘] Utilize Corretamente $_COOKIE, $_GET e $_POST Token em todas as requisições
  • 37.
    Tratando as vulnerabilidadesdo Top 10 do OWASP 6 – Vazamento de Informações
  • 38.
    6 - Vazamentode Informações Nome completo: Vazamento de informações e tratamento de erros inapropriado A própria aplicação informa ao atacante: Configurações Arquitetura interna Plataformas Dados sigilosos
  • 39.
    Vazamento de InformaçõesFormas de vazamento: Tempo de resposta Respostas diferentes para diferentes entradas Página de erro com códigos diferentes Páginas de erros com informações de debug Stack trace na página de erro Ambientes afetados: Todos
  • 40.
    Tratando em phpCuidado com informações sobre o ambiente Phpinfo() Server-Status Configure no php.ini log_errors = On display_errors = Off
  • 41.
    Tratando as vulnerabilidadesdo Top 10 do OWASP 7 – Furo de Autenticação
  • 42.
    7 - Furode Autenticação Nome completo: Furo de autenticação e gerência de sessão Problemas mais comuns: Falhas de proteção de credenciais Falha de proteção de identificadores de sessão Ambientes afetados: Todos os ambientes
  • 43.
    Furo de AutenticaçãoConseqüências: Roubos de contas Seqüestro de sessão Violações de privacidade Acessos não autorizados Personificação de usuários ( impersonation )
  • 44.
    Dicas Nunca façaArmazenamento de senhas. Nem mesmo criptografadas Não use mais md5 e sha-1 Faça Armazene apenas o hash + salt das senhas Fortaleça as configurações de sessão session.save_path = [diretório protegido] session.cookie_httponly = 1 (acesso apenas por HTTP) session.cookie_secure = 1 (força o uso de HTTPS)
  • 45.
    Números aleatórios Cuidadocom as funções geradoras de números aleatórios rand(), srand(), mt_rand(), mt_srand() Uma falha na implementação destas funções causou inúmeras falhas em sistemas de autenticação em projetos open source
  • 46.
    Tratando em phpUtilize outros algoritmos de hash
  • 47.
    Tratando as vulnerabilidadesdo Top 10 do OWASP 8 – Armazenamento Criptográfico
  • 48.
    8 - ArmazenamentoCriptográfico Nome Completo: Armazenamento Criptográfico Inseguro Aplicações tem dados sensíveis Algumas não criptografam Outras criptografam de forma insegura Algoritmos mal concebidos Mecanismos inapropriados Erros no uso de criptografia Mesmo com algoritmos adequados
  • 49.
    Armazenamento Criptográfico Ambientesafetados Todos Problemas mais comuns: Não criptografar dados sensíveis Uso inseguro de algoritmos fortes Chaves fracas Uso de algoritmos caseiros ou de algoritmos fracos Armazenar chaves em sistemas de armazenamento desprotegidos
  • 50.
    Tratando em phpUse Mcrypt com algoritmos conhecidos de criptografia Cuidados Implementação do algoritmo Armazenamento da chave Cifra de César e XOR não funcionam
  • 51.
    Tratando as vulnerabilidadesdo Top 10 do OWASP 9 – Comunicação Insegura
  • 52.
    9 - Comunicaçõesinseguras Todo o tráfego autenticado da aplicação deve ser criptografado Usar SSL ou equivalente: Entre aplicação e cliente Entre aplicação e back-end (base de dados) Sempre autenticar (ou re-autenticar) antes de transmitir dados sigilosos Ambientes afetados: todos
  • 53.
    Tratando as vulnerabilidadesdo Top 10 do OWASP 10 – Restrições de Acesso a URL
  • 54.
    10 - Restriçõesde acesso a URLs Nome completo: Falha ao restringir acesso a URLs Aplicações tem páginas internas Estas páginas só devem ser acessadas: Por usuários autenticados ou Após determinada operação O acesso a páginas internas deve ser controlado corretamente
  • 55.
    Restrições de acessoa URLs Ambientes Afetados: Todos Problemas: Navegação forçada: Adivinhação de URLs Força bruta Ocorre porque a página não verifica se usuário deveria acessar
  • 56.
    Tratando em phpControle de acesso Estabeleça um bom controle de acesso as informações da aplicação Hardening de sessão A sessão é responsável por manter o estado das conexões, garanta que as sessões terão segurança adequada
  • 57.
    Tratando as vulnerabilidadesdo Top 10 do OWASP Encerrando
  • 58.
    Fiquem de olhoPort do projeto ESAPI para php Biblioteca completa para tratar as vulnerabilidades do Top 10 AppSec Latin America 2009 Conferência que será realizada no Brasil e irá unir especialistas do mundo todo para tratar de segurança em aplicações WEB
  • 59.
    REFERÊNCIAS http://www.owasp.org CodeReview Guide www.owasp.org/index.php/Category:OWASP_Code_Review_Project Development Guide www.owasp.com.br/index.php/Category:OWASP_Guide_Project Testing Guide www.owasp.com.br/index.php/Category:OWASP_Testing_Project Application Security Desk Reference www.owasp.com.br/index.php/Category:OWASP_ASDR_Project Top Ten Project www.owasp.com.br/index.php/Category:OWASP_Top_Ten_Project http://br.php.net/manual/
  • 60.