SlideShare uma empresa Scribd logo
1 de 50
Segurança em Rails
Marcelo Castellani
marcelo@mindaslab.com
O palestrante (eu)
• Desenvolvedor de
software desde 1989;
• Membro do NetBeans
Translation Team;
• Um dos fundadores
do grupo de usuários
de Ruby de SP;
• Idealizador do evento
Ruby + Rails no
mundo real.
O que é segurança?
• Confiabilidade
• Integridade
• Confidencialidade
Confiabilidade
• Em geral, confiabilidade (definição
sistêmica) é a capacidade de uma pessoa
ou sistema de realizar e manter seu
funcionamento em circunstâncias de
rotina, bem como em circunstâncias hostis
e inesperadas.
• http://pt.wikipedia.org/wiki/Confiabilidade
Integridade
• Em segurança da informação integridade
significa ter a disponibilidade de
informações confiáveis, corretas e
dispostas em formato compatível com o
de utilização, ou seja, informações
íntegras.
• http://pt.wikipedia.org/wiki/Integridade
Confidencialidade
• Confidencialidade é a propriedade de que
a informação não estará disponível ou
divulgada a indivíduos, entidades ou
processos sem autorização.
• http://pt.wikipedia.org/wiki/Confidencialidade
O que é segurança?
• Confiabilidade
• Integridade
• Confidencialidade
Sessões
HTTP É UM PROTOCOLO QUE
NÃO MANTÉM ESTADO
Sessões fazem com o estado seja mantido.
O Que é uma sessão?
• Uma sessão consiste em um hash de
valores e um id de sessão, geralmente
uma string com 32 caracteres, para
identificar o hash.
• Cada cookie enviado para o browser do
usuário inclui o id de sessão.
• No caminho inverso, o browser enviará o
id de sessão para o servidor em cada
request.
Pra que serve uma sessão?
• A maioria das aplicações precisam ter
controle sobre alguns aspectos
relacionados ao estado de um usuário
particular como um carrinho de compras
ou o id do usuário atualmente autenticado.
• Sem a ideia de sessões, o usuário teria
que se identificar a cada nova requisição.
Seqüestro/Roubo de sessãoLogin
Usuário
real faz
login
no site
Sniffingderede
Invasor
obtém
o ID do
usuário
Sequestro
Invasor
passa
a ser o
usuário
real
Ethereal/Wireshark
Rails e Sessões
• O Rails fornece vários métodos para
salvar os dados de sessões, incluindo o
ActiveRecordStore e o CookieStore.
• O ActiveRecordStore salva os dados da
sessão numa tabela no banco de dados.
• O CookieStore salva os dados da sessão
como um cookie no cliente.
Por que não usar cookies?
• Outro exemplo clássico de problema com
cookies é o “replay de cookies”.
Replay de cookies
Um usuário recebe
créditos, o valor é
armazenado na sessão (o
que é uma má idéia, de
qualquer forma, mas nós
iremos fazer isso para fins
de demonstração).
O usuário compra algo.
Replay de cookies
Seu novo
crédito, mais
baixo, será
armazenado na
sessão.
O lado negro do
usuário o força a
pegar o cookie do
primeiro passo (o
qual ele copiou) e
substituir o cookie
atual no
navegador.
O usuário tem
seus créditos de
volta.
Como evitar?
• A melhor solução contra ataques de
replay é não guardar este tipo de
informação no cookie de sessão, mas sim
no banco de dados.
• Neste caso guarde os créditos no banco
de dados o id do usuário atual na sessão
(pode ser até num cookie, apesar de eu
nunca achar uma boa idéia usar cookies).
Evitar cookies na minha aplicação
• Para não usar cookies em sua aplicação vá
em config/initializers/session_store.rb e
use:
ActionController::Base.session_store = :active_record_store
Fixação de sessão
Como evitar?
• Uma única linha de código salva sua vida
nesses casos:
reset_session
user_sessions_controller.rb
def create
reset_session
@client_session = ClientSession.new(params[:client_session])
if @client_session.save
flash[:notice] = "Login successful!"
redirect_back_or_default '/'
else
flash[:notice] = "Invalid login name or password."
render :action => :new
end
end
Outras maneiras de proteger-se
• salvar propriedades específicas do
usuário na sessão,
• verificá-las a cada novo request,
• negar acesso se a informação não bater.
Não use o IP para salvar dados
• Ao salvar o endereço IP, você deve ter em
mente que existem provedores de
serviços de Internet ou grandes
organizações que colocam seus usuários
atrás de proxies. Estes proxies podem
mudar durante a duração de uma sessão,
logo estes usuários não serão capazes de
utilizar sua aplicação, ou apenas poderão
usá-la de forma limitada.
Resumo sobre sessões
• Use authlogic ou algo parecido para
gerenciar logins em seu software.
• Use algoritmos de criptografia complexos,
nada de hashes. O BCrypt é a melhor
opção.
• Reinicie sempre a sessão antes de a criar.
• Evite usar cookies sempre que possível.
• Evite usar o IP para manter dados em
sessões.
Boas práticas em sessões
• Não guarde dados críticos na sessão.
• Não guarde objetos muito grandes
em uma sessão.
• Evite usar cookies para armazenar
dados da sessão.
BCrypt
http://gom-jabbar.org/articles/2008/12/03/why-you-should-use-bcrypt-to-store-your-passwords
Mais sobre criptografia
Cross-Site reference forgery (CSRF)
Como funciona
• Bob navega por um fórum de discussão e visualiza uma
mensagem criada por um hacker onde existe um elemento
HTML de imagem forjado. O elemento referencia um
comando na aplicação de gerenciamento de projetos de
Bob, ao invés de um arquivo de imagem.
<img src="http://www.webapp.com/project/1/destroy"/>
• A sessão de Bob em www.webapp.com ainda está ativa,
porque ele não fez seu logout alguns minutos atrás.
• Por acessar a mensagem, o navegador encontra uma tag
de imagem. Ele tenta carregar a imagem suspeita a partir
de www.webapp.com. Como explicado anteriormente, ele
também enviará o cookie com id de sessão válido.
Como funciona
• A aplicação web em www.webapp.com verifica a
informação do usuário no respectivo hash de sessão e
destroy o projeto com ID 1. Ele então retorna a página
com o resultado da operação, o que é um resultado
inesperado para o navegador, logo ele não irá exibir a
imagem.
• Bob não percebe o ataque — Mas alguns dias mais
tarde ele percebe que o projeto número um se foi.
Cross-Site reference forgery (CSRF)
Como evitar?
• Saiba como usar o HTTP:
• Get serve para perguntas, como uma
pesquisa ou operação de leitura;
• Post server para executar ordens.
• É muito importante conhecer HTTP pois
ele é a base de aplicações internet.
• É muito importante conhecer o Rest, pois
o Rails faz uso de Rest o tempo todo.
“Every developer
working with the Web
needs to read this
book.”
David Heinemeier
Hansson, creator of
the Rails framework
Injection
• Injeção é uma categoria de ataques que
introduzem código malicioso ou
parâmetros em uma aplicação web de
forma a executar estes códigos dentro do
contexto de segurança da aplicação. Os
exemplos mais proeminentes de injeção
são o cross-site scriptintg (XSS) e o SQL
injection.
Injection não é algo simples
• Injeção é algo complicado, porque um
mesmo código ou parâmetro pode ser
malicioso em um contexto e
completamente inofensivo em outro. Um
contexto pode ser um script, uma query ou
linguagem de programação, o shell ou um
método do Ruby/Rails.
SQL Injection no banco de dados de usuários do
Speedy, em 10 de julho de 2009
http://telefonica.ath.cx/
SQL INJECTION NÃO É
EXCLUSIVIDADE DO RAILS
O site da telefonica é em PHP.
USUÁRIOS SEMPRE SÃO A
PARTE MAIS FRÁGIL DA
SEGURANÇA
E não há nada que você possa fazer.
Seu site?
Gerenciamento de usuários
• Exija a autenticação de usuários usando
plugins prontos para isso, como o
Authlogic;
• No cadastramento de seu usuário, exija
que o mesmo digite duas vezes a senha e
o e-mail;
• Crie regras para que o usuário não crie
senhas como “eu” ou “senha”.
Mais informações
• http://guias.rubyonrails.pro.br/security.html
• Conheça o site: http://www.rorsecurity.info/
• Conheça o Nessus: http://www.nessus.org/
OBRIGADO!!!
marcelo@mindaslab.com - RS on Rails 2009

