Contents of this directory is archived and no longer updated.

SRP или Sotware Restriction Policies - мощный инструмент управления безопасности и контроля запуска приложений в ОС Windows. Политики ограниченного использования программ достаточно просты и состоят из менее, чем 2-х десятков настроек. Но в то же время политика SRP требует очень серьёзного понимания предмета. Я в своё время сделал 2 попытки популяризировать SRP среди администраторов постсоветского пространства как в своём предыдущем блоге, так и в журнале "Системный администратор", где я старался более подробно рассказать про технологию:

Однако, к великому сожалению, в журнальной статье был упущен один момент, который обнаружили сегодня на форуме: http://forum.sysfaq.ru/index.php?showtopic=14462

В статье говорится:

Для унификации работы с папками профилей пользователей политика SRP предлагает возможность чтения значений из реестра. Ветка реестра: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\ содержит пути для большинства пользовательских папок профиля. Для указания пути к Start Menu рекомендуется использовать значения реестра для каждой локальной машины. Чтобы использовать значения реестра, его ключ нужно заключить в знаки процента «%», как это показано на примерах:

%HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Programs%*.lnk

%HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Start Menu%*\*.lnk

Тут всё почти верно, кроме последнего примера. Дело в том, что данный пример не будет работать по одной простой причине:

http://technet.microsoft.com/en-us/library/cc786941.aspx

A registry path rule suffix must not contain a backslash (\) character immediately after the last percent sign (%) in the rule

Тут, конечно же, неточность есть и в статье TechNet'а, поскольку обратный слеш ( \ ) нельзя использовать не только сразу после завершающего ключ реестра знака процента ( % ), но и далее, когда используется дополнительный суффикс. Дополнительный суффикс используется для продолжения пути извлечённого из реестра (об этом прочитаете в статье журнала). К сожалению, нигде в интернете (а так же и в документации TechNet) я не смог найти решения данной проблемы, когда суффикс состоит из 2 и более уровня папок (вида %regkey%folder\subfolder1\subfolder2\etc). Ещё в момент написания статьи для журнала я быстро нашёл решение - если нельзя использовать обратный слеш ( \ ), то почему бы не попробовать использовать прямой слеш ( / )? И попал пальцем в небо. Особого криминала здесь нету, просто при составлении правил политик SRP учтите, что при использовании относительных путей в виде ключей реестра и продолжении пути суффиксами для вложенных папок используйте только прямой слеш - ( / ), тогда всё будет работать прекрасно. Напоминаю, что вы так же можете использовать подстановочные знаки как, например ( * ) Данный момент не был учтён в статье по моей невнимательности.

А теперь поговорим о том, чего я тогда ещё не знал. И, уважаемые администраторы, убедитесь, что ваши пользователи не прочитали материал ниже раньше вас ;)

По умолчанию в Windows XP/Windows Server 2003 установлено 4 исключения для действия по умолчанию:

  • %HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot%
  • %HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot%*.exe
  • %HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot%System32\*.exe
  • %HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir%

Это исключения для папок Windows и Program Files. Эти правила вполне обоснованы, поскольку обычные пользователи не имеют права записи ни в папку Windows, ни в Program Files. При этом видно, что третье правило использует обратный слеш! По всей видимости разработчики Microsoft сами себя ввели в заблуждение? Вполне возможно. Далее мы видим, что первое правило перекрывает второе и третье! Можно сказать, что эти правила лишние и достаточно первого. Действительно, если взять систему с Windows Vista или Windows Server 2008, то мы увидим только 2 исключения по умолчанию:

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

Но на самом деле всё не так и просто. Я бы в жизни не догадался об этом, если бы не Александр Станкевич (MVP Enterprise Security)! Я так и не смог найти внятного объяснения этому факту:

TempACL

Полагаю, что комментировать тут нечего, на картинке всё и так видно, к чему я клоню ;) Вам мало? Получите ещё:

SpoolACL

Вобщем, подумайте, господа администраторы - а вы точно хорошо разобрались в вопросе Software Restriction Policies? У вас ещё есть время подумать, пока ваши пользователи читают эту статью :-D


