Система безопасного запуска программ из LockWin

Локтионов Алексей, сеть интернет клубов FlashBackerror@pochta.ru 

В данной статье, написанной специально для сайта www.pisoft.ru, речь пойдёт о расширенных настройках системы безопасности win32, основанной на ядре Windows NT. Изложенные ниже решения очень хорошо зарекомендовали себя для защиты клиентских машин с LockWin от несанкционированного доступа, при этом с использованием максимального числа "удобств" для посетителей типа Internet Explorer, Outlook Express и т.д. Эти программы считаются небезопасными для использования, так как через них можно запускать различные приложения, нежелательные для запуска некоторыми чересчур "любознательными" юзерами. Статья расcчитана на читателей, имеющих базовое представление об устройстве суб-системы win32.

Итак, приступим.
Для запуска различных программ из Windows используется интегрированный в систему шелл - explorer. Для него, и не только для него, создана функция ShellExecute, через которую и производится запуск практически ВСЕХ пользовательских приложений Windows. Для системных вызовов программ, или для запуска сервисов используется системная функция - CreateProcess, но она не используется широко распространёнными пользовательскими приложениями. Сделано это вот с какой целью. В win32 на базе ядра Windows NT существует система безопасности, разработанная для ограничения возможностей различных пользователей для доступа к определённым компонентам пользовательской среды Windows. Большинство из них используются в настройке безопасности в LockWin (типа, скрыть диски в Мой Компьютер, скрыть Рабочий Стол и т.п.). 
Однако многие из вас задавались вопросом - а что же делать с браузером Internet Explorer? Всё в нём хорошо, да только есть одна незадача - если ввести в строке url типа c:\windows\system32\cmd.exe, а затем выбрать запуск из указанного места, благополучно запустится консоль. Так же никто не мешает сохранить любой свой "вредоносный" файл по указанному пути, и так же запустить его на системе. Множество побочных решений не в состоянии оградить вас от подобного запуска, не в меру "любознательные" пользователи всё равно найдут лазейку для запуска. Поэтому многие из вас предпочитают ставить "кривые" самописные браузеры, которые не позволяют подобный запуск, однако такие браузеры зачастую не в состоянии понять простые javascripts, из-за чего сёрфинг по инету становится абсолютно не воспринимаемым. Плюс приходится всё время при установке любых приложений проверять их на наличие подобной командной строки. 
Одним из наших решений по безопасности является использование специального ключа реестра, описанного в MSDN, который способен ограничить запуск программ приложений через пользовательскую функцию ShellExecute и ShellExecuteEx. Это ключ RestrictRun:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]

"RestrictRun"=dword:00000001

При наличие этого ключа, установленного в значение "1", функция ShellExecute и ShellExecuteEx проверяет следующий подраздел реестра:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun]

В этом подразделе необходимо перечислить перечень разрешённых для запуска приложений, все значения типа String, именами этих ключей являются последовательные числа типа 1,2,3,4 ..., а параметрами - собственно имена приложений, что-то вроде этого:

"1"="iexplore.exe"
"2"="notepad.exe"

и так далее.

Соответственно, теперь из эксплорера можно будет запустить только эти файлы, при попытке запуска других будет выдано сообщение о том, что возможность запуска отключена администратором. Однако привязки к этим именам по абсолютному пути (типа c:\windows\notepad.exe) не существует, поэтому всё ещё можно запускать любые файлы, которые будут названы так же, как и разрешённые для запуска. Поэтому нашим решением является запрет ВСЕХ файлов для исполнения через функции Shell (это решение имеет смысл только если LockWin запущен как шелл, в противном случае решение бесполезно !). Для достижения этого достаточно создать пустой раздел [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun] и выставить значение вышестоящего ключа RestrictRun в "1". Осторожно! Если после этого шелл LockWin слетит или будет отключен, вернуть к работоспособности Windows будет крайне проблематично.
Для запуска своих приложений LockWin использует по умолчанию системную функцию CreateProcess, которая не проверяет RestrictRun, так что запуск приложений через шелл LockWin будет происходить без проблем. Однако программы, в свойствах запуска которых указан параметр "Другой способ запуска", из LockWin стартовать не будут, так как в этом случае будет использоваться не CreateProcess (по умолчанию), а ShellExecute. 
То же самое касается механизма запуска Дополнительных Программ LockWin-a, которые по умолчанию используют функцию ShellExecute. В версию LockWin 4.86 от 21.09.2003 была внесена возможность использования для запуска Дополнительных Программ функции CreateProcess. Включается этот режим при помощи параметра настройки CreateProcEmbed, переключить который можно только через Редактор настроек программы ("Экран" - кнопка "Настройки"). 
Проблем с работоспособностью системы после включения таких кардинальных настроек безопасности возникнуть не должно, по крайней мере у нас уже очень давно стабильно работет такая система - нареканий не было. Единственно, надо аккуратно относиться к снятию шелла LockWin, перед этим надо не забыть выставить значение ключа RestrictRun в "0".

Итак, что мы имеем используя такую настройку? Невозможность запуска каких-либо приложений вообще, кроме как указанных в LockWin, благодаря чему можно использовать Internet Explorer, Outlook Express, и не бояться, что пользователь сможет запустить вредоносный аттачмент или любой исполняемый файл по прямому указанию пути до него. В результате мы получаем полноценный браузер, и не только. Так же можно не бояться потери работоспособности пользовательской консоли cmd.exe - она не использует Shell функций. Так что через неё можно будет запустить любое приложение win32.

В заключение "бонус": у многих из вас были проблемы с просмотром содержимого диска, даже с включенным в настройках безопасности LockWin соответствующим параметром. Он работает ровно наполовину. Нельзя получить содержимое диска при вводе в строке браузера чего-то вроде "c:\". Однако если в поле "Сохранить как" набрать то же самое, содержимое диска будет благополучно отображено. Это происходит из-за того, что для вывода содержимого указанной директории используются разные функции, но все они так или иначе подчиняются системе безопасности win32 для пользовательского shell. Если хотите физически запретить доступ эксплореру доступ до ВСЕХ дисков на системе, создайте в реестре следующий ключик:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]

"NoViewOnDrive"=dword:03ffffff

После этого вы наврядли сможете вообще увидеть содержимое дисков от A: до Z: из любого стандартного win32 приложения, так что это так же приемлемо для использования, только если LockWin у вас работает как shell. Как я уже говорил, это ограничение не распространяется на cmd.exe, и подобные ему консольные программы, типа Far.
Чтобы вернуть себе возможность для просмотра содержимого дисков, необходимо установить параметр NoViewOnDrive в "0".

Существует ещё масса "твиков" для рабты с системой безопасности win32 и её shell функциями, и каждый из вас, я уверен, при желании сможет найти их и настроить под вашу собственную систему защиты. Я очень рекомендую для этого сайт www.winguides.com - самый крупный портал, посвящённый реестру win32, с мощной поисковой системой и форумом, там вы найдёте всё. Портал англоязычный.

С уважением, Локтионов Алексей, сеть интернет клубов FlashBack.