Liste blanche des IP pour les clés API

Email

1 min read

Liste blanche des IP pour les clés API

Email

1 min read

Liste blanche des IP pour les clés API

Il existe plusieurs façons de construire l'authentification dans un produit axé sur l'API comme SparkPost, et celle que nous avons choisie dès le départ est l'utilisation de clés API. Injecter votre clé API en tant qu'en-tête d'autorisation brut ou via l'authentification HTTP de base standard facilite beaucoup l'utilisation de nos API. Les clés API comme celles-ci sont une norme courante pour les webservices, mais quel est le niveau de sécurité de ce système ?

Il existe de nombreuses façons de construire l'authentification dans un produit API-first comme SparkPost, et celle que nous avons choisie dès le départ est l'utilisation de clés API. Injecter votre clé API en tant qu'en-tête d'authentification brute ou via HTTP Basic Auth standard rend l'utilisation de nos API très facile. Les clés API comme celle-ci sont un standard courant pour les services web, mais quel est le niveau de sécurité de ce système?

Les risques

Lors de l'utilisation de tout service web, si un attaquant obtient votre clé API, il peut agir en votre nom et faire des choses comme (dans notre cas) :

  • envoyer leurs emails gratuitement via votre compte

  • télécharger votre liste de destinataires et la donner à des spammeurs (s'ils ne sont pas eux-mêmes des spammeurs)

  • modifier vos modèles pour injecter des liens de phishing

  • envoyer du spam ou du phishing en votre nom

N'importe lequel de ces résultats pourrait être très dommageable pour votre réputation et pour votre entreprise, et dans le cas du phishing, potentiellement endommager directement vos utilisateurs finaux. C'est pourquoi il est extrêmement important de s'assurer que personne ne peut découvrir votre clé API.

Les odds

Ai-je entendu bruteforce? Nos clés API sont des chaînes hexadécimales de 40 caractères générées aléatoirement. Cela fait un total de 1,4615e+48 clés API. Si les 3 milliards d'ordinateurs et de smartphones dans le monde essayaient 100 clés API par seconde, en supposant que nos serveurs le permettent, parcourir toutes les clés API possibles prendrait plus de 150 000 000 000 000 000 000 000 000 000 années. Donc forcer la clé API par force brute n’a tout simplement pas de sens.

Alors, comment quelqu'un peut-il trouver votre clé API ? Étant donné que la clé est transmise en tant qu'en-tête, elle peut être lue par des attaques de type man-in-the-middle, vous devez donc toujours vous assurer que votre client vérifie les certificats SSL lors de la connexion à nos APIs (c’est une raison majeure pour laquelle nous exigeons https pour les connexions API). De plus, si vous êtes négligent dans votre utilisation des dépôts de code publics comme github, votre clé API peut facilement se retrouver exposée. Ce n’est pas un problème théorique : il existe des bots connus qui explorent github pour trouver des clés API, et il y a eu des attaques réussies par ce vecteur.

Ai-je entendu bruteforce? Nos clés API sont des chaînes hexadécimales de 40 caractères générées aléatoirement. Cela fait un total de 1,4615e+48 clés API. Si les 3 milliards d'ordinateurs et de smartphones dans le monde essayaient 100 clés API par seconde, en supposant que nos serveurs le permettent, parcourir toutes les clés API possibles prendrait plus de 150 000 000 000 000 000 000 000 000 000 années. Donc forcer la clé API par force brute n’a tout simplement pas de sens.

Alors, comment quelqu'un peut-il trouver votre clé API ? Étant donné que la clé est transmise en tant qu'en-tête, elle peut être lue par des attaques de type man-in-the-middle, vous devez donc toujours vous assurer que votre client vérifie les certificats SSL lors de la connexion à nos APIs (c’est une raison majeure pour laquelle nous exigeons https pour les connexions API). De plus, si vous êtes négligent dans votre utilisation des dépôts de code publics comme github, votre clé API peut facilement se retrouver exposée. Ce n’est pas un problème théorique : il existe des bots connus qui explorent github pour trouver des clés API, et il y a eu des attaques réussies par ce vecteur.

Ai-je entendu bruteforce? Nos clés API sont des chaînes hexadécimales de 40 caractères générées aléatoirement. Cela fait un total de 1,4615e+48 clés API. Si les 3 milliards d'ordinateurs et de smartphones dans le monde essayaient 100 clés API par seconde, en supposant que nos serveurs le permettent, parcourir toutes les clés API possibles prendrait plus de 150 000 000 000 000 000 000 000 000 000 années. Donc forcer la clé API par force brute n’a tout simplement pas de sens.

Alors, comment quelqu'un peut-il trouver votre clé API ? Étant donné que la clé est transmise en tant qu'en-tête, elle peut être lue par des attaques de type man-in-the-middle, vous devez donc toujours vous assurer que votre client vérifie les certificats SSL lors de la connexion à nos APIs (c’est une raison majeure pour laquelle nous exigeons https pour les connexions API). De plus, si vous êtes négligent dans votre utilisation des dépôts de code publics comme github, votre clé API peut facilement se retrouver exposée. Ce n’est pas un problème théorique : il existe des bots connus qui explorent github pour trouver des clés API, et il y a eu des attaques réussies par ce vecteur.

IP whitelisting à la rescousse

Lorsque vous créez une clé API, vous pouvez désormais spécifier une liste d'IPs autorisées à utiliser cette clé. Vous pouvez spécifier plusieurs IP, ainsi que des blocs IP, en utilisant la notation CIDR, vous n'avez donc pas besoin de lister vos serveurs individuellement. Lorsque la clé API est utilisée, pour les APIs REST ou SMTP, nous comparerons l'IP de connexion avec cette liste pour autoriser ou refuser l'accès.

Avec cette fonctionnalité, même si votre clé API est trouvée ou volée, seuls vos serveurs pourront l'utiliser. Compte tenu des risques et de la simplicité de sa mise en place, nous recommandons vivement à tous nos clients d'utiliser cette fonctionnalité.

Derniers mots

Quelques recommandations personnelles concernant la sécurité :

  • Ne gardez pas vos clés API dans le code. Il y a beaucoup d'avantages à les conserver en tant que variables d'environnement, comme le fait Heroku

  • Vous pouvez créer une quantité illimitée de clés API, et il est préférable pour la sécurité de répartir les responsabilités entre plusieurs clés API, plutôt qu'une seule clé couteau-suisse. Cela vous permettrait également d'avoir des listes blanches d'IP différentes par clé, pour une meilleure séparation des préoccupations

  • Si vous travaillez avec des tiers, ne partagez pas votre clé API mais créez-en une nouvelle pour eux, avec uniquement les autorisations nécessaires, et attachée à leurs IPs

  • Puisque les clés API ne peuvent être créées que via l'interface utilisateur, activer l'authentification à deux facteurs sur votre compte SparkPost est essentiel et ne prend que 2 minutes

Connectons-vous avec un expert Bird.
Découvrez toute la puissance du Bird en 30 minutes.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.

Company

Newsletter

Restez à jour avec Bird grâce aux mises à jour hebdomadaires dans votre boîte de réception.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.

Connectons-vous avec un expert Bird.
Découvrez toute la puissance du Bird en 30 minutes.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.

Company

Newsletter

Restez à jour avec Bird grâce aux mises à jour hebdomadaires dans votre boîte de réception.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.

Connectons-vous avec un expert Bird.
Découvrez toute la puissance du Bird en 30 minutes.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.

R

Atteindre

G

Grow

M

Manage

A

Automate

Company

Newsletter

Restez à jour avec Bird grâce aux mises à jour hebdomadaires dans votre boîte de réception.

En soumettant, vous acceptez que Bird puisse vous contacter au sujet de nos produits et services.

Vous pouvez vous désabonner à tout moment. Consultez la Déclaration de confidentialité de Bird pour plus de détails sur le traitement des données.