Contents of this directory is archived and no longer updated.

Давненько я ничего не писал про SRP, хотя давно пора было бы заполнить некоторые пробелы. В этой статье мы разберём 3 вопроса (проблемы):

  • особенности применения SRP в системах x64;
  • особенности конфигурирования политики на терминальном сервере;
  • особенности создания правил в Vista-based системах и применения в XP-based системах.

Проблемы SRP в системах x64

Использование SRP в 64-разрядной системе иногда чревато проблемами. Давайте разберёмся с дефолтными правилами. Их у нас всего 2:

  • %HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot%
  • %HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir%

Это очень хорошие и полезные правила. Они позволяют нам запускать любые приложения из папки Windows и Program Files. Но в x64 системах у нас есть 2 класса приложений, родные x64 и унаследованные приложения x86, которые работают в режиме эмуляции. Такие приложения как правило устанавливаются в папку Program Files (x86). И если мы попробуем запустить любое приложение из папки Program Files (x86), мы получим ошибку:

x86 error

Это происходит по вполне очевидным причинам. Наши правила по умолчанию не распространяются на папку Program Files (x86). Для этого мы должны создать ещё одно правило:

  • %HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir (x86)%

После этого мы сможем запускать всё из папки Program Files (x86). Вроде бы всё хорошо и замечательно. Но природа работы SRP многогранна и необычна.

Представим ситуацию, у вас установлен 32-разрядный MS Outlook (ну или любая другая 32-разрядная почтовая программа) и вам пришло письмо с приаттаченным RAR архивом. А WinRAR у вас установлен x64. Вы пытаетесь открыть архив из письма, а не получается. На сколько я проверял, вообще ничего не происходит, но в журнале событий (напоминаю, что логи SRP пишутся в журнал Application) с EventID = 865 можно найти многозначащее:

Access to C:\Program Files\WinRAR\WinRAR.exe has been restricted by your Administrator by the default software restriction policy level.

Что хотите, то и делайте. Правила все есть, а не работают. Но я не зря говорил о многогранной и необычной природе SRP. При запуске одного приложения из второго (в нашем случае из аутлука запускаем WinRAR, чтобы открыть архив) контекст SRP наследуется из родительского приложения в дочернее (если так вообще можно сказать). Если говорить простым языком, если родительское приложение (в нашем случае MS Outlook) является 32-битным, то все запускаемые из него приложения проверяются так, будто они 32-битные. На практике это означает примерно следующее. Где фактически находится ветка реестра Software для x86 приложений? Кто-то скажет, что там же, где и всегда: HKLM\Software и будет не прав, потому что правильный ответ: HKLM\Software\Wow6432Node. И давайте посмотрим, что нам покажут вышеперечисленные пути (из правил SRP) в реестре:

ProgramFiles and ProgramFiles (x86) paths in Wow6432Node

А ведут оба этих пути в одну и ту же папку, т.е. Program Files (x86). Соответственно, в такой ситуации у нас нет ни одного правила для папки Program Files и вполне логично, что WinRAR запущен не был. В обратной ситуации (когда из 64-битного аутлука запустить 32-битный WinRAR) такой проблемы нет, потому что путь в значении ProgramFiles (x86) всегда ведёт в Program Files (x86). Для решения этой проблемы в Windows 7 было добавлено ещё одно значение: ProgramW6432Dir = C:\Program Files.

ProgramW6432Node

Этот ключ реестра во всех случаях ведёт в папку Program Files. Следовательно, нам нужно создать ещё одно правило, которое будет включать этот параметр реестра. В сухом остатке список правил по умолчанию для x64 систем у нас должен быть минимум такой:

  • %HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot%
  • %HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir%
  • %HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir (x86)%
  • %HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramW6432Dir%