Mais conteúdo relacionado

Mais procurados

XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendadoricardophp
 
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...SegInfo
 
OWASP_BSB_20120827_mod_security_KLAUBERTHERR
OWASP_BSB_20120827_mod_security_KLAUBERTHERROWASP_BSB_20120827_mod_security_KLAUBERTHERR
OWASP_BSB_20120827_mod_security_KLAUBERTHERROWASP Brasília
 

Mais procurados (6)

Conceitos de Ajax
Conceitos de AjaxConceitos de Ajax
Conceitos de Ajax
 
XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendado
 
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
por Bruno Milreu Filipe "Casos avançados de teste de invasão – Indo além do “...
 
Xss
XssXss
Xss
 
Pentest Auto-Ensinado
Pentest Auto-EnsinadoPentest Auto-Ensinado
Pentest Auto-Ensinado
 
OWASP_BSB_20120827_mod_security_KLAUBERTHERR
OWASP_BSB_20120827_mod_security_KLAUBERTHERROWASP_BSB_20120827_mod_security_KLAUBERTHERR
OWASP_BSB_20120827_mod_security_KLAUBERTHERR
 

Destaque

Introdução ao Ruby On Rails
Introdução ao Ruby On RailsIntrodução ao Ruby On Rails
Introdução ao Ruby On RailsMilton Moura
 
