Salta al contenuto principale
Crowdstrike et Microsoft 19 juillet 2024
Incident CrowdStrike - Causes et enseignements

Maintenant que le soufflet est retombĂ©, prenons un peu de recul sur l'incident CrowdStrike qui a affectĂ© 8,5 millions de machines le 19 juillet 2024. Pour mĂ©moire, le dĂ©ploiement de la mise Ă  jour dĂ©fectueuse n'a durĂ© que 79 minutes ... qui vont certainement coĂ»ter très cher ! 

Avant toute chose, ce que l'on peut noter c'est que les professionnels et les bonnes volontés qui ont été mobilisés pour répondre à l'incident n'ont pas failli à leur tâche. Mais comment expliquer cette ampleur ? Ce que l'on sait, c'est que la panne mondiale du 19 juillet dernier est le résultat d'une mise à jour.

La mise à jour en question impliquait un fichier de configuration connu sous le nom de Channel File 291, conçu pour cibler de nouveaux pipes utilisés par les 2C (command & Control) des attaquants. Cette mise à jour semble avoir été “malformée", en tout cas, elle est passée à travers les vérifications d'usage et a déclenché une erreur logique dans le pilote de CrowdStrike, ce qui a provoqué le tant redouté écran bleu de la mort sur les systèmes Windows touchés.

CrowdStrike a rapidement identifié le problème et déployé un correctif en quelques heures, fourni des conseils techniques détaillés, y compris des étapes de mitigation et des outils pour identifier les hôtes impactés.

Le terme correctif doit ĂŞtre pris avec des pincettes car il s'agit d'une correction de la mise Ă  jour dĂ©fectueuse, pas des machines en pannes. Pour les 8,5 millions de Pc touchĂ©s, ce sont les admins, les responsables IT, etc qui ont rĂ©parĂ© chaque système en les redĂ©marrant en mode sans Ă©chec, puis trouvĂ© le fichier de mise Ă  jour corrompue Channel 291 dans le dossier CrowdStrike pour le supprimer et redĂ©marrer.

 

Pour comprendre pourquoi et comment une mise à jour défectueuse peut provoquer un tel crash, il faut d'abord distinguer les notions de mode utilisateur et de mode noyau dans Windows :

Le système d'exploitation de Windows utilise un système d'anneaux pour sĂ©parer le code en deux zones distinctes : le mode noyau pour le système d'exploitation lui-mĂŞme et le mode utilisateur oĂą les applications s'exĂ©cutent. 

Le mode noyau effectue des tâches telles que la communication avec le matĂ©riel et les pĂ©riphĂ©riques, la gestion de la mĂ©moire, la planification des threads, et toutes les fonctions essentielles que le système d'exploitation fournit. 

En thĂ©orie, le code des applications ne s'exĂ©cute jamais dans le noyau et le code noyau ne s'exĂ©cute jamais en mode utilisateur. Le mode noyau est plus privilĂ©giĂ©, ce qui signifie qu'il peut voir toute la carte mĂ©moire du système et ce qui s'y trouve sur n'importe quelle page physique et Ă  tout moment. En mode utilisateur vous ne voyez que les pages de la carte mĂ©moire que le noyau vous laisse voir.

Si une application a besoin d'un service fourni par le noyau, elle ne sera pas autorisée à s'exécuter directement dans le noyau. L'application "demande" au noyau (par le biais d'un thread) et attend la réponse. Un thread côté noyau examinera alors les arguments spécifiés, validera tout et exécutera le code noyau requis. Une fois terminé, le thread noyau renverra les résultats au thread utilisateur.

En cas de dysfonctionnement en mode utilisateur et noyau, la diffĂ©rence de traitement saute au yeux. Lorsqu'un code d'application plante, l'application plante et l'on a un message d'erreur. Lorsque du code dans le noyau plante, le système entier plante. Il crash parce qu'il le doit, pour se protĂ©ger. Par exemple si le noyau dĂ©tecte qu'il est sur le point de libĂ©rer de la mĂ©moire qui a dĂ©jĂ  Ă©tĂ© libĂ©rĂ©e, il va interprĂ©ter cette anomalie comme une dĂ©faillance critique (c'est une condition inattendue) et Windows va afficher un Ă©cran bleu, parce que s'il laisse le code s'exĂ©cuter, les consĂ©quences peuvent ĂŞtre pires pour l'OS et les fichiers enregistrĂ©s sur la machine (dont ceux des utilisateurs).

Ce n'est pas un mĂ©canisme spĂ©cifique Ă  Windows. C'est valable pour tous les systèmes d'exploitation comme Linux et macOS aussi. Cependant MacOS plante moins et l'Ă©cran est... rose, on voit pourquoi un peu plus loin. 

