Integrity Levels
Last updated
Last updated
Impara e pratica il Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
In Windows Vista e versioni successive, tutti gli elementi protetti hanno un tag di livello di integrità. Questa configurazione assegna principalmente un livello di integrità "medio" a file e chiavi di registro, tranne per alcune cartelle e file a cui Internet Explorer 7 può scrivere a un livello di integrità basso. Il comportamento predefinito è che i processi avviati da utenti standard abbiano un livello di integrità medio, mentre i servizi operano tipicamente a un livello di integrità di sistema. Un'etichetta di alta integrità protegge la directory radice.
Una regola fondamentale è che gli oggetti non possono essere modificati da processi con un livello di integrità inferiore a quello dell'oggetto. I livelli di integrità sono:
Non attendibile: Questo livello è per processi con accessi anonimi. %%%Esempio: Chrome%%%
Basso: Principalmente per interazioni internet, specialmente nella Modalità Protetta di Internet Explorer, che influisce su file e processi associati, e su alcune cartelle come la Cartella Temporanea di Internet. I processi a bassa integrità affrontano restrizioni significative, inclusa l'assenza di accesso in scrittura al registro e accesso limitato in scrittura al profilo utente.
Medio: Il livello predefinito per la maggior parte delle attività, assegnato a utenti standard e oggetti senza livelli di integrità specifici. Anche i membri del gruppo Amministratori operano a questo livello per impostazione predefinita.
Alto: Riservato agli amministratori, consentendo loro di modificare oggetti a livelli di integrità inferiori, inclusi quelli allo stesso livello alto.
Sistema: Il livello operativo più alto per il kernel di Windows e i servizi core, fuori portata anche per gli amministratori, garantendo la protezione delle funzioni vitali del sistema.
Installer: Un livello unico che si trova al di sopra di tutti gli altri, consentendo agli oggetti a questo livello di disinstallare qualsiasi altro oggetto.
Puoi ottenere il livello di integrità di un processo utilizzando Process Explorer di Sysinternals, accedendo alle proprietà del processo e visualizzando la scheda "Sicurezza":
Puoi anche ottenere il tuo livello di integrità attuale usando whoami /groups
Un oggetto all'interno del file-system potrebbe avere un requisito minimo di livello di integrità e se un processo non ha questo livello di integrità non sarà in grado di interagire con esso. Ad esempio, creiamo un file regolare da una console di utente regolare e controlliamo i permessi:
Ora, assegniamo un livello di integrità minimo di High al file. Questo deve essere fatto da una console eseguita come amministratore poiché una console regolare funzionerà a livello di integrità Medio e non sarà autorizzata ad assegnare un livello di integrità Alto a un oggetto:
Questo è il punto in cui le cose diventano interessanti. Puoi vedere che l'utente DESKTOP-IDJHTKP\user
ha privilegi COMPLETI sul file (infatti, questo era l'utente che ha creato il file), tuttavia, a causa del livello di integrità minimo implementato, non sarà in grado di modificare il file a meno che non stia eseguendo all'interno di un High Integrity Level (nota che sarà in grado di leggerlo):
Pertanto, quando un file ha un livello di integrità minimo, per modificarlo è necessario essere in esecuzione almeno a quel livello di integrità.
Ho fatto una copia di cmd.exe
in C:\Windows\System32\cmd-low.exe
e gli ho impostato un livello di integrità basso da una console di amministratore:
Ora, quando eseguo cmd-low.exe
, esso verrà eseguito con un livello di integrità basso invece di uno medio:
Per le persone curiose, se assegni un alto livello di integrità a un binario (icacls C:\Windows\System32\cmd-high.exe /setintegritylevel high
), non verrà eseguito automaticamente con un alto livello di integrità (se lo invochi da un livello di integrità medio --per impostazione predefinita-- verrà eseguito con un livello di integrità medio).
Non tutti i file e le cartelle hanno un livello di integrità minimo, ma tutti i processi vengono eseguiti con un livello di integrità. E simile a quanto accaduto con il file system, se un processo vuole scrivere all'interno di un altro processo deve avere almeno lo stesso livello di integrità. Questo significa che un processo con un livello di integrità basso non può aprire un handle con accesso completo a un processo con livello di integrità medio.
A causa delle restrizioni commentate in questa e nella sezione precedente, da un punto di vista della sicurezza, è sempre raccomandato eseguire un processo al livello di integrità più basso possibile.