SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
Dicas de segurança: Algumas ameaças e
como evitá-las.
supported by
Introdução
Session
Cross-Site Request Forge
Files and Redirections
User Management
Injection
Outras dicas
Agenda
• Segundo a PwC, os ataques no Brasil cresceram 274%,
enquanto no resto do mundo apenas 38%;
• Segundo o Gartner, 75% dos ataques são na camada de
aplicação da web;
• E 97% dos sites auditados possuem vulnerabilidades.
Introdução
Vulnerabilidades e
Contramedidas
• Sessões armazenam dados específicos do
usuário.

• HTTP é stateless, sem sessões seria necessário
se autenticar em todas as requisições

• Em geral sessões são compostas por um
SessionId(32 char SecureRandom.hex) e um Hash
Sessions
• Sniffer na rede local;
• config.force_ssl = true

• Logout da aplicação

• Scripts XSS

• Fixar o identificador da sessão
Session Hijacking
• reset_session

• Devise provê proteção

contra esse tipo de ataque
Session Hijacking
• Dificilmente um site
possui essa vulnerabilidade
• A vulnerabilidade pode
ser exposta caso os verbos
http sejam usados de
maneira incorreta
Cross-Site Request Forgery
• User os verbos corretamente
• Rails usa um campo escondido _method para compensar os browsers que
aceitam apenas GET e POST

• Utilizar “protect_from_forgery with: :exception”, assim o
rails inclui um token de segurança nos forms e requests
ajax

• Rails por default adiciona um header chamado X-
CSRF-Token em todas requisições diferentes de GET -
<%= csrf_meta_tags %>
Cross-Site Request Forgery
• Cuidado redobrado com métodos que fazem
redirecionamento para outra url
• O atacante pode utilizar algo como “http://
www.site.com/site/reload?xy=1&url=www.attacker.com“

• Uma dica para evitar esse tipo de ataque é aceite
apenas os parâmetros esperados e verifique o
direcionamento com uma whitelist
Redirection
• Dê permissão para a aplicação escrever arquivos
apenas em pastas inofensivas.
• Se você armazena arquivos na pasta /var/www/uploads
• aplicação tem permissão para escrever em qualquer pasta
• ../../../etc/passwd
• Faça a sanitização do nome do arquivo, remova o
que não for alpha numérico

• Processe upload de arquivos de maneira assíncrona
File Uploads
• Dê permissão para a aplicação escrever arquivos
apenas em pastas inofensivas.
• Se você armazena arquivos na pasta /var/www/uploads
• aplicação tem permissão para escrever em qualquer pasta
• ../../../etc/passwd
• Faça a sanitização do nome do arquivo, remova o
que não for alpha numérico

• Processe upload de arquivos de maneira assíncrona
File Uploads
• Arquivos de código podem ser executados quando
baixados
• Não faça uploads na pasta root do apache
• Não use o método send_file sem filtros
• Recomenda-se armazenar o nome do arquivo em
banco de dados e renomear o arquivo em disco
File Downloads
• Login por força bruta

• Account Hijacking - Cuidados especiais na hora de
trocar senha e e-mail

• Não coloque passwords nos logs!
• config.filter_parameters << :password
User Management
• Acesso não autorizado a funções
• http://floripaonrails.com/event/1
• @event = Event.find(params[:id])
• @event = @current_user.events.find(params[:id])

User Management
• Pundit

• Devise ou authlogic
User Management
• SQL injection
• Entity.where("id = '#{params[:id]}'") #unsafe
• Entity.where(id: params[:id]) #safe
• '1 or 1=1’

• XSS
• CSS injection
Injection
• Use before_action except: [...] ao invés de only: [...]
para ações de segurança
• authenticate_user por exemplo
• Utilize strong parameters

• Não tente corrigir entradas inesperadas ou mal
formadas, rejeite!
Injection
• Utilize o config/secrets.yml para armazenar senhas

• Configure os HTTP headers do rails para garantir a
segurança da sua aplicação
• config/application.rb
• config.action_dispatch.default_headers = {

'X-Frame-Options' => 'SAMEORIGIN',

'X-XSS-Protection' => '1; mode=block',

'X-Content-Type-Options' => 'nosniff'

}
Outras dicas
Thanks!
" http://www.pwc.com.br/pt/publicacoes/servicos/assets/consultoria-negocios/
2016/tl-gsiss16-pt.pdf
" http://guides.rubyonrails.org/security.html
" https://rails-sqli.org/
" https://github.com/plataformatec/devise
" https://github.com/elabs/pundit
References