Peu de choses s'exĂ©cutent dans le noyau. Les seules choses qui vont "en thĂ©orie" dans le noyau sont celles qui doivent l'ĂŞtre, comme le planificateur de threads et le gestionnaire de tâches, et les fonctionnalitĂ©s qui doivent accĂ©der au matĂ©riel, comme un pilote de pĂ©riphĂ©rique qui parle Ă  un processeur graphique. Ainsi, la totalitĂ© de ce qui est exĂ©cutĂ© en mode noyau se rĂ©sume vraiment au système d'exploitation lui-mĂŞme et aux pilotes de pĂ©riphĂ©riques, en thĂ©orie.

L'EDR Falcon de Crowdstrike est une (bonne) solution de sĂ©curitĂ© avancĂ©e qui contrairement Ă  un antivirus classique ne va pas simplement chercher des dĂ©finitions de fichiers. La solution de CrowdStrike analyse un large Ă©ventail de comportements d'applications pour essayer de dĂ©tecter de manière proactive de nouvelles menaces avant qu'elles ne soient catĂ©gorisĂ©es et rĂ©pertoriĂ©es. 

Et pour être capable de surveiller le comportement des applications à partir d'un emplacement sûr, une partie du code de l'EDR est dans le noyau.

CrowdStrike a donc écrit un pilote de périphérique même s'il n'y a pas vraiment d'interaction avec un périphérique matériel. Ce bout de code a un accès complet et sans restriction aux structures de données du système et aux services dont il a besoin pour s'exécuter.

Microsoft propose la certification WHQL (Windows Hardware Quality Labs) aux éditeurs, de sorte que les pilotes certifiés WHQL sont signés avec un certificat numérique car considérés robustes et fiables. Tant que le pilote lui-même ne change jamais, le certificat reste valable.

En théorie toujours, à chaque fois qu'une nouvelle menace se présente un éditeur devrait réécrire le pilote et repasser la certification, ce qui implique des délais. Ce n'est pas acceptable pour une solution de sécurité qui doit être maintenue à jour en temps réel pour offrir la protection la plus haute à ses clients.

Pour contourner ces dĂ©lais, CrowdStrike peut inclure des fichiers de dĂ©finition qui sont traitĂ©s par le pilote mais non rĂ©ellement inclus avec lui. C'est ce qui a Ă©tĂ© envoyĂ© dans la mise Ă  jour. 

Ainsi, lorsque le pilote CrowdStrike est sollicitĂ©, il accède Ă  un dossier sur la machine Ă  la recherche de ces fichiers de dĂ©finition dynamique pour exĂ©cuter son code, comme par exemple le fichier Channel File 291 rĂ©cupĂ©rĂ© par 8,5M de Pc le 19 juillet dernier.  Le contenu de ces fichiers n'est pas connu mais il est rĂ©cupĂ©rĂ© dans le cadre de l'exĂ©cution du pilote dans le noyau Windows. C'est lĂ  que se pose problème. 

La cause prĂ©cise du bug, n'a pas Ă©tĂ© rĂ©vĂ©lĂ©e. Est-ce que ce fichier contient des bouts de code, des variables qui vont ensuite s’exĂ©cuter dans le noyau ?  En revanche, on peut s'interroger sur la manière dont le pilote Crowdstrike gère et traite les mises Ă  jour, comment les arguments qui sont passĂ©s dans le noyau sont vĂ©rifiĂ©s en amont.

On peut aussi tout autant s'interroger sur le fait que Windows n'est pas rĂ©silient en cas d'Ă©chec de chargement d'un pilote. Pourquoi ne pas essayer de dĂ©marrer sans lui la prochaine fois ? 

En fait, Windows propose un certain nombre d'options comme par exemple dĂ©marrer avec la dernière configuration valide connue. Cependant, le problème est que le pilote CrowdStrike est un pilote de dĂ©marrage, s’exĂ©cutant en mode noyau. En d'autres termes, il doit ĂŞtre installĂ© pour dĂ©marrer le système d'exploitation... c'est le piège.

La plupart des pilotes de démarrage sont inclus dans les packages de pilotes qui sont fournis avec Windows, et l'OS les installe automatiquement.

L'opĂ©ration de remĂ©diation dans le cas Crowdstrike n'est pas complexe mais nĂ©cessite un accès physique Ă  la machine (l'opĂ©ration est bien dĂ©crite sur l'internet) pour la redĂ©marrer en mode sans Ă©chec, uniquement avec le nombre minimal de pilotes Windows requis pour le système fonctionne. 

 

De prĂ©cĂ©dents problèmes de mise Ă  jour avec Linux : 

En avril 2024 une mise Ă  jour CrowdStrike avait dĂ©jĂ  affectĂ© les clients utilisant la distribution Debian de Linux. La mise Ă  jour a provoquĂ© le plantage de ces systèmes et les a empĂŞchĂ©s de redĂ©marrer normalement. Le problème a Ă©tĂ© reconnu par CrowdStrike le lendemain, mais il a fallu des semaines pour dĂ©terminer la cause exacte et mettre en Ĺ“uvre un correctif. 

