Segurança no Rails: 9 vulnerabilidades que você deve evitar

Segurança no Rails: 9 vulnerabilidades que você deve evitar

 

Nesta artigo rápido você vai conhecer alguns tipos de vulnerabilidades que podem trazer grandes riscossua aplicação Ruby on Rails e também vai aprender algumas caminhos para soluciona-las facilmente.

 

Entenda o problema

Segundo o Grupo Gartner, que é responsável por realizar pesquisas tecnológicas, é estimado que 75% dos ataques a websites são direcionados a camada de aplicação, e que dentre 300 sites auditados, 97% estavam vulneráveis a ataque.

O Ruby on Rails é um framework maduro e seguro, então, porque mesmo assim devemos nos preocupar com estes dados?

Como resposta, essas brechas de segurança geralmente são causadas pela falta do uso de boas práticas no processo de desenvolvimento.

Utilize esta leitura para conhecer estes riscos e ser capaz de  evitá-los.

 

 

As 9 vulnerabilidades

A seguir, você verá uma lista de vulnerabilidades e dicas sobre como prevenir esses problemas de segurança.

 


 

1- Code Injection

Falha de segurança que permite a execução de comandos Ruby ou do Sistema Operacional.  

 

Como isso ocorre?

No ruby existe um método muito poderoso chamado eval que executa códigos ruby que estão dentro de uma String.

Quando este método é utilizado de forma imprudente, acaba gerando uma brecha para ataques.

Veja a seguir um exemplo de MAL USO deste método:

Assim, através de um parâmetro, sua aplicação permite a execução de qualquer comando ruby ou do sistema operacional.

Prevenção:

O método eval é muito poderoso e deve ser utilizado com muita cautela.  Você nunca deve utilizá-lo caso o argumento venha do usuário e não esteja devidamente validado e filtrado!

 


 

2- Sql Injection

Vulnerabilidade que permite a manipulação de uma query SQL, resultando no acesso a partes do banco de dados sem autorização.

 

Como isso ocorre?

A vulnerabilidade é produzida quando uma query utiliza uma declaração  passada por um usuário sem fazer o saneamento deste dado.

A seguir, veja um exemplo de COMO NÃO CRIAR uma query:

Utilizando uma única string, você permite que params[:search] contenha comandos sql mal intencionados.

 

Prevenção:

Para obrigar que o dado seja sanitizado antes de ser utilizado em sua query, insira ele como um parâmetro

Veja como passar a declaração por meio de um parâmetro:

 


 

3- Privilege Escalation

Dependendo da forma que uma query de busca é implementada, o usuário pode ter acesso a dados mesmo sem autorização.

 

Como isso ocorre?

Imagine um sistema onde o usuário tem um projeto e qualquer outro usuário pode acessar este projeto.

Estaria correto realizar essa busca da seguinte forma.

Porém, se o projeto é acessível apenas pelo seu proprietário, está query deixa uma brecha para que outras pessoas consigam encontrá-lo (basta tentar passar ids aleatórios).

 

Prevenção:

Utilize associações para que o usuário encontre apenas projetos que pertencem a ele.

 


 

4- Sensitive Files

A maior parte das aplicações Ruby on Rails são de código livre e estão hospedadas em repositórios públicos.

Nesse caso, alguns arquivos são sensíveis, ou seja, podem conter dados sigilosos, como por exemplo:

 

Prevenção:

Tome cuidado com o conteúdo dos arquivos que você envia para o repositório do projeto. Utilize Encrypted Credentials para proteger suas credenciais e o gitignore para não enviar determinados arquivos.

Caso tenha necessidade, veja este guia sobre como usar o Encrypted Credentials.

 


 

5- Cross-Site Scripting (XSS)

Este é um tipo de ataque malicioso que injeta código executável no lado do cliente.

 

Como isso ocorre?

Quem realiza o ataque faz isso enviando um dado para ser salvo pela aplicação web. Este dado é um código executável, que é processado quando a aplicação tenta exibi-lo no lado do cliente.

 

Imagine um cenário onde você quer disponibilizar ao usuário a opção de adicionar tags html a descrição de um texto. Na hora de exibir esta informação, você utilizou o método html_safe para que as tags sejam aplicadas a sua página.

Porém, se o usuário salvar a descrição da seguinte forma

Este script será executado na hora da renderização da sua view.

