Segurança de Aplicação

Melhores práticas de desenvolvimento seguro em API – OAuth2 e JWT

Não conseguimos imaginar nossos negócios sem o digital. Quando enviamos um Twitter, autenticamos em uma conta com nossa rede social, fazemos uma compra online ou consultamos o trânsito em tempo real por um aplicativo, nos bastidores APIs (Application Programming Interfaces) estão sendo executadas. Quais seriam as melhores práticas de desenvolvimento seguro em API?

Em nosso mundo de dispositivos e aplicações conectados, as APIs desempenham um papel crucial para facilitar a comunicação entre os diferentes sistemas e aplicações. Além de ser o conector de negócios B2B ou B2C, estamos falando de habilitar a conexão para milhares de dispositivos para internet das coisas (IOT). 

As APIs revolucionam o mundo da integração de sistemas e são grandes protagonistas da nossa era de Transformação Digital. Portanto, o desenvolvimento seguro das APIs é de extrema relevância para que as organizações forneçam acesso seguro e confiável a dados e serviços. Neste contexto, existem diversas tecnologias e boas práticas de segurança que podem ser aplicadas para garantir a proteção da comunicação baseada em API, neste artigo destacamos o OAuth2 e o Json Web Token (JWT).

Falaremos do OAuth2 por ser um padrão aberto para autorização que delega o processo a um servidor de autorização, permitindo que aplicações de terceiros acessem com segurança os dados do usuário. E incluímos a forma eficiente e compacta de requisição, ou token, JWT usada para autenticação e autorização em APIs. 

Acreditamos que a consciência e incorporação destas melhores práticas de segurança elevam a confiabilidade, integridade das informações e disponibilidade dos serviços das  APIs, diminuindo o risco e aumentando a credibilidade e a imagem das organizações.

Nova call to action

OAUTH 2

Foi o tempo em que o processo de controle de acesso se baseava na apresentação de usuário e senha para aplicação. Hoje tanto a autenticação como a autorização possui suas etapas complexas para estabelecer a identidade do usuário e seu perfil de acesso, respectivamente. 

Ainda que algumas APIs sejam autenticadas com nome de usuário e senha, geralmente na forma de autenticação básica no cabeçalho, essa não é nossa recomendação. Como boa prática para trabalhar com a autorização de dispositivos e oferecer suporte de servidor para servidor, o OAuth 2.0 é nossa recomendação, permitindo uma ótima experiência do usuário e reforçando o desenvolvimento seguro em sua API.

Mas, o que é OAuth? Ficamos com a definição presente na lista de recomendação da Cheat Sheets Series da OWASP sobre Autenticação, em “use protocolos de autenticação que não requer senha”.

“Open Authorization (OAuth) é um protocolo que permite que uma aplicação se autentique no servidor como usuário, sem exigir senhas ou qualquer servidor de terceiros que atue como um provedor de identidade. Ele usa um token gerado pelo servidor e fornece como o fluxo de autorização ocorre, de modo que um cliente, como uma aplicação móvel, possa dizer ao servidor que usuário está usando o serviço.”

Aproveito para informar que falamos da diferença entre OAuth2 e SAML em artigo anterior.

Vantagens do OAuth 2.0

Como pontos positivos ao escolher usar Oauth 2 como protocolo de autorização, podemos citar a simplicidade na utilização e abrangência da tecnologia. Pois, pode ser usada para aplicações web, desktop, mobile. Além dessas, vale mencionar as vantagens de: 

  • O usuário não precisa criar outro perfil para acessar a aplicação;
  • Poucas senhas para lembrar;
  • Economia de tempo, pois não é preciso desenvolver autenticação;
  • Menor risco de roubo de identidade uma vez que a autenticação ocorre no provedor; 
  • Tokens transmitidos de forma encriptada e não armazenados na aplicação;
  • Menos dados para armazenar nos servidores.

Ameaças ao OAuth 2.0

É possível que atacantes ameacem os fluxos do Oauth com as técnicas de CSRF, XSS e

Open Redirect. As seguintes ameaças podem ser listadas:

  • Ameaças no endpoint;
  • Redirect Hijack;
  • Ataque man-in-the-middle (MITM), Homem no meio.

Exemplos de vulnerabilidades:

  • Authorization Code Injection Attack;
  • OAuth Phishing via Unchecked Redirect URI;
  • OAuth Client Secret Disclosure.

Mais informações sobre as fraquezas pode ser encontrada na RFC-6819 de modelagem de ameaças e considerações de segurança do OAuth 2.0

Boas práticas de desenvolvimento seguro para OAuth 2.0

Por conta desses possíveis cenários de ataque é que é importante passar as boas práticas de desenvolvimento seguro em API ao se usar o OAuth 2.0:

  • Sempre validar o parâmetro “redirect_uri” no lado do servidor para permitir apenas URLs aprovadas e assim evitar ataques de redirecionamento abertos;
  • Sempre tentar fazer a troca com o código, ao invés de obter o token diretamente (evitar “response_type=token”);
  • Usar o parâmetro “state” com hash aleatória para evitar ataques de CSRF no processo de autenticação OAuth;
  • Definir e validar o escopo para cada aplicação;
  • Utilizar sempre comunicação segura, como HTTPS, ao transmitir tokens OAuth2 e códigos de autorização.

JSON Web Token (JWT)

