Windows 10 : son modèle et ses fonctionnalités de sécurité

Windows a longtemps été moqué pour sa sécurité supposément dérisoire ; il va sans dire que cela a sans doute été le cas pour ses précédentes moutures. Puis Windows 10 est arrivé, avec son lot de bonnes choses : Microsoft prend-il enfin la sécurité au sérieux ? Faisons le tour...

Windows 10 : son modèle et ses fonctionnalités de sécurité

Windows as a service

Jusqu'à présent, nous avons évalué différentes façons de renforcer Linux. Il est désormais temps de faire de même pour Windows. Cela tombe bien puisqu'avec Windows 10, Microsoft a bien montré qu'il était en train de revoir sa feuille de route pour son OS, y compris en matière de sécurité.

Windows 10 est un OS as a service qui évolue chaque année au rythme de mises à jour "majeures" bi-annuelles. Le Windows 10 de 2015 n'est plus le Windows 10 que nous connaissons aujourd'hui en 2021, et il continuera d'évoluer, si bien que cet article sera probablement dépassé dans les mois ou années à venir. J'aimerais cependant que nous prenions le temps de faire un instantané des mécanismes de protection qu'offre Windows 10 en ce jour.

Cet article a été écrit avec la version 21H1 de Windows 10 en exemple.
Windows 10 Pro ou Enterprise sont suggérés pour leurs fonctionnalités.

Le modèle de sécurité

Windows est - je ne l'apprends à personne - un OS desktop. Je le dis car par le passé, Microsoft a lamentablement échoué en essayant de faire de Windows une plateforme polyvalente destinée au desktop et au mobile. Aujourd'hui c'est un échec assumé de la société basée à Redmond qui se concentre pleinement sur ce qu'elle sait faire de mieux.

Vers l'existence dudit modèle…

Windows 10 hérite donc du modèle de sécurité desktop, qui est historiquement très permissif et qui n'a pas été pensé pour la sécurité. Cela n'empêche pas Windows de proposer un modèle de sécurité existant :

Il y a une vraie notion de chaîne de confiance que Microsoft tente d'établir avec son écosystème Windows - de façon similaire, mais forcément moins aboutie, que chez Apple ou les Chromebooks de Google.

Microsoft en tant qu'acteur

Microsoft a récemment rejoint la fondation Rust, ce qui fait sens car ils avaient auparavant partagé leur enthousiasme envers ce langage memory-safe. Il est à noter que ce ne sont que des paroles pour le moment, Rust n'étant pas encore utilisé dans les couches bas-niveau de Windows.

Cela dit, on peut souligner que Microsoft a également radicalement changé sa relation avec le monde de l'open-source, en libérant le code de quelques composants et outils et en s'investissant dans des projets tels que Linux ou Chromium ; montrant ainsi sa tendance à l'ouverture, ce qui est une bonne chose pour tout le monde. Toutefois Windows reste un OS au code très majoritairement propriétaire, cela ne change pas évidemment.

Le but de cet article sera de faire un tour de quelques fonctionnalités de défense importantes de Windows 10 : certaines sont cachées, tandis que d'autres sont importantes mais opt-in en vue d'une activation globale.

Modèle de sécurité software : vers les applications universelles (UWP)

UWP est l'acronyme de Universal Windows Platform. C'est la désignation des applications modernes de Windows qui, au contraire des applications classiques Win32, bénéficient d'un modèle de sécurité :

  • Une application UWP dispose d'un modèle de permissions : microphone, webcam, USB, etc.
  • Elle dispose en conséquence d'un modèle de sandboxing : outre les permissions, restreinte à des chemins d'accès sauf ceux volontairement choisis par l'utilisateur
  • Elle est distribuée par le Microsoft Store qui souhaite instaurer un modèle de confiance avec des mises à jour en continu

Ce n'est pas sans rappeler sur ces points le modèle de sécurité mobile ! Les applications UWP fonctionnent grâce à une API commune qui peut s'interfacer avec divers langages.

Microsoft

Malheureusement, ça ne veut pas dire que l'ère Win32 est finie, et il y a très peu d'applications UWP que vous voudriez utiliser au quotidien en réalité.

Microsoft lui-même utilise encore Win32 pour de nombreuses applications intégrées à Windows 10, c'est dire... Le succès est tout relatif.

C'est ce qui fait que le mode S de Windows 10 est certes sûr, mais à se demander finalement pourquoi ne pas avoir pris un iPad qui sait faire plus de choses. J'exagère peut-être. Quoiqu'il en soit, c'est un pas important et concret vers l'existence d'un réel modèle de sécurité.

Attends, c'est quoi le "mode S" de Windows 10 ?

Le mode S de Windows 10 est une fonctionnalité qui permet de réduire drastiquement la surface d'attaque de Windows :

  • Seules les applications signées du Microsoft Store fonctionneront
  • Le compte par défaut ne peut pas élever ses privilèges (admin-less)
  • Des fonctionnalités de sécurité sont activées par défaut (cf. plus bas)

C'est, pour résumer grossièrement, l'équivalent de transformer Windows 10 en ChromeOS ou iPadOS. Vous aurez certainement un énorme gain en matière de sécurité, mais en usabilité et liberté ? C'est une autre histoire. Si vous utilisez Windows 10 en mode S sur un PC Secured-Core, alors cet article ne sera qu'à but informatif pour vous.