Share this article:

Comments:

Ещё в Win 2000k я обнаружил, что система странно расставляет NTFS права на своём каталоге. Поэтому я всегда NTFS права ставлю по-своему. И на диск системный диск и на Program Files. Я даже порывался написать инструмент - сканер, который бы тупо от имени пользователей рекурсивно обходил дерево каталогов и пытался создавать каталоги и файлы их модифицировать и удалять. И пробовать изменять каталоги и файлы которые уже там находятся и сравнивать это со внутренним шаблоном разрешений. Но потом ограничился сканером от Sysinternals.com Попробуйте AccessEnum. Он сканирует дерево каталогов и регистри и показывает всех пользователей и группы которым разрешена запись в соответствующие каталоги файлы и узлы. Но на Ваш сайт я попал в поисках проблем использования SRP. А проблемы следующие. - с десктопа пользователя запускаются инсталляционные пакеты такие как FireFox. Если стартануть через FAR ошибка будет сразу, если через Windows Explorer он распакуется. - я смог установить OpenVPN с десктопа из сессии администратора. При этом администратор подчиняется тем же правилам что и пользователи задано в SRP. - не могу воспроизвести, но точно было, я переименовывал far.exe в far.exe.doc и элементарно запускал его из каталога %temp% как пользователя так и администратора. запускал так. run - cmd там cd %temp% start %temp%\far.exe.doc И это работало. Причём не имело значение во что переименовать файл, лишь бы его расширение не попадало в список запрещённых в SRP. Сейчас вероятно установка сервиспака повлияла. Есть у Вас объяснения этим явлениям? Возможно с инсталляционными файлами как-то влияет то что это делает инсталятор Windows. И возникает вопрос а не выполняет ли он какой-то код из инсталлятора? Но с другой стороны сколько таких скользких скрытых моментов может быть ещё? Из-за проблем описанных выше я всегда пользовался и пользуюсь утилиткой TrustNoExe. Сейчас снова вернулся к тестирования SRP но всё же сомневаюсь в её надёжности.

Vadims Podāns

Вы слишком перетягиваете. На самом деле не всё так просто. Видите ли, разрешения NTFS расставляются не от балды (хотя, нам может так казаться), а в соответствии с определёнными требованиями. Ведь логично предположить, что папка спулера печати будет открыта для записи пользователям, чтобы они могли складывать документы в очередь печати. Что касается Temp, то она требуется для установки (обновления) драйверов, куда временно копируются INF файлы драйвера. Это не проблема выставить явный запрет на папку спулера (или вообще перенести спулер на другой диск) и на папку Temp. Про AccessEnum я знаю и он вполне годится, чтобы отследить, где в системных папках у пользователей есть права на запись. Относительно трюка с переименованием разрешения и запуска файла - да, это подтверждённый баг в ранних версиях Windows XP и Windows Server 2003 и не вы первый, кто мне говорит об этом баге. Но он был закрыт в одном из сервис-паков (1 или 2, точно не скажу), поскольку в Windows XP SP3 и Windows Server 2003 SP2 и выше это уже гарантированно не сработает. Так что сторонние утилиты использовать далеко не обязательно. Тем более, ваша утилита вряд ли умеет интегрироваться с GPO и обеспечивает удобочитаемость правил при разрешении проблем с блокировкой программ. Я думаю, что напишу ещё один пост по теме, покажу ещё один трюк и дам кое-какие советы по более эффективному управлению политикой.

pam3ec

Добрый день Вадим! Столкнулся со следующей проблемой: Необходимо разрешить запуск из пользовательского темпа файлы по маске run_allow_*.bat Как не старался, не смог подобрать варианты :( проверены: %TEMP%run_allow_*.bat %TEMP%\run_allow_*.bat %TEMP%/run_allow_*.bat Если взять прамой путь (без %TEMP%) - работает. Есть совет?

pam3ec

Все еще актуально...

pam3ec

UP :)

Vadims Podāns

Дело в том, что в контексте SRP переменная %temp% разворачивается в C:\Windows\Temp, а не пользовательский темп.

Comments are closed.