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?

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?

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 son email gratuitement via votre compte

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

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

  • envoyer des spams ou du phishing en votre nom

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

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 son email gratuitement via votre compte

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

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

  • envoyer des spams ou du phishing en votre nom

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

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 son email gratuitement via votre compte

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

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

  • envoyer des spams ou du phishing en votre nom

N'importe lequel de ces résultats pourrait nuire gravement à votre réputation et à votre entreprise, et dans le cas de phishing, potentiellement nuire 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 tous 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, passer par toutes les clés API possibles prendrait plus de 150 000 000 000 000 000 000 000 000 000 années. Donc, utiliser brute force pour la clé API n'a tout simplement pas de sens.

Alors comment quelqu'un peut-il trouver votre clé API? Parce que la clé est passée en tant qu'en-tête, elle peut être lue lors des attaques de type homme du milieu, donc vous devez toujours vous assurer que votre client vérifie les certificats SSL lorsqu'il se connecte à nos APIs (c'est une raison majeure pour laquelle nous exigeons https pour les connexions API). De plus, si vous êtes négligent avec 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 académique : il y a des bots connus qui parcourent 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 tous 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, passer par toutes les clés API possibles prendrait plus de 150 000 000 000 000 000 000 000 000 000 années. Donc, utiliser brute force pour la clé API n'a tout simplement pas de sens.

Alors comment quelqu'un peut-il trouver votre clé API? Parce que la clé est passée en tant qu'en-tête, elle peut être lue lors des attaques de type homme du milieu, donc vous devez toujours vous assurer que votre client vérifie les certificats SSL lorsqu'il se connecte à nos APIs (c'est une raison majeure pour laquelle nous exigeons https pour les connexions API). De plus, si vous êtes négligent avec 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 académique : il y a des bots connus qui parcourent 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 tous 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, passer par toutes les clés API possibles prendrait plus de 150 000 000 000 000 000 000 000 000 000 années. Donc, utiliser brute force pour la clé API n'a tout simplement pas de sens.

Alors comment quelqu'un peut-il trouver votre clé API? Parce que la clé est passée en tant qu'en-tête, elle peut être lue lors des attaques de type homme du milieu, donc vous devez toujours vous assurer que votre client vérifie les certificats SSL lorsqu'il se connecte à nos APIs (c'est une raison majeure pour laquelle nous exigeons https pour les connexions API). De plus, si vous êtes négligent avec 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 académique : il y a des bots connus qui parcourent 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 IPs, ainsi que des blocs IP, en utilisant la notation CIDR, de sorte que vous n'ayez pas à énumérer vos serveurs individuellement. Lorsque la clé API est utilisée, pour les APIs REST ou SMTP, nous comparerons l'IP de connexion à 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.

Menaces courantes pour les clés API et mesures d'atténuation

Menace

Description

Mesure recommandée

Exposition de clé dans les dépôts de code publics

Les clés API commises sur GitHub peuvent être récoltées par des bots

Conservez les clés dans les variables d'environnement ; faites tourner les clés divulguées immédiatement

Interception par l'homme du milieu

Clé API lue lors de connexions non sécurisées

Imposez toujours HTTPS et validez les certificats SSL

Clé API volée utilisée depuis l'infrastructure de l'attaquant

L'attaquant peut envoyer des mails, voler des données ou modifier des modèles

Utilisez le filtrage IP pour restreindre quelles IPs peuvent utiliser la clé

Clés API « suisse » sur-permissionnées

Une seule clé accorde trop de privilèges si compromise

Créez plusieurs clés à portée limitée avec des droits restreints

Intégrations tierces utilisant abusivement une clé partagée

Les partenaires externes peuvent accidentellement exposer ou mal utiliser votre clé

Générez des clés dédiées pour chaque partenaire avec des IPs et des permissions restreintes

Étant donné les risques et la facilité de configuration, nous recommandons fortement à tous nos clients d'utiliser cette fonctionnalité.

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 IPs, ainsi que des blocs IP, en utilisant la notation CIDR, de sorte que vous n'ayez pas à énumérer vos serveurs individuellement. Lorsque la clé API est utilisée, pour les APIs REST ou SMTP, nous comparerons l'IP de connexion à 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.

