Skip to main content

7 Fév, 2019

Mayhem, la machine qui trouve les vulnérabilités logicielles, puis les corrige

Mayhem, la machine qui trouve les vulnérabilités logicielles, puis les corrige

La machine a triomphé dans le Cyber Grand Challenge de la DARPA, où les équipes ont automatisé le piratage en « chapeau blanc ».

En 2011, lorsque Marc Andreessen, spécialiste du capital-risque, déclarait que « le logiciel mange le monde », c’était encore une idée neuve. Maintenant, il est évident que le logiciel imprègne nos vies. De l’électronique complexe comme les appareils médicaux et les véhicules autonomes aux objets simples comme les ampoules électriques et les thermomètres connectés à Internet, nous sommes entourés de logiciels.

Et cela signifie que nous sommes tous plus exposés que jamais aux attaques contre ce logiciel.

Chaque année, 111 milliards de lignes s’ajoutent à la masse du code logiciel existant, et chaque ligne présente une nouvelle cible potentielle. Steve Morgan, fondateur et rédacteur en chef de la société de recherche Cybersecurity Ventures, prédit que les cambriolages de systèmes effectués en raison d’une faiblesse jusque-là inconnue – ce que l’industrie appelle les  » exploits Zero-Day  » – seront en moyenne un par jour aux États-Unis en 2021, contre un par semaine en 2015.

C’est pour résoudre ce problème que des chercheurs de l’Université Carnegie Mellon (CMU), à Pittsburgh, ont passé près de 10 ans à construire une technologie qui rendrait les logiciels sûrs, automatiquement. Puis, en 2012, Il ont fondé ForAllSecure pour lancer leur produit dans le monde entier. La seule chose dont ils avaient besoin était de prouver qu’ils pouvaient faire ce qu’ils avaient dit, ce qui a été concrétisé sous la forme d’un concours avec récompenses.

Les Sept Magnifiques : Les ordinateurs concurrents brillent de tous leurs feux lors de la finale du Cyber Grand Challenge, qui s’est tenu à Las Vegas en 2016. 

Avance rapide jusqu’en 2016 : L’équipe du CMU est blottie dans une salle de bal d’hôtel à Las Vegas, se rongeant les ongles et presque certaine qu’elle était venue pour perdre une compétition à laquelle elle avait passé des milliers d’heures à se préparer. Il s’agissait du DARPA Cyber Grand Challenge (CGC), l’un de plusieurs événements de ce type, comme celui des véhicules autonomes au début des années 2000, organisé par la U.S. Defense Advanced Research Projects Agency pour stimuler les percées technologiques en matière de sécurité nationale. Le CCG est née de la reconnaissance par la DARPA que les États-Unis pourraient un jour se retrouver sans la main-d’œuvre ou les outils nécessaires pour repousser les cybermenaces.

Le champ de bataille de la cybersécurité est peuplé de pirates informatiques techniquement compétents et, au plus haut niveau, créatifs dans l’exploitation des faiblesses des logiciels pour pénétrer les défenses de l’organisation. Les criminels qui font cela pour leur propre profit sont communément appelés des « Black  Hats » (chapeaux noirs), et ils créent souvent des outils que des légions de « script kiddies » amateurs peuvent utiliser pour faire des ravages, comme les botnets de l’IoT qui, en 2016, ont lancé une attaque massive sur Internet après avoir pris le contrôle des minicams et d’enregistreurs vidéo chez les personnes. En revanche, les « chapeaux blancs » utilisent leurs compétences pour contrecarrer de telles attaques. Mais il n’y a tout simplement pas assez de pirates informatiques pour protéger tous les logiciels qui prolifèrent dans le monde commercial, sans parler de l’infrastructure commune et des plateformes militaires essentielles à la sécurité nationale et mondiale.

En 2014, la DARPA a annoncé le Cyber Grand Challenge comme un projet de deux ans dont l’objectif était de tester s’il était possible de développer des systèmes d’IA capables de détecter, vérifier et corriger les faiblesses logicielles. En 2015, une centaine d’équipes sont entrées dans la phase de préqualification. En 2016, les sept premiers se sont qualifiés pour la finale du grand championnat, où ils auraient besoin d’entrer dans un système complet de cyber-raisonnement – un système qui ne se contenterait pas de remarquer un problème, mais qui pourrait aussi en déduire sa nature. Le champion remporterait 2 millions de dollars US et les deuxièmes et troisièmes places recevraient respectivement 1 million de dollars et 750 000 dollars.

Après que la DARPA ait donné des détails sur les concurrents, l’équipe du CMU a compris que c’était une excellente occasion de démontrer que la cybersécurité automatisée qu’elle avait développée n’était pas un simple jeu théorique. Après avoir créé ForAllSecure, elle était toujours confrontée au scepticisme quant à la faisabilité de leur solution. Elle s’est alors dit qu’il valait mieux gagner le concours DARPA, étant donné qu’elle y travaillait depuis une décennie.

