Protections des identifiants Windows

Reading time: 13 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

WDigest

Le protocole WDigest, introduit avec Windows XP, est conçu pour l'authentification via le protocole HTTP et est activé par défaut sur Windows XP jusqu'à Windows 8.0 et sur Windows Server 2003 à Windows Server 2012. Ce réglage par défaut entraßne le stockage des mots de passe en clair dans LSASS (Local Security Authority Subsystem Service). Un attaquant peut utiliser Mimikatz pour extraire ces identifiants en exécutant :

bash
sekurlsa::wdigest

Pour activer ou dĂ©sactiver cette fonctionnalitĂ©, les clĂ©s de registre UseLogonCredential et Negotiate situĂ©es dans HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest doivent ĂȘtre dĂ©finies sur "1". Si ces clĂ©s sont absentes ou dĂ©finies sur "0", WDigest est dĂ©sactivĂ© :

bash
reg query HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential

LSA Protection (PP & PPL protected processes)

Protected Process (PP) et Protected Process Light (PPL) sont des protections au niveau noyau de Windows conçues pour empĂȘcher l'accĂšs non autorisĂ© Ă  des processus sensibles comme LSASS. Introduit dans Windows Vista, le modĂšle PP a Ă©tĂ© créé Ă  l'origine pour l'application du DRM et ne permettait de protĂ©ger que des binaires signĂ©s avec un certificat mĂ©dia spĂ©cial. Un processus marquĂ© PP ne peut ĂȘtre accĂ©dĂ© que par d'autres processus Ă©galement PP et ayant un niveau de protection Ă©gal ou supĂ©rieur, et encore, seulement avec des droits d'accĂšs limitĂ©s sauf autorisation explicite.

PPL, introduit dans Windows 8.1, est une version plus flexible de PP. Il permet des cas d'utilisation plus larges (p.ex. LSASS, Defender) en introduisant des « niveaux de protection » basés sur le champ EKU (Enhanced Key Usage) de la signature numérique. Le niveau de protection est stocké dans le champ EPROCESS.Protection, qui est une structure PS_PROTECTION contenant :

  • Type (Protected or ProtectedLight)
  • Signer (p.ex. WinTcb, Lsa, Antimalware, etc.)

Cette structure est empaquetée dans un seul octet et détermine qui peut accéder à qui :

  • Les signers de valeur plus Ă©levĂ©e peuvent accĂ©der aux signers de valeur plus faible
  • Les PPL ne peuvent pas accĂ©der aux PP
  • Les processus non protĂ©gĂ©s ne peuvent accĂ©der Ă  aucun PPL/PP

Ce que vous devez savoir d'un point de vue offensif

  • Quand LSASS s'exĂ©cute en tant que PPL, les tentatives de l'ouvrir via OpenProcess(PROCESS_VM_READ | QUERY_INFORMATION) depuis un contexte administrateur normal Ă©chouent avec 0x5 (Access Denied), mĂȘme si SeDebugPrivilege est activĂ©.
  • Vous pouvez vĂ©rifier le niveau de protection de LSASS en utilisant des outils comme Process Hacker ou programmaticalement en lisant la valeur EPROCESS.Protection.
  • LSASS aura typiquement PsProtectedSignerLsa-Light (0x41), qui ne peut ĂȘtre accĂ©dĂ© que par des processus signĂ©s avec un signer de niveau supĂ©rieur, comme WinTcb (0x61 ou 0x62).
  • PPL est une restriction uniquement au niveau Userland ; le code cĂŽtĂ© kernel peut la contourner complĂštement.
  • Le fait que LSASS soit en PPL n'empĂȘche pas le credential dumping si vous pouvez exĂ©cuter du kernel shellcode ou tirer parti d'un processus fortement privilĂ©giĂ© avec les accĂšs appropriĂ©s.
  • Activer ou dĂ©sactiver PPL nĂ©cessite un redĂ©marrage ou des rĂ©glages Secure Boot/UEFI, ce qui peut rendre la configuration PPL persistante mĂȘme aprĂšs l'annulation des changements de registre.

Create a PPL process at launch (documented API)

Windows expose une mĂ©thode documentĂ©e pour demander un niveau Protected Process Light pour un processus enfant lors de sa crĂ©ation en utilisant la extended startup attribute list. Cela ne contourne pas les exigences de signature — l'image cible doit ĂȘtre signĂ©e pour la classe de signer demandĂ©e.