Mode S ou non, je conseille en général de s'approvisionner autant que possible depuis le Microsoft Store qui est, puisque vous utilisez déjà bien Windows, à considérer comme une source de confiance. Les applications y sont signées et de plus, vous bénéficiez de mises à jour rapides et continues.

Ne remplace pas le mode S ou WDAC, mais est utile pour avoir l'habitude !

Dans Settings > Apps, vous pouvez indiquer à Windows de vous avertir automatiquement si une application que vous êtes sur le point d'installer est disponible dans le Microsoft Store, auquel cas vous devriez la consulter. Ces applications peuvent être Bitwarden, VLC, etc.

Quand vous avez besoin d'installer une application qui n'est pas dans le Microsoft Store (et malheureusement qui ne sera probablement pas UWP), pensez par passer par winget pour installer sans risque de se tromper sur le site de l'éditeur. Si vous voulez installer Steam par exemple :

winget install Steam

C'est un outil pratique qui est récemment passé en version stable 1.0. Gardez à l'esprit néanmoins que les applications présentes ne signifient pas qu'elles sont sûres d'utilisation, seulement que leur authenticité est garantie.

Vers un début de modèle de sécurité hardware avec les TPM et Secured-Core

TPM est l'acronyme de Trusted Platform Module. Sa dernière grande spécification en date est la version 2.0 ratifiée en 2014 (outre des éditions ultérieures). Si vous avez un PC qui date d'au moins 2016, il est probable qu'il dispose d'un TPM 2.0.

Gigabyte GC-TPM 2.0 (Intel 100 series)

C'est une puce de sécurité (plus précisément un crypto-processeur spécialisé) qui communique de façon restreinte avec le reste du système, et fournit diverses fonctionnalités :

  • Génération de nombres pseudo-aléatoires
  • Génération de clés et hash cryptographiques
  • Stockage sécurisé de ces données (déchiffrées pour un état donné)
  • Attestation de l'intégrité avec hash de la configuration système
  • Authentification hardware, chaque TPM ayant une clé unique
Le TPM est la pierre angulaire du modèle Trusted Computing.

Le TPM n'est pas sans rappeler encore une fois ce qui se fait du côté mobile notamment avec la puce Titan M de Google, qui est cependant bien plus avancée dans son intégration respective avec Android :

Aparté sur Google Titan M
Petite incursion dans le monde de la sécurité hardware et des enclaves sécurisées, avec la vedette Titan M, la puce de sécurité pensée par Google.

Les rôles d'un TPM avec Windows sont multiples, non-exhaustivement :

  • Assurer l'intégrité de la plateforme par l'OS et applications
  • Construire une chaîne de confiance (Secure Boot, Secure Launch)
  • Protéger les clés utilisées pour du chiffrement de disque
  • Renforcer l'étape d'authentification par mot de passe
  • Renforcer des mitigations telles que ASLR

Tout ceci est implémenté par Windows 10, ses fonctionnalités (telles que BitLocker), et des applications comme Office par exemple.

Un TPM est souvent représenté avec sa forme discrète, c'est-à-dire une puce séparée du chipset principal (SoC/CPU) : c'est la forme idéale car elle est isolée par nature. Des implémentations intégrées au chipset sont possibles (comme certains Ryzen et derniers CPU Intel). Les implémentations purement firmwares disposent d'une sécurité bien inférieure.

  • Le plus souvent, les PC commerciaux vendus depuis 2016 disposent d'un TPM soudé à la carte mère (garanti avec Secured-Core).
  • Si vous avez monté votre PC vous-même, un TPM est souvent vendu séparément par le constructeur de la carte mère.
  • Les CPU récents embarquent un pseudo-TPM avec une sécurité inférieure : Platform Trust Technology chez Intel (depuis 2013).

Vous pouvez vérifier la présence d'un TPM avec Windows + R puis en rentrant tpm.msc. Personnellement, c'était une vraie galère de trouver un TPM compatible avec le PC que j'avais monté en 2016 avec une carte mère Intel 100 series. J'imagine que peu de gens s'en soucient, à leurs dépens.

On considère en général que les TPM discrets (dTPM) sont préférables aux TPM firmwares (fTPM). Les dTPM sont très largement préférés dans des environnements sensibles (entreprises, administrations...).

Exemple d'attaque sur un fTPM : TPM-FAIL (CVE-2019-11090). Les dTPM ne sont pas sans failles, mais l'exploitation d'un fTPM semble relativement plus simple. (Même débat sur Android : TEE vs SE)

Si votre carte mère ne dispose même pas de la connectique TPM, votre seul recours est donc d'utiliser la solution fTPM embarquée à votre CPU sous réserve que ce dernier la propose (Intel PTT, etc.). Elle peut être activée dans l'UEFI et devrait être disponible pour tout CPU Intel Haswell ou ultérieur (il existe un équivalent AMD également sur Zen).

Qu'est-ce que Secured-Core dans l'histoire ?

Les PC Secured-Core sont tout simplement des machines compatibles avec l'ensemble des fonctionnalités de sécurité proposées par Windows 10 : liées au TPM et à la virtualisation notamment. C'est plus ou moins similaire à ce que Google essaie de faire avec Android Ready SE pour promouvoir les constructeurs qui utilisent l'API StrongBox d'Android avec des éléments sécurisés comme Titan M.

