APIs seguras em um API Gateway
Zeping Bai
November 4, 2022
Prefácio
Em junho de 2021, quase 92% dos dados dos usuários do LinkedIn foram vazados por APIs públicas que não possuíam controles de segurança. Os dados expostos, que foram vendidos ao público no mercado negro, continham 700 milhões de nomes de usuários, dados pessoais, endereços de e-mail, números de telefone e outras informações específicas. Embora o LinkedIn veja esse evento como uma coleta de dados públicos e não como um acesso ilícito, ele ainda destaca a importância das medidas de segurança de APIs.
Como a interface externa para aplicativos fornecerem serviços, as APIs estão constantemente expostas ao tráfego externo, encontrando atacantes hostis que empregam negação de serviço, injeção e vulnerabilidades conhecidas para atacar. Por exemplo, em dezembro de 2020, os atacantes exploraram as falhas do log4j 2 para realizar ataques não configurados contra APIs. Portanto, é necessário fortalecer a capacidade da API de manter esses atacantes maliciosos afastados. No entanto, antes de adotarmos medidas para proteger uma API, vamos primeiro entender o que é uma API.
O que é uma API?
A API tradicional (Interface de Programação de Aplicativos) representa as bibliotecas de link estático ou dinâmico do software para invocar suas funções. Os desenvolvedores podem reutilizar as funções fornecidas por softwares existentes com base em chamadas às suas APIs, como o TCP/IP, fornecido pelos sistemas operacionais.
Com a evolução dos sistemas de software e redes, o termo "API" agora se refere a interfaces de sistema acessadas por meio de uma rede. Os clientes chamam essas interfaces usando protocolos como HTTP para executar funções do cliente, como consultar a API de previsão do tempo para obter informações meteorológicas.
No sentido original, API refere-se a um canal fornecido pelo sistema de software para outros serviços, que define a especificação de interoperabilidade entre vários subsistemas. O serviço de autenticação, por exemplo, fornece interfaces para login de usuário, registro e aquisição de informações do usuário. Outros serviços podem usar essas interfaces de chamada para completar a função de autenticação do usuário. Da mesma forma, por meio da API, os subsistemas podem cooperar para cumprir a tarefa de todo o aplicativo.
O que é Segurança de API?
Após a visão geral da API, vamos agora introduzir a segurança de API. A segurança de API envolve três perspectivas principais:
Segurança da Informação (InfoSec): Da perspectiva da informação, garantir que a informação esteja protegida durante sua geração, transmissão, armazenamento e destruição em todo o ciclo de vida.
Segurança de Rede (NetSec): Da perspectiva da rede, garantir que os dados transmitidos pela rede não sejam interceptados ou adulterados e que indivíduos não autorizados não acessem a rede.
Segurança de Aplicação (AppSec): Da perspectiva do sistema de aplicação, garantir que os aplicativos desenvolvidos possam prevenir ataques maliciosos.
A segurança de API é a interseção desses três aspectos, o que significa que todos os três aspectos são indispensáveis se você deseja fazer um bom trabalho em segurança de API.
Ataques Comuns à Segurança de API
A OWASP, o projeto aberto de segurança de aplicações web, publicou uma lista de 10 problemas comuns de segurança de API OWASP API Security Project | OWASP Foundation.
Ela contém os seguintes problemas:
Autorização de Nível de Objeto Quebrada: Usuários acessam objetos de dados aos quais não têm acesso.
Autenticação de Usuário Quebrada: Erro de implementação do serviço de autenticação permite que usuários contornem o mecanismo de autenticação para acessar a API ilegalmente.
Exposição Excessiva de Dados: Permite que os usuários obtenham dados sensíveis excessivos, que deveriam ser proibidos.
Falta de Recursos e Limitação de Taxa: Falta de restrições sobre o número de recursos necessários para atender às demandas dos clientes, bem como volumes realistas de solicitações.
Autorização de Nível de Função Quebrada: Os usuários acessam uma API de recurso à qual não têm acesso.
Atribuição em Massa: Usuários alteram inadvertidamente os dados que não estão autorizados a editar por meio de uma interface desenvolvida incorretamente.
Configuração Incorreta de Segurança: Medidas de segurança configuradas incorretamente para a API.
Injeção: Entrada de dados não confiáveis desencadeia injeção de SQL, execução de comandos imprevistos ou acesso a dados.
Gerenciamento Inadequado de Ativos: Gerenciamento inadequado dos recursos da API, como liberar APIs para ambientes de teste ou versões anteriores incorretas de APIs offline.
Registro e Monitoramento Insuficientes: É desafiador identificar anormalidades de segurança usando métodos de auditoria devido à ausência de ferramentas de registro e monitoramento para acesso à API.
Após notar os problemas comuns relacionados à segurança de API, o que deve ser implementado para proteger a API?
Como proteger sua API?
Em termos de proteção de API, também é possível tomar medidas a partir de três perspectivas:
InfoSec: Podemos construir um sistema de confidencialidade para informações em conformidade com políticas legais e requisitos de segurança para evitar a divulgação de informações pessoais.
NetSec: A criptografia e verificação da transmissão de dados são necessárias.
AppSec: Precisamos fortalecer a segurança da aplicação.
Aqui estão algumas práticas adicionais para a segurança de API.
Criptografia Constante: Podemos prevenir circunstâncias de interceptação e adulteração de dados causadas por redes não gerenciadas por meio de uma configuração de TLS de fluxo completo. Além disso, também é necessário habilitar o mTLS para verificar a correção do lado do cliente e prevenir acesso não autorizado.
Use Tokens com Cautela: Precisamos ser cautelosos ao empregar JWTs, pois eles permitem que o cliente os decodifique, o que pode expor informações confidenciais se utilizados incorretamente. Além disso, teremos dificuldades ao revogar uma sessão de login específica, pois aplicar um procedimento de revogação é complicado devido às suas limitações.
Granularidade de Permissão Menor: Atribua permissões mínimas para acesso à API e dados para contornar a possibilidade de acesso não autorizado.
Validação de Entrada: Nunca confie nos valores de entrada do cliente. Você deve validar os valores de entrada do cliente para garantir que atendam aos requisitos de segurança.
Limitação de Taxa: Limite o ritmo de acesso à API. Essa medida previne ataques de negação de acesso, que ocorrem quando um sistema é sobrecarregado com solicitações que não consegue lidar de uma só vez.
Registro e Monitoramento: Projetar um mecanismo de registro e monitoramento apropriado para o sistema nos permite identificar eventos de segurança e tomar medidas apropriadas rapidamente. Também podemos voltar no tempo após um evento de segurança da informação para identificar os sistemas e dados afetados e determinar a extensão de qualquer vazamento de dados potencial.
As medidas mencionadas acima exigem que façamos alterações específicas no sistema de aplicação, processando componentes individuais, o que não só é muito caro, mas também propenso a mais problemas.
Como podemos implementar medidas de segurança sem comprometer os serviços de aplicação?
Gateways de API
Gateways de API oferecem um novo caminho fora da transformação do sistema, o que reduz significativamente o custo de transformação e fornece gerenciamento centralizado e unificado do tráfego de entrada. Recursos de segurança ricos também são oferecidos pelos gateways de API, o que nos permite proibir e registrar visitas não autorizadas.
Usando o Apache APISIX como exemplo, a seção a seguir descreverá vários cenários de aplicação de gateway de API para proteger APIs.
Criptografia (TLS/mTLS)
Você pode não apenas habilitar o TLS para a API para oferecer acesso HTTPS, mas também ativar o mTLS para verificar a identidade do cliente. Naturalmente, também é possível habilitar o TLS/mTLS para serviços upstream para garantir a segurança do tráfego enquanto ele viaja pela rede interna. Você pode consultar o manual de mTLS para ativar a funcionalidade necessária.
Verificação de Identidade
Todas as conexões podem ser criptografadas, mas isso não garante a segurança da API. Como resultado, em cenários de negócios reais, devemos incluir componentes ligados à autenticação. Para resolver esse problema, o APISIX oferece uma variedade de plugins conectados à autenticação que podem ser facilmente integrados a serviços de autenticação externos ou diretamente através do gateway. Esses plug-ins variam em complexidade desde os mais simples, como LDAP, OpenID Connect e Open Policy Agent, até os mais complexos, como Basic Auth, Key Auth, JWT Auth e Forward Auth.
Limitação de Taxa
A falta de recursos e a limitação de taxa são dois ataques frequentes. Para essas situações, os gateways geralmente incluem plugins relacionados à limitação de taxa; o Apache APISIX também oferece. Ele oferece três plugins: limit-count, limit-req e limit-conn, que fornecem recursos de limitação de velocidade de solicitação, medição de solicitação e limitação de conexão. Eles podem ajudar a controlar efetivamente a pressão de acesso à API e evitar que o sistema fique sobrecarregado com quantidades incontroláveis de solicitações.
Restrições de Segurança
O APISIX oferece plugins CORS e CSRF para fornecer proteção contra solicitações de domínio cruzado e falsificação de solicitação entre sites para a API, aumentando ainda mais sua capacidade de proteger sua segurança. Além disso, seus plugins de restrição permitem bloquear IP, UA, Referer e URI, o que pode neutralizar a maioria dos ataques à API.
Verificação de Entrada
O APISIX fornece o plugin request-validation, que permite que os provedores de API validem a entrada do usuário via jsonschema. A linguagem de descrição de regras de validação e dados estruturados pode ser bem utilizada para validação de dados.
Observabilidade
Os métodos listados acima são todas maneiras de proteger a API. No entanto, nenhum sistema é completamente seguro. Uma vez que um sistema é atacado, devemos agir rapidamente para determinar a causa do ataque e evitar mais danos. Como resultado, o APISIX também oferece uma ampla variedade de plugins de registro, que podem enviar logs para vários destinos, incluindo Kafka, Clickhouse e soluções de registro como serviço oferecidas por provedores de nuvem como Google Cloud, Splunk, etc.
Além disso, o APISIX oferece funcionalidade de rastreamento de links com integração a Skywalking, OpenTelemetry e outros programas de rastreamento.
Além disso, o APISIX fornece o plugin Prometheus, que pode calcular e exportar métricas relacionadas a solicitações de API para o serviço de monitoramento Prometheus para ajudar a identificar problemas de desempenho e evitar interrupções de serviço sistêmicas.
Podemos identificar possíveis incidentes de segurança em tempo hábil, tornando o sistema suficientemente observável.
Capacidades de Programação
Por último, mas não menos importante, o APISIX também oferece um plugin serverless para lidar com vulnerabilidades de dia zero, permitindo que os usuários utilizem código Lua para executar alguma lógica quando a solicitação chegar. Podemos aproveitar essa funcionalidade para bloquear temporariamente algumas vulnerabilidades de dia zero à medida que surgem.
Conclusão
A segurança de API é essencial para provedores de serviços, portanto, os desenvolvedores devem se esforçar para mantê-la atualizada. Para demonstrar como os gateways de API podem ser usados em diferentes cenários de aplicação, este artigo usa o Apache APISIX como exemplo, que é uma estratégia nova que difere da modificação do sistema e ajuda os desenvolvedores a reduzir o custo das preocupações de segurança.