Minimal flow in C/C++:

c
// Request a PPL protection level for the child process at creation time
// Requires Windows 8.1+ and a properly signed image for the selected level
#include <windows.h>

int wmain(int argc, wchar_t **argv) {
STARTUPINFOEXW si = {0};
PROCESS_INFORMATION pi = {0};
si.StartupInfo.cb = sizeof(si);

SIZE_T attrSize = 0;
InitializeProcThreadAttributeList(NULL, 1, 0, &attrSize);
si.lpAttributeList = (PPROC_THREAD_ATTRIBUTE_LIST)HeapAlloc(GetProcessHeap(), 0, attrSize);
if (!si.lpAttributeList) return 1;

if (!InitializeProcThreadAttributeList(si.lpAttributeList, 1, 0, &attrSize)) return 1;

DWORD level = PROTECTION_LEVEL_ANTIMALWARE_LIGHT; // or WINDOWS_LIGHT/LSA_LIGHT/WINTCB_LIGHT
if (!UpdateProcThreadAttribute(
si.lpAttributeList, 0,
PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL,
&level, sizeof(level), NULL, NULL)) {
return 1;
}

DWORD flags = EXTENDED_STARTUPINFO_PRESENT;
if (!CreateProcessW(L"C\\Windows\\System32\\notepad.exe", NULL, NULL, NULL, FALSE,
flags, NULL, NULL, &si.StartupInfo, &pi)) {
// If the image isn't signed appropriately for the requested level,
// CreateProcess will fail with ERROR_INVALID_IMAGE_HASH (577).
return 1;
}

// cleanup
DeleteProcThreadAttributeList(si.lpAttributeList);
HeapFree(GetProcessHeap(), 0, si.lpAttributeList);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return 0;
}

Notes et contraintes:

  • Utiliser STARTUPINFOEX avec InitializeProcThreadAttributeList et UpdateProcThreadAttribute(PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL, ...), puis passer EXTENDED_STARTUPINFO_PRESENT Ă  CreateProcess*.
  • Le DWORD de protection peut ĂȘtre dĂ©fini sur des constantes telles que PROTECTION_LEVEL_WINTCB_LIGHT, PROTECTION_LEVEL_WINDOWS, PROTECTION_LEVEL_WINDOWS_LIGHT, PROTECTION_LEVEL_ANTIMALWARE_LIGHT, or PROTECTION_LEVEL_LSA_LIGHT.
  • Le processus enfant ne dĂ©marre en tant que PPL que si son image est signĂ©e pour cette classe de signataire ; sinon la crĂ©ation du processus Ă©choue, gĂ©nĂ©ralement avec ERROR_INVALID_IMAGE_HASH (577) / STATUS_INVALID_IMAGE_HASH (0xC0000428).
  • Il ne s'agit pas d'un contournement — c'est une API prise en charge destinĂ©e aux images correctement signĂ©es. Utile pour durcir des outils ou valider des configurations protĂ©gĂ©es par PPL.

Example CLI using a minimal loader:

  • Signataire Antimalware: CreateProcessAsPPL.exe 3 C:\Tools\agent.exe --svc
  • Signataire LSA-light: CreateProcessAsPPL.exe 4 C:\Windows\System32\notepad.exe

Options pour contourner les protections PPL :

Si vous voulez dump LSASS malgré PPL, vous avez 3 options principales :

  1. Use a signed kernel driver (e.g., Mimikatz + mimidrv.sys) to remove LSASS’s protection flag:

  1. Bring Your Own Vulnerable Driver (BYOVD) pour exécuter du code kernel personnalisé et désactiver la protection. Des outils comme PPLKiller, gdrv-loader, ou kdmapper rendent cela faisable.
  2. Steal an existing LSASS handle depuis un autre processus qui l'a ouvert (ex., un processus AV), puis le dupliquer dans votre processus. Ceci est la base de la technique pypykatz live lsa --method handledup.
  3. Abuser d'un processus privilégié qui vous permettra de charger du code arbitraire dans son espace d'adressage ou dans celui d'un autre processus privilégié, contournant ainsi les restrictions PPL. Vous pouvez consulter un exemple de ceci dans bypassing-lsa-protection-in-userland or https://github.com/itm4n/PPLdump.