Un autre problème similaire est survenu un mois plus tard, le 13 mai, cette fois affectant la distribution Rocky Linux. Ces serveurs ont connu des blocages après la mise Ă  jour vers Rocky Linux 9.4. Ce qui s’est passĂ© Ă©tait prĂ©visibles, sauf qu'aujourd'hui personne ne fait le malin en dĂ©clarant qu'il avait prĂ©venu tout le monde.   

 

Tiens, Apple est absent de la liste : 

Curieusement, les machines Apple sont absentes de la liste, pourtant Crowdstrike fournit des solutions de sĂ©curitĂ© pour Mac OS via sa plateforme Falcon Plus. Pourquoi ?  Falcon pour Mac OS n'installe pas d'extensions de noyau comme c'est le cas sur Windows. 

Apple a complètement abandonnĂ© l'utilisation des extensions de noyau, obligeant les Ă©diteurs de solution de sĂ©curitĂ© Ă  utiliser les extension systèmes fournies par la marque Ă  la pomme. En d'autres termes Crowdstrike n'a pas le choix, l'accès au noyau de Mac OS n'est pas permis. De plus, aucune institution, aucun gendarme de la concurrence n’a obligĂ© Apple Ă  ouvrir son OS qui par dĂ©finition est un Ă©cosystème fermĂ©. 

 

Microsoft responsable ou pas ?

Pas vraiment. Chez Microsoft comme chez CrowdStrike on est bien conscient des risques lorsqu'on exĂ©cute du code en mode noyau. Le noyau du système d'exploitation c'est son cĹ“ur, le niveau le plus bas et Ă©lĂ©mentaire. 

Une des principales fonction du noyau d’un OS est d’effectuer l’interaction entre les programmes, l’utilisateur et le matériel. Le matériel d'un Pc fonctionne en général à partir de pilotes (drivers) qu’un fabriquant peut fournir.

On peut se demander pourquoi Microsoft a autorisĂ© CrowdStrike Ă  exĂ©cuter du code au sein du noyau. Cette solution nĂ©cessite-t-elle une intĂ©gration profonde Ă  ce point ? Eh bien oui, les solutions de sĂ©curitĂ© tendent Ă  s'installer au plus bas niveau possible pour mieux surveiller les menaces, CrowStrike n'est pas une exception. 

Un peu de recherche historique nous montre qu'Ă  l'origine le noyau de Windows n'Ă©tait pas ouvert. Par exemple, les pilotes graphiques ne s'exĂ©cutaient pas en mode noyau. Aujourd'hui ce n'est plus le cas, pour des raisons de performance les pilotes vidĂ©o ont Ă©tĂ© dĂ©placĂ©s au niveau du noyau. 

Mais le trajet a aussi été effectué en sens inverse. Par exemple, à l'origine, les pilotes d'imprimantes étaient dans le noyau Windows. Seulement, les imprimantes sont devenues complexes, connectées en réseau, accessibles depuis l'extérieur, donc risquées. Le modèle de pilote d'imprimante a été déplacé en mode utilisateur pour rendre Windows beaucoup plus robuste et stable.

 

Donc la faute à... la Commission Européenne ?

En 2009, la firme de Redmond avait tentĂ© de verrouiller l'accès Ă  son système d'exploitation mais la commission EuropĂ©enne en a dĂ©cidĂ© autrement. 

Selon Microsoft, un accord d'inter-opĂ©rabilitĂ© imposĂ© par la Commission europĂ©enne en 2009 pourrait avoir conduit l'Ă©diteur de Windows Ă  ouvrir ses technologies, ce qui a permis Ă  un partenaire comme CrowdStrike de provoquer la panne du 19 juillet dernier. 

Il y a bien eu un accord en 2009 et conformément aux conditions fixées et Microsoft a été amené à fournir aux éditeurs de logiciels de sécurité tiers l'accès aux API utilisées par ses produits de sécurité dans les systèmes d'exploitation Windows Client et Server.

L'EU n'a pas trouvé d'accord avec Apple et Google mais il faut rappeler que la part de marché des systèmes d'exploitation de Microsoft en 2009 était de plus de 95 %. Ça a bien changé depuis.

