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/




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 também JavaScript.
Além disso, aqui sempre levamos à você conteúdos valiosos sobre a carreira de programação, dicas sobre currículos, portfólios, perfil profissional, soft skills, enfim, tudo o que você precisa saber para continuar evoluindo como Programador(a)!

Fique por dentro de todos os conteúdos o/

 

Nossas redes sociais:

📹 • https://youtube.com/Onebitcode [Live todas as terças-feiras às 19h)
💻 • https://linkedin.com/company/onebitcode
🙂 • https://facebook.com/onebitcode
 📱  • https://instagram.com/one_bit_code
🐦 • https://twitter.com/onebitcode

 

Nossos cursos:

🥇 • Programador Full Stack Javascript em 8 Semanas
💎 • Curso Completo de Ruby
 ⚙  • Minicurso: API Rails 5 Completo
🐞 • Minicurso de Testes para Ruby on Rails com RSpec

 

Espero que curta nossos conteúdos e sempre que precisar de ajuda, fala com a gente!
E
stamos aqui para você 🙂

Bem-vindo à família OneBitCode o/

0 0 vote
Article Rating
janeiro 17, 2020
Subscribe
Notify of
guest
2 Comentários
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Romenig Lima Damasio
Romenig Lima Damasio
1 ano atrás

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
Nelcifran
1 ano atrás

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

Feito com s2 por OneBitCode
2
0
Would love your thoughts, please comment.x
()
x
%d blogueiros gostam disto: