Ouvrir le menu Fermer le menu

Intégrez l’Analyse Statique dans votre cycle de développement

trait de séparation
Temps de lecture : 5 minutes
Dans les systèmes embarqués industriels, la notion de sécurité au sens « sécurité fonctionnelle » fait partie de la culture d’entreprise depuis des décennies. C’est encore plus vrai dans le domaine des systèmes critiques, où toute défaillance peut entrainer des catastrophes avec des conséquences potentiellement dramatiques. Jusqu’à un passé relativement récent, ces équipements fonctionnaient majoritairement en vase clos, dans un environnement connu et sous « contrôle ».
Intégrez-Analyse-Statique-Cycle-Développement-ISIT.1
Mais l’évolution des technologies et surtout l’avènement de la connectivité ont changé la donne : du jour au lendemain, ces équipements sont devenus accessibles depuis pratiquement n’importe où et ils sont maintenant sous la menace constante du piratage informatique. Or si la sûreté de fonctionnement est devenue une réelle culture d’entreprise, la cybersécurité n’en est qu’à ses débuts et est souvent difficile à appréhender par les équipes de développement logiciel. Mais tout comme il existe des normes pour la sûreté de fonctionnement, on voit apparaitre aujourd’hui des référentiels de cybersécurité pour les logiciels et on assiste à une convergence entre Sûreté de Fonctionnement et Sécurité Informatique.

Cet article est une introduction à cette convergence entre sûreté et sécurité des systèmes embarqués, notamment pour démystifier ce que cela implique en détaillant une activité fondamentale dans le process de développement :  l’analyse statique avancée.

Les différents types d’analyse statique

L’Analyse statique syntaxique

Intégrez-Analyse-Statique-Cycle-Développement-ISIT.2
On peut la voir comme un correcteur orthographique évolué, qui effectue une relecture linéaire du code source et permet de couvrir un premier niveau des exigences de cybersécurité avec :
  • La vérification de règles de codage
  • La conformité du code vis à vis de standards (MISRA, CWE, …) La Qualimétrie du code (métriques qualité telles que complexité, maintenabilité, testabilité)
  • Une vue sur l’architecture (arbres d’appels) du code et des interfaces
Cependant, ce type l’analyse statique ne permet pas de détecter des failles ou des vulnérabilités complexes résultants de l’exécution du code.

L’Analyse statique avancée (sémantique)

En plus d’effectuer les mêmes types d’analyses que l’analyse statique syntaxique, l’analyse statique avancée crée une représentation arbitraire du code (modèle) permettant par la suite de déduire des informations sur le comportement de ce code.
Intégrez-Analyse-Statique-Cycle-Développement-ISIT.3
Grâce à cette modélisation, il est possible de déterminer les différents chemins d’exécution possibles (inter et intra fonctions / classes), le flot de données et les valeurs des variables, mais également d’avoir une vue sur les paramètres, pointeurs, l’allocation de mémoire dynamique, ... L’ensemble de ces informations permet ensuite, en explorant ces chemins d’exécution, de détecter des erreurs « Run-time » complexes telles que :
 
-  Buffer overrun/underrun
-  Fuite mémoire
-  Division par zéro
-  Problème de Cast
-  Utilisation de fonction non secure
-  Race conditions
-  Use after Close/Free
-  Injection de commandes SQL
-  Tainted data
-  …
Intégrez-Analyse-Statique-Cycle-Développement-ISIT.4
L’autre avantage de l’analyse statique avancée est qu’elle peut également être réalisée sur les binaires et pas seulement sur les codes source comme l’analyse statique syntaxique. L’intérêt est de pouvoir, d’une part étendre la couverture d’analyse du code source en étant capable de développer un chemin d’exécution dans une librairie, et d’autre part de valider un code binaire tiers afin de s’assurer de sa qualité ou de l’absence de vulnérabilités.

Comment réaliser les activités d’Analyse Statique ?

Contrairement à d’autres activités de test et de vérification sur le logiciel qui peuvent être réalisées manuellement, la mise en œuvre de l’analyse statique ne peut se faire que via des outils dédiés, même par exemple pour la vérification de règles de codage, qui pourrait sembler réalisable manuellement par simple relecture du code source. En effet au-delà d’une certaine taille de code, la productivité d’une relecture manuelle chute drastiquement et la probabilité d’erreurs humaines augmente considérablement. Il existe plusieurs solutions sur le marché, la sélection de l’outil dépend entre autres des objectifs que l’on recherche ou des exigences que l’on doit respecter :

Caractéristique des analyseurs statiques :

Il y a trois critères généraux permettant de classifier les analyseurs statiques avancés ou sémantiques :
  • Rappel : Capacité à détecter les erreurs
  • Précision : Capacité à identifier les VRAIES erreurs
  • Performance : Temps d’analyse
Il y a une relation inverse en RAPPEL, PRECISION et PERFORMANCE.
Intégrez-Analyse-Statique-Cycle-Développement-ISIT.5
Le Rappel et la Précision sont des paramètres importants à considérer car ils définissent la capacité de l’outil à détecter de réelles erreurs ou vulnérabilités dans le code vis-à-vis de la génération de faux positifs. Le faux négatif est la non-détection d’une vraie erreur dans le code, c’est donc le cas le plus dangereux en termes de sûreté ou de cybersécurité, car le risque est de déployer ce code alors qu’il y un réel défaut. A l’opposé le faux positif est d’indiquer une erreur qui n’en est pas une. Si en termes de sureté ou cybersécurité cela n’a pas d’impact, cela alourdit le travail du développeur qui doit justifier cette « non-erreur ». Le fait est que c’est un compromis à faire dans l’agressivité de détection de l’analyse. Une solution consiste à effectuer plusieurs analyses avec des configurations plus ou moins agressives suivant le type d’analyse souhaitée (par exemple simple vérification de règles de codage ou recherche d’erreurs Run-time). Néanmoins en termes de Sûreté de fonctionnement et de Cybersécurité, le RAPPEL est primordial. Il vaut mieux indiquer une erreur qui n’en est pas une que laisser passer une erreur à travers les mailles du filet.

Comment intégrer « facilement » un outil d’analyse statique dans son développement ?

Intégrez-Analyse-Statique-Cycle-Développement-ISIT.6
1.      Première analyse complète
2.      Recherches
3.      Persistance des analyses
4.      Faciliter l’adoption de l’analyse statique
5.      L’approche Filtre & Focus
6.      Importance de la configuration
7.      L’approche « Marquer et Différer » 
8.      Arrêtez l’hémorragie
9.      Interprétation des résultats, Faux négatifs, Faux positifs
10.    Facteur humain dans l’interprétation des résultats

Pour en savoir plus sur toutes les étapes nécessaires, demandez le White paper dédié.

Il vous donnera également de plus amples informations sur :
  • Sécurité Fonctionnelle vs Sécurité Informatique (Cybersécurité)
  • Principales exigences des « standards » de cybersécurité 
  • Cycle de développement et Intégration de l’Analyse Statique
0