применяется при вызове функции CreateProcess() для запуска среды Windows – explorer.exe. С его помощью проверяются права доступа для любых пользователей системы Windows, в том числе членов группы администраторов.
Причина многих программных конфликтов в начале распространения Vista состояла в том, что эти довольно простые правила не были учтены в многочисленных прикладных программных разработках, которые предназначались для работы в среде Windows. Сегодня, к счастью, эта ситуация изменилась к лучшему.
Как же решается проблема по отысканию возможных несовместимостей с UAC и их устранению?
Для этих целей Microsoft предлагает использовать утилиту Standard User Analyzer, которая помогает предсказать поведение приложений при работе под стандартной учетной записью. Действие утилиты основано на перехвате вызовов ряда системных функций. Это затрагивает следующие группы функций:
• доступ к файловой системе (например, к системной папке Program Files);
• доступ к Системному реестру (например, к ветви HKEY/Local Machine);
• запись в INI-файлы (использование функции WriteProfile() для записи в системные папки);
• проверка токенов безопасности;
• использование функций, требующих особых привилегий (например, SeDebugPrivilege());
• использование пространств имен (Global);
• использование защищенных объектов (например, событий, мьютексов, таймеров, семафоров и т. п.);
• создание процессов, требующих повышенных привилегий.
Для управления этой инфраструктурой был введен аудит безопасности, а для защиты от злонамеренного кода реализован механизм Software Restriction Policies (Политики ограниченного использования программ). Администратор получил возможность контролировать образы и сценарии, выполняемые в системе.
Требования безопасности учитывались на всех этапах – при разработке компонентов, отдельных блоков кода, модулей и, конечно, системы в целом.
Однако это средство для предотвращения запуска неавторизованного кода хорошо работало лишь при правильном применении. Пользователь, привыкший относиться к компьютеру как к персональному устройству с неограниченной свободой по управляемости, сам снижал его безопасность. Поэтому со временем выяснилось, что реализованная модель защиты требует дополнительного усиления.
При разработке Windows Vista вопросы безопасности были первоочередными. Был пересмотрен цикл разработки самой ОС: требования безопасности учитывались на всех этапах – при разработке компонентов, отдельных блоков кода, модулей и, конечно, системы в целом.
В Windows 7 по умолчанию уровень безопасности установлен ниже, чем в стандартной настройке Windows Vista. Более того, появилась возможность устанавливать уровень срабатывания механизма контроля UAC, выбираемый пользователем с учетом собственных прикладных задач.
Рассматривая концепцию защиты Windows 7 в целом, Microsoft не отказывается от принятой ею технологии обеспечения безопасности. Windows Vista возродила правильную с их точки зрения концепцию разделения корпоративных пользователей на стандартных (обычных) клиентов и системных администраторов. Обычный пользователь не должен самостоятельно получать права администратора, поскольку он редко разбирается в возможностях системы так же, как системный администратор. Получая лишние права, он считает, что освобождает себя от ненужных проблем, на самом же деле превращает свой компьютер в довольно уязвимый элемент, что позволяет легко заразить систему вредоносным кодом.
И в Windows Vista, и в Windows 7 такой сценарий упрощенного наделения себя административными полномочиями становится невозможным. Даже если пользователь отключил контроль UAC, вредоносные программы, попадая в его машину, не смогут «дотянуться» до ключевых компонентов машины. И хотя вредоносная программа будет считать, что она сохраняет свои данные в системную область, на самом деле запись будет вестись в виртуальную папку, и система в целом будет оставаться под надежным контролем.
Windows 7: технология «системных заплаток» (Shims)
Задача запуска программ, использующих функции, требующие обратной совместимости, решается в Windows 7 с помощью технологии «системных заплаток». Такой способ предложен уже давно (в Windows 98/2000 эти элементы назывались «слоями»). Рассмотрим более подробно, как это работает.
Данная подсистема реализована в виде набора динамически загружаемых библиотек Application Compatibility Infrastructure (библиотека функций shimeng.dll содержит сам механизм Shim Engine, а apphelp.dll – Application Compatibility Interface, Application Compatibility Client Library). Их работа обслуживается средствами загрузчика ntdll.dll с использованием ряда ключей Реестра и системной базы данных.
Смысл наложения «системных заплаток» состоит в том, что в Реестр вносятся записи, соответствующие запускаемому приложению и служащие индикатором для загрузчика, чтобы при запуске этой программы производилось подключение механизма Shim Engine, выбор «системных заплаток» из базы данных sysmain.sdb и их применение согласно указанному методу. Фактически «shims» выполняют роль перехватчиков вызовов системных функций. Нужный эффект достигается благодаря замещению элементов в таблице импорта Import Address Table (IAT) исполняемого файла, что позволяет при обработке исполняемого файла Windows PE (Portable Executable) перехватывать вызов системных функций с использованием таблиц импорта и экспорта функций.
Системная база данных с информацией обо всех системных и дополнительных (для конкретных приложений) заплатках для применяемой версии ОС располагается в каталоге %systemroot%AppPath. Здесь же находятся ключевые загружаемые dll-библиотеки с новым кодом функций, отличным от стандартного. Системные «заплатки» находятся в файлах acgenral.dll и aclayers.dll, дополнительные – в acspecfic.dll. Существуют и другие группы «системных заплаток», которые используются, когда проблемы совместимости невозможно решить простой заменой вызовов системных функций.
Необходимость применения «системной заплатки» определяется при создании каждого нового процесса. Это осуществляется в подсистеме Win32 (kernel32.dll), где функция создания новых процессов CreateProcess() получает через внутреннюю системную функцию Kernel32!CreateProcessInternalW() дополнительный код, обеспечивающий совместимость обрабатываемого приложения.
Работа перехватчика вызова системной функции
Windows 7: проверка готовности оборудования и программ
Проверить совместимость оборудования и прикладных программ можно на Web-сайте Windows Vista Compatibility Center. Его Web-адрес: http://www.microsoft.com/windows/compatibility/
Здесь собрана огромная коллекция аппаратных и программных продуктов, доступных на рынке (а также устаревшие, но пока популярные модели). Вам предстоит отыскать нужное изделие/программу и проверить статус его совместимости.
Статус «Compatible» («Совместим») присваивается тем продуктам, которые удовлетворяют одному из следующих требований:
• продукт прошел тестирование в сертификационном центре Microsoft, и ему выдан сертификат на использование логотипа: «Certified for Microsoft Vista», «Works with Microsoft Vista» или «Games for Windows»;
• разработчик или производитель продукта подтверждает, что он совместим с Windows Vista.
Если соответствующая информация о выбранном продукте отсутствует, ему присваивается статус «Status Unknown» (Неизвестно). В случае отсутствия совместимости с Vista продукт имеет статус «Not Compatible».
У некоторых продуктов имеется статус «Action Recommended». Это означает, что для достижения совместимости с ОС для него необходимо выполнить ряд дополнительных операций (например, обновить драйвер или версию программы).