Microsoft

Mais quelles sont justement ces fonctionnalités de sécurité ? Quels sont les mécanismes de protection présents sur Windows 10 ? Nous allons en parler de quelques uns et de comment veiller à les activer/renforcer.

Je préviens, ça va être la foire aux acronymes.

Vérification d'intégrité au démarrage = 🔒

La vérification d'intégrité au démarrage n'est pas seulement une protection contre les attaques physiques (evil maid) mais aussi une protection contre la persistance de malwares (rootkits) : ceci grâce à l'établissement d'une vraie chaîne de confiance grâce au hardware.

verified boot chez Android tel qu'implémenté chez les Google Pixel reste leader en la matière avec par exemple une protection contre les rollback et des indicateurs visuels simples à comprendre pour l'utilisateur final.

Les PC Secured-Core disposent par défaut de cette protection.

Sur desktop, cette forme de protection existe aussi chez macOS (T2 et M1) et ChromeOS. Concernant Linux, les choses se corsent : il est possible d'utiliser Secure Boot, mais une forme de protection semblable à Trusted Boot est très limitée et complexe à mettre en place (avec Intel TXT).

Chaîne de confiance statique

Secure Boot fut un grand pas dans le modèle de sécurité desktop même si son utilité a souvent été mal comprise. L'idée derrière est de vérifier l'authenticité de chaque composante de la chaîne de démarrage : firmware UEFI, applications EFI, et le bootloader de l'OS. Le système ne démarre que si les signatures sont valides (les clés étant celles de Microsoft) ou préalablement approuvées.

Trusted Boot prend ensuite le relais après Secure Boot en ce qui concerne Windows lui-même : kernel, drivers, fichiers système, etc. Un TPM est nécessaire pour garantir la robustesse cryptographique de cette opération.

Microsoft

Measured Boot permet de reporter l'état du PC à un serveur distant avec un système d'attestation.

Pour activer Secure Boot, il faut voir du côté du modèle de votre carte mère. L'activation de Secure Boot peut notamment être vérifiée dans Windows Security > Device security (ou encore msinfo32.exe) :

Chaîne de confiance dynamique

Depuis Windows 10 version 1809, Windows Defender System Guard Secure Launch (c'est un peu long, j'en conviens) est une réorganisation de ce système, et cherche à établir une chaîne de confiance dynamique.

Le désavantage avec la chaîne de confiance statique vue ci-dessus, c'est qu'il est très lourd de prendre en compte toutes les mesures à faire dès qu'un élément de la chaîne change.

Microsoft

Secure Launch permet techniquement le démarrage à partir d'un code (UEFI en l'occurrence) qui n'est pas de confiance, mais ensuite de garantir quoiqu'il arrive un état de confiance mesuré grâce au TPM.

Ces mesures sont faites à l'aide de banques de données protégées (bind & seal) dans le TPM appelées PCRs (Platform Configuration Registers). Elles fonctionnent de la même façon qu'un checksum mais ici vis-à-vis des évènements observés. Pour résumer, si la valeur PCR attendue correspond à la valeur PCR mesurée au démarrage, l'intégrité est dès lors garantie.

Microsoft

Si l'intégrité ne peut être garantie, une série de mesures définies permettent par exemple d'empêcher l'accès aux ressources du système. Windows 10 est également capable de parfois réparer lui-même un élément corrompu permettant de restaurer l'intégrité et de retrouver l'état de confiance.

Microsoft

Secure Launch peut être activé depuis Group Policy (cf. la partie HVCI plus bas) ou bien dans Windows Security > Device security > Core isolation > Firmware protection.

Cette technologie nécessite, en plus d'un TPM 2.0, un CPU avec les instructions nécessaires : TXT chez Intel, SKINIT chez AMD. Il existe d'autres conditions requises : encore une fois, Secured-Core est une garantie que Secure Launch fonctionnera sur votre machine.

Microsoft Defender Antivirus

Microsoft Defender Antivirus (aussi juste appelé Windows Defender) est la solution de sécurité incluse par défaut dans Windows. Il est conseillé de ne pas la désactiver et de ne pas utiliser une solution tierce.

Anti-virus tiers = anti-sécurité

On ne peut pas parler de Windows sans parler d'antivirus. C'est un peu triste car la sécurité moderne repose sur bien plus qu'un antivirus, qui est une solution de sécurité appartenant à un paradigme dépassé.

Pour la faire courte : contentez-vous de Windows Security qui embarque déjà un simili d'antivirus, Microsoft Defender Antivirus.

N'installez pas d'antivirus tiers, qu'il soit gratuit ou payant.

Un antivirus tiers nuit à votre vie privée en exploitant vos données et en les traitant n'importe comment pour les revendre à d'autres tierces parties : par exemple Avast revendait des données de navigation.

Mais le plus ironique, c'est qu'il nuit à votre sécurité - non, non, même pas de conspiration ici. Par nature un antivirus a besoin de privilèges élevés sur le système pour fonctionner, donc forcément le pire est concevable si l'antivirus lui-même est la porte d'entrée à des infections :

