Resumo/resenha sobre o livro “Segurança em aplicações Web”

Henrique Braga
4 min readFeb 6, 2018

--

Este mês li o livro “Segurança em Aplicações Web” na casa do código e decidi que faria um overview sobre o mesmo.

É um tema que considero importante e mesmo que não seja um especialista em segurança da informação, considero que saber como proteger sua aplicação contra possíveis ataques e manter os dados e a aplicação preservados e seguros é de extrema importância.

Em resumo, o livro trata sobre as principais ameaças e vulnerabilidades à nível de aplicação que existem hoje, dando uma “pincelada” também sobre criptografia e hash, bem como tomar cuidado para evitar de utilizar usuários “root” (ou com mais permissões que deveria) pela aplicação para conectar à uma base de dados, por exemplo.

Em todos os casos, o autor disponibiliza exemplos básicos para entender e testar como os ataques poderiam ser realizados em uma aplicação que esteja vulnerável e o impacto e consequências que cada ataque pode acarretar.

O autor não entra nos mínimos detalhes sobre cada vulnerabilidade, dando apenas uma visão geral, mas oferecendo soluções já existentes para proteger as aplicações, além de claro, materiais complementares para um melhor aprofundamento.

Abaixo seguem algumas dos principais ataques explicados pelo autor.

SQL Injection

É um dos ataques mais frequentes em aplicações web, infelizmente. Basicamente, o ofensor tenta através de parâmetros de entrada informados à aplicação (dados de um formulário, por exemplo), executar um comando SQL em uma base de dados relacional, a fim de obter ou eliminar dados do sistema.

Esta vulnerabilidade ocorre quando comandos SQL são dinâmicos e os parâmetros de entrada são concatenados como string.

Para proteger sua aplicação dessa vulnerabilidade, é necessário haver uma validação dos parâmetros que o usuário está enviando sem que haja CONCATENAÇÃO de comandos SQL com parâmetros que sejam enviados pelo usuário.

Para isso, geralmente a linguagem/framework de persistência de dados já oferecem maneiras elegantes de tratar cada parâmetro de entrada. Também NUNCA se deve concatenar comandos SQL com os parâmetros de entrada.

Cross-Site Scripting (XSS)

Também é um dos ataques que mais ocorrem e é muito similar ao SQL Injection, pois também é feito via “input” não sanitizado do usuário. A diferença é que este ocorre do lado do cliente.

Algumas aplicações web permitem que seja executado código javascript no site via formulário ou num campo de busca, por exemplo.

Neste caso, nada impede que o ofensor envie um código javascript no qual ao ser executado no browser de outra pessoa, pegue e envie dados via chamadas AJAX para qualquer lugar que deseje.

A OWASP (Open Web Application Security Project) disponibiliza o CSS Cheat Sheet (https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet) que possui várias formas de realizar este tipo de ataque.

Para evitá-lo, é necessário validar e fazer escape das informações (tal qual o SQL Injection). Com isso, nenhum código javascript malicioso será executado no browser do usuário.

É também recomendado utilizar uma biblioteca pronta, assim evitando o esforço de “reinventar a roda”. O autor cita sobre o AntiSamy Project da OWASP: https://www.owasp.org/index.php/Category:OWASP_AntiSamy_Project .

Cross-Site Request Forgery (CSRF)

Este ataque consiste em tentar “forjar” uma requisição a ser enviada para o servidor como um usuário autenticado em uma aplicação (obtendo uma session da aplicação, por exemplo). Assim, é possível realizar ações caso tenha conhecimentos sobre as funcionalidades disponíveis no sistema.

Também pode-se realizar este ataque fazendo com que usuário execute um javascript malicioso no browser por meio de engenharia social (e-mail, por exemplo). Assim, caso o usuário esteja autenticado na aplicação, o ataque pode ocorrer enviando uma requisição para o servidor que neste caso nem notaria que se trata de um ataque.

Para evitar este tipo de ataque, muitos frameworks Web já disponibilizam a geração de um token para o formulário (geralmente é um input que não é visível para o usuário).

Assim, quando o usuário enviar os dados, este token também é enviado e o servidor assim é possível averiguar se a requisição é válida ou não. Vale lembrar que o token tem validade para uma requisição somente. Então, mesmo que de alguma maneira alguém obtenha este token, torna inviável o ataque, pois não teria mais validade para o servidor.

Mass Assignment Attack

Baseia-se numa funcionalidade oferecida pela maioria dos frameworks Web conhecida como Mass Assignment, que obtém e mapeia todos parâmetros de uma requisição (que podem ser dados enviados em um formulário, por exemplo), eliminando o esforço de recuperar “na unha” input à input de um usuário.

O ataque consiste em colocar parâmetros não esperados pela aplicação ou que possam de alguma forma explorar alguma funcionalidade que não deveria estar disponível, por exemplo.

Para evitar este tipo de ataque, deve-se conhecer bem o framework que se está utilizando e permitir apenas o mapeamento dos parâmetros relevantes de acordo com o escopo ou funcionalidade da aplicação. Também pode-se aplicar a lógica inversa: dizer quais parâmetros da requisição devem ser ignorados.

Session Hijacking

Este ataque consiste em interceptar um identificador de sessão de um usuário válido da aplicação por meio do cookie de autenticação. Assim, o hacker pode facilmente enviar requisições para uma aplicação como se de fato fosse aquele usuário, mesmo utilizando outro computador.

O ataque pode ocorrer de duas formas: via XSS ou verificando as informações que trafegam na rede através de sniffers.

Para evitar este tipo de ataque, a aplicação deve implementar o protocolo HTTPS, sendo obrigado a utilizar um certificado digital, que são emitidos por autoridades certificadoras (Certisign, Serada Experian).

Conclusão

Comprei o livro por trinta reais (versão Kindle) e acredito que valeu a pena. Considero importante para qualquer desenvolvedor web conhecer ao menos os principais ataques possíveis (alguns já tinha conhecimento, outros não) em suas aplicações.

Só não recomendaria para quem já trabalha com segurança da informação diretamente ou já tem um conhecimento mais profundo sobre o tema, pois o livro pode acabar sendo trivial.

Link para compra do livro: https://www.casadocodigo.com.br/products/livro-seguranca

--

--

Henrique Braga
Henrique Braga

Written by Henrique Braga

“If you’re not making someone else’s life better, then you’re wasting your time. Your life will become better by making other lives better.”

No responses yet