Если Windows cmd.exe работает с повышенными привилегиями, выполняет ли что-либо из его приглашения также с повышенными привилегиями?

11

Если в окне cmd.exe в строке заголовка указано «Администратор», что указывает на то, что оно было запущено с повышенными привилегиями, означает ли это, что все, что я запускаю из этого командного окна, также запускается с повышенными привилегиями?

В частности, если я запускаю что-то вроде:

msiexec SomeProgram.msi

мой установщик запускается с повышенными привилегиями, потому что он был запущен из cmd.exe, который был запущен с повышенными привилегиями?

Более конкретно: мне интересно msiexec, выполняются ли приложения, которые представляют пользовательский интерфейс и сразу возвращают приглашение в окне cmd.exe, как, например, приведенный выше вызов, с повышенными привилегиями.

Ян С.
источник

Ответы:

16

Да, он выполняется с повышенными привилегиями.

Простой тест:

Вы можете легко проверить это, открыв одну командную строку с повышенными правами и одну без повышенных прав. Запустите команду notepad.exeв обоих и попробуйте сохранить пустой текстовый файл в C:\Windows. Один сохранит, другой выдаст ошибку прав доступа.

Тщательный тест:

Если этого недостаточно, чтобы подтвердить это для вас (это меня не очень устраивало), вы можете использовать AccessChk из SysInternals. Вам нужно будет запустить это из командной строки с повышенными правами.

Давайте начнем с проверки двух запущенных процессов Блокнота:

Блокнот: ( 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

Один работает под моим именем пользователя домена, другой работает под встроенной группой администраторов. Он также имеет высокий обязательный уровень . Вы также можете запустить с -fфлагом для разбивки привилегий и токенов.

MSIExec и MSI файлы

Я думал, что все может стать немного сложнее при запуске msiexec. У меня есть автономный установщик Google Chrome, который был удобен для тестирования.

msiexec.exe запускает установщик Chrome из командной строки с повышенными правами:

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

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

chrome_installer.exe, созданный MSI:

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

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

Уже не так стричь и сушить! Похоже, chrome_installer.exeпроцессы запускались через службу MSIServer.


Это заставляет меня задуматься о поведении других инсталляторов, поэтому я запустил Evernote.msi, который мне пригодился:

Повышенный msiexec.exe запускает установщик 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

Интересный; на этот раз есть msiexec.exe, который запускается на системном уровне. Я использовал Process Monitor, чтобы обнаружить, что всплывающее окно фактической установки происходит из процесса msiexec системного уровня. Убийство высокого обязательного уровня также убило процесс системного уровня.

Msiexec.exe без повышенных прав запускает программу установки 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

Похоже, Evernote получит доступ на системном уровне в любом случае. Двойной щелчок установщика приводит к тому же результату.


Вывод:

Я думаю, что это довольно хорошо продемонстрировано, что процессы будут наследовать разрешения, если не указано иное. Это не гарантирует, что msiexec SomeProgram.msiбудет работать с высоким обязательным уровнем для всех процессов процессов; он может работать на системном уровне или под MSIServer. Ваш пробег может варьироваться, и я не удивлюсь, увидев много случаев, когда эти правила кажутся «нарушенными».

Таннер Фолкнер
источник
2
Помимо эмпирического тестирования, процессы Windows должны наследовать разрешения от родителя.
Боб
Отличный момент с тестом. Я попытался сделать это из cmd.exe, который был запущен с повышенными разрешениями, и я получил отказ в разрешении при попытке сохранить файл, C:\Windowsнесмотря на то, что запустил Блокнот из повышенного cmd.exe. Есть ли способ нарушить правило «наследовать от родителя»?
Ян С.
@IanC. Можно запустить дочерний процесс с меньшими правами. Я должен был сформулировать свой предыдущий комментарий как «предполагается наследовать по умолчанию ». Я изменил свой ответ, чтобы включить эту информацию. Однако Блокнот должен был унаследовать административные привилегии.
Боб
@IanC. Странно, у меня это сработало. Вам довелось попробовать accesschk? Не уверен, какая разница может быть.
Таннер Фолкнер,
11

По умолчанию процессы Windows наследуют свой контекст безопасности от родительского:

Списки ACL в дескрипторе безопасности по умолчанию для процесса происходят из основного маркера или маркера олицетворения создателя.

MSDN о безопасности процессов и правах доступа

Однако возможно создание процессов с меньшими правами:

Хотя процессы наследуют уровень целостности процесса, который его породил, уровень целостности можно настраивать во время создания процесса. Помимо определения границы для оконных сообщений в технологии изоляции привилегий пользовательского интерфейса, обязательный контроль целостности используется приложениями, такими как Windows Explorer, Internet Explorer, Google Chrome и Adobe Reader, для изоляции документов от уязвимых объектов в системе.

Википедия по обязательному контролю целостности, относящаяся к этой другой странице MSDN , также упоминается здесь . В другой презентации также упоминается процесс наследования.

Однако я считаю, что cmd.exe запустит дочерние процессы с максимально возможным уровнем наследования привилегий, как показывает тестирование и ответ @ Tanner.

боб
источник
2

Может быть два способа отменить привилегии исполняемой команды:

  • runas /trustlevel:0x20000 "msiexec SomeProgram.msi"(запустите, runas /showtrustlevelsчтобы узнать, что 0x20000это уровень доверия пользователя по умолчанию - это даже работает для установки / запуска программ, которые «требуют» повышенных привилегий - без фактического предоставления их при запуске от имени администратора. Это проходит тест блокнота Таннера ) согласно этому ответу SU
  • psexec -l -d msiexec SomeProgram.msiсогласно этому ответу SU (возможно, некоторые "" также требуются, я не проверял это, так как runasработает достаточно хорошо для меня)
Тобиас Кинцлер
источник