Liste blanche des IP pour les clés API

Oiseau

19 août 2015

Email

1 min read

Liste blanche des IP pour les clés API

Points Clés

    • Les clés API sont des identifiants puissants — si elles sont compromises, les attaquants peuvent envoyer des emails, voler des données ou usurper votre marque.

    • Forcer brutalement une clé hexadécimale de 40 caractères est essentiellement impossible; les véritables menaces viennent de l'exposition (attaques MITM, dépôts de code non sécurisés, identifiants divulgués).

    • Utilisez toujours HTTPS et validez les certificats SSL pour empêcher l'interception de vos clés API.

    • La liste blanche des IP ajoute une couche de protection cruciale en restreignant l'utilisation d'une clé à des IP spécifiques ou à des plages d'IP.

    • Même si un attaquant vole votre clé API, il ne peut pas l'utiliser à moins de se connecter à partir d'une IP approuvée.

    • Le support CIDR facilite l'autorisation de réseaux entiers sans répertorier chaque serveur.

    • Évitez d'intégrer les clés API dans le code — utilisez plutôt des variables d'environnement ou des solutions de gestion des secrets sécurisées.

    • Créez plusieurs clés API à portée restreinte plutôt qu'une seule clé « tout faire » — chacune avec des permissions limitées et sa propre liste blanche.

    • Pour les intégrations tierces, créez des clés dédiées avec des droits restreints et des IP restreintes.

    • Activez la 2FA sur votre compte car les clés API ne peuvent être créées que via l'interface utilisateur.

    • Examinez, faites tourner et retirez régulièrement les clés pour maintenir une sécurité opérationnelle solide.

Points forts des Q&A

  • Qu'est-ce que l'IP whitelisting ?

    C'est une fonctionnalité de sécurité qui limite l'utilisation des clés API à des adresses IP spécifiques ou à des plages d'adresses IP.

  • Pourquoi SparkPost/Bird utilise des clés API pour l'authentification ?

    Les clés API sont simples, largement adoptées, et fonctionnent parfaitement avec les REST APIs et SMTP.

  • Que se passe-t-il si quelqu'un vole mon API key?

    Ils pourraient envoyer du courrier en votre nom, télécharger des listes de destinataires, modifier des modèles ou envoyer des phishing/spam qui nuisent à votre marque.

  • Les clés API peuvent-elles être brute-forcées ?

    Pratiquement impossible. Une chaîne hexadécimale de 40 caractères a ~1,46e48 combinaisons — une attaque par force brute prendrait plus de temps que l'âge de l'univers.

  • Alors, comment les attaquants obtiennent-ils normalement les API keys ?

    Attaques de type homme-du-milieu (si SSL n'est pas vérifié), clés exposées dans les dépôts publics de GitHub, ou journaux divulguant accidentellement des clés.

  • Comment l'ajout d'IP à la liste blanche aide-t-il ?

    Même si un attaquant vole votre clé, cela ne fonctionnera pas à moins qu'il ne se connecte à partir d'une IP approuvée.

  • Puis-je autoriser des réseaux entiers ?

    Oui, via la notation CIDR — idéale pour les serveurs avec répartition de charge, les VPN ou les plages d'adresses statiques de bureau.

  • La whitelisting s'applique-t-elle à la fois à REST et SMTP ?

    Oui, l'IP de la demande entrante doit correspondre à votre liste blanche.

  • Combien d'IPs ou de plages puis-je whitelister?

    Autant que vous en avez besoin — plusieurs IP individuelles ou blocs.

  • Devrais-je utiliser une seule clé API pour tout?

    Non. Créez des clés distinctes pour différents systèmes, équipes ou fournisseurs. Cela améliore la sécurité et facilite la rotation ou la révocation des clés.

  • Où dois-je stocker les API keys ?

    Utilisez des variables d'environnement — ne jamais coder en dur les clés dans les fichiers sources ou les dépôts publics.

  • Des pratiques de sécurité supplémentaires ?

    Activez toujours l'authentification à deux facteurs (2FA) sur votre compte SparkPost/Bird et créez des clés dédiées pour les tiers avec des autorisations minimales et leurs propres listes blanches.

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

Autres news

Lire la suite de cette catégorie

A person is standing at a desk while typing on a laptop.

La plateforme native AI complète qui évolue avec votre business.

A person is standing at a desk while typing on a laptop.

La plateforme native AI complète qui évolue avec votre business.