Boas práticas de segurança para gateways de API
Kuria Macharia
7 de setembro de 2022
0 minutos de leituraAs APIs são um componente essencial do cenário atual de desenvolvimento devido à importância que têm nas arquiteturas de microsserviços. Como os softwares modernos costumam ser compostos por diversos microsserviços, algumas funcionalidades podem ficar fora do escopo de uma API individual. Com um gateway de API, podemos agregar esses serviços para que funcionem como se fossem uma única API e retornar respostas complexas de diferentes microsserviços por meio de uma única chamada ao gateway. Por exemplo, com um gateway de API e o GraphQL, é possível usar um único esquema definido para consultar campos de dados específicos em diferentes microsserviços e receber uma resposta unificada.
O que é um gateway de API?
Um gateway de API é uma camada de abstração que geralmente funciona como a única interface pública entre os microsserviços e os clientes que os consomem. Ele atua como proxy para os microsserviços de back-end, conectando os endpoints da API voltados ao cliente, encaminhando as solicitações do cliente aos microsserviços adequados e agregando os dados da resposta antes de enviá-los ao cliente solicitante. Assim, oferece uma interface de programação de aplicações consistente e coerente, simplificando o trabalho de quem desenvolve o front-end.
Outros benefícios oferecidos pelos gateways de API incluem:
Realizar o balanceamento de carga— Podemos configurar um gateway de API para distribuir as solicitações recebidas dos clientes entre as instâncias de serviço disponíveis, oferecendo suporte ao balanceamento de carga.
Eliminar solicitações de ida e volta— Um gateway elimina solicitações desnecessárias dos clientes, que podem aumentar a latência e prejudicar o desempenho. Os clientes podem fazer uma única solicitação ao gateway, que a encaminha a vários serviços e agrega as respostas.
Centralizar o monitoramento de uso e a análise de dados— Um gateway de API permite integrar ferramentas de monitoramento e análise para coletar e analisar dados importantes sobre o tráfego de usuários, o tempo de execução e os erros. Essas informações são essenciais para tomar decisões sobre o dimensionamento e a depuração de uma aplicação.
O acesso das APIs aos serviços de back-end faz delas um alvo atraente para hackers mal-intencionados que querem acessar esses serviços ou interceptar dados em trânsito. Um gateway de API funciona como uma barreira de segurança entre os endpoints dos microsserviços de back-end e os endpoints do cliente.
Neste artigo, vamos analisar os benefícios de segurança oferecidos pelos gateways de API e conhecer as boas práticas a seguir, além de medidas adicionais para manter nossos gateways de API seguros.
Como um gateway de API aumenta a segurança
A segurança é uma preocupação fundamental para empresas que oferecem serviços por meio de APIs. Um gateway de API pode fortalecer a postura de segurança dos sistemas que usam endpoints de API expostos publicamente de várias maneiras, entre elas:
Aplicação de políticas
As políticas são regras que precisam ser seguidas ao acessar os serviços subjacentes e gerenciar o comportamento da API. Cada política contém dois componentes: a(s) regra(s) a serem verificadas e a ação resultante. A aplicação das políticas acontece dentro do gateway de API. Podemos personalizá-las para atender às necessidades de diferentes tarefas, como autenticação e autorização ou gerenciamento de tráfego. Um bom exemplo é a serialização JSON e outras formas de serialização de dados, que podem ser padronizadas em um único ponto de entrada.
Proteção contra sobrecarga de tráfego
Um gateway de API pode limitar o número de chamadas a uma API dentro de um período definido. Isso evita que a capacidade de processamento de solicitações do back-end seja excedida. Também protege o sistema contra ataques de negação de serviço (DoS), que inundam os microsserviços de back-end com tráfego. Além disso, protege a API contra ataques de força bruta e tentativas por adivinhação, nos quais várias solicitações com credenciais diferentes são enviadas.
Disjuntores (circuit breakers)
Um disjuntor fortalece a postura de segurança ao garantir a proteção da conexão com os serviços de back-end. Ele interrompe as conexões com o back-end por um período definido quando detecta uma quantidade predefinida de falhas consecutivas de conexão. Isso evita sobrecarregar o back-end com solicitações que certamente vão falhar. É uma medida automática de proteção contra atacantes que tentam provocar falhas em cascata nas APIs.
Desacoplamento dos serviços de back-end das aplicações de front-end
Um gateway de API aumenta a segurança de serviços confidenciais de back-end ao eliminar qualquer contato direto entre eles e as aplicações de front-end. Isso também limita o que o front-end pode saber sobre os microsserviços que processam suas solicitações. Essa proteção ajuda a evitar ataques de injeção de SQL, que direcionam código malicioso aos bancos de dados do back-end. Limitar as informações conhecidas sobre o back-end dificulta a realização de ataques de injeção de SQL, pois os atacantes não sabem de qual banco de dados vêm as informações.
Boas práticas de segurança para gateways de API
Um gateway de API pode reduzir o risco de ataques de injeção ao implementar a validação básica de entrada em todas as solicitações. Assim, solicitações com conteúdo suspeito são descartadas antes de chegar aos serviços de back-end.
Embora os gateways ofereçam ótimos recursos de segurança, também devemos agir de forma proativa para manter nossos endpoints de API e microsserviços seguros. Vamos conhecer algumas boas práticas para criar um gateway de API seguro.
HTTPS e criptografia de solicitações
Para aumentar a segurança de um gateway de API, primeiro devemos garantir que a comunicação com os clientes aconteça por HTTPS. O HTTPS é um protocolo seguro que criptografa todos os dados em trânsito, aumentando a segurança. Atualmente, é o padrão do setor para sites públicos. O protocolo TLS é especialmente importante na transmissão de dados confidenciais durante atividades como acessar um serviço de e-mail, uma conta bancária ou um sistema corporativo remotamente. Ele também permite transferir do cliente para o provedor de serviços em nuvem a responsabilidade pelo gerenciamento do TLS.
Implemente a validação de solicitações de API
Devemos configurar o gateway de API para validar as solicitações recebidas dos clientes antes de encaminhá-las aos microsserviços de back-end. Por exemplo, podemos configurar o gateway para verificar se um parâmetro ou cabeçalho da solicitação não está vazio ou se o payload segue o esquema JSON permitido.
Se a validação falhar, o gateway de API descarta a solicitação e retorna uma mensagem de erro ao cliente. Isso reduz o número de solicitações desnecessárias encaminhadas ao servidor e diminui o risco de ataques de injeção.
Configure o registro de logs
Devemos habilitar o registro de logs no gateway de API para ajudar a resolver problemas de acesso dos clientes e de execução de solicitações. Um gateway de API gera dois tipos de logs: de execução e de acesso.
Os logs de execução contêm detalhes de cada etapa seguida pelo gateway de API ao processar uma solicitação. Os dados registrados incluem rastreamentos de execução, etapas de validação e erros. Os logs de acesso detalham cada entrada no gateway de API. Cada solicitação gera um registro que indica quem está acessando o gateway e como o acesso acontece.
Implemente limites de taxa
Em um gateway de API, devemos implementar limites de taxa para:
Evitar ataques de negação de serviço (DoS)
Limitar o impacto de falhas em cascata
Limitar o uso de recursos.
A implementação de limites de taxa no gateway de API protege nossos microsserviços contra tráfego malicioso e sobrecargas de tráfego legítimo que podem causar falhas no sistema. Uma política de controle de tráfego ajuda a reduzir os efeitos negativos de limites de taxa rígidos, enfileirando as solicitações que excedem o limite para processamento na próxima cota. Podemos aplicar políticas de limite de taxa e de controle de tráfego a um recurso específico ou a todas as solicitações.
Habilite um firewall de aplicações web (WAF)
Podemos proteger nosso gateway de API com um firewall de aplicações web (WAF), que limita o acesso à API com base em condições e regras definidas. Ele ajuda a proteger o gateway contra ameaças comuns, como ataques de cross-site scripting e de injeção.
Por exemplo, podemos usar um WAF para negar ou permitir acesso a solicitações de blocos CIDR, intervalos de endereços IP ou países específicos. Ele também pode detectar e descartar solicitações que contenham scripts maliciosos ou código SQL. Com o WAF, aproximamos a barreira de segurança do lado do cliente e liberamos o gateway de API de cargas de trabalho desnecessárias.
O WAF é um recurso eficaz de filtragem de conteúdo no nível HTTP e foi recomendado pela CISA dos EUA como uma das soluções para prevenir ataques relacionados à vulnerabilidade Log4j. Ele também faz parte das boas práticas de Snyk para corrigir a vulnerabilidade Log4Shell.
Separe os gateways de API
Devemos criar gateways de API separados de acordo com cada caso de uso para reduzir a possível superfície de ataque e evitar a exposição desnecessária de endpoints de API. Separar os gateways também ajuda a limitar o impacto da propagação em caso de falha ou controle de tráfego de um gateway.
Por exemplo, se um gateway sofrer um ataque, os serviços de todos os sistemas não serão derrubados. Isso facilita muito a depuração do sistema, pois a superfície de ataque é bem menor.
Como aproveitar ao máximo seu gateway de API
A medida mais importante que podemos tomar para proteger nossa API é implementar um gateway de API.
Ele desacopla as arquiteturas de microsserviços da API pública e permite introduzir diferentes barreiras de segurança entre elas. Essas barreiras — incluindo limites de taxa, WAF, HTTPS e validação de solicitações — reduzem o risco de ataques comuns a APIs, como injeção de SQL, cross-site scripting e ataques de negação de serviço.
Ao seguir boas práticas como comunicação por HTTPS, validação de solicitações, registro de logs, limites de taxa, WAF e gateways de API separados, reduzimos o risco de ataques bem-sucedidos contra endpoints e dados em trânsito. Saiba mais sobre segurança de APIs aqui.
Comece a participar de desafios de Capture the Flag
Aprenda a resolver desafios de Capture the Flag assistindo sob demanda ao nosso workshop virtual introdutório.
