Segurança de API | As APIs atuam como a cola que une vários componentes e serviços de software para promover um desenvolvimento mais rápido, melhor escalabilidade e um cenário digital mais conectado e eficiente.
As APIs se tornaram incrivelmente populares hoje em dia devido a vários benefícios chave que oferecem:
- Desenvolvimento Modular — O desenvolvimento é focado na API e não no software inteiro.
- Compartilhamento e Integração de Dados — Facilita você expor informações fornecidas por suas integrações corporativas, seja de base de dados, fonte de dados em arquivo físico ou em brokers mensageiras, etc.
- Desenvolvimento Mais Rápido — Desenvolver uma API é mais rápido do que desenvolver um sistema inteiro, está ligado ao desenvolvimento modular.
- Escalabilidade — Caso eu precise escalar tanto de forma horizontal ou vertical a integração, a API ajuda a escalar somente um ponto dessa integração, custando bem menos que escalar um sistema inteiro de uma só vez.
- Experiências Personalizadas — Quando criamos uma API, nós conseguimos construir uma integração mais customizada ao que nossos parceiros precisam. Ao invés de expor toda uma ou base de dados, você foca somente naquilo que precisa compartilhar.
- Alcance Ampliado — Podemos atingir mais consumidores da funcionalidade ou dos dados expostos pela API, aumentando a reusabilidade.
- Geração de Receita — Hoje existem muitas funcionalidades para monetização de API, como por exemplo cobrar por acesso a uma API ou cobrar pela informação que a API provê, exemplo de que hoje, dados valem muito nos dias atuais.
- Aumento da Eficiência — Ou seja, criar uma integração com uma API é mais rápido e limpo do que usar integrações via Text file, logo, a eficiência do desenvolvimento é aumentada.
Quais são os principais gaps de segurança de API?
-
Mecanismos de Autenticação Fracos
Exemplos desse tipo de falha, são API Keys simples sem criptográfica (plain text) ou a falta de um método de autenticação onde a API fica totalmente desprotegida e “pública” para qualquer um efetuar a chamada, facilitando acessos sem autorização.
-
Controles de Autorização Insuficientes
Uma coisa é a autenticação e outra é a Autorização. Mesmo com um mecanismo de autenticação implementado para acessar a APIs, quem está chamando a API realmente pode efetuar esse request?
Exemplo: Um sistema ou usuário se autentica usando um token válido atribuído a um usuário de sistema ou usuário pessoal, como sabemos que ele pode realmente acessar essa API?
Isso é uma falha, visto que acessos não autorizados podem vazar dados sensíveis, funcionalidades importantes que nem todos deveriam ter acesso e expor estatísticas que nem todos deveriam ter acesso.
-
Ataques de Injeção
Assim como nas aplicações web, as APIs também são suscetíveis a ataques de Injection. SQL Injection, Commands Injection, Cross Script Injection.
Os payloads que as APIs recebem ou mesmo os parâmetros do tipo path & query params podem receber codigo ou chamadas maliciosas e gerar situações de perigo suscetíveis a falhas.
-
Transmissão de Dados Insegura
APIs que transmitem dados sensíveis por canais inseguros, sem criptografia (por exemplo, HTTPS ou Mutual SSL), estão em risco de interceptação e espionagem de dados, os famosos sniffers. Captura de dados, seja dados de retorno ou mesmo dados de autenticação da API ficam vulneráveis nessa situação.
-
Configurações Incorretas de CORS
Essa ineficiência de configuração pode levar a solicitações não autorizadas, vindo de origens não identificadas e potencialmente expondo dados sensíveis ou permitindo que invasores realizem ações não autorizadas.
Exemplo: Especificar qual ou quais front-ends ou dispositivos podem acessar sua API e quais métodos HTTP da sua API podem ser acessados por esses clientes.
-
Falta de Limitação de Taxa e Controle de Fluxo
APIs que não implementam RATE LIMIT ou controle de THROTTLING são vulneráveis a abusos, como o consumo excessivo de recursos (seja da sua API ou gerando consumo excessivo do seu backend) e números exagerados de requisição além de expor problemas arquiteturais.
-
LOGs e Monitoramento Inadequados
Sem logs bem configurados (tanto na questão de informação de log quanto no nível) e ferramentas de monitoramento adequados, pode ser muito complicado detectar e responder a incidentes de segurança ou atividades incomuns. Observabilidade hoje é muito importante para APIs.
-
Ataques de Negação de Serviço (DoS)
Está muito ligado também à configuração de Rate Limit. APIs podem ser alvo de ataques DoS para interromper a disponibilidade do serviço, sobrecarregando o sistema com um grande volume de solicitações.
-
Configurações de Segurança Incorretas
Configurações inadequadas em servidores de API, frameworks ou plataformas podem criar vulnerabilidades de segurança, como senhas padrão, funcionalidades desnecessárias habilitadas ou controles de acesso inadequados.
Ou seja, API Gateways, Load Balance ou mesmo frameworks de desenvolvimento também podem interferir na segurança das suas APIs se não estiverem bem configurador ou com o famoso “configuração de fabrica”.
-
Exposição de Dados
APIs podem expor inadvertidamente informações sensíveis, como credenciais, informações pessoalmente identificáveis (PII) ou dados proprietários, por meio de mensagens de erro ou respostas verbosas.
Melhores práticas para cobrir os gaps de segurança
-
Autenticação
Implementar mecanismos de autenticação robustos, como OAuth 2.0, token JWT (JSON Web Tokens) ou API Keys para verificar a identidade dos clientes que acessam a API.
O Fluxo básico de cliend_id+client_secret para um access_token já ajuda a corrigir muitos problemas de autenticação.
-
Autorização
Ajustar as permissões de quem e como essa API pode ser acessada. Lembrando que, as autorizações podem ser configuradas tanto a nível de API quanto a nível de recursos, ou seja, posso dependendo da API, posso ter um nível de autorização para ela e uma autorização específica para um método POST por exemplo.
Uma outra dica é implementar controle de acesso baseado em função (RBAC) ou controle de acesso baseado em atributos (ABAC), conforme necessário.
-
Criptografia
O uso de HTTPS/TLS ou o Mutual TLS para criptografar os dados transmitidos entre os clientes e o servidor da API para proteger contra espionagem e adulteração. É um dos controles mais simples a serem implementados e extremamente fundamental.
-
Validação e Sanitização de Entrada
Criar regras de validação de payload e de parâmetros. Hoje em dia, muitos API Managers já oferecem a opção de Payload Validation baseados em exemplos mas caso vocês não disponham de tal ferramenta, criar mecanismos de validação, similar ao que fazemos em inputs de formulário ajuda a prevenir esse tipo de ataques de injeção, como injeção de SQL, injeção de NoSQL e cross-site scripting (XSS).
-
Limitação de Taxa e Controle de Fluxo
Implemente mecanismos de limitação de taxa e controle de fluxo para mitigar o risco de abusos, ataques de negação de serviço (DoS) e consumo excessivo de recursos.
-
Compartilhamento de Recursos Entre Origem (CORS)
Configure corretamente os cabeçalhos CORS para restringir solicitações cross-origin e prevenir acesso não autorizado.
Identificar quem está chamando a API e de onde está chamando, filtrando requests e limitando acesso.
-
Cabeçalhos de Segurança de API
Utilize cabeçalhos de segurança como Content Security Policy (CSP), X-Content-Type-Options, X-Frame-Options e X-XSS-Protection para aumentar a segurança e mitigar vários tipos de ataques.
-
Minimização de Dados
Exponha apenas os dados necessários através da API. Refinar o que a API realmente precisa fornecer de dados ou o que ela realmente precisa receber de payload, vai reduzir o risco de exposição de dados e limitar o impacto de violações de segurança.
-
Logs e Monitoramento
Logs bem formatados e nivelados. Ou seja, o que eu vou gerar de log? Que tipo de informação do meu request vai para o Log? O que eu realmente preciso identificar para poder fazer um “troubleshooting”?
Logs demais podem expor falhas, além disso, ferramentas de observabilidade vão te ajudar a entender a saúde da sua API.
Métricas como quantidade de acessos, Quantidade de Erros, Quais os principais Erros (por status code) e Média de tempo de requisição são informações iniciais para entender como sua API está se comportando.
E baseado em algumas dessas métricas, tomar atitudes, Exemplo, quantidade de erros da família 500 em excesso, ou Erros 403 podem indicar acessos indevidos ou alguém tentando quebrar autenticação da sua API.
-
Teste de Segurança
Realize avaliações regulares de segurança, testes de penetração e varreduras de vulnerabilidade da API para identificar e abordar proativamente as vulnerabilidades de segurança.
Um exemplo de teste de segurança é o famoso DAST, um teste caixa preta, para encontrar vulnerabilidades.
-
Versionamento da API
Use versionamento para gerenciar mudanças na API e manter a compatibilidade retroativa, permitindo que os clientes atualizem gradualmente para versões mais recentes com melhorias de segurança.
-
Treinamento de Conscientização em Segurança
Eduque desenvolvedores, administradores e usuários sobre as melhores práticas de segurança, princípios de codificação segura e ameaças comuns de segurança para promover uma cultura consciente de segurança.
Fomentar esse tipo de cultura de desenvolvimento seguro junto ao time responsável por CyberSecurity é algo muito importante e benéfico.
-
Ciclo de Vida de Desenvolvimento Seguro (SDLC)
Integre a segurança em todo o ciclo de vida do desenvolvimento de software, desde o design e desenvolvimento até os testes e a implantação, para garantir que a segurança seja priorizada em todas as etapas.
Seguindo essas práticas recomendadas e monitorando e atualizando continuamente a postura de segurança da API, as organizações podem mitigar riscos de forma eficaz e proteger dados e recursos confidenciais contra acesso e exploração não autorizados.
OWASP TOP 10
O OWASP Top 10 Riscos de Segurança em APIs é um projeto da Open Web Application Security Project (OWASP) que cataloga os riscos de segurança mais críticos especificamente para APIs.
Ele fornece um framework claro para ajudar desenvolvedores e organizações a identificar e abordar vulnerabilidades em suas APIs.
A lista é atualizada periodicamente, com a versão mais recente sendo lançada em 2023.
Ao entender e abordar esses 10 principais riscos de segurança em APIs, as organizações podem melhorar significativamente a postura de segurança de suas APIs e proteger seus dados e sistemas contra ameaças potenciais.
-
Quebra de Autorização em Nível de Objeto (API01:2023):
É um tipo de vulnerabilidade de controle de acesso que permite que um invasor execute ações em um recurso que não possui ou não tem permissão para acessar.
Ocorre geralmente com APIs que seguem o modelo CRUD e ocorre quando um invasor pode criar, ler, atualizar ou excluir um recurso que pertence a outro usuário -
Quebra de Autenticação (API02:2023):
Essa vulnerabilidade se concentra principalmente nas falhas nos métodos de autenticação empregados pelas APIs.
Mecanismos de autenticação fracos, como senhas inseguras ou API Keys previsíveis, facilitando a exploração da API por invasores. -
Quebra de Autorização em Nível de Propriedade do Objeto (API03:2023):
Semelhante ao primeiro item da lista do OWASP TOP 10, essa vulnerabilidade surge de um controle inadequado sobre o acesso a propriedades específicas dentro de um objeto, ou seja, está mais ligada ao Resource ou mesmo a uma propriedade do Payload recebido pela API para modificação de dados.
-
Consumo Irrestrito de Recursos (API04:2023):
Lembram da falta de configuração ou configuração errada de Rate Limit ou Throttling em uma APIs, Essa vulnerabilidade está catalogada aqui nesse item.
Lembrando que um ataque de DDOS é uma derivante dessa vulnerabilidade. -
Quebra de Autorização em Nível de Função (API05:2023):
Vulnerabilidade ligada ao controle de acesso que permite que um invasor execute ações administrativas ou acesse funcionalidades privilegiadas sem as permissões necessárias.
Ocorre quando uma API não consegue aplicar adequadamente às verificações de autorização, permitindo que usuários não autorizados explorem o sistema. -
Acesso Irrestrito a Fluxos de Negócios Sensíveis (API06:2023):
A vulnerabilidade surge quando uma API concede acesso a processos críticos sem medidas de segurança adequadas.
Os invasores podem explorar essa vulnerabilidade implantando cargas maliciosas, como scripts entre sites (XSS), na API.
Posteriormente, eles podem aproveitar essas cargas para obter acesso não autorizado a sistemas com o qual a API faz integração e conseguir explorar outros pontos fracos na infraestrutura conectada. -
Falsificação de Solicitação no Lado do Servidor (SSRF) (API07:2023):
Esta vulnerabilidade permite que um invasor manipule as solicitações da API e obtenha acesso não autorizado a recursos internos da rede corporativa e dentro desta rede, podem existir vários dispositivos, incluindo computadores, dispositivos pessoais e servidores, onde o ofensor pode ter controle de tudo.
-
Configuração de Segurança Incorreta (API08:2023):
Configurações de segurança inadequadas no API gateway, Servidor de deploy do Backend exposto ou outro software relacionado podem deixar gaps exploráveis para invasores.
-
Gerenciamento Impróprio de Inventário (API09:2023):
Está mais ligado à governança das APIs. Se uma organização não tiver uma compreensão completa de todas as suas APIs, torna-se difícil identificá-las, protegê-las e gerenciá-las efetivamente.
Exemplo clássico são empresas onde vários times de desenvolvimento criam APIs repetidas, sem um nível de gerenciamento básico para padronização, o famoso cada um faz do seu jeito. -
Consumo Inseguro de APIs (API10:2023):
Isso se refere a práticas inseguras ao usar APIs por aplicativos clientes. Por exemplo, usar uma API com criptografia fraca ou não validar adequadamente as respostas da API.
Link da Live no Alcatraz Security onde abordei esse assunto:
https://www.youtube.com/watch?v=jwA0NaMkhFQ