Les API, sortes de ponts entre un serveur et un client, sont présentes partout sur le web. C’est d’ailleurs ce qui en fait la faiblesse : leur grand nombre et leur grande diversité les rendent difficiles à protéger. Sans action de la part des développeurs freelances, une API est donc extrêmement vulnérable, pour le plus grand bonheur des pirates informatiques.
Vous voulez connaître les différentes menaces qui pèsent sur les API ? Apprendre à les protéger ? Vous trouverez toutes les informations nécessaires à la sécurité de ces services dans cet article.
Le points sur les API
Pour bien comprendre les dangers qui reposent sur les API et comment les sécuriser, il est important de savoir ce qu’est exactement une API, et comme elle fonctionne.
Qu’est-ce qu’une API ?
Une API, pour Application Programming Interface (ou interface de programmation d’application en français), est un service proposé par une entité et accessible par un système tiers.
Il s’agit souvent de services web mis en place sur un back-end (ou “exposés”), pour créer des échanges entre un client (ordinateur, smartphone, etc.) et un serveur.
L’API permet au client de demander au serveur de lui transmettre des données, ou de modifier ces données déjà envoyées par le client, souvent stockées sur une base de données.
Si une API n’est pas sécurisée, elle est, du point de vue d’un pirate, une route directe d’accès au back-end, et donc aux données qui y sont stockées.
Quelques exemples d’API
Les web API sont présentes partout, et nous les utilisons en permanence.
Par exemple, une connexion sur un site web passe par une API. Toute donnée ou presque qui transite entre un front-end et un back-end vient d’une API. C’est par exemple le cas de cet article, récupéré via un service web.
Ce sont souvent des API privées : elles sont internes à une entité, et ne sont pas exposées vers l’extérieur.
Il existe aussi des API publiques, ou ouvertes, qui peuvent être utilisées par n’importe quel développeur. Citons par exemple OpenWeather Map, qui permet de récupérer un ensemble de données météorologiques, ou Open API France, ensemble d’API créées par le gouvernement français, qui rassemblent des données en tout genre (santé, emploi, urbanisme, etc.)
Nous avons d’ailleurs écrit un article complet au sujet des API ouvertes gratuites.
Les API, services sensibles aux attaques
Nous l’avons vu, une API est un point d’entrée vers le serveur, serveur qui expose des données qui peuvent parfois être sensibles. Cela fait de l’API la cible principale des cyberattaques.
Listons ici les attaques les plus courantes à l’encontre des API.
L’attaque par DDoS, première attaque d’API
L’attaque par DDoS (ou attaque par déni de service distribué) est sans doute la plus connue des attaques informatiques. Elle consiste à surcharger un serveur de requêtes (ici en appelant une API) de manière à le faire tomber, à le rendre inopérant.
Cette attaque ne vise pas à voler des données, mais à rendre le serveur (et donc tous ses points d’accès) hors service. Par exemple, une attaque DDoS sur un site e-commerce rendra toute commande impossible.
Man-in-the-middle (MITM)
L’attaque MITM (man-in-the-middle), est utilisée par un attaquant pour récupérer des données qui transitent – via une API – entre un client et un serveur. Le pirate se place entre la source et le destinataire et écoute ce qui passe sur le réseau. Si des informations sensibles non protégées y sont échangées, il pourra ainsi les récupérer.
Attaque par injection SQL
Lorsque vous utilisez un formulaire web, au moment de la soumission de ce dernier, les données sont envoyées au serveur via une API. Ces données y seront traitées et, souvent, créeront une interaction avec la base de données (le fameux CRUD : create, read, update ou delete). En cas d’utilisation d’un SGBD de type SQL, ces interactions se feront via des requêtes SQL.
Dans ce cas, et si le serveur ne se protège de ce type d’attaque, il est possible pour l’attaquant d’injecter du SQL lors de l’envoi de la requête, dans le but de la modifier et ainsi récupérer des informations sensibles.
Concrètement, l’attaquant vient écrire du code SQL dans un champ du formulaire (pour par exemple récupérer des identifiants). Ce code sera exécuté par le serveur, et renverra au front (à l’attaquant), les données demandées via la requête.
Attaque par force brute
La dernière attaque que peut subir une API dont nous allons parler ici, c’est l’attaque par force brute.
Elle ressemble un peu à l’attaque DDoS, dans le sens où on va envoyer un grand nombre de requêtes au serveur. Cependant, le but n’est pas de le surcharger, mais plutôt de le forcer à nous renvoyer certaines données, ou à accepter certaines requêtes, en modifiant à chaque appel API le corps des données envoyées.
C’est le type d’attaque utilisé pour essayer de forcer une connexion sans connaître le mot de passe. L’attaquant va envoyer des centaines de requêtes sur l’API d’authentification, en envoyant un mot de passe différent à chaque fois, jusqu’à ce que le bon soit trouvé.
Comment sécuriser une API
Nous l’avons vu, il y a de nombreuses attaques différentes en ce qui concerne les API. Heureusement, il existe des moyens de s’en prémunir ; ils sont même souvent simples et faciles à implémenter. Les règles de sécurité que nous allons présenter ici font partie des outils basiques à mettre en place pour améliorer la sécurité de son entreprise.
Authentifier le client
Pour empêcher un attaquant d’accéder au résultat d’une requête spécifique, il convient de protéger celle-ci via un système d’authentification. C’est d’ailleurs ce qui est fait lors d’une connexion à un site. Si les identifiants envoyés sont corrects, le serveur retourne un élément (un ‘token’) pour signifier, lors des prochaines requêtes, que cet utilisateur a bien le droit de les appeler. Ce token est stocké par le client (sur le navigateur), et renvoyé automatiquement à chaque appel API.
Si la requête est envoyée sans le bon token, elle n’aboutira pas et une erreur sera retournée au client.
Limiter les appels serveur
Une autre bonne pratique à implémenter, notamment pour éviter les attaques par force brute, est de limiter le nombre d’appels serveur pour une adresse IP donnée. Si un client spécifique appelle des dizaines de fois l’API de login en quelques secondes, ce n’est pas normal. Il convient alors de bloquer cette adresse internet.
Vérifier le format des données reçues
Pour éviter cette fois les attaques par injection (SQL, mais cela peut aussi concerner d’autre format de données), il existe des plugins ou des modules faciles à installer.
Cependant, il est d’usage de vérifier le format des données reçues (par exemple d’un formulaire), pour s’assurer qu’elles ne contiennent pas autre chose que ce qui est attendu.
Cela peut se faire via des validateurs automatiques, ou des expressions régulières.
Sécuriser les échanges avec HTTPS pour protéger les API
Une des règles basiques à implémenter pour protéger un site web et une API, notamment des attaques MITM, c’est de sécuriser son serveur à l’aide d’un certificat TLS ; qui protège le protocole d’échange de données (le fameux HTTPS).
Cette pratique va venir chiffrer les données échangées, et les rendre ainsi inutilisables en cas d’interception.
L’utilisation de ce protocole est devenu tellement courant que très peu de sites sont encore en HTTP classique. Ils sont d’ailleurs maintenant bloqués par beaucoup de navigateurs.
Conclusion
Nous l’avons vu, les API sont utilisées partout et pour tout, et peuvent être très vulnérables. Certaines attaques sont faciles à perpétrer, ce qui fait de tout site disposant d’un back-end une cible potentielle.
Partant de ce constat, il est essentiel de protéger les points d’entrées que sont les API, pour limiter les risques d’attaques et les conséquences qui en découleraient. Cela se fait en suivant quelques bonnes pratiques, dont nous vous avons partagé une liste dans cet article.