Bref, il n'y en a pas un pour sauver l'autre. De plus il est à noter qu'un antivirus par nature a des capacités heuristiques limitées, et repose le plus souvent sur le principe de l'énumération du mal (enumerating badness) qui fournit une protection souvent illusoire et détachée de la réalité.

Configuration de Windows Defender

La configuration de Windows Defender est accessible dans la catégorie Virus & Threat Protection de Windows Security.

Il est conseillé de laisser les options activées par défaut. Windows Defender fournit une protection classique basée sur la réputation, qui n'est pas très intéressante dans l'absolu et fonctionne comme un antivirus.

Je ne vais donc pas la détailler davantage, et gardez à l'esprit que cette forme de protection basée sur l'énumération ne suffit clairement pas à elle-même, et ne doit pas vous donner une fausse sensation de sécurité.

Notez toutefois que le choix de l'usage de Microsoft SmartScreen est à votre discrétion. SmartScreen est pensé pour être une composante du modèle de sécurité de Windows, et est semblable à Google SafeBrowsing ; avec les défauts inhérents en matière de vie privée puisque des informations seront inévitablement envoyées à des serveurs de Microsoft.

La protection offerte doit être relativisée : elle se fonde simplement sur le principe de réputation d'un site, contenu téléchargé, d'une application, etc. Même un bypass de SmartScreen ne serait pas rare. Je ne suggère pas forcément de la désactiver, mais je vous donne les arguments nécessaires pour faire votre choix.

L'option d'envoi automatique de données à but d'analyse pour Defender peut également être désactivée si cela vous gêne.

Defender in-a-sandbox

Windows Defender est peut-être mieux conçu que des antivirus tiers, mais cela ne suffit pas à le protéger lui-même de certaines attaques. C'est pourquoi Microsoft lui a développé une sandbox complète pour mieux l'isoler, opt-in depuis Windows 10 version 1703 par une variable d'environnement à initialiser dans un PowerShell en tant qu'administrateur :

setx /M MP_FORCE_USE_SANDBOX 1

A l'issue d'un redémarrage, on peut vérifier la présence du processus MsMpEngCP.exe dans Task Manager (onglet Details) :

CP = content process, qui tourne avec peu de privilèges dans une sandbox

L'UAC est votre ami (vraiment)

UAC est l'acronyme de User Account Control.

C'est une composante indispensable à la sécurité de Windows à laquelle tout le monde est confronté quotidiennement. Et pourtant, on trouve plus de tutoriels pour le désactiver plutôt que pour expliquer son intérêt :

Quelle hérésie...

L'UAC est à Windows ce que sudo est à Linux : un moyen contrôlé d'obtenir les permissions administrateur pour une action donnée. L'UAC est responsable de délivrer un token d'accès administrateur à une application qui en aurait potentiellement besoin :

  • Un compte administrateur devra approuver l'action
  • Un compte utilisateur devra s'identifier avec un compte administrateur

Un compte administrateur sur Windows est différent de root sur Linux cependant : il n'a pas les permissions totales sur tout le système, mais il peut aussi utiliser le système en tant qu'utilisateur standard. Quand un compte administrateur se connecte, il dispose de deux tokens :

  • Un token d'utilisateur standard qui servira à naviguer sur Internet et autres tâches quotidiennes qui ne demandent pas de privilèges
  • Un token d'administrateur qui lui permet d'approuver rapidement des actions via l'UAC
Microsoft
Il est cependant conseillé d'utiliser un compte utilisateur standard en tant que compte principal. Principe du moindre privilège !

L'UAC est un processus de contrôle important dans le modèle de sécurité de Windows qui permet d'éléver ses privilèges de façon sécurisée.

Le désactiver n'a donc aucun sens, il convient même de le configurer pour l'utiliser autant que possible. Dans le menu Démarrer, cherchez et lancez Change User Account Control Settings.

Change User Account Control Settings

Une élévation de privilèges est graphiquement représentée par le symbole du bouclier qui adopte un code de couleurs différent selon la circonstance.

Le but est in fine d'éviter des tentatives de bypass de l'UAC :

  • En le renforçant au niveau maximum comme ci-dessus
  • En évitant l'utilisation de comptes dans le groupe administrateur
  • En mettant à jour son système régulièrement, évidemment

Vous pouvez aller encore plus loin et n'autoriser l'UAC qu'en premier lieu sur des exécutables signés et validés "de confiance", via Group Policy : Computer Configuration > Windows Settings > Security Settings > Local Policies > Security Options.

Inutile de préciser (mais je le fais quand même) que cela empêchera certaines applications notamment de s'installer (ou de s'exécuter) si elles ont besoin d'une élévation de privilèges alors qu'elles ne sont pas signées.

Exemple d'élévation bloquée

Donc, à vous de voir si cela en vaut l'effort.

La sécurité basée sur la virtualisation (VBS)

VBS est l'acronyme de virtualization-based security. Microsoft implémente la virtualisation (efficiente grâce aux CPU modernes + l'hyperviseur de Windows Hyper-V) à différents niveaux pour renforcer l'isolation de composantes critiques de Windows 10.

Globalement, le but est ici de séparer strictement la mémoire relative à l'espace utilisateur et différentes régions du kernel.

Les prérequis hardware sont :

  • Un CPU Intel avec VT-x, Skylake ou ultérieur
  • Un CPU AMD avec AMD-V, Zen 1 ou ultérieur
  • Un CPU avec au moins 4 cœurs logiques
  • 4GB de RAM minimum, mais 8GB fortement conseillés