Menaces courantes pour les clés API et mesures d'atténuation

Menace

Description

Mesure recommandée

Exposition de clé dans les dépôts de code publics

Les clés API commises sur GitHub peuvent être récoltées par des bots

Conservez les clés dans les variables d'environnement ; faites tourner les clés divulguées immédiatement

Interception par l'homme du milieu

Clé API lue lors de connexions non sécurisées

Imposez toujours HTTPS et validez les certificats SSL

Clé API volée utilisée depuis l'infrastructure de l'attaquant

L'attaquant peut envoyer des mails, voler des données ou modifier des modèles

Utilisez le filtrage IP pour restreindre quelles IPs peuvent utiliser la clé

Clés API « suisse » sur-permissionnées

Une seule clé accorde trop de privilèges si compromise

Créez plusieurs clés à portée limitée avec des droits restreints

Intégrations tierces utilisant abusivement une clé partagée

Les partenaires externes peuvent accidentellement exposer ou mal utiliser votre clé

Générez des clés dédiées pour chaque partenaire avec des IPs et des permissions restreintes

Étant donné les risques et la facilité de configuration, nous recommandons fortement à tous nos clients d'utiliser cette fonctionnalité.

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 IPs, ainsi que des blocs IP, en utilisant la notation CIDR, de sorte que vous n'ayez pas à énumérer vos serveurs individuellement. Lorsque la clé API est utilisée, pour les APIs REST ou SMTP, nous comparerons l'IP de connexion à 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.

Menaces courantes pour les clés API et mesures d'atténuation

Menace

Description

Mesure recommandée

Exposition de clé dans les dépôts de code publics

Les clés API commises sur GitHub peuvent être récoltées par des bots

Conservez les clés dans les variables d'environnement ; faites tourner les clés divulguées immédiatement

Interception par l'homme du milieu

Clé API lue lors de connexions non sécurisées

Imposez toujours HTTPS et validez les certificats SSL

Clé API volée utilisée depuis l'infrastructure de l'attaquant

L'attaquant peut envoyer des mails, voler des données ou modifier des modèles

Utilisez le filtrage IP pour restreindre quelles IPs peuvent utiliser la clé

Clés API « suisse » sur-permissionnées

Une seule clé accorde trop de privilèges si compromise

Créez plusieurs clés à portée limitée avec des droits restreints

Intégrations tierces utilisant abusivement une clé partagée

Les partenaires externes peuvent accidentellement exposer ou mal utiliser votre clé

Générez des clés dédiées pour chaque partenaire avec des IPs et des permissions restreintes

Étant donné les risques et la facilité de configuration, nous recommandons fortement à tous nos clients d'utiliser cette fonctionnalité.

Derniers mots

Quelques recommandations personnelles concernant la sécurité :

  • Ne conservez pas vos clés API dans le code. Il y a beaucoup d'avantages à les garder comme 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é passe-partout. Cela vous permettrait également d'avoir des listes blanches IP différentes par clé, pour une séparation des préoccupations encore meilleure

  • 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

  • Étant donné que les clés API ne peuvent être créées que via l'interface utilisateur, l'activation de l'authentification à deux facteurs sur votre compte SparkPost est indispensable et ne prend que 2 minutes

Quelques recommandations personnelles concernant la sécurité :

  • Ne conservez pas vos clés API dans le code. Il y a beaucoup d'avantages à les garder comme 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é passe-partout. Cela vous permettrait également d'avoir des listes blanches IP différentes par clé, pour une séparation des préoccupations encore meilleure

  • 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

  • Étant donné que les clés API ne peuvent être créées que via l'interface utilisateur, l'activation de l'authentification à deux facteurs sur votre compte SparkPost est indispensable et ne prend que 2 minutes

Quelques recommandations personnelles concernant la sécurité :

  • Ne conservez pas vos clés API dans le code. Il y a beaucoup d'avantages à les garder comme 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é passe-partout. Cela vous permettrait également d'avoir des listes blanches IP différentes par clé, pour une séparation des préoccupations encore meilleure

  • 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

  • Étant donné que les clés API ne peuvent être créées que via l'interface utilisateur, l'activation de l'authentification à deux facteurs sur votre compte SparkPost est indispensable 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.