Mais conteúdo relacionado

Semelhante a Floripa on Rails - Security Tips

Gambiarra e PHP. Por que você deveria usar um WAF?
Gambiarra e PHP. Por que você deveria usar um WAF?Gambiarra e PHP. Por que você deveria usar um WAF?
Gambiarra e PHP. Por que você deveria usar um WAF?Sucuri
 
Segurança em servidores Linux
Segurança em servidores LinuxSegurança em servidores Linux
Segurança em servidores LinuxImpacta Eventos
 
Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Cyrille Grandval
 
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
 
Segurança da informação para WordPress e WooCommerce
Segurança da informação para WordPress e WooCommerceSegurança da informação para WordPress e WooCommerce
Segurança da informação para WordPress e WooCommerceThauã Cícero Santos Silva
 
Segurança da informação palestra wordcamp sp 2016
Segurança da informação   palestra wordcamp sp 2016Segurança da informação   palestra wordcamp sp 2016
Segurança da informação palestra wordcamp sp 2016Thauã Cícero Santos Silva
 
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas ( Versão Segi...
 Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas ( Versão Segi... Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas ( Versão Segi...
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas ( Versão Segi...Alexandro Silva
 
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
Proteja sua Hovercraft: Mantendo sua nave livre dos SentinelasProteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
Proteja sua Hovercraft: Mantendo sua nave livre dos SentinelasSegInfo
 
Segurança em aplicações web
Segurança em aplicações webSegurança em aplicações web
Segurança em aplicações webCOTIC-PROEG (UFPA)
 
Segurança & Ruby on Rails
Segurança & Ruby on RailsSegurança & Ruby on Rails
Segurança & Ruby on RailsJulio Monteiro
 
Segurança em Aplicações Web
Segurança em Aplicações WebSegurança em Aplicações Web
Segurança em Aplicações WebCassio Ramos
 
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
 
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesPalestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesClavis Segurança da Informação
 
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
Proteja sua Hovercraft: Mantendo sua nave livre dos SentinelasProteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
Proteja sua Hovercraft: Mantendo sua nave livre dos SentinelasAlexandro Silva
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPFlavio Souza
 

Semelhante a Floripa on Rails - Security Tips (20)

Gambiarra e PHP. Por que você deveria usar um WAF?
Gambiarra e PHP. Por que você deveria usar um WAF?Gambiarra e PHP. Por que você deveria usar um WAF?
Gambiarra e PHP. Por que você deveria usar um WAF?
 
Segurança em servidores Linux
Segurança em servidores LinuxSegurança em servidores Linux
Segurança em servidores Linux
 
Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2
 
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...
 
Segurança da informação para WordPress e WooCommerce
Segurança da informação para WordPress e WooCommerceSegurança da informação para WordPress e WooCommerce
Segurança da informação para WordPress e WooCommerce
 
Segurança da informação palestra wordcamp sp 2016
Segurança da informação   palestra wordcamp sp 2016Segurança da informação   palestra wordcamp sp 2016
Segurança da informação palestra wordcamp sp 2016
 
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas ( Versão Segi...
 Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas ( Versão Segi... Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas ( Versão Segi...
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas ( Versão Segi...
 
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
Proteja sua Hovercraft: Mantendo sua nave livre dos SentinelasProteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
 
Segurança Web: O MMA da Tecnologia
Segurança Web: O MMA da TecnologiaSegurança Web: O MMA da Tecnologia
Segurança Web: O MMA da Tecnologia
 
Automatizando Nmap com NSE
Automatizando Nmap com NSEAutomatizando Nmap com NSE
Automatizando Nmap com NSE
 
Segurança em aplicações web
Segurança em aplicações webSegurança em aplicações web
Segurança em aplicações web
 
Segurança & Ruby on Rails
Segurança & Ruby on RailsSegurança & Ruby on Rails
Segurança & Ruby on Rails
 
Segurança em Aplicações Web
Segurança em Aplicações WebSegurança em Aplicações Web
Segurança em Aplicações Web
 
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...
 
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesPalestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
 
De 0 a DevOps
De 0 a DevOpsDe 0 a DevOps
De 0 a DevOps
 
Site invadido
Site invadidoSite invadido
Site invadido
 
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
Proteja sua Hovercraft: Mantendo sua nave livre dos SentinelasProteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
Proteja sua Hovercraft: Mantendo sua nave livre dos Sentinelas
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHP
 
Java security
Java securityJava security
Java security
 

Floripa on Rails - Security Tips

  • 1. Dicas de segurança: Algumas ameaças e como evitá-las. supported by
  • 2. Introdução Session Cross-Site Request Forge Files and Redirections User Management Injection Outras dicas Agenda
  • 3. • Segundo a PwC, os ataques no Brasil cresceram 274%, enquanto no resto do mundo apenas 38%; • Segundo o Gartner, 75% dos ataques são na camada de aplicação da web; • E 97% dos sites auditados possuem vulnerabilidades. Introdução
  • 5. • Sessões armazenam dados específicos do usuário.
 • HTTP é stateless, sem sessões seria necessário se autenticar em todas as requisições
 • Em geral sessões são compostas por um SessionId(32 char SecureRandom.hex) e um Hash Sessions
  • 6. • Sniffer na rede local; • config.force_ssl = true
 • Logout da aplicação
 • Scripts XSS
 • Fixar o identificador da sessão Session Hijacking
  • 7. • reset_session
 • Devise provê proteção
 contra esse tipo de ataque Session Hijacking
  • 8. • Dificilmente um site possui essa vulnerabilidade • A vulnerabilidade pode ser exposta caso os verbos http sejam usados de maneira incorreta Cross-Site Request Forgery
  • 9. • User os verbos corretamente • Rails usa um campo escondido _method para compensar os browsers que aceitam apenas GET e POST
 • Utilizar “protect_from_forgery with: :exception”, assim o rails inclui um token de segurança nos forms e requests ajax
 • Rails por default adiciona um header chamado X- CSRF-Token em todas requisições diferentes de GET - <%= csrf_meta_tags %> Cross-Site Request Forgery
  • 10. • Cuidado redobrado com métodos que fazem redirecionamento para outra url • O atacante pode utilizar algo como “http:// www.site.com/site/reload?xy=1&url=www.attacker.com“
 • Uma dica para evitar esse tipo de ataque é aceite apenas os parâmetros esperados e verifique o direcionamento com uma whitelist Redirection
  • 11. • Dê permissão para a aplicação escrever arquivos apenas em pastas inofensivas. • Se você armazena arquivos na pasta /var/www/uploads • aplicação tem permissão para escrever em qualquer pasta • ../../../etc/passwd • Faça a sanitização do nome do arquivo, remova o que não for alpha numérico
 • Processe upload de arquivos de maneira assíncrona File Uploads
  • 12. • Dê permissão para a aplicação escrever arquivos apenas em pastas inofensivas. • Se você armazena arquivos na pasta /var/www/uploads • aplicação tem permissão para escrever em qualquer pasta • ../../../etc/passwd • Faça a sanitização do nome do arquivo, remova o que não for alpha numérico
 • Processe upload de arquivos de maneira assíncrona File Uploads
  • 13. • Arquivos de código podem ser executados quando baixados • Não faça uploads na pasta root do apache • Não use o método send_file sem filtros • Recomenda-se armazenar o nome do arquivo em banco de dados e renomear o arquivo em disco File Downloads
  • 14. • Login por força bruta
 • Account Hijacking - Cuidados especiais na hora de trocar senha e e-mail
 • Não coloque passwords nos logs! • config.filter_parameters << :password User Management
  • 15. • Acesso não autorizado a funções • http://floripaonrails.com/event/1 • @event = Event.find(params[:id]) • @event = @current_user.events.find(params[:id])
 User Management
  • 16. • Pundit
 • Devise ou authlogic User Management
  • 17. • SQL injection • Entity.where("id = '#{params[:id]}'") #unsafe • Entity.where(id: params[:id]) #safe • '1 or 1=1’
 • XSS • CSS injection Injection
  • 18. • Use before_action except: [...] ao invés de only: [...] para ações de segurança • authenticate_user por exemplo • Utilize strong parameters
 • Não tente corrigir entradas inesperadas ou mal formadas, rejeite! Injection
  • 19. • Utilize o config/secrets.yml para armazenar senhas
 • Configure os HTTP headers do rails para garantir a segurança da sua aplicação • config/application.rb • config.action_dispatch.default_headers = {
 'X-Frame-Options' => 'SAMEORIGIN',
 'X-XSS-Protection' => '1; mode=block',
 'X-Content-Type-Options' => 'nosniff'
 } Outras dicas
  • 21. " http://www.pwc.com.br/pt/publicacoes/servicos/assets/consultoria-negocios/ 2016/tl-gsiss16-pt.pdf " http://guides.rubyonrails.org/security.html " https://rails-sqli.org/ " https://github.com/plataformatec/devise " https://github.com/elabs/pundit References