Explicando o TOP 2 da OWASP "Falhas Criptográficas" para desenvolvedores
Tags: owasp, appsec, cryptographic
Published: 2023-02-02 14:12:17

Seguindo a nossa série sobre OWASP TOP 10 de 2021, temos como segunda categoria de risco mais comum a "Cryptographic Failures" ou "Falhas Criptográficas" em português.

Se você estiver construindo um software sem se preocupar com os aspectos de segurança, será como construir uma casa sem trancas nas portas e janelas. Portanto, todo engenheiro de software precisa ter conhecimento geral sobre as maneiras pelas quais é necessário proteger as aplicações e a criptografia é uma delas.

Quer saber mais sobre a OWASP, [confira este artigo](https://bit.ly/3WzpRix).

## Mas o que são as criptografias?
Criptografia é a arte/ciência da escrita secreta. Quando falamos de criptografia, estamos nos referindo a um processo para codificar informações, fazendo com que ela se torne inelegível para terceiros não autorizados. Para isso, diferentes técnicas são utilizadas, incluindo a cifra, a chave e algoritmos.

Em resumo, a cifra é a técnica específica usada para codificar a informação; a chave é o elemento secreto utilizado para decodificar a informação codificada; enquanto os algoritmos de criptografia são os métodos matemáticos que fazem a cifra funcionar de forma eficiente.

Juntos, esses elementos formam a criptografia, mas o tema pode ficar ainda mais complexo! Além disso, temos alguns tipos de criptografia.

**Criptografia de chave simétrica:** Este é um tipo de criptografia em que apenas uma chave (uma chave secreta) é usada para criptografar e descriptografar texto simples e texto cifrado. Existem vários tipos de criptografia de chave simétrica:

- Data Encryption Standard (DES);
- Electronic Code Book (ECB);
- Cipher block Chain(CBC);
- Advanced Encryption Standard (AES).

A principal vantagem da criptografia simétrica é que é mais rápida em performance por usar uma só chave, e uma das principais é o uso da mesma chave tanto para criptografar como para descriptografar os dados, gerando problemas de segurança.

**Criptografia de chave assimétrica:** Este é um tipo de criptografia que usa duas chaves separadas, mas matematicamente relacionadas, para criptografar e descriptografar dados. A chave pública criptografa os dados enquanto sua chave privada correspondente os descriptografa. 

Algumas das criptografias de chave assimétrica são:

- Algoritmo RSA;
- Algoritmo Diffie Hellman;
- Algoritmo de curva elíptica Diffie Hellman;
- Algoritmo de Assinatura Digital.

A principal vantagem da criptografia assimétrica é que ela elimina o problema de distribuição de chaves, pois usa dois pares. A desvantagem é que será lento devido à geração e uso de dois pares de chaves. 

## Preciso criar minha própria criptografia?
Criar uma criptografia segura e confiável é extremamente difícil e requer muito conhecimento e experiência na área. Portanto, não, desenvolvedores não precisam se preocupar com isso!

Algoritmos criptográficos reconhecidos são submetidos a vários testes rigorosos de segurança antes de serem considerados seguros o suficiente para uso.

Além disso, essas criptografias são frequentemente incluídas em bibliotecas, sendo fáceis de usar e integrar a aplicações. 

**Pensando no cotidiano de quem desenvolve, temos o caso comum de uso da “criptografia de senhas”.** 

Quando os usuários criam contas em uma aplicação web, por exemplo, é importante que as senhas sejam armazenadas de forma segura para evitar vazamentos. 

Em vez de armazenar as senhas como texto simples, podemos usar uma biblioteca de criptografia para codificar as senhas, como a biblioteca "bcrypt" em Python.

Mas e se o mecanismo criptográfico dessa biblioteca falhar? É o que veremos no próximo ponto.

## Falhas criptográficas
Em 2021, o OWASP TOP 10 de 2021 chama a atenção para essa categoria de risco de segurança para aplicações web. 

Nela, a OWASP lista erros comuns na implementação da criptografia que colocam em risco a segurança de dados do nosso sistema, como:

- o uso de algoritmos antigos ou fracos;
- chaves inseguras;
- gerenciamento inadequado de chaves,
- falta de validação de certificados de servidor;
- uso inadequado de senhas como chaves, funções obsoletas, entre outros problemas.


## Impacto
Quando uma falha de criptografia ocorre, é possível que invasores tenham acesso a dados sensíveis, como informações financeiras, senhas e dados pessoais, o que pode resultar em perdas financeiras, riscos de vazamento de informações e outros danos irreparáveis. 

Além da perda financeira, falhas desse tipo também podem afetar a confiança dos usuários e a imagem da marca. 

Por esses motivos, é importante que as aplicações sejam desenvolvidas com segurança criptográfica adequada.

## Recomendações importantes da OWASP
O OWASP Top 10 traz algumas práticas importantes para evitar as falhas criptográficas:

- Classificar os dados processados, armazenados ou transmitidos pela aplicação e identificar quais são sensíveis de acordo com leis de privacidade, regulamentos ou necessidades comerciais;
- Não armazenar dados sensíveis desnecessariamente;
- Criptografar todos os dados sensíveis que estão em repouso;
- Garantir que algoritmos, protocolos e chaves atualizados e fortes estejam em uso e utilizar gerenciamento de chaves adequado.
- Criptografar todos os dados em trânsito com protocolos seguros como TLS com cifras de segredo para frente e priorização de cifra pelo servidor. Forçar a criptografia usando diretivas como HTTP Strict Transport Security (HSTS);
- Desativar cache para respostas que contêm dados sensíveis;
- Aplicar controles de segurança necessários de acordo com a classificação de dados;
- Não usar protocolos legados como FTP e SMTP para transportar dados sensíveis;
- Armazenar senhas usando funções de hash adaptativas e salgadas com fator de trabalho, como Argon2, scrypt, bcrypt ou PBKDF2;
- Escolher vetores de inicialização apropriados para o modo de operação. Para muitos modos, isso significa usar um gerador de números pseudo-aleatórios seguro (CSPRNG). Para modos que exigem um não-repetido, o vetor de inicialização (IV) não precisa ser gerado por um CSPRNG. Em todos os casos, o IV nunca deve ser usado duas vezes com a mesma chave;
- Usar sempre criptografia autenticada ao invés de apenas criptografia;
- Gerar chaves de forma aleatória e armazená-las na memória como matrizes de bytes. Se uma senha for usada, ela deve ser convertida em uma chave através de uma função adequada de derivação de chave baseada em senha;

E muitas outras medidas importantes!

## Criptografia não precisa ser um bicho de sete cabeças!
Desenvolvedores são a primeira linha de defesa da segurança de uma aplicação e para isso é necessário conhecer como funciona a essência da criptografia, sem se apegar às detalhes estatísticas ou altamente complexas que envolvem algoritmos, por exemplo.

Além disso, é necessário fazer parte da nossa rotina de desenvolvimento verificar se estamos usando algoritmos e protocolos criptográficos atualizados e fortes, com gestão de chaves adequada e com validação correta do certificado do servidor.

Em resumo, a falta de conhecimento pode levar a vulnerabilidades que podem ser exploradas por atacantes, colocando dados e informações confidenciais em risco. 

Para mais conteúdos sobre a OWASP TOP 10, [acesse este artigo](https://bit.ly/3WzpRix).

[Para mais dicas da OWASP](https://owasp.org/Top10/)!