Vérifier l'état actuel de la protection LSA (PPL/PP) pour LSASS:

bash
reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL

When you running mimikatz privilege::debug sekurlsa::logonpasswords it'll probably fail with the error code 0x00000005 becasue of this.

Credential Guard

Credential Guard, une fonctionnalitĂ© exclusive Ă  Windows 10 (Enterprise and Education editions), renforce la sĂ©curitĂ© des identifiants machine en utilisant Virtual Secure Mode (VSM) et Virtualization Based Security (VBS). Il exploite les extensions de virtualisation CPU pour isoler les processus clĂ©s dans un espace mĂ©moire protĂ©gĂ©, hors de portĂ©e du systĂšme d'exploitation principal. Cette isolation garantit que mĂȘme le kernel ne peut accĂ©der Ă  la mĂ©moire dans le VSM, protĂ©geant ainsi efficacement les identifiants contre des attaques comme pass-the-hash. Le Local Security Authority (LSA) fonctionne dans cet environnement sĂ©curisĂ© en tant que trustlet, tandis que le processus LSASS dans l'OS principal agit uniquement comme un communicateur avec le LSA du VSM.

Par dĂ©faut, Credential Guard n'est pas actif et nĂ©cessite une activation manuelle au sein d'une organisation. Il est essentiel pour renforcer la sĂ©curitĂ© contre des outils comme Mimikatz, qui se trouvent limitĂ©s dans leur capacitĂ© Ă  extraire les identifiants. Cependant, des vulnĂ©rabilitĂ©s peuvent encore ĂȘtre exploitĂ©es par l'ajout de Security Support Providers (SSP) personnalisĂ©s pour capturer les identifiants en clair lors des tentatives de connexion.

Pour vĂ©rifier l'Ă©tat d'activation de Credential Guard, la clĂ© de registre LsaCfgFlags sous HKLM\System\CurrentControlSet\Control\LSA peut ĂȘtre inspectĂ©e. Une valeur de "1" indique une activation avec UEFI lock, "2" sans lock, et "0" signifie qu'il n'est pas activĂ©. Cette vĂ©rification du registre, bien qu'Ă©tant un indicateur fort, n'est pas la seule Ă©tape pour activer Credential Guard. Des instructions dĂ©taillĂ©es et un script PowerShell pour activer cette fonctionnalitĂ© sont disponibles en ligne.

bash
reg query HKLM\System\CurrentControlSet\Control\LSA /v LsaCfgFlags

Pour une compréhension complÚte et des instructions sur l'activation de Credential Guard dans Windows 10 et son activation automatique dans les systÚmes compatibles de Windows 11 Enterprise and Education (version 22H2), consultez Microsoft's documentation.

Des détails supplémentaires sur l'implémentation de custom SSPs pour la capture d'identifiants sont fournis dans this guide.

RDP RestrictedAdmin Mode

Windows 8.1 and Windows Server 2012 R2 ont introduit plusieurs nouvelles fonctionnalités de sécurité, dont le Restricted Admin mode for RDP. Ce mode a été conçu pour renforcer la sécurité en atténuant les risques associés aux attaques pass the hash.

Traditionnellement, lorsque vous vous connectez à un ordinateur distant via RDP, vos identifiants sont stockés sur la machine cible. Cela représente un risque de sécurité important, surtout lorsque vous utilisez des comptes avec des privilÚges élevés. Toutefois, avec l'introduction du Restricted Admin mode, ce risque est fortement réduit.

Lorsque vous initiez une connexion RDP en utilisant la commande mstsc.exe /RestrictedAdmin, l'authentification auprÚs de l'ordinateur distant est effectuée sans stocker vos identifiants dessus. Cette approche garantit que, en cas d'infection par un malware ou si un utilisateur malveillant accÚde au serveur distant, vos identifiants ne sont pas compromis, car ils ne sont pas stockés sur le serveur.

Il est important de noter que dans le Restricted Admin mode, les tentatives d'accĂšs aux ressources rĂ©seau depuis la session RDP n'utiliseront pas vos identifiants personnels ; c'est plutĂŽt l'identitĂ© de la machine qui est utilisĂ©e.

Cette fonctionnalité représente une avancée importante pour sécuriser les connexions Remote Desktop et protéger les informations sensibles contre une exposition en cas de faille de sécurité.