Malheureusement, certaines de ces fonctionnalités sont réservées aux éditions Pro et Entreprise seulement. Windows 10 20H1 minimum est requis (de manière générale, soyez sur la dernière version !).

Memory integrity (HVCI)

HVCI est l'acronyme de HyperVisor-protected Code Integrity. C'est un mécanisme de protection qui porte le nom de Memory integrity également.

Microsoft

Cette mitigation consiste à isoler grâce à la virtualisation le processus de validation et de vérification de l'intégrité des fichiers propres au système avant leur exécution, les protégeant ainsi d'une classe de vulnérabilités.

L'impact en performances est faible grâce aux CPU modernes qui limitent le surcoût de la virtualisation. En termes de compatibilité, certains drivers ne sont peut-être pas compatibles. Quoiqu'il en soit, HVCI est déjà opt-out sur les PC compatibles ayant installé Windows récemment, signifiant la volonté de Microsoft d'en faire une protection par défaut.

Pour vérifier que cette option est disponible et/ou activée, depuis le menu Démarrer : Core isolation puis activer Memory integrity. Je l'avais fait sur un PC qui avait Windows installé depuis 2016, et j'ai eu un cas où le driver SteelSeries Engine n'était pas compatible. Il faut donc supprimer les drivers incompatibles pour pouvoir activer HVCI.

A l'issue de l'activation, vous devez redémarrer votre PC.

Une autre façon de l'activer est de passer par Group Policy : Computer Configuration > Administrative Templates > System > Device Guard > Turn On Virtualization Based Security.

Credential Guard

Cette fonctionnalité peut être activée de la même façon que HVCI ci-dessus via Group Policy. C'est la partie désignée par "isolated LSA" dans le schéma qui montrait le principe d'isolation par la virtualisation.

LSA est l'acronyme de Local Security Authority. Son implémentation dans Windows, lsass.exe, est responsable (entre autres) de la sécurité de l'authentification des utilisateurs sur le système. De manière plus générale, LSA concerne les secrets (mots de passe NTLM, tickets Kerberos, etc.).

Microsoft

Son isolation dans un conteneur virtuel permet d'éviter à du code malveillant d'y accéder : même un utilisateur avec les privilèges SYSTEM n'y aura pas accès. La communication entre LSA et le système se fait donc par l'intermédiaire d'un processus isolé, LSA Isolated. Cette protection n'est pas infaillible, mais elle constitue un gain théorique important.

Application Guard (WDAG)

WDAG est l'acronyme de Windows Defender Application Guard. Le nouveau navigateur Edge de Windows 10 repose sur Chromium, qui dispose déjà d'une sandbox élaborée, mais ce n'est parfois pas assez quand le modèle de menace exige un niveau de sécurité important.

WDAG repose ainsi sur les outils de virtualisation pour renforcer davantage l'isolation de Edge, qui tournera comme dans sa machine virtuelle légère de manière parfaitement "intégrée" au reste du système.

Edge WDAG à gauche, Edge "normal" à droite