Эти 4 правила обеспечивают полный эквивалент правил по умолчанию, которые используются в родных x86 системах. Однако, хочу отметить один факт. Параметр ProgramW6432Dir по указанному пути присутствует только в Windows 7 и Windows Server 2008 R2. В предыдущих системах (включая Windows Vista x64 и Windows Server 2008 x64) он отсутствует. Поэтому в них для решения этой проблемы придётся прописывать абсолютные пути (без использования переменных) к папкам C:\Program Files и C:\Program Files (x86).

Политики SRP на терминальных серверах

Достаточно часто (если исходить из общего количества внедрений SRP) администраторы наступают на одни и те же грабли. Поскольку природа терминальных серверов достаточно разнообразна, практически сложно создать какую-то одну политику SRP с правилами, которые удовлетворяли бы требованиям всех пользователей. Всегда будет так, что одному пользователю будет необходимо одно бизнес-приложение, а другому это приложение не нужно и должно быть запрещено. Адмнистраторы недолго думая пользуются тем фактом, что SRP можно настраивать и на уровне пользователя (секция User Configuration). Создают несколько политик SRP в этой секции, настраивают фильтрацию (чаще security filtering) так, чтобы каждой группе пользователей применялись нужные правила. Но сразу после применения политики могут начаться проблемы. Например, в пользовательской политике исключили расширение LNK, а на самом деле это расширение блокируется. Дело в том, что в определённых ситуациях (не скажу точно при каких условиях) SRP неявно создаёт копию политики по умолчанию в общекомпьютерной ветке реестра: HKLM\Software\Policies\Microsoft\Windows\Safer и получается конфликт, поскольку настройки компьютерной политики (кроме правил в Additional Rules) перекрывают соответствующие настройки в пользовательской политике.

Чтобы заранее избежать подобной ситуации следует придерживаться следующего правила: создать базовую (которая применима ко всем пользователям на машине) политику в секции Computer Configuration (в этой секции определить общие настройки и глобальные правила). Для расширения прав и/или назначения гранулированных прав запуска тех или иных приложений можно назначать правила в секции User Confgiration.

Создание политик в Vista-based системах и применения в XP-based системах

Ещё давным-давно (в декабре 2007) вышла в свет Windows Vista с некоторыми изменениями в SRP. В частности правила хешей теперь поддерживают алгоритм SHA256, который не поддерживается в Windows XP и Windows Server 2003 (включая R2). Но возникает вопрос interoperability с предыдущими системами. Например, что будет, если мы создадим правило в Windows Vista, а применим его на Windows XP (через GPMC.msc, который входит в состав RSAT)?

В интернетах ходят разные мифы на этот счёт, но в реальности всё гораздо проще. Когда Windows Vista (или выше) создаёт правило хеша, система генерирует 2 хеша — родной SHA256 и совместимый хеш MD5. Таким образом обеспечивается полная совместимость с системами XP/2003. Два хеша генерируются даже если это одиночная машина в рабочей группе и совместимость с предыдущими версиями систем не требуется. Вот как это выглядит в реестре:

SRP MD5 hash

Здесь мы видим стандартный хеш MD5 (AlgID = 8003 это MD5). ItemData содержит фактический хеш.

Под ключом правила (каждое правило здесь указано в виде GUID'а) добавляется ещё один ключ SHA256:

SRP SHA256

Вот здесь мы видим другой идентификатор алгоритма (800c это SHA256). ItemData так же содержит фактический хеш, но не MD5, а SHA256.

Примечание: полный список криптографических алгоритмов можнно найти по здесь: http://msdn.microsoft.com/en-us/library/aa375549(VS.85).aspx

Порядок проверки хешей для XP/2003 остался тот же — только MD5. В Windows Vista сначала проверяется хеш из ключа SHA256.


Share this article:

Comments:

Alexander Trofimov
Alexander Trofimov 29.03.2011 23:12 (GMT+3) Software Restriction Policies — занимательная трилогия

ай, хорошая статья. Не использую последнее время и вряд ли уже буду, но все равно порадовал ;)

Vadims Podāns
Vadims Podāns 30.03.2011 08:30 (GMT+3) Software Restriction Policies — занимательная трилогия

