
Le 19 juillet 2024, une panne informatique mondiale a touché des entreprises, des aéroports et des médias à travers le monde. Microsoft a confirmé qu'elle était consciente de ces problèmes, mais de nombreux experts en cybersécurité ont indiqué que la source potentielle du problème était l'entreprise de cybersécurité CrowdStrike, qui fournit une surveillance et une protection contre les cyberattaques à de nombreuses entreprises de premier plan. Les écrans bleus de la mort ont perturbé le fonctionnement normal des machines Windows, affichant le message : “Recovery: It looks like Windows didn’t load correctly.”
Plus de 1 000 vols ont été annulés, principalement dans le secteur du transport aérien. Des aéroports tels que Hong Kong International Airport, l’aéroport de Berlin, l’aéroport de Zurich et l’aéroport de Budapest ont été touchés. La compagnie aérienne Ryanair a signalé des problèmes de réservation et d’enregistrement. De plus, les systèmes de réservation de Cathay Pacific, Hong Kong Express et Hong Kong Airlines sont restés indisponibles pendant plusieurs heures, entraînant des retards et des désagréments pour les voyageurs.
L’entreprise de cybersécurité américaine CrowdStrike a reconnu être à l’origine de ces problèmes. Le directeur général de CrowdStrike, George Kurtz, a confirmé qu'un « défaut » dans une mise à jour de contenu pour les hôtes Windows était à l'origine de la panne, et Kurtz a exclu une cyberattaque. Il a ajouté que l'entreprise était en train de déployer un correctif et que les hôtes Mac et Linux n'étaient pas affectés.
Voici l'analyse technique de Microsoft de cet incident, tout en étant partageant les meilleures pratiques en matière de sécurité Windows :
Rapport d'incident : Les meilleures pratiques en matière de sécurité Windows pour l'intégration et la gestion des outils de sécurité
Windows est une plateforme ouverte et flexible utilisée par de nombreuses entreprises parmi les plus importantes au monde pour des cas d'utilisation à haute disponibilité où la sécurité et la disponibilité ne sont pas négociables.
Pour répondre à ces besoins :
- Windows offre une gamme de modes d'exploitation parmi lesquels les clients peuvent choisir. Il est notamment possible de limiter l'exécution aux seuls logiciels et pilotes approuvés. Cela permet d'améliorer la sécurité et la fiabilité en faisant fonctionner Windows dans un mode plus proche des téléphones mobiles ou des appareils.
- Les clients peuvent opter pour les fonctions intégrées de surveillance et de détection de la sécurité qui sont incluses dans Windows. Ils peuvent également choisir de remplacer ou de compléter cette sécurité par un large éventail de choix provenant d'un écosystème ouvert et dynamique de fournisseurs.
Dans ce billet de blog, nous examinons la récente panne de CrowdStrike et fournissons un aperçu technique de la cause première. Nous expliquons également pourquoi les produits de sécurité utilisent aujourd'hui des pilotes en mode noyau et les mesures de sécurité que Windows offre aux solutions tierces. En outre, nous expliquons comment les clients et les fournisseurs de solutions de sécurité peuvent mieux exploiter les capacités de sécurité intégrées de Windows pour améliorer la sécurité et la fiabilité. Enfin, nous donnons un aperçu de la manière dont Windows améliorera l'extensibilité des futurs produits de sécurité.
CrowdStrike a récemment publié une analyse préliminaire de la panne. Dans son billet de blog, CrowdStrike décrit la cause première comme un problème de sécurité de la mémoire, en particulier une violation d'accès hors limites en lecture dans le pilote CSagent. Nous utilisons le débogueur de noyau Microsoft WinDBG et plusieurs extensions qui sont disponibles gratuitement pour tout le monde afin d'effectuer cette analyse. Les clients qui disposent de fichiers de crash peuvent reproduire nos étapes à l'aide de ces outils.
Sur la base de l'analyse par Microsoft des fichiers de crash du noyau Windows Error Reporting (WER) relatifs à l'incident, nous observons des schémas de crash globaux qui reflètent ceci :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | FAULTING_THREAD: ffffe402fe868040 READ_ADDRESS: ffff840500000074 Paged pool MM_INTERNAL_CODE: 2 IMAGE_NAME: csagent.sys MODULE_NAME: csagent FAULTING_MODULE: fffff80671430000 csagent PROCESS_NAME: System TRAP_FRAME: ffff94058305ec20 -- (.trap 0xffff94058305ec20) .trap 0xffff94058305ec20 NOTE: The trap frame does not contain all registers. Some register values may be zeroed or incorrect. rax=ffff94058305f200 rbx=0000000000000000 rcx=0000000000000003 rdx=ffff94058305f1d0 rsi=0000000000000000 rdi=0000000000000000 rip=fffff806715114ed rsp=ffff94058305edb0 rbp=ffff94058305eeb0 r8=ffff840500000074 r9=0000000000000000 r10=0000000000000000 r11=0000000000000014 r12=0000000000000000 r13=0000000000000000 r14=0000000000000000 r15=0000000000000000 iopl=0 nv up ei ng nz na po nc csagent+0xe14ed: fffff806`715114ed 458b08 mov r9d,dword ptr [r8] ds:ffff8405`00000074=???????? .trap Resetting default scope STACK_TEXT: ffff9405`8305e9f8 fffff806`5388c1e4 : 00000000`00000050 ffff8405`00000074 00000000`00000000 ffff9405`8305ec20 : nt!KeBugCheckEx ffff9405`8305ea00 fffff806`53662d8c : 00000000`00000000 00000000`00000000 00000000`00000000 ffff8405`00000074 : nt!MiSystemFault+0x1fcf94 ffff9405`8305eb00 fffff806`53827529 : ffffffff`00000030 ffff8405`af8351a2 ffff9405`8305f020 ffff9405`8305f020 : nt!MmAccessFault+0x29c ffff9405`8305ec20 fffff806`715114ed : 00000000`00000000 ffff9405`8305eeb0 ffff8405`b0bcd00c ffff8405`b0bc505c : nt!KiPageFault+0x369 ffff9405`8305edb0 fffff806`714e709e : 00000000`00000000 00000000`e01f008d ffff9405`8305f102 fffff806`716baaf8 : csagent+0xe14ed ffff9405`8305ef50 fffff806`714e8335 : 00000000`00000000 00000000`00000010 00000000`00000002 ffff8405`b0bc501c : csagent+0xb709e ffff9405`8305f080 fffff806`717220c7 : 00000000`00000000 00000000`00000000 ffff9405`8305f382 00000000`00000000 : csagent+0xb8335 ffff9405`8305f1b0 fffff806`7171ec44 : ffff9405`8305f668 fffff806`53eac2b0 ffff8405`afad4ac0 00000000`00000003 : csagent+0x2f20c7 ffff9405`8305f430 fffff806`71497a31 : 00000000`0000303b ffff9405`8305f6f0 ffff8405`afb1d140 ffffe402`ff251098 : csagent+0x2eec44 ffff9405`8305f5f0 fffff806`71496aee : ffff8405`afb1d140 fffff806`71541e7e 00000000`000067a0 fffff806`7168f8f0 : csagent+0x67a31 ffff9405`8305f760 fffff806`7149685b : ffff9405`8305f9d8 ffff8405`afb1d230 ffff8405`afb1d140 ffffe402`fe8644f8 : csagent+0x66aee ffff9405`8305f7d0 fffff806`715399ea : 00000000`4a8415aa ffff8eee`1c68ca4f 00000000`00000000 ffff8405`9e95fc30 : csagent+0x6685b ffff9405`8305f850 fffff806`7148efbb : 00000000`00000000 ffff9405`8305fa59 ffffe402`fe864050 ffffe402`fede62c0 : csagent+0x1099ea ffff9405`8305f980 fffff806`7148edd7 : ffffffff`ffffffa1 fffff806`7152e5c1 ffffe402`fe864050 00000000`00000001 : csagent+0x5efbb ffff9405`8305fac0 fffff806`7152e681 : 00000000`00000000 fffff806`53789272 00000000`00000002 ffffe402`fede62c0 : csagent+0x5edd7 ffff9405`8305faf0 fffff806`53707287 : ffffe402`fe868040 00000000`00000080 fffff806`7152e510 006fe47f`b19bbdff : csagent+0xfe681 ffff9405`8305fb30 fffff806`5381b8e4 : ffff9680`37651180 ffffe402`fe868040 fffff806`53707230 00000000`00000000 : nt!PspSystemThreadStartup+0x57 ffff9405`8305fb80 00000000`00000000 : ffff9405`83060000 ffff9405`83059000 00000000`00000000 00000000`00000000 : nt!KiStartSystemThread+0x34 |
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | 6: kd> .trap 0xffff94058305ec20 .trap 0xffff94058305ec20 NOTE: The trap frame does not contain all registers. Some register values may be zeroed or incorrect. rax=ffff94058305f200 rbx=0000000000000000 rcx=0000000000000003 rdx=ffff94058305f1d0 rsi=0000000000000000 rdi=0000000000000000 rip=fffff806715114ed rsp=ffff94058305edb0 rbp=ffff94058305eeb0 r8=ffff840500000074 r9=0000000000000000 r10=0000000000000000 r11=0000000000000014 r12=0000000000000000 r13=0000000000000000 r14=0000000000000000 r15=000000000000 000 iopl=0 nv up ei ng nz na po nc csagent+0xe14ed: fffff806`715114ed 458b08 mov r9d,dword ptr [r8] ds:ffff8405`00000074=???????? 6: kd> !pte ffff840500000074 !pte ffff840500000074 VA ffff840500000074 PXE at FFFFABD5EAF57840 PPE at FFFFABD5EAF080A0 PDE at FFFFABD5E1014000 PTE at FFFFABC202800000 contains 0A00000277200863 contains 0000000000000000 pfn 277200 ---DA--KWEV contains 0000000000000000 not valid 6: kd> ub fffff806`715114ed ub fffff806`715114ed csagent+0xe14d9: fffff806`715114d9 04d8 add al,0D8h fffff806`715114db 750b jne csagent+0xe14e8 (fffff806`715114e8) fffff806`715114dd 4d85c0 test r8,r8 fffff806`715114e0 7412 je csagent+0xe14f4 (fffff806`715114f4) fffff806`715114e2 450fb708 movzx r9d,word ptr [r8] fffff806`715114e6 eb08 jmp csagent+0xe14f0 (fffff806`715114f0) fffff806`715114e8 4d85c0 test r8,r8 fffff806`715114eb 7407 je csagent+0xe14f4 (fffff806`715114f4) 6: kd> ub fffff806`715114d9 ub fffff806`715114d9 ^ Unable to find valid previous instruction for 'ub fffff806`715114d9' 6: kd> u fffff806`715114eb u fffff806`715114eb csagent+0xe14eb: fffff806`715114eb 7407 je csagent+0xe14f4 (fffff806`715114f4) fffff806`715114ed 458b08 mov r9d,dword ptr [r8] fffff806`715114f0 4d8b5008 mov r10,qword ptr [r8+8] fffff806`715114f4 4d8bc2 mov r8,r10 fffff806`715114f7 488d4d90 lea rcx,[rbp-70h] fffff806`715114fb 488bd6 mov rdx,rsi fffff806`715114fe e8212c0000 call csagent+0xe4124 (fffff806`71514124) fffff806`71511503 4533d2 xor r10d,r10d 6: kd> db ffff840500000074 db ffff840500000074 ffff8405`00000074 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? ffff8405`00000084 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? ffff8405`00000094 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? ffff8405`000000a4 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? ffff8405`000000b4 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? ffff8405`000000c4 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? ffff8405`000000d4 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? ffff8405`000000e4 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ???????????????? |
Nous pouvons également constater que le module csagent.sys est enregistré en tant que pilote de filtre de système de fichiers couramment utilisé par les agents anti-malware pour recevoir des notifications sur les opérations de fichiers telles que la création ou la modification d'un fichier. Les produits de sécurité s'en servent souvent pour analyser tout nouveau fichier enregistré sur le disque, comme le téléchargement d'un fichier via le navigateur.
Les filtres de système de fichiers peuvent également être utilisés comme un signal pour les solutions de sécurité qui tentent de surveiller le comportement du système. CrowdStrike a indiqué sur son blog qu'une partie de la mise à jour du contenu consistait à modifier la logique du capteur en ce qui concerne les données relatives à la création de tuyaux nommés. L'API du pilote de filtrage du système de fichiers permet au pilote de recevoir un appel lorsque l'activité d'un tuyau nommé (par exemple, la création d'un tuyau nommé) se produit sur le système et pourrait permettre la détection d'un comportement malveillant. La fonction générale du pilote correspond aux informations communiquées par CrowdStrike.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 6: kd>!reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csagent Hive ffff84059ca7b000 KeyNode ffff8405a6f67f9c [SubKeyAddr] [SubKeyName] ffff8405a6f683ac Instances ffff8405a6f6854c Sim Use '!reg keyinfo ffff84059ca7b000 <SubKeyAddr>' to dump the subkey details [ValueType] [ValueName] [ValueData] REG_DWORD Type 2 REG_DWORD Start 1 REG_DWORD ErrorControl 1 REG_EXPAND_SZ ImagePath \??\C:\Windows\system32\drivers\CrowdStrike\csagent.sys REG_SZ DisplayName CrowdStrike Falcon REG_SZ Group FSFilter Activity Monitor REG_MULTI_SZ DependOnService FltMgr\0 REG_SZ CNFG Config.sys REG_DWORD SupportedFeatures f |
Déterminer la corrélation entre le fichier lui-même et la violation d'accès observée dans le crash dump nécessiterait un débogage supplémentaire du pilote à l'aide de ces outils, mais n'entre pas dans le cadre de ce billet de blog.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | !ca ffffde8a870a8290 ControlArea @ ffffde8a870a8290 Segment ffff880ce0689c10 Flink ffffde8a87267718 Blink ffffde8a870a7d98 Section Ref 0 Pfn Ref b Mapped Views 0 User Ref 0 WaitForDel 0 Flush Count 0 File Object ffffde8a879b29a0 ModWriteCount 0 System Views 0 WritableRefs 0 PartitionId 0 Flags (8008080) File WasPurged OnUnusedList \Windows\System32\drivers\CrowdStrike\C-00000291-00000000-00000032.sys 1: kd> !ntfskd.ccb ffff880ce06f6970 !ntfskd.ccb ffff880ce06f6970 Ccb: ffff880c`e06f6970 Flags: 00008003 Cleanup OpenAsFile IgnoreCase Flags2: 00000841 OpenComplete AccessAffectsOplocks SegmentObjectReferenced Type: UserFileOpen FileObj: ffffde8a879b29a0 (018) ffff880c`db937370 FullFileName [\Windows\System32\drivers\CrowdStrike\C-00000291-00000000-00000032.sys] (020) 000000000000004C LastFileNameOffset (022) 0000000000000000 EaModificationCount (024) 0000000000000000 NextEaOffset (048) FFFF880CE06F69F8 Lcb (058) 0000000000000002 TypeOfOpen |
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | 6: kd> lmDvmCSFirmwareAnalysis lmDvmCSFirmwareAnalysis Browse full module list start end module name fffff806`58920000 fffff806`5893c000 CSFirmwareAnalysis (deferred) Image path: \SystemRoot\system32\DRIVERS\CSFirmwareAnalysis.sys Image name: CSFirmwareAnalysis.sys Browse all global symbols functions data Symbol Reload Timestamp: Mon Mar 18 11:32:14 2024 (65F888AE) CheckSum: 0002020E ImageSize: 0001C000 Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4 Information from resource tables: 6: kd> lmDvmcspcm4 lmDvmcspcm4 Browse full module list start end module name fffff806`71870000 fffff806`7187d000 cspcm4 (deferred) Image path: \??\C:\Windows\system32\drivers\CrowdStrike\cspcm4.sys Image name: cspcm4.sys Browse all global symbols functions data Symbol Reload Timestamp: Mon Jul 8 18:33:22 2024 (668C9362) CheckSum: 00012F69 ImageSize: 0000D000 Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4 Information from resource tables: 6: kd> lmDvmcsboot.sys lmDvmcsboot.sys Browse full module list start end module name Unloaded modules: fffff806`587d0000 fffff806`587dc000 CSBoot.sys Timestamp: unavailable (00000000) Checksum: 00000000 ImageSize: 0000C000 6: kd> !reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csboot !reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csboot Hive ffff84059ca7b000 KeyNode ffff8405a6f68924 [ValueType] [ValueName] [ValueData] REG_DWORD Type 1 REG_DWORD Start 0 REG_DWORD ErrorControl 1 REG_EXPAND_SZ ImagePath system32\drivers\CrowdStrike\CSBoot.sys REG_SZ DisplayName CrowdStrike Falcon Sensor Boot Driver REG_SZ Group Early-Launch 6: kd> !reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csdevicecontrol !reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csdevicecontrol Hive ffff84059ca7b000 KeyNode ffff8405a6f694ac [SubKeyAddr] [VolatileSubKeyName] ffff84059ce196c4 Enum Use '!reg keyinfo ffff84059ca7b000 <SubKeyAddr>' to dump the subkey details [ValueType] [ValueName] [ValueData] REG_DWORD Type 1 REG_DWORD Start 3 REG_DWORD ErrorControl 1 REG_DWORD Tag 1f REG_EXPAND_SZ ImagePath \SystemRoot\System32\drivers\CSDeviceControl.sys REG_SZ DisplayName @oem40.inf,%DeviceControl.SVCDESC%;CrowdStrike Device Control Service REG_SZ Group Base REG_MULTI_SZ Owners oem40.inf\0!csdevicecontrol.inf_amd64_b6725a84d4688d5a\0!csdevicecontrol.inf_amd64_016e965488e83578\0 REG_DWORD BootFlags 14 6: kd> !reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csagent !reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csagent Hive ffff84059ca7b000 KeyNode ffff8405a6f67f9c [SubKeyAddr] [SubKeyName] ffff8405a6f683ac Instances ffff8405a6f6854c Sim Use '!reg keyinfo ffff84059ca7b000 <SubKeyAddr>' to dump the subkey details [ValueType] [ValueName] [ValueData] REG_DWORD Type 2 REG_DWORD Start 1 REG_DWORD ErrorControl 1 REG_EXPAND_SZ ImagePath \??\C:\Windows\system32\drivers\CrowdStrike\csagent.sys REG_SZ DisplayName CrowdStrike Falcon REG_SZ Group FSFilter Activity Monitor REG_MULTI_SZ DependOnService FltMgr\0 REG_SZ CNFG Config.sys REG_DWORD SupportedFeatures f 6: kd> lmDvmCSFirmwareAnalysis lmDvmCSFirmwareAnalysis Browse full module list start end module name fffff806`58920000 fffff806`5893c000 CSFirmwareAnalysis (deferred) Image path: \SystemRoot\system32\DRIVERS\CSFirmwareAnalysis.sys Image name: CSFirmwareAnalysis.sys Browse all global symbols functions data Symbol Reload Timestamp: Mon Mar 18 11:32:14 2024 (65F888AE) CheckSum: 0002020E ImageSize: 0001C000 Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4 Information from resource tables: 6: kd> !reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csfirmwareanalysis !reg querykey \REGISTRY\MACHINE\system\ControlSet001\services\csfirmwareanalysis Hive ffff84059ca7b000 KeyNode ffff8405a6f69d9c [SubKeyAddr] [VolatileSubKeyName] ffff84059ce197cc Enum Use '!reg keyinfo ffff84059ca7b000 <SubKeyAddr>' to dump the subkey details [ValueType] [ValueName] [ValueData] REG_DWORD Type 1 REG_DWORD Start 0 REG_DWORD ErrorControl 1 REG_DWORD Tag 6 REG_EXPAND_SZ ImagePath system32\DRIVERS\CSFirmwareAnalysis.sys REG_SZ DisplayName @oem43.inf,%FirmwareAnalysis.SVCDESC%;CrowdStrike Firmware Analysis Service REG_SZ Group Boot Bus Extender REG_MULTI_SZ Owners oem43.inf\0!csfirmwareanalysis.inf_amd64_12861fc608fb1440\0 6: kd> !reg querykey \REGISTRY\MACHINE\system\Controlset001\control\earlylaunch !reg querykey \REGISTRY\MACHINE\system\Controlset001\control\earlylaunch |
Nous pouvons exploiter la pile unique et les attributs de ce crash pour identifier les rapports de crash Windows générés par cette erreur de programmation spécifique de CrowdStrike. Il convient de noter que le nombre d'appareils ayant généré des rapports de crash est un sous-ensemble du nombre d'appareils impactés précédemment partagé par Microsoft dans notre article de blog, car les rapports de crash sont échantillonnés et collectés uniquement auprès des clients qui choisissent de télécharger leurs crashs à Microsoft. Les clients qui choisissent d'activer le partage des rapports de panne aident les fournisseurs de pilotes et Microsoft à identifier les problèmes de qualité et les pannes et à y remédier.
Nous mettons ces informations à la disposition des propriétaires de pilotes afin qu'ils puissent évaluer leur propre fiabilité via le tableau de bord analytique du Hardware Dev Center. Comme nous pouvons le voir ci-dessus, tout problème de fiabilité tel que ce problème d'accès invalide à la mémoire peut entraîner des problèmes de disponibilité généralisés s'il n'est pas associé à des pratiques de déploiement sûres. Voyons pourquoi les solutions de sécurité s'appuient sur les pilotes du noyau sous Windows.
Pourquoi les solutions de sécurité s'appuient-elles sur les pilotes du noyau ?
De nombreux fournisseurs de solutions de sécurité, tels que CrowdStrike et Microsoft, s'appuient sur une architecture de pilotes de noyau, et ce pour plusieurs raisons.
- Visibilité et application des événements liés à la sécurité
Les pilotes de noyau permettent une visibilité à l'échelle du système et la capacité de charger en début de démarrage pour détecter les menaces telles que les kits de démarrage et les kits racine qui peuvent se charger avant les applications en mode utilisateur. En outre, Microsoft fournit un ensemble riche de fonctionnalités telles que les rappels d'événements système pour la création de processus et de threads et les pilotes de filtre qui peuvent surveiller des événements tels que la création, la suppression ou la modification de fichiers. L'activité du noyau peut également déclencher des rappels pour que les pilotes décident quand bloquer des activités telles que la création de fichiers ou de processus. De nombreux fournisseurs utilisent également des pilotes pour collecter diverses informations réseau dans le noyau à l'aide de la classe de pilotes NDIS. - Performances
Les pilotes du noyau sont souvent utilisés par les fournisseurs de solutions de sécurité pour leurs avantages potentiels en termes de performances. Par exemple, l'analyse ou la collecte de données pour une activité réseau à haut débit peut bénéficier d'un pilote de noyau. Il existe de nombreux scénarios dans lesquels la collecte et l'analyse de données peuvent être optimisées pour un fonctionnement en dehors du mode noyau et Microsoft continue de s'associer à l'écosystème pour améliorer les performances et fournir les meilleures pratiques pour atteindre la parité en dehors du mode noyau. - Résistance à la falsification
Un deuxième avantage du chargement en mode noyau est la résistance à la falsification. Les produits de sécurité veulent s'assurer que leurs logiciels ne peuvent pas être désactivés par des logiciels malveillants, des attaques ciblées ou des personnes internes malveillantes, même lorsque ces attaquants ont des privilèges de niveau administrateur. Ils veulent également s'assurer que leurs pilotes se chargent le plus tôt possible afin de pouvoir observer les événements du système le plus tôt possible. C'est pour cette raison que Windows fournit un mécanisme permettant de lancer les pilotes marqués comme Early Launch Antimalware (ELAM) au début du processus de démarrage. CrowdStrike marque le pilote CSboot ci-dessus comme ELAM, ce qui lui permet de se charger au début de la séquence de démarrage.
Dans le cas général, il existe un compromis que les fournisseurs de sécurité doivent rationaliser lorsqu'il s'agit de pilotes de noyau. Les pilotes de noyau offrent les propriétés susmentionnées au détriment de la résilience. Étant donné que les pilotes de noyau s'exécutent au niveau le plus fiable de Windows, où les capacités de confinement et de récupération sont par nature limitées, les fournisseurs de sécurité doivent soigneusement équilibrer des besoins tels que la visibilité et la résistance à la falsification avec le risque d'opérer en mode noyau.
Tout code fonctionnant au niveau du noyau nécessite une validation approfondie parce qu'il ne peut pas tomber en panne et redémarrer comme une application utilisateur normale. Ce principe est universel dans tous les systèmes d'exploitation. En interne, chez Microsoft, nous avons investi dans le transfert de services Windows complexes du mode noyau vers le mode utilisateur, comme l'analyse des fichiers de police.
Il est aujourd'hui possible pour les outils de sécurité d'équilibrer la sécurité et la fiabilité. Par exemple, les fournisseurs d'outils de sécurité peuvent utiliser des capteurs minimaux fonctionnant en mode noyau pour la collecte de données et la mise en œuvre, ce qui limite l'exposition aux problèmes de disponibilité. Le reste des fonctionnalités clés du produit, notamment la gestion des mises à jour, l'analyse du contenu et d'autres opérations, peuvent être effectuées de manière isolée en mode utilisateur, où la récupération est possible. Cela démontre la meilleure pratique qui consiste à minimiser l'utilisation du noyau tout en maintenant une posture de sécurité robuste et une forte visibilité.
Windows propose plusieurs approches de protection en mode utilisateur pour lutter contre la falsification, comme les Enclaves de sécurité basées sur la virtualisation (VBS) et les Processus protégés que les fournisseurs peuvent utiliser pour protéger leurs processus de sécurité clés. Windows fournit également des événements ETW et des interfaces en mode utilisateur telles que l'interface d'analyse antimalware pour la visibilité des événements. Ces mécanismes robustes peuvent être utilisés pour réduire la quantité de code du noyau nécessaire pour créer une solution de sécurité, ce qui permet d'équilibrer la sécurité et la robustesse.
Comment Windows contribue-t-il à garantir la qualité des produits tiers liés à la sécurité ?
Microsoft collabore avec des fournisseurs de sécurité tiers dans le cadre d'un forum industriel appelé Microsoft Virus Initiative (MVI). Ce groupe, composé de Microsoft et de l'industrie de la sécurité, a été créé pour établir un dialogue et une collaboration au sein de l'écosystème de sécurité Windows afin d'améliorer la robustesse de l'utilisation de la plateforme par les produits de sécurité. Avec MVI, Microsoft et les fournisseurs collaborent sur la plateforme Windows pour définir des points d'extension fiables et des améliorations de la plateforme, ainsi que pour partager des informations sur la meilleure façon de protéger nos clients.
Microsoft travaille avec les membres du MVI pour assurer la compatibilité avec les mises à jour de Windows, améliorer les performances et résoudre les problèmes de fiabilité. Les partenaires MVI qui participent activement au programme contribuent à rendre l'écosystème plus résilient et bénéficient d'avantages tels que des briefings techniques, des boucles de retour d'information avec les équipes Produits de Microsoft et l'accès...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.