Pour plus d'informations détaillées, visitez this resource.

Cached Credentials

Windows sĂ©curise les domain credentials via la Local Security Authority (LSA), en prenant en charge les processus de logon avec des protocoles de sĂ©curitĂ© comme Kerberos et NTLM. Une caractĂ©ristique clĂ© de Windows est sa capacitĂ© Ă  mettre en cache les dix derniĂšres connexions de domaine pour s'assurer que les utilisateurs peuvent toujours accĂ©der Ă  leurs ordinateurs mĂȘme si le domain controller est hors ligne — trĂšs utile pour les utilisateurs de laptops souvent hors du rĂ©seau de l'entreprise.

Le nombre de connexions en cache est réglable via une clé de registre spécifique ou une stratégie de groupe. Pour afficher ou modifier ce paramÚtre, la commande suivante est utilisée :

bash
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT

L'accÚs à ces identifiants mis en cache est strictement contrÎlé, seul le compte SYSTEM disposant des autorisations nécessaires pour les consulter. Les administrateurs qui doivent accéder à ces informations doivent le faire avec les privilÚges de l'utilisateur SYSTEM. Les identifiants sont stockés à : HKEY_LOCAL_MACHINE\SECURITY\Cache

Mimikatz peut ĂȘtre utilisĂ© pour extraire ces identifiants mis en cache en exĂ©cutant la commande lsadump::cache.

Pour plus de détails, la source originale fournit des informations complÚtes.

Protected Users

L'appartenance au groupe Protected Users apporte plusieurs améliorations de sécurité pour les utilisateurs, garantissant un niveau de protection plus élevé contre le vol et l'abus d'identifiants :

  • Credential Delegation (CredSSP) : MĂȘme si le paramĂštre de stratĂ©gie de groupe Allow delegating default credentials est activĂ©, les identifiants en clair des Protected Users ne seront pas mis en cache.
  • Windows Digest : À partir de Windows 8.1 et Windows Server 2012 R2, le systĂšme ne mettra pas en cache les identifiants en clair des Protected Users, indĂ©pendamment du statut de Windows Digest.
  • NTLM : Le systĂšme ne mettra pas en cache les identifiants en clair des Protected Users ni les fonctions Ă  sens unique NT (NTOWF).
  • Kerberos : Pour les Protected Users, l'authentification Kerberos ne gĂ©nĂ©rera pas de clĂ©s DES ou RC4, et ne mettra pas en cache les identifiants en clair ni les clĂ©s Ă  long terme au-delĂ  de l'acquisition initiale du Ticket-Granting Ticket (TGT).
  • Offline Sign-In : Les Protected Users n'auront pas de vĂ©rificateur mis en cache créé lors de la connexion ou du dĂ©verrouillage, ce qui signifie que la connexion hors ligne n'est pas prise en charge pour ces comptes.

Ces protections sont activées dÚs qu'un utilisateur membre du groupe Protected Users se connecte à l'appareil. Cela garantit que des mesures de sécurité critiques sont en place pour se prémunir contre diverses méthodes de compromission des identifiants.

Pour des informations plus détaillées, consultez la documentation officielle.

Table from the docs.

Windows Server 2003 RTMWindows Server 2003 SP1+

Windows Server 2012,
Windows Server 2008 R2,
Windows Server 2008

Windows Server 2016
Account OperatorsAccount OperatorsAccount OperatorsAccount Operators
AdministratorAdministratorAdministratorAdministrator
AdministratorsAdministratorsAdministratorsAdministrators
Backup OperatorsBackup OperatorsBackup OperatorsBackup Operators
Cert Publishers
Domain AdminsDomain AdminsDomain AdminsDomain Admins
Domain ControllersDomain ControllersDomain ControllersDomain Controllers
Enterprise AdminsEnterprise AdminsEnterprise AdminsEnterprise Admins
Enterprise Key Admins
Key Admins
KrbtgtKrbtgtKrbtgtKrbtgt
Print OperatorsPrint OperatorsPrint OperatorsPrint Operators
Read-only Domain ControllersRead-only Domain Controllers
ReplicatorReplicatorReplicatorReplicator
Schema AdminsSchema AdminsSchema AdminsSchema Admins
Server OperatorsServer OperatorsServer OperatorsServer Operators

References

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks