Se un cmd.exe di Windows è in esecuzione con privilegi elevati, tutto ciò che eseguo dal suo prompt viene eseguito anche con privilegi elevati?


11

Se la mia finestra cmd.exe indica "Amministratore" nella barra del titolo, indicando che è stato avviato con privilegi elevati, significa che qualsiasi cosa che eseguo da questa finestra di comando viene eseguita anche con privilegi elevati?

In particolare, se eseguo qualcosa di simile:

msiexec SomeProgram.msi

il mio programma di installazione viene eseguito con privilegi elevati perché è stato eseguito da un cmd.exe in esecuzione con privilegi elevati?

Più specificamente: mi chiedo se le applicazioni che presentano un'interfaccia utente e restituiscono immediatamente il prompt nella finestra cmd.exe, come la msiexecchiamata sopra, eseguono privilegi elevati.

Risposte:


16

Sì, viene eseguito con privilegi elevati.

Test semplice:

Puoi testarlo abbastanza facilmente aprendo un prompt dei comandi elevato e uno non elevato. Esegui il comando notepad.exein entrambi e prova a salvare un file di testo vuoto C:\Windows. Uno salverà, uno genererà un errore di autorizzazioni.

Test approfondito:

Se questo non è abbastanza per confermarlo per te (non mi ha davvero soddisfatto) puoi usare AccessChk da SysInternals. Dovrai eseguirlo da un prompt dei comandi con privilegi elevati.

Iniziamo controllando i due processi di Blocco note in esecuzione:

Blocco note: ( accesschk.exe -v -p notepad)

[11140] notepad.exe
  Medium Mandatory Level [No-Write-Up, No-Read-Up]
  RW DOMAIN\Tannerf
        PROCESS_ALL_ACCESS
  RW NT AUTHORITY\SYSTEM
        PROCESS_ALL_ACCESS
[11004] notepad.exe
  High Mandatory Level [No-Write-Up, No-Read-Up]
  RW BUILTIN\Administrators
        PROCESS_ALL_ACCESS
  RW NT AUTHORITY\SYSTEM
        PROCESS_ALL_ACCESS

Uno è in esecuzione con il mio nome utente di dominio, l'altro è in esecuzione nel gruppo predefinito Amministratori. Ha anche un alto livello obbligatorio . Puoi anche correre con la -fbandiera per una suddivisione dei privilegi e dei token.

File MSIExec e MSI

Pensavo che le cose potessero diventare un po 'più complicate durante la corsa msiexec. Ho un programma di installazione autonomo di Google Chrome che è stato utile per testare.

msiexec.exe avvia il programma di installazione di Chrome da un prompt elevato:

D:\Users\tannerf>accesschk.exe -p msiexec.exe

[10540] msiexec.exe
  RW BUILTIN\Administrators
  RW NT AUTHORITY\SYSTEM

chrome_installer.exe generato da MSI:

D:\Users\tannerf>accesschk.exe -p chrome_installer.exe

[5552] chrome_installer.exe
     NT AUTHORITY\SYSTEM
     OWNER RIGHTS
  RW NT SERVICE\msiserver

Non più così tagliato e asciutto! Sembra che un chrome_installer.exeprocesso sia stato eseguito attraverso il servizio MSIServer.


Questo mi fa domandare che comportamento potrebbero avere altri installatori, quindi ho eseguito un Evernote.msi che avevo a portata di mano:

Elevato msiexec.exe che avvia un programma di installazione Evernote:

[6916] msiexec.exe
  High Mandatory Level [No-Write-Up, No-Read-Up]
  RW BUILTIN\Administrators
        PROCESS_ALL_ACCESS
  RW NT AUTHORITY\SYSTEM
        PROCESS_ALL_ACCESS
[4652] msiexec.exe
  System Mandatory Level [No-Write-Up, No-Read-Up]
  R  BUILTIN\Administrators
        PROCESS_QUERY_INFORMATION
        PROCESS_QUERY_LIMITED_INFORMATION

Interessante; c'è un msiexec.exe che viene eseguito a livello di sistema questa volta. Ho usato Process Monitor per scoprire che l'attuale finestra di installazione che viene visualizzata proviene dal processo msiexec a livello di sistema. Uccidere l'alto livello obbligatorio ha anche ucciso il processo a livello di sistema.

