{"id":19876,"date":"2022-12-16T12:14:32","date_gmt":"2022-12-16T10:14:32","guid":{"rendered":"https:\/\/www.kaspersky.fr\/blog\/?p=19876"},"modified":"2022-12-16T12:14:32","modified_gmt":"2022-12-16T10:14:32","slug":"the-long-road-to-memory-safety","status":"publish","type":"post","link":"https:\/\/www.kaspersky.fr\/blog\/the-long-road-to-memory-safety\/19876\/","title":{"rendered":"Le long chemin \u00e0 parcourir pour avoir une m\u00e9moire vive s\u00fbre"},"content":{"rendered":"<p>En novembre 2022, l\u2019Agence nationale de la s\u00e9curit\u00e9 am\u00e9ricaine a publi\u00e9 un <a href=\"https:\/\/www.nsa.gov\/Press-Room\/News-Highlights\/Article\/Article\/3215760\/nsa-releases-guidance-on-how-to-protect-against-software-memory-safety-issues\/\" target=\"_blank\" rel=\"noopener nofollow\">communiqu\u00e9<\/a> sur la s\u00e9curit\u00e9 de la m\u00e9moire vive (RAM). Si vous lisez les <a href=\"https:\/\/www.nsa.gov\/Press-Room\/Cybersecurity-Advisories-Guidance\/\" target=\"_blank\" rel=\"noopener nofollow\">autres communiqu\u00e9s<\/a> que la NSA a publi\u00e9 \u00e0 ce sujet, vous allez constater qu\u2019ils se concentrent principalement sur le chiffrement des donn\u00e9es, sur la protection de la boucle de production ou sur tout autre probl\u00e8me d\u2019organisation. Il est assez inhabituel pour l\u2019agence de s\u2019adresser directement aux d\u00e9veloppeurs de programmes. Mais, puisqu\u2019elle l\u2019a fait, cela signifie qu\u2019il s\u2019agit de quelque chose d\u2019important. En quelques mots, la NSA demande aux d\u00e9veloppeurs de programmes d\u2019utiliser des langages de programmation dont l\u2019architecture implique une meilleure s\u00e9curit\u00e9 lorsqu\u2019il s\u2019agit de travailler avec la m\u00e9moire vive. Ce qui signifie qu\u2019ils ne doivent plus utiliser C et C++. Autrement, il est conseill\u00e9 d\u2019adopter certaines mesures pour tester les vuln\u00e9rabilit\u00e9s des programmes et \u00e9viter qu\u2019elles ne soient exploit\u00e9es.<\/p>\n<p>Ces indications sont \u00e9videntes pour les programmeurs et le communiqu\u00e9 de la NSA ne leur est pas directement adress\u00e9. Il concerne plut\u00f4t les membres de la direction ou des affaires. Le communiqu\u00e9 a \u00e9t\u00e9 r\u00e9dig\u00e9 avec des termes que les entreprises peuvent comprendre. Tentons notre chance et analysons les arguments pr\u00e9sent\u00e9s dans ce communiqu\u00e9 sans \u00eatre trop techniques.<\/p>\n<h2>La s\u00e9curit\u00e9 de la m\u00e9moire<\/h2>\n<p>Ouvrons notre dernier <a href=\"https:\/\/securelist.com\/it-threat-evolution-in-q3-2022-non-mobile-statistics\/107963\/\" target=\"_blank\" rel=\"noopener\">rapport<\/a> sur l\u2019\u00e9volution des menaces lors du 3<sup>\u00e8me<\/sup> trimestre de 2022 et analysons les vuln\u00e9rabilit\u00e9s les plus souvent utilis\u00e9es pour lancer des attaques informatiques. Nous trouvons d\u2019abord la <a href=\"https:\/\/msrc.microsoft.com\/update-guide\/fr-fr\/vulnerability\/CVE-2018-0802\" target=\"_blank\" rel=\"noopener nofollow\">vuln\u00e9rabilit\u00e9 CVE-2018-0802<\/a>, d\u00e9couverte en 2018, du composant Equation Editor de la suite bureautique Microsoft Office. Elle est due \u00e0 un traitement incorrect des fichiers en m\u00e9moire et l\u2019ouverture d\u2019un document malveillant Microsoft Word peut provoquer l\u2019ex\u00e9cution d\u2019un code arbitraire. La <a href=\"https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2022-2294\" target=\"_blank\" rel=\"noopener nofollow\">vuln\u00e9rabilit\u00e9 CVE-2022-2294<\/a>, du composant WebRTC du navigateur Google Chrome, est particuli\u00e8rement appr\u00e9ci\u00e9e par les escrocs. Cette faille provoque l\u2019ex\u00e9cution d\u2019un code arbitraire \u00e0 la suite d\u2019un probl\u00e8me de <a href=\"https:\/\/encyclopedia.kaspersky.com\/glossary\/buffer-overflow\/\" target=\"_blank\" rel=\"noopener\">d\u00e9passement de m\u00e9moire\u00a0tampon<\/a>. Une autre vuln\u00e9rabilit\u00e9, <a href=\"https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2022-2624\" target=\"_blank\" rel=\"noopener nofollow\">CVE-2022-2624<\/a>, se trouve dans l\u2019outil de visualisation de PDF de Chrome et peut \u00e9galement provoquer un d\u00e9passement de m\u00e9moire\u00a0tampon.<\/p>\n<p>\u00c9videmment, certaines vuln\u00e9rabilit\u00e9s ne sont pas dues \u00e0 une m\u00e9moire vive non s\u00e9curis\u00e9e, mais c\u2019est le cas de beaucoup. Le communiqu\u00e9 de la NSA fait r\u00e9f\u00e9rence aux <a href=\"https:\/\/github.com\/Microsoft\/MSRC-Security-Research\/blob\/master\/presentations\/2019_02_BlueHatIL\/2019_01%20-%20BlueHatIL%20-%20Trends,%20challenge,%20and%20shifts%20in%20software%20vulnerability%20mitigation.pdf\" target=\"_blank\" rel=\"noopener nofollow\">statistiques<\/a> de Microsoft et explique que les erreurs de gestion de la m\u00e9moire sont \u00e0 l\u2019origine de 70 % des vuln\u00e9rabilit\u00e9s d\u00e9couvertes.<\/p>\n<div id=\"attachment_19878\" style=\"width: 2010px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-19878\" class=\"size-full wp-image-19878\" src=\"https:\/\/media.kasperskydaily.com\/wp-content\/uploads\/sites\/93\/2022\/12\/16121044\/the-long-road-to-memory-safety-statistics.jpg\" alt='Selon les statistiques de Microsoft, les deux tiers des vuln\u00e9rabilit\u00e9s sont dus \u00e0 des bugs de m\u00e9moire. &lt;a href=\"https:\/\/github.com\/Microsoft\/MSRC-Security-Research\/blob\/master\/presentations\/2019_02_BlueHatIL\/2019_01%20-%20BlueHatIL%20-%20Trends%2C%20challenge%2C%20and%20shifts%20in%20software%20vulnerability%20mitigation.pdf\" target=\"_blank\"&gt;Source&lt;\/a&gt;.' width=\"2000\" height=\"1125\"><p id=\"caption-attachment-19878\" class=\"wp-caption-text\">Selon les statistiques de Microsoft, les deux tiers des vuln\u00e9rabilit\u00e9s sont dus \u00e0 des bugs de m\u00e9moire. <a href=\"https:\/\/github.com\/Microsoft\/MSRC-Security-Research\/blob\/master\/presentations\/2019_02_BlueHatIL\/2019_01%20-%20BlueHatIL%20-%20Trends%2C%20challenge%2C%20and%20shifts%20in%20software%20vulnerability%20mitigation.pdf\" target=\"_blank\" rel=\"noopener nofollow\">Source<\/a>.<\/p><\/div>\n<p>\u00a0<\/p>\n<p>Pourquoi\u00a0? Si le probl\u00e8me des fuites de m\u00e9moire est si grave, pourquoi n\u2019arrivons-nous pas \u00e0 nous organiser et \u00e0 \u00e9crire un code qui n\u2019est plus vuln\u00e9rable\u00a0? L\u2019origine du probl\u00e8me se trouve dans l\u2019utilisation des langages de programmation C et C++. Leur architecture donne beaucoup de libert\u00e9 aux programmeurs lorsqu\u2019ils travaillent avec la m\u00e9moire vive. Pourtant, cette libert\u00e9 s\u2019accompagne de responsabilit\u00e9s. Les programmeurs C\/C++ doivent mettre en place des m\u00e9canismes pour que l\u2019\u00e9criture et la lecture des donn\u00e9es soient s\u00fbres. D\u2019autre part, des langages de programmation de haut niveau comme C#, Rust, Go et autres s\u2019en occupent. Le fait est que, lorsque le code source du programme est compil\u00e9, les outils qui s\u2019occupent de la s\u00e9curit\u00e9 de la m\u00e9moire doivent \u00eatre automatiquement ajout\u00e9s afin que les programmeurs n\u2019aient pas \u00e0 s\u2019en occuper. Rust utilise d\u2019autres moyens afin d\u2019am\u00e9liorer la s\u00e9curit\u00e9, comme la restriction d\u2019un code potentiellement dangereux ou la compilation pendant l\u2019affichage d\u2019une erreur au programmeur.<\/p>\n<p>\u00c9videmment, il est impossible de tout simplement abandonner C\/C++ puisque ces langages sont indispensables pour effectuer certaines t\u00e2ches, comme lorsque le code est n\u00e9cessaire pour un MCU ou tout autre appareil ayant des limites en termes de puissance informatique et de taille de la m\u00e9moire. D\u2019autres aspects sont identiques et les langages de programmation de haut niveau peuvent donner lieu \u00e0 des programmes voraces en ressources. Les statistiques relatives aux menaces courantes nous montrent que les attaques s\u2019en prennent plus souvent aux programmes grand public (comme les navigateurs et les \u00e9diteurs de texte) qui s\u2019ex\u00e9cutent sur des ordinateurs tr\u00e8s puissants (par rapport au MCU, \u00e9videmment).<\/p>\n<h2>Changer le langage de programmation ne suffit pas<\/h2>\n<p>La NSA en a conscience. Un gigantesque logiciel de base de donn\u00e9es \u00e9crit dans des langages de programmation non s\u00e9curis\u00e9s ne peut pas \u00eatre transf\u00e9r\u00e9 dans un autre langage du jour au lendemain. M\u00eame si nous parlons d\u2019\u00e9crire un logiciel de z\u00e9ro, il y a certainement une \u00e9quipe, une infrastructure et des m\u00e9thodes de d\u00e9veloppement bien \u00e9tablies selon un langage de programmation sp\u00e9cifique.<\/p>\n<p>\u00c0 titre de comparaison, imaginez qu\u2019on vous demande d\u2019abandonner votre domicile parce qu\u2019il a \u00e9t\u00e9 construit il y a plusieurs ann\u00e9es de cela. Vous savez que la structure est solide et que le logement ne va s\u2019effondrer que s\u2019il y a un tremblement de terre, d\u2019autant que vous \u00eates habitu\u00e9 \u00e0 vivre ici. L\u2019\u00e9quipe de d\u00e9veloppement de Google Chrome a publi\u00e9 un <a href=\"https:\/\/security.googleblog.com\/2021\/09\/an-update-on-memory-safety-in-chrome.html\" target=\"_blank\" rel=\"noopener nofollow\">article<\/a> qui stipule clairement qu\u2019il est impossible de passer imm\u00e9diatement \u00e0 un langage de programmation (dans ce cas, Rust) o\u00f9 la s\u00e9curit\u00e9 fait partie de l\u2019architecture. Ils pourront le faire \u00e0 l\u2019avenir. Ils ont besoin d\u2019autres solutions pour le moment.<\/p>\n<p>Ce m\u00eame article des d\u00e9veloppeurs de Google Chrome explique pourquoi vous ne pouvez pas simplement modifier le code de s\u00e9curit\u00e9 C\/C++. Ces langages de programmation n\u2019ont pas \u00e9t\u00e9 cr\u00e9\u00e9s pour r\u00e9soudre tous les probl\u00e8mes de compilation en un seul coup. C\u2019est pourquoi le communiqu\u00e9 de la NSA propose deux mesures comme alternative :<\/p>\n<ul>\n<li>Tester le code pour d\u00e9tecter d\u2019\u00e9ventuelles vuln\u00e9rabilit\u00e9s avec des techniques d\u2019analyse dynamiques et statiques\u00a0;<\/li>\n<li>Utiliser des fonctionnalit\u00e9s qui emp\u00eachent l\u2019exploitation d\u2019une erreur dans le code m\u00eame si elle existe d\u00e9j\u00e0.<\/li>\n<\/ul>\n<h2>Les d\u00e9fis de ce changement<\/h2>\n<p>Les experts techniques sont, dans l\u2019ensemble, d\u2019accord avec la NSA. Les experts ont diverses opinions quant \u00e0 la fa\u00e7on dont ce changement aux langages de programmation de haut niveau doit se faire lorsque ce besoin est n\u00e9cessaire, notamment pour des raisons de s\u00e9curit\u00e9. Tout d\u2019abord, il convient de comprendre que si ce changement se fait, il faudra compter plusieurs ann\u00e9es. Ensuite, une telle \u00e9volution a un co\u00fbt et certaines entreprises ne sont pas pr\u00eates \u00e0 l\u2019assumer. Le probl\u00e8me de la m\u00e9moire non s\u00e9curis\u00e9e avec des langages de programmation ayant un niveau d\u2019abstraction bas est un probl\u00e8me g\u00e9n\u00e9ralis\u00e9. Il est n\u00e9cessaire d\u2019avoir une solution radicale, mais ne vous attendez pas \u00e0 voir les d\u00e9veloppeurs programmer en C#, Java, Ruby, Rust ou Swift d\u2019un jour \u00e0 l\u2019autre. C\u2019est comme si vous demandiez \u00e0 toute one ville ou \u00e0 tout un pays de devenir\u2026 v\u00e9g\u00e9tarien, ou de faire tout autre changement radical, du jour au lendemain.<\/p>\n<p>Enfin, m\u00eame si le probl\u00e8me de la m\u00e9moire non s\u00e9curis\u00e9e est colossal, il est loin d\u2019\u00eatre le seul lorsqu\u2019il s\u2019agit de la s\u00e9curit\u00e9 d\u2019un programme. Depuis que l\u2019industrie informatique existe, c\u2019est-\u00e0-dire plusieurs d\u00e9cennies, il n\u2019a pas \u00e9t\u00e9 possible de cr\u00e9er un syst\u00e8me universel et compl\u00e8tement s\u00fbr pour toutes les t\u00e2ches (sauf pour les solutions hautement sp\u00e9cialis\u00e9es). D\u2019un point de vue professionnel, il convient d\u2019investir dans les nouvelles technologies (en d\u00e9veloppant les comp\u00e9tences n\u00e9cessaires et en engageant des sp\u00e9cialistes qui ont de l\u2019exp\u00e9rience) et de prot\u00e9ger au maximum les technologies existantes. Quant au d\u00e9veloppement de programmes, il pourrait s\u2019agir de nouveaux langages de programmation et de nouvelles technologies pour tester le code existant. Quant aux autres entreprises, elles devraient investir dans de nouvelles technologies pour se prot\u00e9ger contre les attaques informatiques et tester constamment la force de l\u2019infrastructure existante. En d\u2019autres termes, une approche globale de la s\u00e9curit\u00e9 est optimale et le restera pendant longtemps.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nous enqu\u00eatons sur le lien entre la s\u00e9curit\u00e9 et les fuites d\u2019un programme lorsque la m\u00e9moire vive intervient.<\/p>\n","protected":false},"author":665,"featured_media":19877,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2112,3150,3151],"tags":[4347,322],"class_list":{"0":"post-19876","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business","8":"category-enterprise","9":"category-smb","10":"tag-ram","11":"tag-vulnerabilites"},"hreflang":[{"hreflang":"fr","url":"https:\/\/www.kaspersky.fr\/blog\/the-long-road-to-memory-safety\/19876\/"},{"hreflang":"en-in","url":"https:\/\/www.kaspersky.co.in\/blog\/the-long-road-to-memory-safety\/24957\/"},{"hreflang":"en-ae","url":"https:\/\/me-en.kaspersky.com\/blog\/the-long-road-to-memory-safety\/20453\/"},{"hreflang":"en-us","url":"https:\/\/usa.kaspersky.com\/blog\/the-long-road-to-memory-safety\/27517\/"},{"hreflang":"en-gb","url":"https:\/\/www.kaspersky.co.uk\/blog\/the-long-road-to-memory-safety\/25287\/"},{"hreflang":"es-mx","url":"https:\/\/latam.kaspersky.com\/blog\/the-long-road-to-memory-safety\/25609\/"},{"hreflang":"es","url":"https:\/\/www.kaspersky.es\/blog\/the-long-road-to-memory-safety\/28167\/"},{"hreflang":"ru","url":"https:\/\/www.kaspersky.ru\/blog\/the-long-road-to-memory-safety\/34357\/"},{"hreflang":"x-default","url":"https:\/\/www.kaspersky.com\/blog\/the-long-road-to-memory-safety\/46511\/"},{"hreflang":"pt-br","url":"https:\/\/www.kaspersky.com.br\/blog\/the-long-road-to-memory-safety\/20461\/"},{"hreflang":"de","url":"https:\/\/www.kaspersky.de\/blog\/the-long-road-to-memory-safety\/29583\/"},{"hreflang":"ru-kz","url":"https:\/\/blog.kaspersky.kz\/the-long-road-to-memory-safety\/25649\/"},{"hreflang":"en-au","url":"https:\/\/www.kaspersky.com.au\/blog\/the-long-road-to-memory-safety\/31334\/"},{"hreflang":"en-za","url":"https:\/\/www.kaspersky.co.za\/blog\/the-long-road-to-memory-safety\/31043\/"}],"acf":[],"banners":"","maintag":{"url":"https:\/\/www.kaspersky.fr\/blog\/tag\/vulnerabilites\/","name":"Vuln\u00e9rabilit\u00e9s"},"_links":{"self":[{"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/posts\/19876","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/users\/665"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/comments?post=19876"}],"version-history":[{"count":2,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/posts\/19876\/revisions"}],"predecessor-version":[{"id":19880,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/posts\/19876\/revisions\/19880"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/media\/19877"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/media?parent=19876"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/categories?post=19876"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.fr\/blog\/wp-json\/wp\/v2\/tags?post=19876"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}