Se um cmd.exe do Windows estiver sendo executado com privilégios elevados, qualquer coisa que eu execute a partir de seu prompt também é executada com privilégios elevados?

11

Se minha janela cmd.exe diz "Administrador" na barra de título, indicando que ela foi iniciada com privilégios elevados, isso significa que qualquer coisa que eu execute a partir dessa janela de comando também é executada com privilégios elevados?

Especificamente, se eu executo algo como:

msiexec SomeProgram.msi

o meu instalador está sendo executado com privilégios elevados porque foi executado a partir de um cmd.exe que estava sendo executado com privilégios elevados?

Mais especificamente: Gostaria de saber se os aplicativos que apresentam uma interface do usuário e retornam o prompt na janela cmd.exe imediatamente, como a chamada msiexec acima, estão sendo executados com privilégios elevados.

    
por Ian C. 24.05.2013 / 00:50

3 respostas

16

Sim, é executado com privilégios elevados.

Teste simples:

Você pode testar isso com bastante facilidade abrindo um prompt de comando elevado e um não elevado. Execute o comando notepad.exe em ambos e tente salvar um arquivo de texto em branco em C:\Windows . Um salvará, um lançará um erro de permissão.

Teste completo:

Se isso não for suficiente para confirmar isso (você não me satisfaz), você pode usar AccessChk da SysInternals. Você precisará executá-lo a partir de um prompt de comando elevado.

Vamos começar verificando os dois processos do Bloco de Notas em execução:

Bloco de notas: ( 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

Um está sendo executado sob o nome de usuário do meu domínio, o outro está sendo executado no grupo interno Administradores. Ele também tem um alto nível obrigatório . Você também pode executar com o sinalizador -f para um detalhamento dos privilégios e tokens.

arquivos MSIExec e MSI

Eu achei que as coisas poderiam ficar um pouco mais complicadas ao executar msiexec . Eu tenho um instalador autônomo do Google Chrome que foi útil para testar.

msiexec.exe inicia o instalador do Chrome a partir do prompt elevado:

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

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

chrome_installer.exe gerado pelo MSI:

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

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

Não tão cortado e seco mais! Parece que um chrome_installer.exe processa foi executado pelo serviço MSIServer.

Isso me faz pensar sobre o comportamento que outros instaladores podem ter, então eu corri um Evernote.msi que eu tinha à mão:

msiexec.exe elevado que inicia um instalador do 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; Há um msiexec.exe que é executado no nível do sistema neste momento. Eu usei o Process Monitor para descobrir que a janela de instalação real que aparece vem do processo msiexec no nível do sistema. Matar o alto nível obrigatório também eliminou o processo no nível do sistema.

msiexec.exe não elevado que está iniciando um instalador do 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

Parece que o Evernote terá acesso ao nível do sistema de qualquer maneira. Clicar duas vezes no instalador tem o mesmo resultado.

Conclusão:

Acho que ficou bem demonstrado que um processo herdará as permissões, a menos que seja especificado de outra forma. Isso não garante que msiexec SomeProgram.msi seja executado com um alto nível obrigatório em todos os processos processos; ele pode ser executado no nível do sistema ou no MSIServer. Sua milhagem pode variar, e eu não ficaria surpreso em ver muitos casos em que essas regras parecem estar "quebradas".

    
por 24.05.2013 / 00:54
11

Por padrão, os processos do Windows herdarão seu contexto de segurança do pai:

The ACLs in the default security descriptor for a process come from the primary or impersonation token of the creator.

MSDN sobre segurança e acesso a processos direitos

É, no entanto, possível gerar processos com menos privilégios:

While processes inherit the integrity level of the process that spawned it, the integrity level can be customized at the time of process creation. As well as for defining the boundary for window messages in the User Interface Privilege Isolation technology, Mandatory Integrity Control is used by applications like Windows Explorer, Internet Explorer, Google Chrome and Adobe Reader to isolate documents from vulnerable objects in the system.

Wikipedia sobre o controle de integridade obrigatório relacionado a esta outra página da MSDN , também mencionada aqui . Outra apresentação também menciona a herança de processos.

No entanto, acredito que o cmd.exe irá iniciar processos filhos com o maior nível de herança de privilégios possíveis, como mostram os testes e a resposta do @Thanner.

    
por 24.05.2013 / 01:30
2

Pode haver duas maneiras de desaltar os privilégios do comando executado:

  • runas /trustlevel:0x20000 "msiexec SomeProgram.msi" (execute runas /showtrustlevels para saber que 0x20000 é o nível de confiança padrão do usuário - isso até funciona para instalar / executar programas que "requerem" privilégios elevados - sem realmente concedê-los quando executados como administrador. Isso passa Teste do bloco de notas do Tanner ) como por esta resposta SU
  • psexec -l -d msiexec SomeProgram.msi por esta resposta SU (talvez algumas "" também sejam necessárias, eu não testei isso, pois runas funciona bom o suficiente para mim)
por 24.05.2013 / 09:45