Msiexec.exe non elevato che avvia un programma di installazione Evernote:

[7472] msiexec.exe
  Medium Mandatory Level [No-Write-Up, No-Read-Up]
  RW DOMAIN\Tannerf
        PROCESS_ALL_ACCESS
  RW NT AUTHORITY\SYSTEM
        PROCESS_ALL_ACCESS
[4404] msiexec.exe
  System Mandatory Level [No-Write-Up, No-Read-Up]
  R  BUILTIN\Administrators
        PROCESS_QUERY_INFORMATION
        PROCESS_QUERY_LIMITED_INFORMATION

Sembra che Evernote otterrà l'accesso a livello di sistema in entrambi i modi. Facendo doppio clic sul programma di installazione si ottiene lo stesso risultato.


Conclusione:

Penso che sia abbastanza ben dimostrato che un processo erediterà le autorizzazioni se non diversamente specificato. Ciò non garantisce l' msiexec SomeProgram.msiesecuzione con un livello obbligatorio elevato in tutti i processi; potrebbe funzionare a livello di sistema o sotto MSIServer. Il tuo chilometraggio può variare e non sarei sorpreso di vedere molti casi in cui queste regole sembrano "infrante".


2
Oltre ai test empirici, i processi di Windows dovrebbero ereditare le autorizzazioni dal genitore.
Bob,

Ottimo punto con il test. L'ho provato da un cmd.exe che è stato avviato con autorizzazioni elevate e mi viene negata l'autorizzazione nel tentativo di salvare il file C:\Windowsnonostante abbia avviato Blocco note da cmd.exe elevato. Esiste un modo per violare la regola "presunta eredità dal genitore"?
Ian C.

@IanC. È possibile eseguire un processo figlio con meno privilegi. Avrei dovuto definire il mio commento precedente come "supposto ereditare di default ". Ho modificato la mia risposta per includere tali informazioni. Tuttavia, Blocco note dovrebbe aver ereditato i privilegi di amministratore.
Bob,

@IanC. Strano, ha funzionato per me. Ti è capitato di provare accesschk? Non sono sicuro di quale potrebbe essere la differenza.
Tanner Faulkner,

11

Per impostazione predefinita, i processi di Windows erediteranno il loro contesto di sicurezza dal padre:

Gli ACL nel descrittore di sicurezza predefinito per un processo provengono dal token primario o di rappresentazione del creatore.

MSDN sulla sicurezza dei processi e diritti di accesso

È tuttavia possibile generare processi con meno privilegi:

Mentre i processi ereditano il livello di integrità del processo che lo ha generato, il livello di integrità può essere personalizzato al momento della creazione del processo. Oltre a definire il limite per i messaggi delle finestre nella tecnologia di isolamento dei privilegi dell'interfaccia utente, il controllo obbligatorio dell'integrità viene utilizzato da applicazioni come Windows Explorer, Internet Explorer, Google Chrome e Adobe Reader per isolare i documenti dagli oggetti vulnerabili nel sistema.

Wikipedia sul controllo obbligatorio dell'integrità relativa a questa altra pagina MSDN , menzionata anche qui . Un'altra presentazione menziona anche l'ereditarietà dei processi.

Tuttavia, credo che cmd.exe avvierà i processi figlio con il maggior livello possibile di ereditarietà dei privilegi, come dimostrano i test e le risposte di @ Tanner.


2

Esistono due modi per annullare l'elevazione dei privilegi del comando eseguito:

  • runas /trustlevel:0x20000 "msiexec SomeProgram.msi"(corri runas /showtrustlevelsper scoprire che 0x20000è il livello di fiducia predefinito dell'utente - funziona anche per l'installazione / esecuzione di programmi che "richiedono" privilegi elevati - senza concederli effettivamente quando eseguiti come amministratore. Passa il test del blocco note di Tanner ) come da questa risposta SU
  • psexec -l -d msiexec SomeProgram.msiper questa risposta SU (forse sono necessari anche alcuni "", non l'ho provato poiché runasfunziona abbastanza bene per me)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.