Дай угадаю: ты используешь AppLocker или используешь только касперского? Если последнее, то я тебя порицаю!

Alexander Trofimov
Alexander Trofimov 30.03.2011 09:35 (GMT+3) Software Restriction Policies — занимательная трилогия

Я тебе потом расскажу, ладно? =)

Vadims Podāns
Vadims Podāns 30.03.2011 09:46 (GMT+3) Software Restriction Policies — занимательная трилогия

Почему потом? Я считаю, что сегодня очень хороший день для срыва покровов :)

Alexander Trofimov
Alexander Trofimov 31.03.2011 16:45 (GMT+3) Software Restriction Policies — занимательная трилогия

Срыв покровов дело хорошее, но зарплата, премия и повышение их обеих - еще лучше. Так что я лучше помолчу пока ;)

Vadims Podāns
Vadims Podāns 31.03.2011 17:59 (GMT+3) Software Restriction Policies — занимательная трилогия

Нет, так не пойдёт. Сказал А, говори и Б. Вобщем, как я понимаю, Касперский разрабатывает какой-то продукт, который по функциям будет аналогичен СРП/Аплокеру.

shs
shs 03.04.2011 13:13 (GMT+3) Software Restriction Policies — занимательная трилогия

Здесь, наверное, описка: >Здесь мы видим стандартный хеш MD5 (AlgID = 8003 это MD5) Должно быть: >Здесь мы видим стандартный хеш MD5 (HashAlg = 0x00008003 это MD5) Иначе с каритнкой не очнь коррелирует ;)

Vadims Podāns
Vadims Podāns 03.04.2011 13:51 (GMT+3) Software Restriction Policies — занимательная трилогия

нет, не описка. Просто по ссылке используются все 8 октетов для представления числа. Я не вижу смвсла в этом, если лишние нули можно убрать.

rublog.alex-trofimov.com
rublog.alex-trofimov.com 17.04.2011 23:06 (GMT+3) Software Restriction Policies — занимательная трилогия

>>Вобщем, как я понимаю, Касперский разрабатывает какой-то продукт, который по функциям будет аналогичен СРП/Аплокеру. Может мне в PR уйти? Ничего не сказал, а такая сенсация. =)

Vadims Podāns
Vadims Podāns 18.04.2011 00:04 (GMT+3) Software Restriction Policies — занимательная трилогия

Саша, ты у меня разрешение спрашиваешь? :)

rublog.alex-trofimov.com
rublog.alex-trofimov.com 18.04.2011 00:25 (GMT+3) Software Restriction Policies — занимательная трилогия

Не... Так - мысли вслух. ;)

Дмитрий
Дмитрий 15.12.2011 21:34 (GMT+3) Software Restriction Policies — занимательная трилогия

Спасибо Вадим за новые статьи по SRP, честно говоря уже и не ждал ничего нового по этой теме. Долго не мог понять почему блокируются файлы из Outlook, но теперь настроил как надо. У меня есть несколько добавлений к статье: Прописывать абсолютные пути не совсем верно по двум причинам, первая - пользователи 32-битных систем могут создать папку "Program Files(x86)" и запускать из нее исполняемые файлы и вторая - система может быть установлена на другой диск. Решение этой проблемы либо ручками создать параметр в реестре HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\ProgramW6432Dir, либо, если машин много, то создать его групповыми политиками. Тут, конечно, нужно подумать, задавать его равным %ProgramFiles% нельзя, т.к. 32 битное приложение вернет свой путь "C:\Program Files (x86)". Я пошел по первому пути, Висты, слава богу, нет, а на серверах 2008 подправил руками и все работает.

Vadims Podāns
Vadims Podāns 15.12.2011 21:44 (GMT+3) Software Restriction Policies — занимательная трилогия

Просто я уже вроде написал всё, что мог или что знал и о чём мне интересно написать. Поэтому новых статей по SRP уже так мало.

Comments are closed.