Les stack canaries : une protection logicielle surestimée

, ,
Dans les mines de charbon, les canaris étaient utilisés comme système d'alerte. Une anecdote qui a inspiré un système de défense en cybersécurité aujourd'hui très répandu.

Android, Windows, Mac, Linux… Tous les systèmes d’exploitation contiennent l’une des protections logicielles les plus répandues : les stack canaries. Garants de l’intégrité d’un système informatique face aux menaces d’intrusion, ces dispositifs sont considérés comme très efficaces. Pourtant, de récents travaux de recherche menés par EURECOM et l’université technique de Munich montrent que la majorité des stack canaries sont vulnérables. Ces résultats, obtenus dans le cadre du projet SeCIF de l’Académie franco-allemande pour l’industrie du futur, mettent en lumière la fragilité des systèmes informatiques dans un contexte de numérisation croissante des organisations.

 

Dans les mines de charbon du XIXe siècle, des canaris étaient utilisés pour anticiper les coups de grisou. Le gaz inflammable et inodore libéré par l’action des mineurs faisait perdre connaissance au petit oiseau chanteur — ou, plus tristement, le tuait. Les ouvriers étaient alors avertis que quelque chose n’allait pas. Plusieurs décennies plus tard, au début des années 2000, l’histoire du canari dans la mine inspirait les chercheurs en cybersécurité. Ils inventaient une protection simple pour détecter la corruption d’un logiciel, et la baptisaient : « stack canary » — ou « canari de pile ». Depuis, cette protection est l’une des plus répandues dans nos logiciels. Elle est notamment présente dans pratiquement tous les systèmes d’exploitation. Pour autant, est-elle vraiment efficace ?

Il peut apparaître curieux de se poser la question plus de 20 ans après les premières implantations des stack canaries dans les produits informatiques. « La communauté est partie du principe que la protection fonctionnait » témoigne Aurélien Francillon, chercheur en cybersécurité à EURECOM. « Quelques travaux laissaient voir des vulnérabilités potentielles des stack canaries, mais sans vraiment creuser le sujet de manière détaillée. » Pour pallier ce manque de connaissances, les chercheurs d’EURECOM et de l’université technique de Munich (TUM) se sont associés. Ils ont évalué la vulnérabilité des stacks canaries dans 17 configurations de 6 systèmes d’exploitation différents, pour déceler les défauts potentiels et en déduire des bonnes pratiques à adopter afin d’y remédier. Linux, Windows 10, macOS Sierra ou encore Android 7.0 font partie du lot.

« Ce que nous avons montré, c’est que dans la majorité des systèmes d’exploitation, ces contre-mesures permettant de détecter une anomalie ne sont pas très sûres » rapporte Aurélien Francillon. 8 des 17 configurations testées sont évaluées par les chercheurs comme contenant un stack canary inefficace (voir le tableau ci-dessous). 6 autres peuvent être améliorées sur cet aspect, et 3 seulement sont irréprochables. Menée dans le cadre du projet Secure connected industry of the future (SeCIF) de l’Académie franco-allemande pour l’industrie du futur, cette étude sur les vulnérabilités des stack canaries est à mettre en relation avec la part grandissante du numérique dans les organisations. Les industries et les entreprises reposent de plus en plus sur des objets connectés et des processus informatiques. Des protections défaillantes des systèmes d’exploitation peuvent alors compromettre la sécurité globale des entreprises, qu’il s’agisse d’un accès à des données confidentielles ou d’une prise de contrôle de machines industrielles.

Sur les 17 systèmes d’exploitation testés, seuls Android 7.0 « Nougat », macOS 10.12.1 « Sierra », et OpenBSD 6.0 (Unix) ont des stack canaries implantés avec une sécurité maximale. Les croix rouges indiquent qu’un contournement du stack canary est possible. Les croix orange indiquent que la sécurité du stack canary peut être améliorée. Les colonnes du tableau représentent différents types de mémoire.

Sur les 17 systèmes d’exploitation testés, seuls Android 7.0 « Nougat », macOS 10.12.1 « Sierra », et OpenBSD 6.0 (Unix) ont des stack canaries implantés avec une sécurité maximale. Les croix rouges indiquent qu’un contournement du stack canary est possible. Les croix orange indiquent que la sécurité du stack canary peut être améliorée. Les colonnes du tableau représentent différents types de mémoire.

 

Le canari dans la mémoire