Foi utilizado um alert como exemplo, porém, os ataques podem ocorrer utilizando métodos muito mais poderosos.

 

Prevenção:

NUNCA UTILIZE os métodos html_safe, raw ou content_tag para exibir uma informação inserida por um usuário e caso queira proporcionar a opção de salvar textos personalizados, prefira uma ferramenta que utilize a linguagem markdown e que não permita o uso de tags HTML.

 


 

6- Http

O protocolo http faz a transmissão de dados sem utilizar criptografia e qualquer um que interceptar essa transmissão pode ter acesso livre a estes dados.

 

Prevenção:

Obrigue todas as requisições feitas para o servidor de produção a utilizarem o protocolo https adicionando o seguinte trecho ao arquivo config/environments/production.rb (e preparando o seu servidor).

 


 

7- Cross-Site Request Forgery (CSRF)

Um tipo de ataque que força um  usuário autenticado a executar ações indesejadas. Como quem realiza o ataque não consegue ver o resultado da resposta, estes tipos de ataque costumam ser de mudança de estado, ou seja, realizando alteração de email, transações bancárias e etc.

 

Prevenção:

O Ruby on Rails possui um método para proteção contra este tipo de ataque.

Para utilizá-lo vá até o arquivo app/controllers/application_controller.rb e adicione o seguinte método

 


 

8- Requisições Abusivas

São requisições mal intencionados, que tentam realizar login por força bruta, ataques DDoS, etc.

 

Prevenção:

Utilize a gem Rack::Atack. Ela é um middleware responsável por bloquear e limitar requisições abusivas a sua aplicação web.

 


 

9- Vulnerabilidades despercebidas (falta de analise)

Todos nós estamos propensos a falhas, e algumas vulnerabilidades podem passar despercebidas.

Segurança é algo muito importante e suas falhas podem causar grandes prejuízos.  

 

Prevenção:

Para auxílio na verificação de vulnerabilidades presentes em seu projeto Ruby on Rails, utilize a gem Brakeman. Está ferramenta fará um processo de análise e te ajudará a manter sua aplicação segura.

 

 

Conclusão

Aplicações Web possuem dados extremamente valiosos e através deste artigo você foi capaz de saber como não reproduzir algumas das principais falhas de segurança que podem estar presentes em uma aplicação Ruby on Rails.

Caso tenha interesse em conhecer mais tipos de vulnerabilidades, acesse o link para o guia de segurança do Ruby on Rails.

Se gostou, não se esqueça de compartilhar este post com seus amigos para nos ajudar a continuar produzindo material de qualidade.

  



12 formas de vencer o bloqueio criativo e escrever textos memoráveis (e 6 dicas extras)

Não perca nenhum conteúdo

Receba nosso resumo semanal com os novos posts, cursos, talks e vagas \o/




Você é novo por aqui?

Primeira vez no OneBitCode? Curtiu esse conteúdo? O OneBitCode tem muito mais para você!

O OneBitCode traz conteúdos de qualidade e em português sobre programação com foco em Ruby on Rails e outras tecnologias como Angular, Ionic, React, desenvolvimento de Chatbots e etc.

Se você deseja aprender mais, de uma forma natural e dentro de uma comunidade ativa, visite nosso Facebook e nosso Twitter, veja os screencasts e talks no Youtube, alguns acontecimentos no Instagram, ouça os Podcasts e faça parte de nossa Newsletter.

Além disso, também estamos com alguns e-Books muito interessantes para quem deseja se aprimorar como programador e também como freelancer (os e-Books são gratuitos!):

Espero que curta nossos conteúdos e sempre que precisar de ajuda com os tutoriais, fala com a gente! Seja por Facebook ou e-mail, estamos aqui para você 🙂

Bem-vindo à família OneBitCode \o/

dezembro 16, 2018

2
Deixe um comentário

avatar
2 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
NelcifranRomenig Lima Damasio Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
Romenig Lima Damasio
Visitante
Romenig Lima Damasio

No caso do Cross-Site Scripting (XSS) no caso de precisar utilizar comandos parecidos ao raw e o html_safe.
É recomendável utilizar de forma segura(no caso ñ irá rodar comandos javascripts) é o helper Sanitize.
Vale dar uma conferida nesse helper!

Nelcifran
Visitante
Nelcifran

Muito bom, tinha muita coisa que eu não conhecia ai.

Feito com s2 por OneBitCode
%d blogueiros gostam disto: