Si un cmd.exe de Windows se ejecuta con privilegios elevados, ¿algo que ejecuto desde su solicitud también se ejecuta con privilegios elevados?

11

Si mi ventana cmd.exe dice "Administrador" en la barra de título, lo que indica que se inició con privilegios elevados, ¿significa que todo lo que ejecuto desde esta ventana de comandos también se ejecuta con privilegios elevados?

Específicamente, si ejecuto algo como:

msiexec SomeProgram.msi

¿se está ejecutando mi instalador con privilegios elevados porque se ejecutó desde un cmd.exe que se ejecutaba con privilegios elevados?

Más específicamente: me pregunto si las aplicaciones que presentan una interfaz de usuario y devuelven el mensaje en la ventana cmd.exe de inmediato, como la msiexecllamada anterior, se están ejecutando con privilegios elevados.

Ian C.
fuente

Respuestas:

16

Sí, se ejecuta con privilegios elevados.

Prueba simple:

Puede probar esto con bastante facilidad abriendo un símbolo del sistema elevado y uno no elevado. Ejecute el comando notepad.exeen ambos e intente guardar un archivo de texto en blanco en C:\Windows. Uno guardará, uno arrojará un error de permisos.

Prueba exhaustiva:

Si eso no es suficiente para confirmarlo (realmente no me satisfizo), puede usar AccessChk de SysInternals. Deberá ejecutar esto desde un símbolo del sistema elevado.

Comencemos revisando los dos procesos de Bloc de notas que se están ejecutando:

Bloc 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

Uno se ejecuta con mi nombre de usuario de dominio, el otro se ejecuta con el grupo integrado Administradores. También tiene un alto nivel obligatorio . También puede ejecutar con la -fbandera para un desglose de los privilegios y tokens.

MSIExec y archivos MSI

Pensé que las cosas podrían complicarse un poco más cuando se ejecuta msiexec. Tengo un instalador independiente de Google Chrome que fue útil para probar.

msiexec.exe inicia el instalador de Chrome desde el indicador elevado:

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

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

chrome_installer.exe generado por MSI:

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

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

¡Ya no está tan cortado y seco! Parece que un chrome_installer.exeproceso se ejecutó a través del servicio MSIServer.


Esto me hace preguntarme qué comportamiento podrían tener otros instaladores, así que ejecuté un Evernote.msi que tenía a mano:

Elevado msiexec.exe al iniciar un instalador de 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

Interesante; hay un msiexec.exe que se ejecuta bajo el nivel del sistema esta vez. Utilicé Process Monitor para encontrar que la ventana de instalación real que aparece proviene del proceso msiexec a nivel de sistema. Matar el alto nivel obligatorio también mató el proceso de nivel del sistema.

Msiexec.exe no elevado que inicia un instalador de 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 Evernote obtendrá acceso a nivel de sistema de cualquier manera. Hacer doble clic en el instalador tiene el mismo resultado.


Conclusión:

Creo que está bastante bien demostrado que los procesos heredarán permisos a menos que se especifique lo contrario. Eso no garantiza que msiexec SomeProgram.msise ejecutará con un alto nivel obligatorio en todos los procesos; podría ejecutarse bajo el nivel del sistema o bajo MSIServer. Su kilometraje puede variar, y no me sorprendería ver muchos casos en los que estas reglas parecen estar "rotas".

Tanner Faulkner
fuente
2
Además de las pruebas empíricas, se supone que los procesos de Windows heredan los permisos del padre.
Bob
Gran punto con la prueba. Lo probé desde un cmd.exe que se inició con permisos elevados y se me denegó el permiso al intentar guardar el archivo a C:\Windowspesar de haber iniciado el Bloc de notas desde el cmd.exe elevado. ¿Hay alguna manera de romper la regla "se supone que hereda del padre"?
Ian C.
@IanC. Es posible ejecutar un proceso hijo con menos privilegios. Debería haber redactado mi comentario anterior como "se supone que debe heredar por defecto ". He modificado mi respuesta para incluir esa información. Sin embargo, el Bloc de notas debería haber heredado los privilegios administrativos.
Bob
@IanC. Extraño, funcionó para mí. ¿Intentaste probar accesschk? No estoy seguro de cuál podría ser la diferencia.
Tanner Faulkner
11

Por defecto, los procesos de Windows heredarán su contexto de seguridad del padre:

Las ACL en el descriptor de seguridad predeterminado para un proceso provienen del token primario o de suplantación del creador.

MSDN sobre seguridad de procesos y derechos de acceso

Sin embargo, es posible generar procesos con menos privilegios:

Si bien los procesos heredan el nivel de integridad del proceso que lo generó, el nivel de integridad se puede personalizar en el momento de la creación del proceso. Además de definir el límite para los mensajes de ventana en la tecnología de aislamiento de privilegios de la interfaz de usuario, el control obligatorio de integridad es utilizado por aplicaciones como Windows Explorer, Internet Explorer, Google Chrome y Adobe Reader para aislar documentos de objetos vulnerables en el sistema.

Wikipedia sobre Control de integridad obligatorio relacionado con esta otra página de MSDN , también mencionada aquí . Otra presentación también menciona la herencia del proceso.

Sin embargo, creo que cmd.exe lanzará procesos secundarios con el mayor nivel de herencia de privilegios posible, como lo demuestran las pruebas y la respuesta de @ Tanner.

Beto
fuente
2

Puede haber dos formas de eliminar los privilegios del comando ejecutado:

  • runas /trustlevel:0x20000 "msiexec SomeProgram.msi"(ejecute runas /showtrustlevelspara aprender que 0x20000es el nivel de confianza predeterminado del usuario, esto incluso funciona para instalar / ejecutar programas que "requieren" privilegios elevados, sin otorgarlos realmente cuando se ejecuta como administrador. Esto pasa la prueba del bloc de notas de Tanner ) según esta respuesta SU
  • psexec -l -d msiexec SomeProgram.msisegún esta respuesta SU (quizás también se requieran algunos "", no probé esto ya que runasfunciona lo suficientemente bien para mí)
Tobias Kienzler
fuente