APIs e Microsserviços

19 jun, 2015

Os fundamentos da segurança de APIs

Publicidade

As APIs estão por toda parte. Com o “boom” das estratégias digitais em mobilidade, cloud computing, mídias sociais e os dispositivos inteligentes da Internet das Coisas, muitas empresas estão desenhando e expondo REST APIs – desde jovens startups até grandes empresas.

E temos que considerar que 2014 foi o ano em que o assunto “segurança” esteve nos holofotes – desde a Sony Pictures e a Jennifer Lawrence (que nada tem a ver com APIs) até casos como o da Tesla Motors, Snapchat e Bitly, em que vulnerabilidades nas APIs os levaram para os destaques dos portais de tecnologia e segurança da informação.

Mas como, então, sua empresa que já expõe ou pretende expor APIs pode se preparar para evitar que dados sigilosos de usuários possam cair em mãos erradas? É o que o restante deste texto aborda.

Antes de qualquer coisa, é importante determinar o nível de criticidade e o risco ao qual sua API está exposta. Por exemplo, se os aplicativos que consomem sua API forem apenas apps internos, ou seja, desenvolvidos por sua própria empresa, o nível de risco é bem mais baixo do que quando a API possui centenas de apps externos desenvolvidos por outras empresas ou pela comunidade. Outros elementos que também devem ser considerados são: os dados que a API manipula são relacionados ao usuário e são informações sensíveis? A API permite operações que afetam os dados de forma severa (como remoção em bulk etc.)?

Dependendo da sua resposta a esses questionamentos, você poderá saber com mais precisão o risco de se negligenciar questões de segurança. Sugerimos que faça uma classificação de criticidade para embasar suas decisões de design.

api-1

Bom, mas partindo do pressuposto que sua API requer a adição de certo nível de segurança, agrupamos os 5 principais atributos, bem como as ameaças, vulnerabilidades e dicas de como mitigar os principais riscos.

api-2

1. Autenticação e autorização

Primeira e principal preocupação relacionada à exposição de APIs. Sempre! Você é realmente quem diz ser? Você tem acesso a esse recurso? Estas são perguntas fundamentais. Evitar ataques de força bruta e roubo de credenciais são ameaças relacionadas à autenticação e autorização de APIs.

As alternativas de mitigação desses riscos vão desde uma simples autenticação Basic HTTP a padrões mais modernos e seguros, como OAuth2 e OpenID Connect.

OAuth2 está se firmando como principal forma de autorizar acesso a determinado recurso, especialmente quando o acesso deve ser concedido pelo próprio usuário. Gigantes digitais como Facebook, Google, Twitter, LinkedIn o adotaram.

Você já deve ter se deparado com uma tela de um dos serviços acima solicitando que você dê permissão para um determinado aplicativo. Pois é, trata-se de um OAuth2, onde o Facebook é o Authorization Server e o TripAdvisor é o Client Application. Nessa situação, eu, como dono dos dados (Resource Owner), estou concedendo acesso a um determinado escopo de informações para o Client Application que, a partir daquele momento, pode buscar informações em meu nome.

Importante destacar que essa pode não ser a melhor alternativa para a sua API, mas certamente é um padrão que vale a pena ser estudado/considerado.

Vale destacar também que, independentemente de qual seja o mecanismo de autenticação/autorização que você escolheu, valem as máximas de nunca salvar tokens em plain-text, não enviar senhas por e-mail e tomar cuidado com forward/redirect de requisições em redes desconhecidas.

2. Privacidade

Ataques como Man-in-the-middle e Network Eavesdropping podem revelar dados sensíveis dos seus usuários. Então, é importante atentar para algumas contramedidas que diminuam o risco de exposição desse tipo de informação.

Destaca-se a importância do uso do SSL/TLS e, em algumas situações, é até recomendável que você use um mecanismo adicional de criptografia. Além disso, arquivos de log são fontes preciosas de informações que não deveriam estar lá, então, sempre faça o mascaramento de informações sensíveis, como números de cartão de crédito, informações de saúde etc.

3. Disponibilidade

As APIs estão acessíveis? O desempenho está satisfatório? Ataques distribuídos de negação de serviço (DDoS) estão entre os mais comuns. Então, como desenvolver as estruturas básicas para resistir bravamente?

A recomendação básica é instrumentalizar a monitoração do tráfego nas APIs, preferencialmente com alertas capazes de identificar comportamento malicioso.

Um recurso bastante útil em soluções de gerenciamento de APIs é a capacidade de limitar o uso dos apps por meio de controles de rate limiting (ou throttling).

4. Auditoria

E se um dos seus clientes alegar que ele não fez aquele conjunto de invocações à sua API e, portanto, não irá pagar o valor correspondente? Esse fenômeno é chamado de repudiação. Como evitá-lo?

Logs detalhados são a melhor alternativa. A capacidade de evidenciar o resumo das chamadas recebidas, bem como mostrar os detalhes dessas chamadas, é uma resposta bastante eficiente para a não-repudiação.

Alguns cuidados especiais devem envolver o fato de que arquivos de logs podem crescer (e muito!), e que esses arquivos nem sempre são fáceis de inspecionar/buscar. Uma alternativa interessante é deixar essa tarefa para ferramentas de API management.

5. Integridade

As APIs são como um canal de comunicação entre o mundo externo e seu backend. Permitir que recursos críticos sejam apagados requer sempre cautela. Alguns tipos de ataques como injeção de SQL, XML e JSON podem causar sérios danos.

A principal recomendação aqui é a busca pela redução da superfície de ataque, ou seja, nunca exponha recursos e operações que não precisem ser expostos. Parece óbvio, mas muitas empresas aplicam técnicas de geração automática de APIs a partir dos serviços e dados do backend. Essas técnicas, além de gerarem APIs com design deselegante e de difícil entendimento, por vezes podem abrir brechas indesejáveis.

Sim, realmente são muitos pontos a levar em consideração quando o assunto é segurança de APIs. Além de tudo isso, nunca é demais lembrar que o ser humano ainda é o elo mais fraco nessa corrente.

***

Texto publicado originalmente na Revista iMasters.