Sécurité des APIs : 7 principes à respecter
Les APIs, qui sont au cœur de l’intégration et des échanges techniques entre plateformes, doivent être sécurisées dans un contexte de plus en plus sensible avec la montée des cyber attaques et la multiplication des points d’exposition.
Je vous propose 7 principes à respecter pour sécuriser les APIs en s’appuyant sur 3 principaux drivers : Fiabilité – Traçabilité – Confidentialité :
#1 Exposer en HTTPS
Bien que le HTTPS sécurise le canal et non pas les données, il est important d’authentifier le serveur, de chiffrer la communication et protéger le flux réseau dans une architecture Client-Serveur, ce qui va permettre d’assurer l’intégrité des données au niveau de la session.
A noter que le TLS 1.1 est déprécié depuis 2018 et que la pratique actuellement dans la majorité des entreprises reste le TLS 1.2, la RFC 8446 vient mettre à jour le protocole TLS avec la version 1.3 qui apporte beaucoup d’améliorations en terme de sécurité et de performance : suppression des algorithmes obsolètes (SHA-1, DES, MD5, …), un handshake en un seul aller-retour grâce au 0-RTT et donc une latence optimisée, …
#2 Identifier les clients (Certificat, Authorization Basic, IP)
Un serveur qui expose une API doit identifier et authentifier son client pour éviter de retourner des réponses à des clients non autorisés ou malveillants. Des mécanismes existent côté réseau et peuvent être exploités pour compléter les vérifications côté applicatif :
#3 Centraliser la gestion des autorisations
Déléguer la gestion des autorisations à un serveur central qui porte la fonction de « Authorization Server (AS) » fait partie des bonnes pratiques de sécurité dans un SI APIsé. Le serveur de ressources n’aura plus la charge d’authentifier tous les clients (s’assurer de la cohérence des credentials), les identifier (récupérer les infos/droits associés aux clients) et ainsi les autoriser à accéder aux ressources.
Le Framework OAuth (RFC 6749) a standardisé les rôles et mécanismes d’échange entre les acteurs concernés via des cinématiques/Grant propres à chaque usage :
A noter que ROPC et Implicit Grant sont dépréciés, et le PKCE (prononcé « pixie ») est fortement recommandé pour l’AuthZ Code pour couvrir le risque de vol et rejeu de jeton en intégrant une logique de génération/vérification de Code Challenge et Code Verifier.
2 choix d’implémentation possibles : un Authorization Server (AS) indépendant du type Spring Security, Keycloak, Okta, … ou une fonction d’AS intégrée à une plateforme plus globale comme WSO2, Apigee ou Mulesoft.
#4 Rajouter des contrôles fonctionnels
Une API exposée qui respecte les principes REST peut contrôler l’appel de requête avant de déclencher les traitements métiers et renvoyer la réponse au client ce qui permet de se prémunir contre les injections :
Recommandé par LinkedIn
Ces étapes de vérifications se font au niveau de l'Endpoint d’exposition ce qui permet de ne pas exposer la « logique » API à un risque sécurité.
D’autres contrôles peuvent être rajoutés à travers la vérification des méta données associées au Token lors de la consommation de l’API pour couvrir le risque de vol et rejeu de Token.
La RFC 8705 - OAuth 2.0 MTLS propose un mécanisme de « binding » de l’Access Token au certificat SSL échangé au « handshake » lors d’une authentification mutuelle entre le client et l’AS (AuthZ Server). le claim "CNF" qui correspond au hash du certificat X.509 est rajouté par l'AS (pour un Token auto-porteur) et doit être vérifié par le Ressources Server lors de l'Introspect avant d'autoriser l'accès.
#5 Fixer un Rate limit
Une API ou un domaine fonctionnel qui regroupe un ensemble d’APIs exposées doit définir un seuil au delà duquel les appels clients doivent être rejetés pour protéger le serveur contre un trafic anormalement élevé. Ne pas fixer de limite peut déclencher des défaillances en cascade, interrompre une orchestration d’appels nécessaire pour un flux fonctionnel critique et expose le serveur au risque DDOS.
Le Rate limit ne doit jamais être à la limite capacitaire du ou des serveurs de ressources, doit être fixé au regard des usages clients même dans une infrastructure virtualisée ou conteneurisée avec une élasticité « sans limite »
Des contournements existent pour ne pas renvoyer un méchant HTTP 429 sur certains appels en activant le cache, mettre une file d’attente au niveau du front ou déclencher un "Retry" et éviter de retourner une erreur au client.
#6 Exposer via une API Gateway
L’API Gateway est un composant central et indispensable dans un SI APIsée avec de multiples services et ressources. Point d’entrée de l’ensemble des systèmes techniques du SI, il permet de :
Le Portail et le module de monétisation viennent compléter les fonctions cœur d’une API Gateway pour la transformer en une API Management.
#7 Logger tous les événements
Activer la journalisation au niveau de l’API Gateway permet d’avoir une source de données non négligeable pour le SIEM qui dispose des mécanismes adéquat pour analyser les logs et détecter ainsi d’éventuelles menaces.
En bonus :
Senior API Product Manager
2 ansmerci Slim Hmaied pour ces 7 principes , très présenté de façon visuel pédagogique. j ajouterai dans les reminders En terme de sécurité , Adopter les standard du marché (Oauth 2 ou plutot OIDC voir FAPi ) , surtout pas implementer des des solution custom pour le point 6 : ne pas oublier , Implementer la sécurité au niveau de la gateway ET de du backend. pour éviter les attaques internes Discuter avec les équipes réseaux qui ont des solutions et en bonus tout simplement tester ! organiser des évènements internes hack my system, faire appel à des white hat etc.
Group API Solution Director chez BNP Paribas | Fondateur du Collectif API Thinking | Co Fondateur de France API
2 ansCollectif API Thinking 👍