Django: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento webDjango: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento webMiguel Galves
 
[PDF] Repensando o Desenvolvimento Web com Ruby on Rails
[PDF] Repensando o Desenvolvimento Web com Ruby on Rails[PDF] Repensando o Desenvolvimento Web com Ruby on Rails
[PDF] Repensando o Desenvolvimento Web com Ruby on RailsDante Regis
 
Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Douglas Roeder
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsJulio Betta
 
Introducao ao Ruby On Rails
Introducao ao Ruby On RailsIntroducao ao Ruby On Rails
Introducao ao Ruby On RailsAndre Ferraro
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Railsismaelstahelin
 
Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Andre Bernardes
 
Mini-curso RoR - Apresentação
Mini-curso RoR - ApresentaçãoMini-curso RoR - Apresentação
Mini-curso RoR - ApresentaçãoAgence Educacional
 
Caelum ruby-on-rails-rr71
Caelum ruby-on-rails-rr71Caelum ruby-on-rails-rr71
Caelum ruby-on-rails-rr71Lindomar ...
 
Apresentação ruby + rails 2014
Apresentação ruby + rails 2014Apresentação ruby + rails 2014
Apresentação ruby + rails 2014Marcelo Bohn
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsLucas Caton
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Felipe Queiroz
 
Introdução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyIntrodução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyDiego Rubin
 
Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on RailsCJR, UnB
 

Destaque (20)

Introdução ao Ruby On Rails
Introdução ao Ruby On RailsIntrodução ao Ruby On Rails
Introdução ao Ruby On Rails
 
Django: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento webDjango: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento web
 
[PDF] Repensando o Desenvolvimento Web com Ruby on Rails
[PDF] Repensando o Desenvolvimento Web com Ruby on Rails[PDF] Repensando o Desenvolvimento Web com Ruby on Rails
[PDF] Repensando o Desenvolvimento Web com Ruby on Rails
 
Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on Rails
 
SEA Rails na pratica
SEA Rails na praticaSEA Rails na pratica
SEA Rails na pratica
 
Mini-curso RoR - Aula 01
Mini-curso RoR - Aula 01Mini-curso RoR - Aula 01
Mini-curso RoR - Aula 01
 