Comment ça marche ? C'est un peu le même principe que Windows Sandbox que j'avais abordé il y a quelques temps. WDAG utilise des conteneurs virtuels optimisés pour un démarrage très rapide et des performances correctes, tout en fournissant une excellente isolation. Il est possible d'utiliser l'accélération GPU, si nécessaire (mais elle augmente la surface d'attaque).

Sur les versions récentes de Windows 10, WDAG peut être activé et configuré depuis Windows Security directement :

Isolated Browsing

Il est à noter que WDAG ne fonctionnera pas avec un VPN installé sur l'hôte. Si vous voulez utiliser un VPN avec WDAG, il faudra certainement que le VPN soit installé au niveau du routeur.

Utilisez WDAG autant que possible ! Personnellement, je l'utilise dès que je souhaite naviguer sur un site que je ne connais pas. Vous pouvez aussi l'utiliser pour ouvrir des fichiers PDF non-sûrs. Pour les utilisateurs de Windows 10 Enterprise, il est possible d'automatiser l'utilisation de WDAG quand une URL qui n'est pas définie comme sûre est reconnue.

Windows Sandbox

Comment ne pas le mentionner ! Un outil que j'adore, auquel j'ai déjà dédié un article pour en savoir plus sur son fonctionnement et maîtriser son utilisation avec des templates :

Windows Sandbox : un environnement léger et sûr pour lancer des apps
Windows Sandbox est décrit comme un environnement de bureau léger qui permet de lancer des applications isolées du système hôte. Comment ça marche, et comment l’intégrer dans notre quotidien ?

Je rabâche peut-être, mais c'est un outil important qui deviendra vite indispensable pour exécuter des exécutables Win32 qui ne sont pas de pleine confiance. Je l'utilise aussi (par exemple) avec un template pour lancer des sessions avec Tor Browser.

Kernel Data Protection (KDP)

HVCI est une bonne étape pour contrer des injections dynamiques de code, mais ce n'est pas suffisant pour l'ensemble du kernel de Windows qui a de nombreuses structures de données sensibles.

Microsoft

Arrive donc Kernel Data Protection qui promet l'immutabilité de ces structures grâce à des méthodes de virtualisation. Ces régions seront accessibles en lecture seule et mieux isolées du reste du système.

En savoir plus ici.

Comment en bénéficier ?

KDP est une fonctionnalité qui en soit nécessite simplement le support de VBS (extensions de virtualisation hardware). Cette fonctionnalité reste toutefois activée par défaut sur les PC Secured-Core et se déploiera peu à peu chez l'ensemble des utilisateurs éligibles.

Mitigations (WDEG & autres)

Autrefois connu sous le nom de EMET (Enhanced Mitigation Experience Toolkit), WDEG (Windows Defender Exploit Guard) est désormais intégré à Windows 10 et permet de gérer divers mécanismes de protection du système.

Pour y accéder depuis le menu Démarrer, cherchez Exploit protection.

Pour une fois c'est très simple, activez tout ce qui ne l'est pas déjà pour l'ensemble du système.

Pour une application donnée, il est également possible de modifier ses mitigations si vous le souhaitez :

Faisons le tour de quelques unes de ces mitigations.

Control Flow Guard (CFG)

CFG est l'implémentation par Microsoft de Control-Flow Integrity (CFI), un mécanisme de protection moderne contre les vulnérabilités liées à la gestion de la mémoire, et que nous avons croisé récemment :

Buffer overflow & consort : tout ce que vous devez savoir
De nombreuses vulnérabilités dans les systèmes informatiques sont liées à des erreurs de gestion de la mémoire, permises entre autres par l’utilisation de langages de bas-niveau répandus tels que le C et le C++. En 2019, elles constituaient pour Microsoft environ 70% des vulnérabilités traitées.
CFI empêche précisément un attaquant de "convertir" le bug en exploit, dans le sens où un attaquant exploite le bug pour au final exécuter son code. CFI empêche cela en indiquant au moment de la compilation ce que le programme est censé faire.
  • CFG est apparu en tant qu'option dans Windows 8.1 avant d'être pleinement intégré à Windows 10.
  • Depuis Visual Studio 2015, les développeurs peuvent compiler leur programme avec l'option /guard:cf.
  • Depuis sa version 1703, le kernel de Windows 10 est compilé avec CFG, rendant son exploitation plus difficile (kCFG).

Un des rôles de HVCI est d'ailleurs de protéger contre des tentatives de bypass de CFG. Tout fait plus de sens quand on assemble les briques !

eXtended Flow Guard (XFG)

Pas de panique si vous ne voyez pas l'option : c'est tout simplement que c'est une mitigation récente en cours d'essai et distribuée sur le canal insiders. XFG peut être perçu comme une évolution de CFG : une implémentation renforcée et plus granulaire de CFI.

Microsoft

Au moment de la compilation (avec /guard:xfg sur Visual Studio 2019), un hash (basé sur le type) d'une fonction sera placé avant son appel dans le flux d'exécution. Cette valeur sera comparée avec une valeur préservée : si le hash diffère, le programme va crasher en conséquence.

Pour de plus amples détails techniques, c'est par ici !

Control-flow Enforcement Technology (CET)

Nous en avions également parlé dans un précédent article sous le nom de Shadow Stacks :

Une mitigation supplémentaire contre les stack-based buffer overflow. [Shadow Stacks] fonctionne sur le principe de l'utilisation d'une seconde stack qui contient les adresses retournées par les fonctions d'un programme.

C'est une façon un peu simple de résumer les choses, mais cette mitigation va main dans la main avec CFG/XFG pour garantir l'intégrité du flux d'exécution du programme.

Microsoft

En l'occurrence, l'utilisation d'une Shadow Stack prévient les tentatives d'overwrite des adresses retournées auxquelles sont susceptibles CFG/XFG par nature (cf. ROP exploits).

Intel

Intel CET (Control-flow Enforcement Technology) est une implémentation hardware de Shadow Stacks supportée dans Windows 10. Intel CET est opt-in : les applications doivent être compilées avec /CETCOMPAT et testées pour garantir leur bon fonctionnement avec ce mécanisme.

Dans le WDEG, il est possible de l'activer pour un programme donné

Niveau support :

  • OS : Windows 10 depuis la version 20H1 est requis
  • Hardware : des CPU modernes tels que ceux de dernière génération chez Intel (11e génération) et AMD (Zen 3)
  • Software (exemples) : dans Edge (Chromium) puis plus tard dans Chromium (donc Chrome) lui-même

Alors ne vous jetez pas tout de suite sur de nouveaux CPU, car le support software va prendre du temps avant de se généraliser.

Data Execution Prevention (DEP ft. ACG)

DEP est connu sur d'autres plateformes sous le nom de W^X (write xor execute) : une page en mémoire ne peut pas être à la fois lue et exécutée, c'est soit l'un soit l'autre. Cela permet par exemple d'éviter qu'un programme puisse écrire (W) dans un endroit supposé contenir des simples données ses propres instructions pour les exécuter ensuite (X).

W^X n'est pas un mécanisme infaillible encore une fois, mais permet de protéger contre certaines vulnérabilités et notamment leur persistance. Son implémentation dans Windows 10 est d'autant plus stricte avec CIG/ACG.

Microsoft

Par défaut, DEP n'est utilisé que sur des composantes de Windows, mais quant au reste des programmes il est opt-in. C'est peu commun de voir des programmes et drivers incompatibles, mais ils existent, d'où ce paramétrage. Pour forcer DEP en toutes circonstances, rentrez ceci dans un shell administrateur puis redémarrez :

bcdedit /set nx alwayson
Je ne suis pas responsable en cas de pépin, soyons d'accord...

Address Space Layout Randomization (ASLR)

De même, nous avons vu l'utilité d'ASLR dans un article précédent. Ce mécanisme permet de randomiser les emplacements dans la mémoire des programmes (binaires et bibliothèques) pour rendre l'exploitation de vulnérabilités liées à la mémoire plus difficile.

Microsoft

ASLR est présent depuis Windows Vista, cependant son implémentation s'est largement améliorée depuis ; notamment par l'entropie utilisée. Un TPM peut être utilisé par Windows pour augmenter davantage cette entropie, rendant la protection offerte par ASLR d'autant plus efficace.

Depuis Visual Studio 2010, le paramètre /DYNAMICBASE est activé par défaut et permet de rendre l'application compatible avec ASLR, mais ce dernier reste lui-même opt-in pour des questions de compatibilité.

Microsoft

Avec WDEG, l'activation conjointe au niveau du système de Mandatory ASLR (forçant la ré-allocation de l'adresse de base) et Bottom-up ASLR (injectant l'entropie nécessaire) permet de forcer l'usage d'ASLR par défaut sur l'ensemble des exécutables.

Il est toutefois possible de désactiver ceci de façon granulaire (WDEG > Program Settings) si une application ne se comporte pas correctement (applications sans doute obsolètes qui ne devraient pas être utilisées en dehors de Windows Sandbox par exemple).

InitAll (initialize all stack variables)

InitAll est une mitigation employée par Windows 10 pour lutter contre les vulnérabilités qui exploitent des variables non-initialisées.

Considérons par exemple ce code très simple :

char *test_string;
if (i != err_val)
{
    test_string = "Hello World!";
}
printf("%s", test_string);

Selon l'emplacement de ce code dans un programme, rien ne garantit ce à quoi printf() va accéder avec test_string. Une solution est de forcer l'initialisation de toutes les variables avec des valeurs comme 0.

Microsoft

InitAll est un moyen pour Windows 10 de s'assurer à plusieurs niveaux (notamment le kernel et quelques portions critiques de l'espace utilisateur) que toutes les variables allouées dans la stack soient bien initialisées, protégeant ainsi ces codes d'une classe entière de vulnérabilités.

