Что такое SID виртуальной машины?

Что такое SID (Security IDentifier) в общем понимает каждый, кто имел дело с администрированием Windows. Какие объекты имеют SID? С этим немного сложнее, попробуем разобраться. С понятием SID пользователя или группы мы сталкиваемся постоянно, предоставляя права доступа к папкам и файлам NTFS. С SID компьютера мы встречаемся, делегируя права учетным записям компьютеров в домене на выполнение неких операций или чтения политик безопасности. Понятие SID домена тоже довольно понятно интуитивно, но что же дальше?

В Windows Vista было введено понятие SID службы. Теперь каждой службе ОС можно предоставлять собственные права, вне зависимости от того, что большая часть служб работают в контексте Local Service. Действительно, SID служб S1 и S2 в ACL Windows Vista выглядят как NT SERVICE\S1 и NT SERVICE\S2. Это сделано для изоляции служб, то есть чтобы одна служба не могла писать в файлы и память, выделенные в личное пользование другой службе. Примером из жизни является служба Trusted Installer, которая имеет полные права на системные файлы в каталоге Windows. По умолчанию только эта служба может заменять системные файлы. Даже администраторам или другим службам при необходимости такие права приходится делегировать явным образом.

С появлением виртуализации Hyper-V в составе Windows Server 2008 встает вопрос изоляции файлов и памяти одной виртуальной машины от других ВМ. Ведь очевидно, что все виртуальные машины работают в контексте службы Hyper-V Virtual Machine Management в рамках процесса Virtual Machine Worker Process (vmwp.exe). Так как же давать раздельные права объектам, работающим внутри одной службы? Для этого и было введено понятие SID виртуальной машины. Если взглянуть на ACL файлов ВМ, мы увидим там SID вида NT VIRTUAL MACHINE\<GUID> , где GUID — это идентификатор виртуальной машины, настройки которой по умолчанию хранятся в C:\ProgramData\Microsoft\Windows\Hyper-V\<GUID>.xml.

Запустим Process Explorer и посмотрим на свойства процесса Virtual Machine Worker Process (vmwp.exe) для конкретной виртуальной машины:

Здесь мы видим, что процесс запускает виртуальную машину именно по ее GUID. А в свойствах безопасности данного процесса видим, что запущенной ВМ даются отдельные от остальных права:

Что можно сказать по результатам этого небольшого исследования?

  • Процесс vmwp.exe работает в контексте Network Service и имеет права на чтение и запись в файл виртуального диска ВМ в формате VHD, но не имеет прав на удаление файла.
  • Другие процессы, и даже другие ВМ, запущенные в контексте процесса vmwp.exe, не имеют таких прав.
  • Обратим внимание, что и icacls.exe, и Process Explorer показывают нам SID не в традиционном представлении вида S-1-5-83-1-151595173-1205986706-4119140776-3488306278…, а более удобное для понимания отображаемое имя. Оно включает название службы и GUID виртуальной машины.

Надеюсь, что теперь заявления Microsoft об изоляции процессов и виртуальных машин станут звучать более весомо, ибо мы только что посмотрели, как это реализуется.