Cette évolution technologique exige d’accroitre drastiquement la sécurité des transmissions, d’assurer la confidentialité des données ainsi que l’intégrité des équipements, et augmenter significativement leur résistance aux attaques. Si tous ces enjeux sont de plus en plus reconnus, bon nombre de produits sont encore développés suivant des processus d’assurance qualité ou des technologies qui ne sont plus du tout adaptés à la complexité et aux risques encourus de ces nouveaux types équipements. Pourtant des solutions existent, et ce, notamment en termes de développement logiciel.
Les 4 étapes pour sécuriser les Objets IoT
Suivre un processus de développement logiciel s’appuyant sur les quatre étapes suivantes permet d’améliorer très nettement la sécurité, la fiabilité et la qualité des produits connectés.
1- Conception guidée par la Sécurité (Secure by Design) : pour les objets connectés, la sécurité doit absolument guider toutes les phases de développement.
2- Evaluation des menaces au niveau Système : pour les objets connectés faisant partie d’une infrastructure IoT plus vaste, une évaluation et une analyse des menaces et des vecteurs d’attaques au niveau système global est essentielle. Cette étape permet ainsi d’intégrer les besoins et les réponses pertinentes apportées dans le suivi des exigences du projet.
3- Automatisation des tests et analyses : la sécurité ajoute des tâches supplémentaires aux équipes de développement. L’automatisation de celles-ci et l’utilisation de techniques spécifiques comme l’analyse statique avancée de code sont des éléments clés pour atteindre les objectifs, en réduisant la dépendance aux interprétations ou attentions des développeurs. De la même façon, une analyse statique spécifique doit être réalisée en cas d’utilisation de codes open source.
4- Analyse des binaires pour les code tierces-parties : le recours à des logiciels tiers et notamment des librairies binaires s’accentue. S’assurer de la qualité et la sécurité de ses briques logicielles, même si on ne dispose pas des sources, est primordial.
Automatiser pour garantir les objectifs de la sécurité
1- Application Lifecycle Management (ALM) : bien que non spécifique à la sécurité, ces outils couvrent l’analyse des besoins, la conception, le codage, le test et l’intégration du logiciel. Ils amènent entre autres une aide sur l’analyse des exigences de sécurité, leur respect et implémentation.
2- Dynamic Application Security Testing (DAST) : cela correspond aux tests dynamiques de l’application comme par exemple les tests unitaires ou les tests de robustesse. Automatiser ces phases permet de réduire considérablement la charge des développeurs.
3- Static Application Security Testing (SAST) : l’analyse statique permet d’analyser le code source, les bytecode (code java compilé) ou directement les binaires (exécutables). Dans cette approche, le code n’est pas exécuté mais on vient analyser l’ensemble des chemins d’exécution possibles, ce qui permet de les intégrer au plus tôt dans le cycle de développement.
Rôle de l’Analyse Statique dans le « Secure by Design »
· Qualité en continu sur les codes source : cela permet de traiter toutes les erreurs (vulnérabilités, bugs, règles de codage, etc.) dès la phase d’implémentation et de réduire les coûts de tests de manière importante.
· Respect des règles de codage de sécurité : bon nombre de règles de codage de sécurité existent telles que le SEI CERT, CWE, Microsoft ‘s Secure Coding Guidelines. L’analyse statique permet une vérification en continu du respect de ces règles dans le code.
· Analyse des « Tainted data » : l’analyse du flux de données (Data flow) dans le code source (i.e les interfaces) jusqu’à leur utilisation dans le programme (sink) est primordial en sécurité. Cela permet de déterminer les données potentiellement dangereuses dont le code doit veiller à vérifier l’intégrité.
· Evaluation des code Tierce-parties : l’évaluation et le contrôle de la qualité et de la sécurité des codes tiers (i.e. SOUP) est une étape nécessaire pour garantir une sécurité de bout en bout.
Analyse Statique Source, Binaire & Hybride
· Analyse des Codes Source : l’analyse des codes source (C/C++, Java, C#, etc) est la solution la plus efficace. C’est la capacité de la plupart des outils d’analyse statique existant tels que CodeSonar.
· Analyse des Binaires : l’une des singularités de CodeSonar est sa capacité à analyser les codes binaires (exécutables ou librairies) pour lesquels les sources ne sont pas disponibles, et de détecter des erreur runtime ou des vulnérabilités similaires à l’analyse des sources.
· Analyse Hybride (Source & Binaires) : l’analyse Hybride est aussi une spécificité de CodeSonar. Cette méthode permet d’étendre l’analyse des sources dans les librairies appelées par le code développé en interne. La capacité de CodeSonar à analyser les binaires permet de continuer le chemin d’exécution du code vers les librairies externes et permet ainsi une analyse beaucoup plus précise et plus complète.