Leur recherche à la CMU avait commencé avec une prémisse simple : les gens ont besoin d’un moyen de vérifier le logiciel qu’ils achètent et de s’assurer qu’il est sûr. Les codeurs feront bien sûr un effort de diligence raisonnable pour éliminer les failles de sécurité, mais leurs principales préoccupations sont toujours plus fondamentales : ils doivent expédier leur produit à temps et s’assurer qu’il fait ce qu’il est censé faire. Le problème, c’est que les pirates informatiques trouveront des moyens de faire faire au logiciel ce qu’il n’est pas censé faire.

Aujourd’hui, l’état de l’art en matière de sécurité logicielle implique l’utilisation d’outils spéciaux pour réviser le code source et signaler les faiblesses potentielles en matière de sécurité. Parce que ce processus produit beaucoup de faux positifs – signalant des choses qui en fait ne sont pas des faiblesses – l’être humain doit alors passer par là et vérifier chaque cas. Pour améliorer le taux de détection des bogues, certaines entreprises font appel à des pirates pour effectuer une analyse ponctuelle ou pour participer à des programmes  » bug bounty « , qui les rémunèrent en fonction du nombre et de la gravité des bogues qu’ils trouvent. Mais seules les entreprises les plus rentables peuvent se permettre les tests les plus poussés de leurs logiciels. Le problème devient de plus en plus complexe à mesure que les logiciels finis comprennent de plus en plus de composants provenant de projets open-source et d’autres tiers.

Le système dans lequel l’équipe est entrée dans la compétition, Mayhem, automatisait ce que font les hackers à « chapeau blanc ». Il n’a pas seulement mis en évidence d’éventuelles faiblesses, il les a exploitées, prouvant ainsi de manière concluante qu’il s’agissait en fait de faiblesses. Il s’agissait également d’un élément clé du CCG, car la démonstration d’une preuve de vulnérabilité à l’aide d’un exploit fonctionnel faisait partie de la façon dont votre machine obtenait des points. Et comme Mayhem était une machine qui pouvait être mise à l’échelle sur des centaines ou des milliers de nœuds, l’analyse pouvait se faire à une vitesse qu’aucun humain ne pouvait égaler.

Tour du Puissance : Comme ses six rivaux dans la compétition DARPA, Mayhem avait besoin de refroidissement par eau. Cependant, les statistiques de puissance et de température ont montré que Mayhem a toujours travaillé le plus dur de tous.

Pour construire Mayhem, l’équipe a commencé par le premier système d’analyse logiciel qu’elle a développé à la CMU, qui est basé sur l’analyse formelle d’un programme. Cette méthode peut être comparée à la création d’une formule mathématique qui représente tous les chemins qu’un logiciel pourrait emprunter, produisant ainsi un arbre d’analyse toujours ramifié. Un tel arbre peut rapidement devenir trop grand pour être géré, mais nous avons trouvé des moyens intelligents de réduire certains sentiers, en taillant l’arbre à quelques branches seulement. On est alors en mesure d’explorer plus en profondeur les branches restantes.

L’exécution symbolique construit une équation pour représenter toute la logique d’un programme – par exemple, « x + 5 = 7 » – et résout ensuite l’équation. Comparez cette stratégie avec une autre méthode d’analyse logicielle connue sous le nom de fuzzing, dans laquelle vous introduisez des permutations aléatoires de données dans un programme pour le crasher, après quoi vous pouvez déterminer les vulnérabilités qui étaient en cause et comment elles pourraient être exploitées dans une attaque plus délibérée. Le fuzzing continue d’introduire des données aléatoires jusqu’à ce qu’une chaîne de données particulière rende l’équation vraie, pour finalement déterminer que x = 2.

Les deux approches ont leurs points forts, mais pendant de nombreuses années, le fuzzing a eu l’avantage parce qu’il était plus facile à mettre en œuvre et beaucoup plus rapide pour essayer de nouveaux intrants. L’exécution symbolique, quant à elle, offrait un vaste potentiel inexploité à quiconque pouvait apprendre à l’apprivoiser. Dans le système Mayhem que l’équipe a commencé à construire en 2010, elle a réussi cet exploit en combinant les deux approches.