Pour comprendre l’incidence de ces défaillances mises en avant par les chercheurs, il faut détailler l’utilité et le fonctionnement des stack canaries. Un grand nombre d’attaques consiste à changer dans un programme des valeurs qui ne sont pas censées être modifiées. Ces valeurs sont stockées dans un espace de mémoire. « Imaginons que cet espace a une taille de 20 octets » illustre Julian Kirsch, chercheur en cybersécurité à la TUM et co-auteur de ces travaux. « Sur ces 20 octets, je vais stocker mon nom et ma taille. Puis sur un autre espace situé juste derrière, je vais indiquer mon numéro de compte bancaire. Si un attaquant veut corrompre ces informations, il va rajouter des valeurs, par exemple en rajoutant un chiffre sur la valeur de ma taille. En faisant cela, ma taille va déborder de l’espace de 20 octets sur celui stockant mon compte bancaire, et les informations ne seront plus correctes. Lorsque le programme devra lire ces données et les utiliser, les choses ne vont pas bien se passer du tout. »

Dans le cas plus complexe des systèmes d’exploitation, les conséquences induisent bien entendu des erreurs plus critiques qu’un mauvais numéro de compte bancaire. Pour repérer si les informations stockées dans la mémoire ont été modifiées, il est possible d’insérer entre les espaces de stockage une valeur numérique connue, une sorte de mémoire tampon. Si un attaquant ajoute des informations, comme dans le cas du changement de la taille pris en exemple par Julian Kirsch, tout va se décaler, et la valeur indiquée dans la mémoire tampon sera changée. Le stack canary n’est ni plus ni moins que cette mémoire tampon. Si la sécurité du stack canary est compromise, l’attaquant peut le modifier, et rétablir sa valeur d’origine après une attaque pour la masquer.

Pour complexifier un peu la tâche des attaquants, la plupart des stack canaries changent de valeur régulièrement. Une copie de la nouvelle valeur est stockée dans un autre espace de mémoire et les deux valeurs, celle réelle et celle de référence, sont comparées pour assurer l’intégrité du logiciel. Dans leurs travaux, les chercheurs ont montré que les vulnérabilités des stack canaries tiennent en partie à l’endroit où est stockée cette valeur de référence. « Elle est parfois stockée dans un espace mémoire situé juste à côté du stack canary » explique Julian Kirsch. L’attaquant n’a donc pas besoin d’accéder à une autre partie du système, et peut modifier les deux valeurs en même temps. « C’est un défaut que l’on retrouve par exemple sur Linux, ce qui nous a beaucoup surpris parce que c’est un système d’exploitation assez répandu » poursuit le chercheur de la TUM.

Comment expliquer que des protections aussi répandues soient aussi vulnérables sur des systèmes comme Linux ou Windows ? D’abord, Aurélien Francillon rappelle que les stack canaries ne sont pas les seules contre-mesures qui existent pour les systèmes d’exploitation. « Ce ne sont généralement pas les seules implantées, mais il est clair que contourner un stack canary reste une étape essentielle pour qu’un attaquant puisse prendre le contrôle » précise le chercheur d’EURECOM. Leur vulnérabilité ne remet donc pas en cause toute la sécurité des systèmes d’exploitation, mais elle constitue toutefois une porte de moins à forcer.

Moins technique, l’autre raison de la permissivité des stack canaries tient aux choix des développeurs. « Ils ne souhaitent pas augmenter la sécurité de ces contre-mesures, car cela implique une baisse des performances » pointe Julian Kirsch. Pour les éditeurs, la sécurité est en effet un argument concurrentiel bien plus faible que la performance de leurs logiciels. Plus de sécurité implique une allocation des ressources de calcul à des tâches qui ne servent pas directement les requêtes de l’utilisateur du logiciel. Reste que les clients apprécient rarement les intrusions d’autrui dans leurs systèmes informatiques. Avec les considérations grandissantes des organisations pour les questions de cybersécurité, il est à espérer que les réflexions sur les logiciels choisis intègrent mieux cette dimension. La sécurité deviendrait alors peut-être un argument sérieux sur le marché des solutions logicielles.

 

2 réponses

Trackbacks (rétroliens) & Pingbacks

  1. […] Les stack canaries : une protection logicielle surestimée […]

  2. […] Les stack canaries : une protection logicielle surestimée […]

Laisser un commentaire

Rejoindre la discussion?
N’hésitez pas à contribuer !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *