Est-il préférable de protéger les API en les masquant au sein de l'application mobile ou en déplaçant les clés API vers un cloud sécurisé et en les transmettant à l'application mobile au moment de l'exécution ?
Protéger les clés d'API est un aspect essentiel de la sécurité des applications mobiles, et il existe deux approches principales pour protéger ces clés : l'obfuscation du code et de livrer les secrets au moment de l'exécution. Dans cet article, nous explorerons ces deux méthodes et comparerons leur efficacité dans la protection des clés d'API. Les deux approches ont leurs avantages et leurs inconvénients, et le choix dépend du cas d'utilisation spécifique et des exigences en matière de sécurité.Obfuscation du Code :
L'obfuscation du code consiste à modifier le code source d'une application pour le rendre plus difficile à rétro-ingénier et à extraire des informations sensibles telles que les clés d'API. Cette approche implique le renommage de variables, la modification des structures de contrôle et l'insertion de code factice pour perturber les attaquants. L'obfuscation des secrets d'API au sein de l'application mobile peut offrir une sécurité en rendant plus difficile la découverte et l'extraction des secrets utilisés pour accéder aux API, qu'il s'agisse de clés d'API régulières, de jetons JWT ou de toute autre forme de secrets.
Cependant, bien que l'obfuscation du code puisse être un moyen efficace de dissuader les attaquants occasionnels, elle n'est pas infaillible. Cette approche est vulnérable à l'utilisation d'outils open source pour rétro-ingénier le code binaire de l'application mobile afin de trouver et d'extraire les secrets d'API. Par exemple, avec l'utilisation du Mobile Security Framework, comme on peut le voir dans l'article "Comment extraire une clé d'API d'une application mobile par analyse binaire statique", même un non-développeur peut extraire des secrets de grande valeur. Les attaquants expérimentés peuvent également utiliser des outils de rétro-ingénierie pour analyser le code au moment de l'exécution et découvrir des clés d'API mieux dissimulées. Enfin, l'obfuscation du code introduira des coûts directs et indirects dans le processus de développement et la maintenance continue de la base de code sous-jacente, mais il est indéniable qu'elle constitue un moyen efficace de protéger la propriété intellectuelle de votre code (IP).
Secrets Geres au Moment de l'Exécution :
Le methode de livrer les secrets au moment de l'exécution consistent à stocker des informations sensibles telles que les clés d'API en dehors du code de l'application, dans un emplacement séparé tel qu'un fichier de configuration ou un serveur. Lorsque l'application a besoin d'utiliser la clé d'API, elle la récupère depuis l'emplacement externe au moment de l'exécution. Retirer les clés d'API du code de votre application mobile et les placer dans un service cloud sécurisé, puis les fournir au moment opportun pour que l'application mobile les utilise pour effectuer la demande d'API, peut offrir un niveau de sécurité plus élevé.
Cette approche présente plusieurs avantages par rapport à l'obfuscation du code. Tout d'abord, les clés d'API ne sont pas présentes dans le code de l'application, ce qui les rend beaucoup plus difficiles à extraire par rétro-ingénierie. De plus, les secrets au moment de l'exécution facilitent la rotation des clés d'API, car l'application n'a pas besoin d'être recompilée ou rééditée via les boutiques d'applications iOS et Android chaque fois qu'une clé est modifiée. L'accès aux API peut également être restreint aux instances authentiques (non modifiées) de l'application mobile, et le serveur cloud peut être configuré pour détecter et restreindre l'accès aux applications s'exécutant sur un dispositif compromis, un émulateur ou un framework.
Cependant, les secrets au moment de l'exécution présentent également quelques inconvénients potentiels. Tout d'abord, l'emplacement de stockage externe doit être sécurisé, sinon un attaquant pourrait potentiellement accéder aux clés d'API. De plus, la récupération des clés au moment de l'exécution peut introduire une surcharge de performance, et les secrets au moment de l'exécution nécessitent un développement logiciel supplémentaire à la fois pour l'application mobile et pour le service cloud sécurisé afin de fournir les secrets de l'API. Les secrets au moment de l'exécution nécessitent des efforts pour déployer le service sur le cloud sécurisé (et une maintenance pour rester à jour avec les dernières menaces en matière de sécurité). Le niveau d'expertise et d'effort pour développer une telle solution de sécurité n'est pas négligeable et prend des mois pour se développer, des années pour se perfectionner et beaucoup de recherche continue pour suivre le rythme des failles de sécurité (zero days) et des nouvelles formes d'attaques. En alternatif, vous pouvez adopter cette même approche avec un service cloud sécurisé externalisé.
Plus d'informations peuvent être trouvées dans l'article "Sécurité des applications mobiles et des API en pratique - Protection des secrets au moment de l'exécution".
Comparaison des Approches :
Lorsqu'il s'agit de choisir entre les secrets fournis au moment de l'exécution et l'obfuscation du code, il faut tenir compte du coût d'une éventuelle violation et de son impact sur l'entreprise et sa réputation à court et à long terme. Traditionnellement, les coûts d'une violation de données en termes d'amendes, de réputation, de perte de clients et de rentabilité réduite sont beaucoup plus importants que l'investissement dans des solutions de sécurité adéquates. Tout cela doit être pris en compte dans le contexte, y compris la probabilité d'attaque.
Alors, quelle approche est la meilleure pour protéger les clés d'API ? En fin de compte, cela dépend des besoins spécifiques et des contraintes de l'application. L'obfuscation du code peut être une option raisonnable pour les applications qui ne traitent pas d'informations hautement sensibles et qui ne sont pas susceptibles d'être ciblées par des attaquants déterminés. Cependant, pour les applications qui doivent protéger des données sensibles ou qui sont susceptibles d'être ciblées, les secrets au moment de l'exécution offrent une solution plus robuste et plus sécurisée. Conclusion :
Tout d'abord, il est important de noter que les deux approches ne sont en aucun cas mutuellement exclusives. En réalité, de nombreuses applications mobiles utilisent à la fois l'obfuscation du code et les secrets au moment de l'exécution pour protéger la propriété intellectuelle au sein de l'application et les clés d'API qui donnent accès à des données précieuses dans le cloud. En combinant ces méthodes, les développeurs peuvent créer une défense en profondeur plus robuste et multicouche contre les attaquants.
Protéger les clés d'API est crucial pour garantir la sécurité des applications mobiles. En résumé, si la sécurité est une priorité absolue et si une infrastructure supplémentaire est acceptable, déplacer les clés d'API vers un service cloud sécurisé et les fournir à l'application mobile au moment de l'exécution est l'option la plus sécurisée. Bien que l'obfuscation du code puisse être une approche raisonnable pour dissuader les attaquants occasionnels, les secrets au moment de l'exécution offrent une solution plus robuste et plus sécurisée pour protéger les données sensibles. En fin de compte, la meilleure approche dépendra des besoins spécifiques et des contraintes de l'application. En examinant attentivement les options et en mettant en œuvre une stratégie de défense en couches, les développeurs peuvent contribuer à garantir la sécurité de leurs applications mobiles.
En conclusion, l'obfuscation du code est toujours une bonne option lorsque vous souhaitez protéger et défendre la propriété intellectuelle de votre code lui-même, mais elle est moins adaptée lorsque la valeur que vous essayez de protéger est accessible via des API et est stockée dans le cloud. Pour protéger des données précieuses partagées via une API sécurisée par des clés d'API, la meilleure approche consiste à supprimer les secrets codés de l'application mobile et à recuperer secrets au moment de l'exécution fournis par un service cloud sécurisé.