Attack Surface Reduction (ASR)

ASR constitue en des règles qui restreignent des surfaces d'attaques communément exploitées : Office, Adobe Reader, scripts, etc.

La liste est disponible à cette adresse, et il conviendra de les activer depuis un PowerShell administrateur :

Set-MpPreference -AttackSurfaceReductionRules_Ids <rule ID> -AttackSurfaceReductionRules_Actions Enabled

Par exemple pour activer la règle qui empêche Office d'injecter du code à d'autres processus :

Set-MpPreference -AttackSurfaceReductionRules_Ids 75668C1F-73B5-4CF0-BB93-3ECF5CB7CC84 -AttackSurfaceReductionRules_Actions Enabled

Je conseille de les évaluer une par une, selon votre utilisation. ASR nécessite que toutes les fonctionnalités de protection en temps réel de Defender soient activées.

Controlled Folder Access (CFA)

Si toutes les entreprises (voire hôpitaux) savaient utiliser et configurer CFA, il y aurait moins de catastrophes liées aux ransomwares ! CFA un mécanisme de protection qui empêche un exécutable d'accéder en écriture à certains dossiers sensibles tels que vos documents (par défaut), images, ou autre dossier de votre choix.

CFA peut être activé dans Windows Security en cherchant Controlled Folder Access tout simplement :

Par défaut les exécutables dans les dossiers d'installation "classiques" (style Program Files) seront jugés de confiance. Autrement, un exécutable se verra bloquer l'accès en écriture à vos documents par exemple.

Si jamais CFA empêche un exécutable de confiance d'accéder en écriture à un dossier dont il a besoin, comme git dans mon cas, vous pouvez l'ajouter à une liste blanche. Oui, c'est peut-être éprouvant parfois, mais vous n'êtes pas censés lancer des nouveaux exécutables tous les jours : encore moins des exécutables fraichement téléchargés qui voudraient accéder en écriture à des dossiers sensibles, n'est-ce pas...

Better safe than sorry.

La récap'

Clairement, je ne peux pas tout aborder sans en faire un bouquin, donc j'étais assez sélectif. Comme toujours, un seul article ne saurait pas se suffire à lui-même, mais récapitulons les fonctionnalités de sécurité intéressantes à activer si vous utilisez Windows 10.

N'appliquez pas tout bêtement sans réfléchir ! Les liens sont là pour se documenter en complément de ce présent article.

Requis

Version 20H2 ou ultérieure, CPU x86 avec extensions hardware de virtualisation et au moins 8GB de RAM pour minimiser le coût.

Conseillé (quand applicable)

L'usage d'un TPM 2.0 est ici conseillé voire nécessaire.

Optionnel (avec compromis)

Il convient à chacun d'évaluer son modèle de menace.