Introducao ao Ruby On Rails
Introducao ao Ruby On RailsIntroducao ao Ruby On Rails
Introducao ao Ruby On Rails
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011
 
Mini-curso RoR - Apresentação
Mini-curso RoR - ApresentaçãoMini-curso RoR - Apresentação
Mini-curso RoR - Apresentação
 
Caelum ruby-on-rails-rr71
Caelum ruby-on-rails-rr71Caelum ruby-on-rails-rr71
Caelum ruby-on-rails-rr71
 
Rails na pratica
Rails na praticaRails na pratica
Rails na pratica
 
Apresentação ruby + rails 2014
Apresentação ruby + rails 2014Apresentação ruby + rails 2014
Apresentação ruby + rails 2014
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on Rails
 
Conhecendo o Django
Conhecendo o DjangoConhecendo o Django
Conhecendo o Django
 
Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!
 
Introdução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyIntrodução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação Ruby
 
Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on Rails
 
Ruby Beyond Rails
Ruby Beyond RailsRuby Beyond Rails
Ruby Beyond Rails
 

Semelhante a Segurança em Rails guia

Segurança em Aplicativos Web
Segurança em Aplicativos WebSegurança em Aplicativos Web
Segurança em Aplicativos WebSergio Henrique
 
Segurança & Ruby on Rails
Segurança & Ruby on RailsSegurança & Ruby on Rails
Segurança & Ruby on RailsJulio Monteiro
 
Webinar Segurança de DevOps
Webinar Segurança de DevOpsWebinar Segurança de DevOps
Webinar Segurança de DevOpsTenchi Security
 
Construindo um ambiente resiliente para Ransomware com AWS
Construindo um ambiente resiliente para Ransomware com AWSConstruindo um ambiente resiliente para Ransomware com AWS
Construindo um ambiente resiliente para Ransomware com AWSAmazon Web Services LATAM
 
Construindo uma aplicação PHP à Prova de Balas - Rafael Jaques
Construindo uma aplicação PHP à Prova de Balas - Rafael JaquesConstruindo uma aplicação PHP à Prova de Balas - Rafael Jaques
Construindo uma aplicação PHP à Prova de Balas - Rafael JaquesTchelinux
 
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...Clavis Segurança da Informação
 
Palestra - Darkmira Tour PHP 2016 - A ilusão das referências sobre desenvolv...
Palestra - Darkmira Tour PHP 2016  - A ilusão das referências sobre desenvolv...Palestra - Darkmira Tour PHP 2016  - A ilusão das referências sobre desenvolv...
Palestra - Darkmira Tour PHP 2016 - A ilusão das referências sobre desenvolv...Thiago Dieb
 
Qualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHPQualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHPQuality Press
 
Precisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicaçõesPrecisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicaçõesJackson F. de A. Mafra
 
Seguranca e Criptografia de Dados
Seguranca e Criptografia de DadosSeguranca e Criptografia de Dados
Seguranca e Criptografia de DadosFelipe Plattek
 
Como invadir uma exchange - Um relatório geral de segurança de corretoras de ...
Como invadir uma exchange - Um relatório geral de segurança de corretoras de ...Como invadir uma exchange - Um relatório geral de segurança de corretoras de ...
Como invadir uma exchange - Um relatório geral de segurança de corretoras de ...LeandroTrindade19
 
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...Magno Logan
 
Aplicações Web ‐ Seu site está seguro?
Aplicações Web ‐ Seu site está seguro?Aplicações Web ‐ Seu site está seguro?
Aplicações Web ‐ Seu site está seguro?Alex Hübner
 
Global Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
Global Azure Bootcamp - Recursos de Segurança para Aplicações no AzureGlobal Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
Global Azure Bootcamp - Recursos de Segurança para Aplicações no AzureRubens Guimarães - MTAC MVP
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPFlavio Souza
 

Semelhante a Segurança em Rails guia (20)

Segurança em Aplicativos Web
Segurança em Aplicativos WebSegurança em Aplicativos Web
Segurança em Aplicativos Web
 
