Segurança em Aplicações Web com PHP

6,720
-1

Published on

Palestra sobre segurança em aplicações web com PHP apresentada no V Ensol (Encontro de Software Livre da Paraíba) no dia 22 de julho de 2011.

Published in: Technology
0 Comments
12 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,720
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
257
Comments
0
Likes
12
Embeds 0
No embeds

No notes for slide

Segurança em Aplicações Web com PHP

  1. 1. Segurança em AplicaçõesWeb com PHP Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  2. 2. Sobre mim● Mestre em Informática pela UFPB● Professor substituto no IFPB – C, PHP, Comércio Eletrônico● Professor na Faculdade IDEZ – HTML/CSS/PHP● Lexa Sistemas – www.lexasistemas.com.br – Criação de sites em Drupal● Letz – www.letz.com.br – Rede social para divulgação de eventos Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  3. 3. Esta palestra é sobre● Segurança em aplicações web – Boas práticas de programação – Erros comuns – Detalhes do PHP – Tipos de ataques a sites – Autenticação e autorização – Foco na implementação com PHP ● Pode ser aplicado para outras linguagens Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  4. 4. Esta palestra não é sobre● Segurança de servidores – Configuração de servidores – Firewalls – DNS, FTP, SSH, HTTPS, … – DoS, IP spoofing, phising, … – Spam Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  5. 5. Segurança e a linguagem PHP● Por que PHP?● PHP surgiu de forma despretensiosa● Acabou se tornando a linguagem server-side mais utilizada na web – Facilidade, rapidez, versatilidade, etc. Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  6. 6. Segurança e a linguagem PHP● Grandes poderes trazem grandes responsabilidades● Programadores inexperientes● Autodidatismo é bom, mas... – Aprendo apenas o que me interessa – Questões importantes acabam ficando de lado● Prazos apertados... Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  7. 7. Alguns casos recentes● Site Mysql.com tem banco de dados comprometido [1] – Ataque via SQL Injection – Acesso a usuários, senhas, e-mails, etc.[1] http://www.computerworld.com/s/article/9215249/MySQL_Web_site_falls_victim_to_SQL_injection_attack Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  8. 8. Alguns casos recentes● Sony  Sony Pictures[1]  Sony Japan[2]  Sony Greece[3]  Sony Canada[4][1] http://www.bbc.co.uk/news/technology-13642145[2] http://nakedsecurity.sophos.com/2011/05/24/sony-music-japan-hacked-through-sql-injection-flaw/[3] http://nakedsecurity.sophos.com/2011/05/22/sony-bmg-greece-the-latest-hacked-sony-site/[4] http://www.computerworld.com/s/article/9217028/Sony_says_hacker_stole_2_000_records_from_Canadian_site Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  9. 9. Alguns casos recentes● Sites do Governo Brasileiro – Vários órgãos públicos tiveram seu site atacado – Portal Brasil, Presidência, Senado, Receita Federal, IBGE, entre outros – Ataques de DoS, defacements e alguns roubos de dados Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  10. 10. Vamos ao que interessa Show me the code!Segurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  11. 11. Configurações do PHP● register_globals  Variáveis globais são criadas automaticamente a partir de parâmetros GET, POST, cookies, sessões, etc.  Desabilitado por padrão a partir do PHP 4.2  Depracated no PHP 5.3 Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  12. 12. Tratamento de erros● Algumas configurações relacionadas a erros:  error_reporting: nível de erro a ser reportado – E_ALL ou E_ALL | E_STRICT  display_errors: exibir ou não erros na tela – Em produção, deve ser sempre desabilitado  log_errors: fazer log dos erros em arquivo  error_log: arquivo onde será feito log Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  13. 13. Manipulação de erros● set_error_handler()  Permite usar uma função própria para o tratamento dos erros● set_exception_handler()  Permite usar uma função para tratar exceções não capturadas Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  14. 14. set_error_handler()Segurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  15. 15. Recomendações e boas práticasSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  16. 16. Programação defensiva● “Prevenir é melhor do que remediar”● A internet não é um lugar amigável● Um plano B pode salvar a sua vida (seu emprego, sua reputação, etc.)● Pense sempre em minimizar os riscos Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  17. 17. KISS● Keep It Simple, Stupid● Evite a complexidade desnecessária● Abra mão da “esperteza” em prol da segurança Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  18. 18. KISSSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  19. 19. Regra de Ouro Toda entrada deve ser filtrada e toda saída deve ser “escapada”Segurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  20. 20. Filtro e Validação● Você está recebendo o que está esperando receber?● Trate todo o input da sua aplicação – Dados de formulários – Parâmetros da URL – Informações de cookies – Dados de sistemas externos● Validação x Filtro (sanitizing) Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  21. 21. Validação x Filtro CPF 241.775.842-31 filtro/sanitizing validação 24177584231 Erro! Formato inválido!Segurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  22. 22. API Data Filtering● Funções para tratar o input usando vários tipos de filtro/validação● Disponível a partir do PHP 5.2● Pode substituir totalmente o acesso aos arrays superglobais – $_GET, $_POST, $_COOKIE, $_SERVER, $_ENV Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  23. 23. filter_inputSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  24. 24. Escapando a Saída● Regra de ouro: … toda saída deve ser “escapada” – Pelo menos a toda a saída não confiável● O que quer dizer “escapar”? – Vem do inglês escape – Nesse contexto, quer dizer que devemos converter determinados caracteres (ou sequências)● Objetivo: manter a integridade da saída Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  25. 25. Escapando o HTML● A saída mais comum do PHP é o HTML● No HTML temos, basicamente:  Tags (abertura, fechamento, atributos) – Definem a estrutura do documento  Conteúdo das tags (valores, texto)● Escape no HTML significa, normalmente, impedir que hajam tags onde não deveria haver Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  26. 26. Escapando o HTML● Funções: htmlespecialchars(), htmlentities()● API Data Filtering: filter_input(), filter_var() Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  27. 27. Principais Tipos de Ataques e VulnerabilidadesSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  28. 28. SQL Injection● Consiste em tentar inserir um trecho de código SQL em uma query que será enviada a um banco de dados Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  29. 29. SQL InjectionSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  30. 30. Exploits of a momSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  31. 31. SQL Injection● SQL Injection é uma das vulnerabilidades mais comuns em aplicações PHP – Felizmente, é muito fácil se proteger contra esse tipo de ataque● Basta escapar os dados enviados nas queries – Lembra da regra de ouro? – Ao utilizar banco de dados, as queries são dados de saída (output) da aplicação – Portanto, devem ser escapadas Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  32. 32. Escapando Valores de Queries● Para escapar os valores enviados ao banco, pode-se usar as funções de cada extensão – MySQL: mysql_real_escape_string() – PostgreSQL: pg_escape_string() – … – Em último caso, pode-se usar a função addslashes()● Interfaces OO e camadas de abstração geralmente têm um método equivalente – PDO: quote() Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  33. 33. Bound Parameters● As camadas de abstração, normalmente, também tem suporte a parâmetros bound – O valores são vinculados através de marcadores – A própria biblioteca faz o escape dos dados  Oferecem uma ótima proteção contra SQL Injection Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  34. 34. Escape de Identificadores● Normalmente, apenas os valores precisam ser escapados● Em alguns casos, também é preciso escapar (ou filtrar) os identificadores – Nomes de tabelas e campos – Nos casos onde eles vêm de uma fonte externa● No MySQL, os identificadores pode ser escritos entre crases. – Ex: SELECT * FROM `tablename` Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  35. 35. XSS Cross-Site ScriptingSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  36. 36. Cross-Site Scripting● Também é um dos tipos mais comuns de ataques● Toda aplicação que exibe dados recebidos (input) corre riscos  Se esses dados não forem devidamente filtrados e escapados, a aplicação estará vulnerável Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  37. 37. Cross-Site Script● O atacante normalmente explorará essa falha inserindo tags e código javascript no seu HTML – Tags <iframe> chamando páginas maliciosas – Código js para redirecionar o usuário para outras páginas – Código js para ler os cookies do usuário e enviá-los para outros sites – Código js para alterar as informações do site (defacement) Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  38. 38. Cross-Site Scripting● Para se proteger de XSS, basta fazer o que já foi dito  Filtrar a entrada, e  Escapar a saída – htmlentities, htmlespecialchars, etc. Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  39. 39. Cross-Site Scripting DemonstraçãoSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  40. 40. CSRF Cross-Site Request ForgerySegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  41. 41. CSRF● Como o nome diz, consiste em tentar forjar uma requisição de um site para outro● O atacante usa a própria vítima para fazer a requisição, sem que ela tenha conhecimento● Portanto, é muito difícil identificar se uma requisição é legítima ou um ataque CSRF Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  42. 42. CRSFUma linha de código vale mais que mil palavras (demonstração) Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  43. 43. CSRF● Então como se defender do CSRF? Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  44. 44. GET x POST● Antes de tudo  Entenda a diferença entre GET e POST  Funcionamento  Objetivos  Saiba quando usar cada um Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  45. 45. GET● O método GET deve ser utilizado apenas para consultas  Exibição de páginas  Listagens  Pesquisas  Downloads, etc. Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  46. 46. POST● O método POST deve ser utilizado para as operações  Cadastros  Atualização  Exclusão  Autenticação Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  47. 47. GET● Não use o GET para realizar operações*● Nada que vá modificar os seus dados● Dessa forma, os ataques CSRF via GET não causarão nenhum dano Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  48. 48. Operações via GET● Às vezes, é necessário realizar operações via GET – Ativação de usuário – Reset de senha● Normalmente, o usuário recebe o link por e- mail● Nesses casos, o link deve conter um código gerado aleatoriamente – De preferência, com data de expiração Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  49. 49. POST● Entretanto, ainda estamos vulneráveis a ataques CSRF via POST● Uma solução é utilizar tokens na sessão  Os tokens são gerados de forma aleatória  São armazenados na sessão e incluídos no formulário  Ao receber a requisição, os tokens da sessão e do POST são comparados Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  50. 50. POST● Outras técnicas ainda podem ser utilizadas para incrementar a segurança  Incluir um tempo de expiração para os tokens  Validar o cabeçalho HTTP_REFERER (embora não seja 100% confiável) Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  51. 51. Request SpoofingSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  52. 52. Request Spoofing● Request Spoofing é a tentativa de manipular requisições de alguma forma● A forma mais simples é alterar manualmente os parâmetros em uma URL● Também é possível alterar os elementos de um formulário – Modificar atributos (maxlength, disabled, readonly, name, value) – Inserir ou remover elementos Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  53. 53. Request Spoofing● Para alterar um formulário, basta simplesmente salvar a página no seu computador e editá-la● Ou utilizar ferramentas como o Firebug, que permite editar todo o HTML● Outras ferramentas permitem até executar códigos javascript de terceiros● Observação – A saída que você gera na aplicação (HTML + CSS + Javascript) não é mais sua, é do cliente Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  54. 54. Request Spoofing● Com um pouco mais de conhecimento, é possível criar requisições HTTP completas – Pode ser feito na linha de comando, com o comando telnet, por exemplo – Pode-se criar um script em qualquer linguagem que se conecta ao socket do servidor web – Existem várias outras formas● O HTTP é um padrão aberto e sua aplicação deve estar pronta para isso Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  55. 55. Request Spoofing● Como se proteger nessa situação? Filtrar a entrada … … e escapar a saída Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  56. 56. ArquivosSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  57. 57. Exposição de Código● Deve-se evitar arquivos PHP com extensão diferente de .php (ex: .inc)  Ou deve-se ter certeza que estão fora da raiz web  Ou que o Apache está configurado corretamente para executá-los e não exibi-los Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  58. 58. Inclusão de Arquivos● Inclusão arquivos errados: index.php?usuario=../../admin● Code injection: POST path=http://meusite.com Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  59. 59. Command Injection● Se a sua aplicação executa comandos do shell, também é preciso escapá-los● Funções  escapeshellcmd  escapeshellarg Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  60. 60. Autenticação e AutorizaçãoSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  61. 61. Autenticação● É o processo de identificar um usuário● Ou seja, verificar se a pessoa que está acessando corresponde ao seu usuário● Dependendo de sua aplicação, considere o uso do protocolo HTTPS para a autenticação Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  62. 62. Autorização● Também é chamado de controle de acesso● Consiste em determinar se o usuário está autorizado a acessar um determinado recurso – Página, operação, consulta, etc.● Normalmente, as informações de autorização ficam na sessão● Para processos críticos, considere fazer uma nova autenticação Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  63. 63. Finalizando...Segurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  64. 64. Dicas finais● Crie o hábito de programar de forma segura● Em uma equipe, todos os programadores devem ter os conceitos básicos em mente● Estabeleça uma política de segurança previamente● Esteja atualizado Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  65. 65. OWASP● The Open Web Application Secutiry Project – Padrões relacionados a segurança – Levantamento sobre vulnerabilidades e ataque – Tecnologias e ferramentas – Notícias, etc.● Projeto apoiado por grandes empresas e universidades  Amazon, IBM, Mozilla, Oracle, etc. Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  66. 66. LivrosSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011
  67. 67. Links● OWASP: www.owasp.org● Manual do PHP: http://php.net/manual/en/security.php● PHP Security Consortium: http://phpsec.org/ Segurança em Aplicações Web com PHP V Ensol Gedvan Dias 22 de julho de 2011
  68. 68. Obrigado! gedvan@gmail.com - @gedvanSegurança em Aplicações Web com PHP V EnsolGedvan Dias 22 de julho de 2011

×