Upload de arquivos estão se tornando cada vez mais populares nas aplicações cotidianas. Quando criamos uma conta no banco, comumente temos que enviar uma foto que comprove nossa identidade, de modo que ela também pode conter um documento de identificação; se estamos fazendo parte de um processo seletivo, o envio do currículo por vezes é necessário, geralmente no formato pdf.
Entretanto, se o servidor que recebe estes arquivos não possuir controles de segurança contra ataques a sessões de upload de arquivos, o sistema ou seus usuários podem estar expostos a grandes riscos.
Diante disso, serão descritos neste artigo:
- Introdução de conceitos.
- Discussão sobre tipos de ataque de envio de arquivos.
- Demonstração didática de uma aplicação backend utilizando SpringBoot, ClamAV e JWT, com segurança reforçada contra:
- Upload de arquivos em sessões sem autorização.
- Upload de arquivos grandes.
- Upload de arquivos maliciosos.
- Upload de arquivos com formatos não permitidos.
Observação: referências anotadas com
* são escritas em inglês.
Conceitos importantes
Compreende-se como
backend a representação de um servidor, cujo papel é fornecer os recursos para um agente cliente, chamado de frontend. É proveniente da arquitetura Cliente-Servidor. O papel do
backend é fazer com que a complexidade das aplicações seja separada do agente cliente.
Compreende-se como
ClamAV* um antivírus
Open Source feito especialmente para o Linux, contando com versões para MacOS e Windows.
Compreende-se como
autenticação a verificação de que uma entidade ou objeto são válidos. No contexto de usuários, consta a validação de que o usuário existe com as credenciais fornecidas no passo de autenticação.
Compreende-se como
autorização a verificação de privilégios de uma entidade ou objeto autenticados.
Compreende-se como
JWT um método de autenticação de duas partes definido no RFC 7519.
Conceitos sobre Segurança da Informação
Segundo as normas NBR 27001 e NBR 27002, sintetizadas no livro Gestão da Segurança da Informação (COELHO, Flávia; ARAÚJO, Luis; BEZERRA, Edson, 2014), compreende-se como:
Ativo: qualquer coisa que tenha valor para organização e para seus negócios. Exemplo: pessoas, servidores, computadores, software, etc.
Ameaça: qualquer evento que explore vulnerabilidades.
Vulnerabilidade: qualquer fraqueza que pode ser explorada e comprometer a segurança de sistemas ou informações. Exemplo:
- Risco: combinação da probabilidade (chance da ameaça se concretizar) de um evento ocorrer e de suas consequências para a organização.
- Ataque: qualquer ação que comprometa a segurança de uma organização.
- Modelo de ataque: *Interrupção :: quando um ativo fica indisponível ou é destruído. Exemplo: ataque distribuído de negação de serviço (DDoS).
*
Interceptação: quando um ativo é acessado por um agente não autorizado, de modo que não há modificação. Exemplo:
Spoofing.
*
Modificação: quando um ativo é acessado por um agente não autorizado, de modo que há modificação. Exemplo:
Dns hijacking; redirecionamento de DNS.
*
Fabricação: quando um ativo tem algum dado falsificado inserido. Exemplo:
crackear um software pago.
Forma de ataque:
*
Ativa: quando ocorre inserção ou deleção de dados em um ativo. Exemplo: ataque de negação de
serviço.
*
Passiva: quando ocorre somente escuta dos dados de um ativo, sem modificação. Exemplo: ataques de
keylogger.
*
Incidente de segurança: qualquer evento contrário à segurança. Exemplo: serviço de e-mail atacado por negação de serviço.
Controles de segurança: são medidas ou um conjunto de medidas adotadas para tratar vulnerabilidades e reduzir riscos de incidentes de segurança da informação.
A seguir, veremos alguns tipos de ataques e suas classificações.