Analysis of vulnerabilities in web applications - LinuxCon Brazil 2010
Analysis of vulnerabilities in web applications - LinuxCon Brazil 2010Analysis of vulnerabilities in web applications - LinuxCon Brazil 2010
Analysis of vulnerabilities in web applications - LinuxCon Brazil 2010
 
Segurança & Ruby on Rails
Segurança & Ruby on RailsSegurança & Ruby on Rails
Segurança & Ruby on Rails
 
MS Enterprise Library
MS Enterprise LibraryMS Enterprise Library
MS Enterprise Library
 
Webinar Segurança de DevOps
Webinar Segurança de DevOpsWebinar Segurança de DevOps
Webinar Segurança de DevOps
 
OWASP - Ferramentas
OWASP - FerramentasOWASP - Ferramentas
OWASP - Ferramentas
 
Ferranentas OWASP
Ferranentas OWASPFerranentas OWASP
Ferranentas OWASP
 
Construindo um ambiente resiliente para Ransomware com AWS
Construindo um ambiente resiliente para Ransomware com AWSConstruindo um ambiente resiliente para Ransomware com AWS
Construindo um ambiente resiliente para Ransomware com AWS
 
Construindo uma aplicação PHP à Prova de Balas - Rafael Jaques
Construindo uma aplicação PHP à Prova de Balas - Rafael JaquesConstruindo uma aplicação PHP à Prova de Balas - Rafael Jaques
Construindo uma aplicação PHP à Prova de Balas - Rafael Jaques
 
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
Tutorial: Principais Vulnerabilidades em Aplicações Web – Rafael Soares Ferre...
 
Palestra - Darkmira Tour PHP 2016 - A ilusão das referências sobre desenvolv...
Palestra - Darkmira Tour PHP 2016  - A ilusão das referências sobre desenvolv...Palestra - Darkmira Tour PHP 2016  - A ilusão das referências sobre desenvolv...
Palestra - Darkmira Tour PHP 2016 - A ilusão das referências sobre desenvolv...
 
Qualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHPQualitypress - Segurança em Aplicações Web com PHP
Qualitypress - Segurança em Aplicações Web com PHP
 
Precisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicaçõesPrecisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicações
 
Seguranca e Criptografia de Dados
Seguranca e Criptografia de DadosSeguranca e Criptografia de Dados
Seguranca e Criptografia de Dados
 
Como invadir uma exchange - Um relatório geral de segurança de corretoras de ...
Como invadir uma exchange - Um relatório geral de segurança de corretoras de ...Como invadir uma exchange - Um relatório geral de segurança de corretoras de ...
Como invadir uma exchange - Um relatório geral de segurança de corretoras de ...
 
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
AppSec Brazil 2010 - Utilizando a ESAPI para prover Segurança em Aplicações W...
 
Segurança do WordPress
Segurança do WordPressSegurança do WordPress
Segurança do WordPress
 
Aplicações Web ‐ Seu site está seguro?
Aplicações Web ‐ Seu site está seguro?Aplicações Web ‐ Seu site está seguro?
Aplicações Web ‐ Seu site está seguro?
 
Global Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
Global Azure Bootcamp - Recursos de Segurança para Aplicações no AzureGlobal Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
Global Azure Bootcamp - Recursos de Segurança para Aplicações no Azure
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHP
 