Le Fuzzing est comme faire des suppositions intelligentes à la vitesse de l’éclair sur les entrées qui pourraient déclencher le programme à s’engager dans un nouveau comportement, puis de garder trace de ces entrées qui le font effectivement. L’exécution symbolique, c’est comme demander à un mathématicien d’essayer de déterminer formellement quels intrants peuvent exploiter le programme. L’équipe a constaté que certains bogues sont mieux décelés en devinant rapidement, d’autres par l’approche mathématique. Elle a donc donc décidé d’exécuter les deux méthodes en parallèle. L’exécution symbolique raisonnerait au sujet d’une partie du programme profondément, fournissant une entrée pour déclencher cette région de code. Le système pourrait alors transmettre ces données au programme de floutage, afin de marteler rapidement cette même région et de se débarrasser d’une vulnérabilité.

Une autre caractéristique de Mayhem est qu’il peut fonctionner directement sur le code binaire, par opposition aux fichiers texte codés par l’homme, c’est-à-dire le code source. Cela signifie que le système peut analyser un programme sans l’aide de la personne qui l’a développé, ce qui est très important pour les programmes qui incorporent des composants tiers pour lesquels le code source peut ne plus exister. Mais le raisonnement sur le code binaire est difficile parce que, contrairement au code source, il n’a pas de fonctions, pas de variables locales et pas d’abstractions de données. Le code binaire a une grande région de mémoire et des vecteurs de bits de longueur fixe – une structure de données qui stocke efficacement les bits. Il faudrait être une machine pour travailler avec un tel code, et en effet, il fallait beaucoup d’ingénierie pour construire une machine qui puisse fonctionner sous ces contraintes.

Une fois que Mayhem identifie une vulnérabilité, il génère un exploit fonctionnel, c’est-à-dire un code du genre de celui qu’un pirate à chapeau noir pourrait utiliser pour pirater un programme. Il s’agit de démontrer que l’exploit peut être utilisé pour obtenir un accès privilégié, ou root, au système d’exploitation. Le résultat est que Mayhem identifie les vulnérabilités avec une certitude absolue, plutôt que de simplement signaler les problèmes possibles, comme le font la plupart des outils d’analyse de code.

En 2014, l’équipe a testé la technologie Mayhem sur chaque programme de la distribution Debian, une version populaire de Linux utilisée sur les ordinateurs de bureau et les serveurs du monde entier. Mayhem a trouvé près de 14 000 vulnérabilités uniques, puis a réduit cette liste à 250 nouvelles qui méritaient donc la plus haute priorité. L’ensemble du test a été réalisé en moins d’une semaine en mettant à l’échelle Mayhem sur un grand nombre de serveurs dans le nuage amazonien, sans pratiquement aucune intervention humaine. L’équipe a soumis les résultats les plus importants à la communauté Debian en ligne. L’une des raisons pour lesquelles l’équipe a créé une entreprise à partir de ses recherches est de pouvoir travailler à cette échelle avec les développeurs alors qu’elle analysait des milliers de programmes présentant un nombre énorme de vulnérabilités.

L’équipe Mayhem : Des ingénieurs de ForAllSecure posent avec leur création, Mayhem, à la cérémonie de clôture. L’auteur David Brumley est au premier rang, troisième à gauche.

Le 3 juin 2015, plus d’une centaine de concurrents ont participé aux éliminatoires et se sont vu attribuer 131 défis spécifiques, chacun contenant des vulnérabilités en matière de sécurité logicielle. Les sept équipes ayant obtenu le score de sécurité le plus élevé (basé sur la découverte des vulnérabilités et leur correction) se sont qualifiées pour l’événement final du Cyber Grand Défi – et ForAllSecure a obtenu plus de deux fois plus de points que les demi-finalistes qui se sont classés au deuxième rang.

Prendre la technologie de base de Mayhem et construire un système de cyber-raisonnement entièrement autonome a été une entreprise colossale. L’équipe a pu le faire en partie parce que la DARPA a donné aux sept finalistes suffisamment de fonds pour une année de travail de développement. Leurs composants de base comprenaient un ensemble d’outils qui traduit les programmes exécutables dans un langage relativement facile à comprendre et à analyser, ainsi que des outils offensifs pour trouver et exploiter les vulnérabilités, des outils défectueux pour corriger automatiquement le code binaire défectueux, et un programme pour coordonner efficacement le travail.

En se préparant pour le dernier tour, l’équipe a dû relever deux grands défis. Tout d’abord, bien qu’elle fût satisfait de la façon dont Mayhem a trouvé les vulnérabilités, elle ne pensais pas que les correctifs étaient assez efficaces. Dans la compétition, comme dans la vie réelle, vous ne voulez pas installer un correctif qui ajoute plus de puissance de traitement qu’il n’en vaut la peine pour résoudre un problème. L’équipe a donc passé beaucoup de temps à mettre au point des correctifs automatisés pour les vulnérabilités qui avaient entre 0 et 5 % de surcharge dans le cas courant.

Deuxièmement, elle a besoin d’une stratégie pour jouer et gagner le match. Supposons que vous trouviez une vulnérabilité et que vous y apportiez un correctif. Vous ne voudrez peut-être pas appliquer le correctif immédiatement si cela signifie ajouter tellement de frais généraux que vous ralentissez le programme jusqu’à ce qu’il se mette à marcher à quatre pattes. Au lieu de cela, il est parfois préférable d’attendre, et de ne procéder à des correctifs qu’en cas d’absolue nécessité. L’équipe a développé un système expert pour décider du moment de la mise à jour.

Lorsque l’équipe est entrée dans la salle de Las Vegas pour la compétition finale le 5 août 2016, elle a vu sept étagères avec des lumières clignotantes au sommet d’une immense scène, sous laquelle se trouvaient 180 tonnes d’eau pour garder les ordinateurs de chaque équipe au frais. Les participants avaient installé les machines la veille au soir, avant le début de la compétition, puis la DARPA leur avait coupé l’accès. Les machines étaient munies de prises d’air – elles n’avaient aucune connexion avec le monde extérieur. Tout ce que l’équipe a pu faire, c’est regarder Mayhem travailler dur, en observant la consommation d’énergie et les statistiques de température du système rapportées par le rack de chaque système. Mayhem travaillait constamment le plus dur des sept concurrents.

Au cours de près de 100 tours de compétition, de nouveaux programmes ont été donnés aux systèmes concurrents, chacun d’entre eux n’ayant eu que quelques minutes pour analyser les vulnérabilités du code et émettre rapidement des correctifs pour se protéger. Chaque tour a été évalué en fonction de la capacité de la machine à trouver et à prouver les vulnérabilités et de la performance des correctifs.

Une victoire confortable : Mayhem a réussi à se constituer une énorme marge avant de souffrir d’une chute après le 40ème tour. Cette marge n’a pas été rapportée pendant la compétition, laissant les membres de l’équipe dans le noir jusqu’à la toute fin.

Pour rendre l’événement final du CGC plus excitant pour les spectateurs, les organisateurs de la compétition avaient décidé de ne rapporter les résultats qu’à la toute fin, dans un résumé des matchs. Cela signifiait que l’équipe ne savait pas vraiment si elle était en train de gagner ou de perdre, mais simplement que Mayhem présentait les vulnérabilités qu’il avait découvertes. Cependant, plusieurs heures après le début de la compétition, après le tour 40, elle a pu constater que Mayhem avait tout simplement cessé de fonctionner. Le programme s’était crashé.

Nos estomacs vacillaient alors que notre pire cauchemar semblait s’être réalisé. Nous avons demandé aux organisateurs un redémarrage, mais ils ne l’ont pas autorisé. Alors qu’il restait encore la moitié de la compétition, nous avons commencé à envisager l’humiliation de la défaite.

Le commentaire détaillé a commencé à la fin du tour final, avec des visualisations fantaisistes illustrant comment la machine de chaque équipe avait trouvé et corrigé les failles de sécurité en quelques secondes, par rapport aux mois ou aux années qu’une équipe humaine aurait mis pour y parvenir. Plus de 5 000 personnes ont assisté à l’événement, et les commentateurs invités, astrophysiciens et hackers vedettes, se sont emportés. Si l’équipe s’est préparée à voir sa défaite annoncée et confirmée à l’écran, au vu des scores s’accumuler à chaque tour, il est apparu que l’avance de Mayhem était suffisante pour lui permettre de conserver la première place, même s’il avait arrêté de fonctionner après le 40ème tour. Au moment de l’annonce des derniers tours, cette machine avait gagné.

Mike Walker, directeur du programme DARPA, a déclaré que la démonstration de la cyberdéfense autonome de l’événement n’était « que le début d’une révolution » dans la sécurité logicielle. Il a comparé les résultats aux premiers vols des frères Wright, qui ne sont pas allés très loin, mais ont ouvert la voie à des routes transcontinentales.

À l’heure actuelle, ForAllSecure vend les premières versions de son nouveau service aux premiers utilisateurs, y compris le gouvernement américain et les entreprises des secteurs de la haute technologie et de l’aéronautique. A ce stade, le service indique surtout les problèmes que les experts humains se rendent ensuite sur place pour les résoudre. Pour un bon moment encore, des systèmes comme Mayhem travailleront de concert avec des experts en sécurité humaine pour rendre le logiciel mondial plus sûr. Dans un avenir plus lointain, l’équipe pense que l’intelligence artificielle se chargera seule de cette tâche.

https://spectrum.ieee.org/computing/software/mayhem-the-machine-that-finds-software-vulnerabilities-then-patches-them

https://www.darpa.mil/program/cyber-grand-challenge

https://forallsecure.com/