Quoiqu'il en soit, après avoir rappelĂ© que cet accord de 2009 avec l'EU Ă©tait une des raisons de l'incident, Microsoft semble avoir nuancĂ© sa position. Surement que pointer le doigt vers l'EU (alors que Microsoft n'est pas Ă  priori responsable) n'est pas très judicieux. 

 

Conclusion et enseignements pour l'avenir :

L'événement du 19 juillet 2024 n'est pas anodin. En prenant un peu de recul on a vu que plusieurs facteurs favorable étaient en place pour qu'il survienne (Monopole, architecture, performance, compétition, régulation...), sans compter pour celui ou celle qui observe le marché de la tech, un contexte de vagues de licenciements massifs, et cela depuis plusieurs mois.

Dans le cas prĂ©sent, jeter l'opprobre sur Microsoft est injuste. L'incident a faussement Ă©tĂ© attribuĂ© Ă  Microsoft le jour mĂŞme. C'est une mise Ă  jour de Crowdstrike qui est Ă  l'origine de la pane sur 8,5 Millions de machines. Pas de mise Ă  jour, pas de pane, c'est le fait gĂ©nĂ©rateur. De plus la firme de Redmond a bien Ă©tĂ© obligĂ©e par l'UE d'ouvrir son système il y a 15 ans, alors qu'elle avait la mĂŞme position qu'Apple. 

Blâmer Crowdstrike est tout aussi injuste. La majoritĂ© des solutions de sĂ©curitĂ© sont installĂ©es en bas niveau, cet incident aurait pu survenir chez un autre Ă©diteur et concurrent.  

NĂ©anmoins, on peut tout de mĂŞme s'interroger sur les contrĂ´les et les vĂ©rifications qui ont Ă©tĂ© effectuĂ©es avant de distribuer la mise Ă  jour. 

En effet, il ne s'agit pas d'une anomalie exotique sur quelques machines ayant une configuration particulière. C'est l'ensemble des postes clients de la solution qui ont Ă©tĂ© affectĂ©s. La question de la vĂ©rification (et non pas par des automates) et des tests unitaires rĂ©alisĂ©s en amont est toute lĂ©gitime. Manifestement, ils ont fait dĂ©faut.  

Les Ă©diteurs de sĂ©curitĂ© Ă©voluent dans un marchĂ© très concurrentiel, ĂŞtre le premier Ă  disposer d'une solution Ă  jour, proactive et en temps rĂ©el contre les menaces est un avantage compĂ©titif. Cette compĂ©tition pousse les Ă©diteurs Ă  confondre vitesse et prĂ©cipitation. 

Au niveau des Ă©diteurs et de Microsoft, il y a surement beaucoup de leçons Ă  tirer de cet incident. Certes, Microsoft s'est fait un peu tordre le bras pour ouvrir son système d'exploitation, mais les conditions d'accès au noyau devraient (et vont certainement) ĂŞtre revues. Microsoft peut revoir son architecture noyau, ses API mais ça risque ĂŞtre complexe car beaucoup de produits partenaires et aussi de Microsoft ont des intĂ©grations de bas niveau. L’écosystème Windows est beaucoup plus vaste que celui de ses concurrents et il y a plus de chances que l’éditeur pose de nouvelles conditions techniques Ă  ses partenaires. 

Des alternatives techniques dĂ©jĂ  testĂ©es vont Ă©merger pour contourner cet accès au noyau tout en essayant d'en conserver les avantages de sĂ©curitĂ© et de performance, tant du cĂ´tĂ© de Windows que des Ă©diteurs. CrowdSrike propose bien sur Mac des solutions qui fonctionnent sans accès bas niveau, ce qui permet d’éviter le crash du système.  

CĂ´tĂ© rĂ©glementaire, il y a peut-ĂŞtre quelque chose Ă  revoir, le paysage de 2009 Ă  bien Ă©voluĂ© en 15 ans et les OS ouverts Ă  ce point prĂ©sentent un rĂ©el risque. De plus, les règles ne sont pas les mĂŞmes pour tout le monde. 

Enfin, on peut souligner que Microsoft propose sur ces OS une clé de récupération permettant de redémarrer un Pc qui ne boot pas. Cela aurait permis de gagner du temps, Mais combien de DSI l'avaient mise en œuvre avant l’incident ?

Ultimement, d'aucun rappelle Ă  envie que l'on ne fait pas de mise Ă  jour un vendredi. Oui mais voilĂ  en 2024, la mise Ă  jour d'une solution de sĂ©curitĂ© comme un EDR si l'on veut rester protĂ©gĂ©, ça ne fonctionne pas comme ça. 

Quoiqu'il en soit, le fait de constater qu'une panne sur 8,5 Millions de Pc dans le monde suffit pour mettre Ă  l'arrĂŞt des pans entiers de l'Ă©conomie, de l'industrie et certains services Ă©tatiques, doit bien faire rĂ©flĂ©chir et amener Ă  tirer quelques enseignements sur nos architectures, la fiabilitĂ© technique, la rĂ©silience et la sĂ©curitĂ© de la sĂ©curitĂ©. 

Les assureurs seront également amenés à réfléchir sur le sujet, mais cela fera l'objet d'un prochain papier.