O padrão JWT define como transmitir e armazenar objetos JSON entre aplicações com segurança, simplicidade e de forma compacta. Trata-se de um padrão aberto documentado na RFC-7519. Largamente empregado na validação de serviços em Web Services, pelas  vantagens que veremos a seguir, já destacando, a possibilidade da validação local.

Conhecendo a estrutura do JWT vemos que é uma estrutura JSON composta por: Header, Payload e Signature. 

Por ser assinado digitalmente o JWT naturalmente garante a questão da integridade. Mas, vale a pena lembrar que se os dados transmitidos no payload são sensíveis, isso vai requerer a implementação de criptografia no payload para torná-lo confidencial. 

Mais detalhes sobre implementação segura de Json Web token (JWT) podem ser encontrados em nosso blog.

Vantagens do JWT

Que o JSON Web Token (JWT) é um meio compacto e seguro para transmitirmos as solicitações, isso já sabemos. Agora como anunciado, vamos ver outras vantagens no  desenvolvimento seguro em API desse mecanismo de codificação assinado:

  • Por ser Stateless não tem a necessidade de armazenamento de sessão no servidor;
  • Como é compacto, pode ser transmitido no cabeçalho HTTP ou como um parâmetro de consulta;
  • Compatibilidade entre domínios. Ou seja, pode ser usado na construção de sistemas descentralizados de domínio cruzado.

Ameaças ao JWT

  • Armazenar informações sensíveis no payload;
  • Tempo de expiração  não configurado;
  • Tempo de expiração muito alto;
  • Utilização de algoritmo fraco para assinatura;
  • Falta de uso das demais claims reservadas do JWT;
  • Bug em algumas bibliotecas;
  • Algoritmo “None”;
  • Troca de Algoritmo;
  • Informar uma assinatura inválida;
  • Força bruta em chaves fracas.

Exemplos de vulnerabilidades:

  • Algoritmo JWT “None” permitido;
  • Assinatura JWT não verificada;
  • Validade do JWT não verificada.

Melhores práticas de segurança para JWT

  • Restringir algoritmos aceitos;
  • Verificar todos os tokens antes de processar os dados do payload para evitar adulterações e acesso não autorizado;
  • Armazenar tokens JWTs com segurança, como em cookies seguros somente HTTP,  evitando falhas de controle de acesso;
  • Sempre sanitizar dados que podem ser manipulados pelo usuário;
  • Implementar rate-limiting para prevenir ataques de força bruta e de negação de serviço.
  • Restringir URLs de quaisquer certificados JWKS / X509;
  • Use o processo de assinatura mais forte para o qual você possa dispor de tempo de CPU;
  • Use chaves assimétricas se os tokens forem usados ​​em mais de um servidor;
  • Utilize chaves fortes e únicas para assinar JWTs e proteger contra ataques de força bruta;
  • Tenha o tempo de expiração curto, o que diminui o tempo dos atacantes e evita a reutilização;
  • Procure utilizar sempre a versão mais recente da biblioteca JWT que você optar, e realize uma busca por possíveis CVE’s para verificar se a versão utilizada não tem vulnerabilidades publicamente conhecidas;
  • Utilize protocolos seguros, como HTTPS, para evitar escutas e ataques man-in-the-middle.

O JWT é uma forma ampla utilizada e conveniente de autenticar e autorizar usuários em APIs RESTful. Para garantir a segurança do JWT, é importante seguir as melhores práticas, como o uso de chaves secretas fortes, verificação de assinaturas e armazenamento seguro de tokens. Ao tomar as precauções de segurança necessárias, você pode reduzir o risco de incidentes de segurança e proteger suas APIs e os dados sensíveis que elas tratam.

Conclusão

Cuidar do desenvolvimento seguro em API traz consigo uma série de cuidados que incluem uso de protocolos de segurança e melhores práticas. O OAuth2 deve ser devidamente implementado para reduzir os riscos de segurança. E o JSON Web Token (JWT) pode ser usado para autenticação e autorização, mas deve ser protegido com chaves secretas fortes, assinaturas verificadas e armazenado com segurança.

Nova call to action
About author

Articles

Profissional da área de tecnologia a mais de 16 anos. Tecnólogo pela ETE, bacharel em Análise de Sistemas e Tecnologia da Informação pela Fatec e pós graduado (MBA) em Gestão e Governança de Tecnologia da Informação pela FIAP. Ao longo da carreira desenvolveu diversos sistemas, em diferentes tecnologias do mercado tanto web como mobile. Participou em todos os ciclos do projeto de reformulação do 'App Mobile de Clientes' da Liberty Seguros SA vencedor na categoria Aplicativo de Seguros, do "Prêmio eFinance 2017", uma das principais premiações de tecnologia para a área de finanças. Atua como squad leader no time de Consulting levando a cultura de AppSec para os clientes.
Related posts
Segurança de Aplicação

A Importância da Supply Chain para a Segurança das Aplicações

Para iniciar, quando pensamos em desenvolvimento de software, geralmente associamos essa área a…
Read more
Segurança de Aplicação

O que é WAAP (Web Application and API Protection)

Primeiramente, bem-vindo ao mundo da Proteção de Aplicativos Web e API (WAAP – Web…
Read more
Segurança de Aplicação

Os desafios em segurança de aplicações no uso da inteligência artificial por desenvolvedores

À medida que a inteligência artificial (IA) se torna cada vez mais presente em nosso dia a dia…
Read more

Deixe um comentário