Segurança em Rails guia

  • 1. Segurança em Rails Marcelo Castellani marcelo@mindaslab.com
  • 2. O palestrante (eu) • Desenvolvedor de software desde 1989; • Membro do NetBeans Translation Team; • Um dos fundadores do grupo de usuários de Ruby de SP; • Idealizador do evento Ruby + Rails no mundo real.
  • 3. O que é segurança? • Confiabilidade • Integridade • Confidencialidade
  • 4. Confiabilidade • Em geral, confiabilidade (definição sistêmica) é a capacidade de uma pessoa ou sistema de realizar e manter seu funcionamento em circunstâncias de rotina, bem como em circunstâncias hostis e inesperadas. • http://pt.wikipedia.org/wiki/Confiabilidade
  • 5. Integridade • Em segurança da informação integridade significa ter a disponibilidade de informações confiáveis, corretas e dispostas em formato compatível com o de utilização, ou seja, informações íntegras. • http://pt.wikipedia.org/wiki/Integridade
  • 6. Confidencialidade • Confidencialidade é a propriedade de que a informação não estará disponível ou divulgada a indivíduos, entidades ou processos sem autorização. • http://pt.wikipedia.org/wiki/Confidencialidade
  • 7. O que é segurança? • Confiabilidade • Integridade • Confidencialidade
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 14. HTTP É UM PROTOCOLO QUE NÃO MANTÉM ESTADO Sessões fazem com o estado seja mantido.
  • 15. O Que é uma sessão? • Uma sessão consiste em um hash de valores e um id de sessão, geralmente uma string com 32 caracteres, para identificar o hash. • Cada cookie enviado para o browser do usuário inclui o id de sessão. • No caminho inverso, o browser enviará o id de sessão para o servidor em cada request.
  • 16. Pra que serve uma sessão? • A maioria das aplicações precisam ter controle sobre alguns aspectos relacionados ao estado de um usuário particular como um carrinho de compras ou o id do usuário atualmente autenticado. • Sem a ideia de sessões, o usuário teria que se identificar a cada nova requisição.
  • 17. Seqüestro/Roubo de sessãoLogin Usuário real faz login no site Sniffingderede Invasor obtém o ID do usuário Sequestro Invasor passa a ser o usuário real
  • 19. Rails e Sessões • O Rails fornece vários métodos para salvar os dados de sessões, incluindo o ActiveRecordStore e o CookieStore. • O ActiveRecordStore salva os dados da sessão numa tabela no banco de dados. • O CookieStore salva os dados da sessão como um cookie no cliente.
  • 20. Por que não usar cookies? • Outro exemplo clássico de problema com cookies é o “replay de cookies”.
  • 21. Replay de cookies Um usuário recebe créditos, o valor é armazenado na sessão (o que é uma má idéia, de qualquer forma, mas nós iremos fazer isso para fins de demonstração). O usuário compra algo.
  • 22. Replay de cookies Seu novo crédito, mais baixo, será armazenado na sessão. O lado negro do usuário o força a pegar o cookie do primeiro passo (o qual ele copiou) e substituir o cookie atual no navegador. O usuário tem seus créditos de volta.
  • 23. Como evitar? • A melhor solução contra ataques de replay é não guardar este tipo de informação no cookie de sessão, mas sim no banco de dados. • Neste caso guarde os créditos no banco de dados o id do usuário atual na sessão (pode ser até num cookie, apesar de eu nunca achar uma boa idéia usar cookies).
  • 24. Evitar cookies na minha aplicação • Para não usar cookies em sua aplicação vá em config/initializers/session_store.rb e use: ActionController::Base.session_store = :active_record_store
  • 26. Como evitar? • Uma única linha de código salva sua vida nesses casos: reset_session
  • 27. user_sessions_controller.rb def create reset_session @client_session = ClientSession.new(params[:client_session]) if @client_session.save flash[:notice] = "Login successful!" redirect_back_or_default '/' else flash[:notice] = "Invalid login name or password." render :action => :new end end
  • 28. Outras maneiras de proteger-se • salvar propriedades específicas do usuário na sessão, • verificá-las a cada novo request, • negar acesso se a informação não bater.
  • 29. Não use o IP para salvar dados • Ao salvar o endereço IP, você deve ter em mente que existem provedores de serviços de Internet ou grandes organizações que colocam seus usuários atrás de proxies. Estes proxies podem mudar durante a duração de uma sessão, logo estes usuários não serão capazes de utilizar sua aplicação, ou apenas poderão usá-la de forma limitada.
  • 30. Resumo sobre sessões • Use authlogic ou algo parecido para gerenciar logins em seu software. • Use algoritmos de criptografia complexos, nada de hashes. O BCrypt é a melhor opção. • Reinicie sempre a sessão antes de a criar. • Evite usar cookies sempre que possível. • Evite usar o IP para manter dados em sessões.
  • 31. Boas práticas em sessões • Não guarde dados críticos na sessão. • Não guarde objetos muito grandes em uma sessão. • Evite usar cookies para armazenar dados da sessão.
  • 35. Como funciona • Bob navega por um fórum de discussão e visualiza uma mensagem criada por um hacker onde existe um elemento HTML de imagem forjado. O elemento referencia um comando na aplicação de gerenciamento de projetos de Bob, ao invés de um arquivo de imagem. <img src="http://www.webapp.com/project/1/destroy"/> • A sessão de Bob em www.webapp.com ainda está ativa, porque ele não fez seu logout alguns minutos atrás. • Por acessar a mensagem, o navegador encontra uma tag de imagem. Ele tenta carregar a imagem suspeita a partir de www.webapp.com. Como explicado anteriormente, ele também enviará o cookie com id de sessão válido.
  • 36. Como funciona • A aplicação web em www.webapp.com verifica a informação do usuário no respectivo hash de sessão e destroy o projeto com ID 1. Ele então retorna a página com o resultado da operação, o que é um resultado inesperado para o navegador, logo ele não irá exibir a imagem. • Bob não percebe o ataque — Mas alguns dias mais tarde ele percebe que o projeto número um se foi.
  • 38. Como evitar? • Saiba como usar o HTTP: • Get serve para perguntas, como uma pesquisa ou operação de leitura; • Post server para executar ordens. • É muito importante conhecer HTTP pois ele é a base de aplicações internet. • É muito importante conhecer o Rest, pois o Rails faz uso de Rest o tempo todo.
  • 39. “Every developer working with the Web needs to read this book.” David Heinemeier Hansson, creator of the Rails framework
  • 40. Injection • Injeção é uma categoria de ataques que introduzem código malicioso ou parâmetros em uma aplicação web de forma a executar estes códigos dentro do contexto de segurança da aplicação. Os exemplos mais proeminentes de injeção são o cross-site scriptintg (XSS) e o SQL injection.
  • 41. Injection não é algo simples • Injeção é algo complicado, porque um mesmo código ou parâmetro pode ser malicioso em um contexto e completamente inofensivo em outro. Um contexto pode ser um script, uma query ou linguagem de programação, o shell ou um método do Ruby/Rails.
  • 42. SQL Injection no banco de dados de usuários do Speedy, em 10 de julho de 2009 http://telefonica.ath.cx/
  • 43. SQL INJECTION NÃO É EXCLUSIVIDADE DO RAILS O site da telefonica é em PHP.
  • 44. USUÁRIOS SEMPRE SÃO A PARTE MAIS FRÁGIL DA SEGURANÇA E não há nada que você possa fazer.
  • 46. Gerenciamento de usuários • Exija a autenticação de usuários usando plugins prontos para isso, como o Authlogic; • No cadastramento de seu usuário, exija que o mesmo digite duas vezes a senha e o e-mail; • Crie regras para que o usuário não crie senhas como “eu” ou “senha”.
  • 47.
  • 48. Mais informações • http://guias.rubyonrails.pro.br/security.html • Conheça o site: http://www.rorsecurity.info/ • Conheça o Nessus: http://www.nessus.org/
  • 49.

Notas do Editor

  1. Antes de começar vamos falar de duas coisas, o que é segurança e se seu site é seguro.
  2. Antes de começar vamos falar de duas coisas, o que é segurança e se seu site é seguro.
  3. Perguntar para o pessoal da platéia quem tem programas rails rodando em versões menores do que a 2.3.3
  4. Pedir para o pessoal dar exemplo de aplicações com sessões
  5. Se você utiliza o popular plugin RestfulAuthentication para manutenção de usuários, adicione reset_session à action SessionsController#create. Note que isso remove qualquer valor da sessão, você precisa transferi-los para a nova sessão.
  6. Bcrypt é mais lento, e mais eficiente. O algoritmo usado no BCrypt é blowfish, o mesmo usado no FreeBSD e no Linux kernel,v2.5.47ou superior. Muitos preferem o md5 ou o sha1 por serem mais rápidos.