Cette rรฉfรฉrence couvre les concepts fondamentaux de l'architecture de sรฉcuritรฉ Windows, essentiels pour comprendre les techniques offensives et dรฉfensives.
// EPROCESS - Structure kernel d'un processustypedefstruct_EPROCESS{KPROCESSPcb;// Process Control BlockEX_PUSH_LOCKProcessLock;LARGE_INTEGERCreateTime;LARGE_INTEGERExitTime;EX_RUNDOWN_REFRundownProtect;HANDLEUniqueProcessId;// PIDLIST_ENTRYActiveProcessLinks;// Liste des processus// ...PVOIDToken;// Access Token// ...}EPROCESS,*PEPROCESS;// ETHREAD - Structure kernel d'un threadtypedefstruct_ETHREAD{KTHREADTcb;// Thread Control BlockLARGE_INTEGERCreateTime;LARGE_INTEGERExitTime;LIST_ENTRYThreadListEntry;CLIENT_IDCid;// Process ID + Thread ID// ...}ETHREAD,*PETHREAD;
1.3 PEB (Process Environment Block)
// Structure accessible depuis user modetypedefstruct_PEB{BOOLEANInheritedAddressSpace;BOOLEANReadImageFileExecOptions;BOOLEANBeingDebugged;// Utilisรฉ pour anti-debug// ...PPEB_LDR_DATALdr;// Liste des DLLs chargรฉesPRTL_USER_PROCESS_PARAMETERSProcessParameters;// ...}PEB,*PPEB;// Accรจs au PEB// x64: gs:[0x60]// x86: fs:[0x30]
# Lister les processus avec leur PEBGet-Process|ForEach-Object{$proc=$_$modules=$proc.Modules|Select-Object-First3-ExpandPropertyModuleName[PSCustomObject]@{PID=$proc.IdName=$proc.NamePath=$proc.PathModules=$modules-join", "}}
1.4 Intรฉgritรฉ des Processus
Niveau
Valeur
Description
Untrusted
0x0000
Processus sandboxรฉ (Chrome)
Low
0x1000
Navigateur, IE Protected Mode
Medium
0x2000
Utilisateur standard
High
0x3000
Administrateur รฉlevรฉ
System
0x4000
Services SYSTEM
Protected
0x5000
Processus protรฉgรฉs (AV)
# Vรฉrifier le niveau d'intรฉgritรฉwhoami/groups|findstr"Label"# Via PowerShellGet-Process-Id$PID|Select-ObjectName,Id,@{N='Integrity';E={$token=(Get-Process-Id$_.Id).Handle# Requiert P/Invoke pour GetTokenInformation}}
# Lister ses privilegeswhoami/priv# Activer un privilege (si disponible mais dรฉsactivรฉ)# Requiert code C# ou outil comme PowerSploit[System.Reflection.Assembly]::LoadWithPartialName('System.Runtime.InteropServices')# AdjustTokenPrivileges via P/Invoke
2.3 Token Types
PRIMARY TOKEN
โโโ Associรฉ ร un processus
โโโ Crรฉรฉ au logon
โโโ Dรฉfinit le contexte de sรฉcuritรฉ du processus
IMPERSONATION TOKEN
โโโ Associรฉ ร un thread
โโโ Permet d'agir comme un autre utilisateur
โโโ Niveaux:
โ โโโ Anonymous : Aucune info
โ โโโ Identification : Peut identifier, pas agir
โ โโโ Impersonation : Peut agir localement
โ โโโ Delegation : Peut agir sur le rรฉseau
โโโ Crรฉรฉ via ImpersonateLoggedOnUser, etc.
2.4 Token Manipulation
// Techniques d'abus de token// 1. Token StealingOpenProcess(PROCESS_QUERY_INFORMATION,FALSE,targetPID);OpenProcessToken(hProcess,TOKEN_DUPLICATE,&hToken);DuplicateTokenEx(hToken,MAXIMUM_ALLOWED,NULL,SecurityImpersonation,TokenPrimary,&hNewToken);CreateProcessWithTokenW(hNewToken,LOGON_WITH_PROFILE,...);// 2. Token Impersonation (SeImpersonatePrivilege requis)ImpersonateLoggedOnUser(hToken);// Thread agit maintenant comme l'utilisateur du token// 3. Make Token (credentials requis)LogonUser("user","DOMAIN","password",LOGON32_LOGON_NEW_CREDENTIALS,...);
3. Security Descriptors & ACLs
3.1 Structure du Security Descriptor
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ SECURITY_DESCRIPTOR โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Owner SID : S-1-5-21-...-500 (Administrateur) โ
โ Group SID : S-1-5-21-...-513 (Domain Users) โ
โ DACL : Discretionary Access Control List โ
โ SACL : System Access Control List (Audit) โ
โ Control Flags : SE_DACL_PRESENT, SE_SACL_PRESENT, ... โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
3.2 DACL (Discretionary ACL)
DACL = Liste d'ACE (Access Control Entries)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ACE 1: ALLOW | Administrators | Full Control โ
โ ACE 2: ALLOW | SYSTEM | Full Control โ
โ ACE 3: ALLOW | Users | Read, Execute โ
โ ACE 4: DENY | Guest | All Access โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Ordre d'รฉvaluation:
1. Explicit Deny
2. Explicit Allow
3. Inherited Deny
4. Inherited Allow
5. Pas de match = Deny implicite
3.3 Permissions Communes
Permission
Valeur
Description
READ_CONTROL
0x20000
Lire le SD
WRITE_DAC
0x40000
Modifier la DACL
WRITE_OWNER
0x80000
Changer le propriรฉtaire
DELETE
0x10000
Supprimer l'objet
GENERIC_READ
0x80000000
Lecture gรฉnรฉrique
GENERIC_WRITE
0x40000000
รcriture gรฉnรฉrique
GENERIC_EXECUTE
0x20000000
Exรฉcution gรฉnรฉrique
GENERIC_ALL
0x10000000
Tous les droits
3.4 Vรฉrifier les Permissions
# Permissions sur un fichierGet-AclC:\Windows\System32\config\SAM|Format-List# Permissions sur un objet ADImport-ModuleActiveDirectory(Get-Acl"AD:CN=AdminSDHolder,CN=System,DC=corp,DC=local").Access# Permissions sur un servicesc sdshow[service_name]# Dรฉcoder le SDDLConvertFrom-SddlString"D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)..."# Trouver les permissions faiblesaccesschk.exe-uwcqv"Users"*
# Lister les sessionsquerysession# ouGet-CimInstanceWin32_LogonSession|Select-ObjectLogonId,LogonType,StartTime# Lister les processus par sessionGet-Process|Group-ObjectSessionId|ForEach-Object{[PSCustomObject]@{Session=$_.NameProcessCount=$_.CountProcesses=($_.Group |Select-Object-First5-ExpandPropertyName)-join", "}}
# Vรฉrifier si LSA Protection est activรฉeGet-ItemProperty-Path"HKLM:\SYSTEM\CurrentControlSet\Control\Lsa"-Name"RunAsPPL"# Vรฉrifier Credential GuardGet-CimInstance-ClassNameWin32_DeviceGuard-Namespaceroot\Microsoft\Windows\DeviceGuard|Select-ObjectSecurityServicesRunning,VirtualizationBasedSecurityStatus# Dรฉsactiver WDigest (empรชche le stockage des mots de passe en clair)Set-ItemProperty-Path"HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest"-Name"UseLogonCredential"-Value0
# Lister les services avec permissions faiblesaccesschk.exe-uwcqv"Users"*/accepteulaaccesschk.exe-uwcqv"Authenticated Users"*/accepteula# Permissions intรฉressantes:# SERVICE_CHANGE_CONFIG - Modifier le binaire# SERVICE_START - Dรฉmarrer le service# SERVICE_STOP - Arrรชter le service# WRITE_DAC - Modifier les permissions# Modifier un service vulnรฉrablesc config[service]binpath="C:\evil.exe"sc stop[service]sc start [service]
6.3 Drivers (Kernel Mode)
# Lister les drivers chargรฉsGet-WmiObjectWin32_SystemDriver|Select-ObjectName,State,PathName# Drivers signรฉs (Secure Boot)bcdedit/enum|findstr"testsigning"# Vulnรฉrabilitรฉs de drivers (LOLDrivers)# https://www.loldrivers.io/# Drivers vulnรฉrables utilisรฉs pour bypass AV/EDR
# Vรฉrifier les permissions sur une clรฉGet-Acl"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"|Format-List# Trouver les clรฉs modifiablesaccesschk.exe-kwsu"Users"HKLM\SOFTWARE# Modifier les permissions (admin requis)$acl=Get-Acl"HKLM:\SOFTWARE\TestKey"$rule=New-ObjectSystem.Security.AccessControl.RegistryAccessRule("Users","FullControl","Allow")$acl.SetAccessRule($rule)Set-Acl"HKLM:\SOFTWARE\TestKey"$acl
8. Named Pipes & Objects
8.1 Named Pipes
# Lister les named pipesGet-ChildItem\\.\pipe\# Pipes intรฉressants pour Red Team\\.\pipe\epmapper# RPC\\.\pipe\lsarpc# LSA RPC\\.\pipe\samr# SAM RPC\\.\pipe\netlogon# Netlogon\\.\pipe\spoolss# Print Spooler (PrintNightmare)# Pipes C2 courants\\.\pipe\msagent_*# Cobalt Strike\\.\pipe\postex_*# Cobalt Strike
# Explorer avec WinObj (Sysinternals)# Voir les objets kernel, leurs types, leurs permissions# Lister les handles d'un processushandle.exe-p[PID]# Trouver les fichiers ouvertshandle.exe-a"file"
# Liste avec dรฉtailsGet-Process|Select-ObjectId,Name,Path,Company# Process treeGet-CimInstanceWin32_Process|Select-ObjectProcessId,ParentProcessId,Name# Integrity level (requiert DVTA)tasklist/v
Services
# Liste des servicesGet-Service|Where-Object{$_.Status-eq'Running'}# Permissionssc sdshow[service]# Configsc qc[service]