La National Security Agency (NSA) a publi des conseils pour aider les dveloppeurs et les oprateurs de logiciels prvenir et attnuer les problmes de scurit de la mmoire logicielle, qui reprsentent une grande partie des vulnrabilits exploitables. La fiche d’information sur la cyberscurit Scurit de la mmoire logicielle souligne comment les cyberacteurs malveillants peuvent exploiter les problmes de mauvaise gestion de la mmoire pour accder des informations sensibles, promulguer l’excution de code non autoris et causer d’autres impacts ngatifs.
Les problmes de gestion de la mmoire sont exploits depuis des dcennies et sont encore trop courants aujourd’hui , a dclar Neal Ziring, directeur technique de la cyberscurit. Nous devons utiliser systmatiquement des langages scuriss pour la mmoire et d’autres protections lors du dveloppement de logiciels afin d’liminer ces faiblesses des cyber-acteurs malveillants .
La socit moderne s’appuie fortement sur l’automatisation base sur les logiciels, faisant implicitement confiance aux dveloppeurs pour crire des logiciels qui fonctionnent de la manire attendue et ne peuvent pas tre compromis des fins malveillantes. Alors que les dveloppeurs effectuent souvent des tests rigoureux pour prparer la logique des logiciels des conditions surprenantes, les vulnrabilits logicielles exploitables sont encore souvent bases sur des problmes de mmoire. Les exemples incluent le dbordement d’une mmoire tampon et l’exploitation des problmes lis la faon dont le logiciel alloue et dsalloue la mmoire.
Microsoft a rvl lors d’une confrence en 2019 que, de 2006 2018, 70 % de leurs vulnrabilits taient dues des problmes de scurit de la mmoire. Google a galement trouv un pourcentage similaire de vulnrabilits de scurit de la mmoire sur plusieurs annes dans Chrome. Les cyber-acteurs malveillants peuvent exploiter ces vulnrabilits pour l’excution de code distance ou d’autres effets indsirables, qui peuvent souvent compromettre un appareil et tre la premire tape des intrusions rseau grande chelle. Les langages couramment utiliss, tels que C et C++, offrent une grande libert et flexibilit dans la gestion de la mmoire tout en s’appuyant fortement sur le dveloppeur pour effectuer les vrifications ncessaires sur les rfrences mmoire.
De simples erreurs peuvent conduire des vulnrabilits exploitables bases sur la mmoire. Les outils d’analyse logicielle peuvent dtecter de nombreux cas de problmes de gestion de la mmoire et les options d’environnement d’exploitation peuvent galement fournir une certaine protection, mais les protections inhrentes offertes par les langages logiciels scuriss pour la mmoire peuvent prvenir ou attnuer la plupart des problmes de gestion de la mmoire.
La NSA recommande d’utiliser un langage scuris pour la mmoire lorsque cela est possible. Bien que l’utilisation de protections supplmentaires pour les langages non scuriss pour la mmoire et l’utilisation de langages scuriss pour la mmoire n’offrent pas une protection absolue contre les problmes de mmoire exploitables, elles offrent une protection considrable.
Par consquent, la communaut logicielle globale du secteur priv, du milieu universitaire et du gouvernement amricain a lanc des initiatives visant orienter la culture du dveloppement logiciel vers l’utilisation de langages scuriss dans la gestion de la mmoire.
Le problme de la scurit de la mmoire
La faon dont un programme logiciel gre la mmoire est essentielle pour prvenir de nombreuses vulnrabilits et garantir la robustesse d’un programme. L’exploitation d’une gestion de la mmoire mdiocre ou ngligente peut permettre un cyberacteur malveillant d’accomplir des actes nfastes, tels que planter le programme volont ou modifier les instructions du programme en cours d’excution pour faire ce que l’acteur dsire. Mme des problmes inexploitables avec la gestion de la mmoire peuvent entraner des rsultats de programme incorrects, une dgradation des performances du programme au fil du temps ou des plantages de programme apparemment alatoires.
La scurit de la mmoire est une vaste catgorie de problmes lis la faon dont un programme gre la mmoire. Un problme courant est appel dbordement de tampon , o les donnes sont accessibles en dehors des limites d’un tableau. D’autres problmes courants concernent l’allocation de mmoire. Les langages peuvent allouer de nouveaux emplacements de mmoire pendant l’excution d’un programme, puis dsallouer la mmoire, galement appele libration ou libration de la mmoire, plus tard lorsque la mmoire n’est plus ncessaire. Mais si cela n’est pas fait avec soin par le dveloppeur, de la nouvelle mmoire peut tre alloue encore et encore au fur et mesure que le programme s’excute. Par consquent, la mmoire n’est pas toujours libre lorsqu’elle n’est plus ncessaire, ce qui entrane une fuite de mmoire qui pourrait entraner le programme manquer de mmoire disponible.
En raison d’erreurs logiques, les programmes peuvent galement tenter d’utiliser la mmoire qui a t libre, ou mme de librer de la mmoire qui a dj t libre. Un autre problme peut survenir lorsque les langages autorisent l’utilisation d’une variable qui n’a pas t initialise, ce qui fait que la variable utilise la valeur prcdemment dfinie cet emplacement en mmoire. Enfin, un autre problme difficile est appel une condition de concurrence. Ce problme peut se produire lorsque les rsultats d’un programme dpendent de l’ordre de fonctionnement de deux parties du programme accdant aux mmes donnes. Tous ces problmes de mmoire sont des occurrences beaucoup trop courantes.
En exploitant ces types de problmes de mmoire, les acteurs malveillants, qui ne sont pas lis par les attentes normales d’utilisation du logiciel, peuvent dcouvrir qu’ils peuvent entrer des entres inhabituelles dans le programme, provoquant l’accs, l’criture, l’allocation ou la dsallocation de la mmoire de manire inattendue. Dans certains cas, un acteur malveillant peut exploiter ces erreurs de gestion de la mmoire pour accder des informations sensibles, excuter du code non autoris ou provoquer d’autres impacts ngatifs. Puisqu’il peut falloir beaucoup d’exprimentation avec des entres inhabituelles pour en trouver une qui provoque une rponse inattendue, les acteurs peuvent utiliser une technique appele « fuzzing » pour crer de manire alatoire ou intelligente une multitude de valeurs d’entre dans le programme jusqu’ ce qu’on en trouve une qui provoque le plantage du programme.
Les progrs des outils et des techniques de fuzzing ont facilit la recherche d’entres problmatiques pour les acteurs malveillants ces dernires annes. Une fois qu’un acteur dcouvre qu’il peut faire planter le programme avec une entre particulire, il examine le code et travaille pour dterminer ce qu’une entre spcialement conue pourrait faire. Dans le pire des cas, une telle entre pourrait permettre l’acteur de prendre le contrle du systme sur lequel le programme s’excute.
Langages scuriss dans la gestion de la mmoire
L’utilisation d’un langage scuris pour la mmoire peut aider empcher les programmeurs d’introduire certains types de problmes lis la mmoire. La mmoire est gre automatiquement dans le cadre du langage informatique ; il ne repose pas sur l’ajout de code par le programmeur pour implmenter des protections de mmoire. Le langage institue des protections automatiques en utilisant une combinaison de vrifications au moment de la compilation et de l’excution. Ces fonctionnalits inhrentes au langage protgent le programmeur contre l’introduction involontaire d’erreurs de gestion de la mmoire. C#, Go, Java, Ruby, Rust et Swift sont des exemples de langage scuris pour la mmoire.
Mme avec un langage scuris pour la mmoire, la gestion de la mmoire n’est pas entirement scurise pour la mmoire. La plupart des langages de mmoire scuriss reconnaissent que les logiciels doivent parfois excuter une fonction de gestion de mmoire non scurise pour accomplir certaines tches. En consquence, des classes ou des fonctions sont disponibles qui sont reconnues comme non scurises pour la mmoire et permettent au dveloppeur d’effectuer une tche de gestion de la mmoire potentiellement dangereuse. Certains langages exigent que tout ce qui n’est pas sr en mmoire soit explicitement annot comme tel pour que le dveloppeur et tous les rviseurs du programme sachent qu’il n’est pas sr. Les langages scuriss pour la mmoire peuvent galement utiliser des bibliothques crites dans des langages non scuriss pour la mmoire et peuvent donc contenir des fonctionnalits de mmoire non scurises. Bien que ces faons d’inclure la mmoire ne soient pas sres et subvertissent la scurit inhrente la mmoire, elles aident localiser o des problmes de mmoire pourraient exister, permettant un examen plus approfondi de ces sections de code.
Les langages varient dans leur degr de scurit de la mmoire institu par des protections et des attnuations inhrentes. Certains langages n’offrent qu’une scurit de mmoire relativement minimale alors que certains langages sont trs stricts et offrent des protections considrables en contrlant la manire dont la mmoire est alloue, accessible et gre. Pour les langages avec un niveau extrme de protection inhrente, un travail considrable peut tre ncessaire pour obtenir simplement le programme compiler en raison des vrifications et des protections.
La scurit de la mmoire peut tre coteuse en termes de performances et de flexibilit. La plupart des langages mmoire scuriss ncessitent une sorte de rcupration de place pour rcuprer la mmoire qui a t alloue, mais qui n’est plus ncessaire au programme. Il existe galement une surcharge de performances considrable associe la vrification des limites de chaque accs la baie qui pourrait potentiellement se trouver en dehors de la baie.
Alternativement, un impact similaire sur les performances peut exister dans un langage non scuris en mmoire en raison des vrifications qu’un dveloppeur ajoute au programme pour effectuer la vrification des limites et d’autres protections de gestion de la mmoire. Les cots supplmentaires lis l’utilisation de langages non scuriss pour la mmoire incluent une corruption de mmoire difficile diagnostiquer et des plantages occasionnels des programmes ainsi que de potentielles exploitations des vulnrabilits d’accs la mmoire. Il n’est pas anodin de faire passer une infrastructure de dveloppement logiciel mature d’un langage informatique un autre. Les dveloppeurs qualifis doivent tre forms dans un nouveau langage et il y a un coup d’efficacit lors de l’utilisation d’un nouveau langage.
Les dveloppeurs doivent endurer une courbe d’apprentissage et se frayer un chemin travers toutes les erreurs de dbutant . Alors qu’une autre approche consiste embaucher des dveloppeurs comptents dans un langage scuris pour la mmoire, ils auront eux aussi leur propre courbe d’apprentissage pour comprendre la base de code existante et le domaine dans lequel le logiciel fonctionnera.
Source : NSA
Et vous ?
Que pensez-vous des conseils de la NSA ? Y en a-t-il que vous appliquez dj ?
Que pensez-vous du fait que l’agence prconise l’utilisation des langages de programmation scuriss pour la mmoire comme C#, Go, Java, Ruby, Rust et Swift ?
Les dveloppeurs qualifis doivent tre forms dans un nouveau langage et il y a un coup d’efficacit lors de l’utilisation d’un nouveau langage. Les dveloppeurs doivent endurer une courbe d’apprentissage et se frayer un chemin travers toutes les erreurs de dbutant . Alors qu’une autre approche consiste embaucher des dveloppeurs comptents dans un langage scuris pour la mmoire, ils auront eux aussi leur propre courbe d’apprentissage pour comprendre la base de code existante et le domaine dans lequel le logiciel fonctionnera . Qu’en pensez-vous ? tes-vous d’accord avec l’agence ?