Conseils d'usage

  • Un compte standard (non-admin) en compte principal
  • Toujours afficher les extensions de fichiers (Explorer)
  • Utilisation de Edge Chromium avec WDAG
  • Utilisation de Edge Chromium avec CET
  • Mises à jour régulières du système
  • Mises à jour régulières des applications
  • Mises à jour régulières des drivers
  • Récupérer les apps "classiques" Win32 via winget
  • Réfléchir avant de "lancer en tant qu'administrateur"
  • Désinstallation de programmes/services inutiles
  • Configuration poussée de Defender Firewall (block all incoming)
  • Utilisation de Windows Sandbox
  • Utilisation de machines virtuelles (Hyper-V Manager)
  • Utilisation (le plus possible) d'alternatives UWP
  • Utilisation (le plus possible) du Microsoft Store
  • Pas d'antivirus tiers (!), juste Defender
  • Pas d'outils de nettoyage tiers (type CCleaner)
  • Pas d'outils tiers qui promettent la lune en télémétrie

Pourquoi Edge Chromium ?

Vous l'aurez compris, je conseille clairement l'utilisation de Edge Chromium sur Windows 10 plutôt qu'un autre navigateur (du moins Chromium-based) :

  • Comparé aux autres navigateurs Chromium-based hors Chrome, Edge reçoit les mises à jour presque aussi rapidement que ce dernier
  • Edge Chromium est pensé pour le modèle de sécurité de Windows : il a droit à du renforcement supplémentaire (CET avant upstream, renforcement avec Trusted Types, etc.)
  • Edge Chromium dispose d'une intégration avec WDAG (le support d'autres navigateurs n'est pas garanti sur le long terme)
  • Enfin, Edge Chromium hérite des paramètres de la télémétrie de Windows : pas de réglages à faire deux fois !

Tout comme Chrome, les modifications apportées à Chromium (la partie open-source) ne sont pas ouvertes. Cependant Edge enlève plus (pour réduire la surface d'attaque) qu'il ne rajoute en réalité.

Le navigateur n'en reste pas moins plus invasif que certaines alternatives, mais il fait plus sens de l'utiliser que Chrome par exemple (sur Windows).

Quelques vérifications

Vérification de VBS (virtualization-based security) avec msinfo32.exe :

Vérification de Secure Launch au même endroit, Secure Boot au-dessus :

Vérification de la sandbox Defender (Task Manger > Details) :

Vérification de ASR, Defender et SmartScreen (ici et ) :

Vérification des mitigations générales (dans Exploit protection) :

Out-of-the-box, les PC Secured-Core sont les seuls PC Windows qui disposent d'une configuration robuste par défaut. La recommandation est donc de s'en procurer un dès que possible.

A propos de la télémétrie…

Il n'y a pas de moyen ultime pour éviter totalement la télémétrie sur Windows 10, les solutions tierces (scripts ou OS modifiés) n'étant pas garanties de fonctionner sur le long terme (et même sur l'instant), et ne sont pas forcément de confiance.

Vous pouvez cependant limiter la collection de données autant que possible avec les moyens du bord :

  • Désactivez toutes les options dans Privacy > General
  • Idem dans Privacy > Diagnostics (required diagnostic data)
  • Utilisez un compte local plutôt que lié à Microsoft si possible
  • Edge Chromium héritera de ces paramètres

Il est également possible de gérer la télémétrie depuis Group Policy : Computer Configuration > Administrative Templates > Windows Components > Data Collection and Preview Builds.

Sur Windows 10 Enterprise, ce niveau de "télémétrie minimale" fonctionne

Des variantes officielles de Windows telles que Enterprise ou Education permettent de mieux gérer la télémétrie si cela est vraiment important pour vous. De façon générale, je propose de garder une certaine cohérence : si Microsoft est vraiment votre menace pour X raison, vous ferez mieux de ne pas utiliser Windows tout court. Ce n'est pas de la condescendance, mais simplement du bon sens !

Une question de compromis

Cet article ne se concentre pas sur des thématiques de vie privée, bien que finalement la vie privée ne peut être garantie sans une sécurité décente. Cette dernière demandera parfois des concessions, sans pour autant utiliser Windows en mode S (mais vous pouvez, si vous le voulez). Je conseille aux personnes préoccupées de creuser davantage et de s'intéresser à ce que WDAC (Application Control) peut leur apporter.

Enfin, ces compromis sont à évaluer individuellement, que ce soit en termes de confort (CFA/UAC), de compatibilité (ASLR) ou de vie privée (SmartScreen). Cet article visait simplement à explorer quelques fonctionnalités de sécurité dont certaines ne sont pas exposées très clairement, et à vous guider dans le choix de les utiliser (ou non).

Cet article n'est pas non plus une recommandation particulière sur le choix d'un OS desktop. Certaines personnes ont besoin de Windows pour fonctionner, d'autres non. Pour un environnement desktop, il n'y a cependant pas de solution idéale : dans l'absolu Qubes OS pour compartimentaliser est préférable mais au prix des ressources utilisées et d'un confort moindre. Malgré les grandes avancées proposées par Windows 10, ce dernier traine toujours l'ancien écosystème Win32 avec ses nombreux défauts.

Toutefois, Windows est sur le bon chemin.

Les références utilisées dans cet article sont majoritairement de Microsoft : leur documentation ainsi que leur blog de sécurité. Bye!