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
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
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 :
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Ă© :
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
orProtectedLight
) - 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 avec0x5 (Access Denied)
, mĂȘme siSeDebugPrivilege
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, commeWinTcb
(0x61
ou0x62
). - 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++:
// 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
avecInitializeProcThreadAttributeList
etUpdateProcThreadAttribute(PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL, ...)
, puis passerEXTENDED_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
, orPROTECTION_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 :
- Use a signed kernel driver (e.g., Mimikatz + mimidrv.sys) to remove LSASSâs protection flag:
- 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.
- 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
. - 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:
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.
- Pour plus d'informations sur cette vérification https://itm4n.github.io/lsass-runasppl/
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.
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 :
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 RTM | Windows Server 2003 SP1+ | Windows Server 2012, | Windows Server 2016 |
---|---|---|---|
Account Operators | Account Operators | Account Operators | Account Operators |
Administrator | Administrator | Administrator | Administrator |
Administrators | Administrators | Administrators | Administrators |
Backup Operators | Backup Operators | Backup Operators | Backup Operators |
Cert Publishers | |||
Domain Admins | Domain Admins | Domain Admins | Domain Admins |
Domain Controllers | Domain Controllers | Domain Controllers | Domain Controllers |
Enterprise Admins | Enterprise Admins | Enterprise Admins | Enterprise Admins |
Enterprise Key Admins | |||
Key Admins | |||
Krbtgt | Krbtgt | Krbtgt | Krbtgt |
Print Operators | Print Operators | Print Operators | Print Operators |
Read-only Domain Controllers | Read-only Domain Controllers | ||
Replicator | Replicator | Replicator | Replicator |
Schema Admins | Schema Admins | Schema Admins | Schema Admins |
Server Operators | Server Operators | Server Operators | Server Operators |
References
- CreateProcessAsPPL â minimal PPL process launcher
- STARTUPINFOEX structure (Win32 API)
- InitializeProcThreadAttributeList (Win32 API)
- UpdateProcThreadAttribute (Win32 API)
- LSASS RunAsPPL â background and internals
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
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.