Совместимость приложений Баркан Георгий gbarkan@microsoft.com Ключевые проблемы Windows Vista, Windows Server 2008 и Windows 7 User Account Control (UAC) Windows Resource Protection (WRP) Версия операционной системы Mandatory Integrity Control (MIC) Изоляция сессии 0 Версия операционной системы • Внутренний номер версии в Windows Vista/Server 2008/Windows 7 (функция GetVersion) = 6 Версия Windows 2000 Windows XP Windows Server 2003 Windows Vista Windows Server 2008 Windows 7 5.0 5.1 5.2 6.0 6.0 6.1 Версия Internet Explorer - 7.0/8.0 – Версия включена в строку User Agent – Строка User Agent включается в заголовок каждого HTTP запроса • Измените код – нужна проверка типа >= 6 • GetVersionEx() • Версия операционной системы 54% всех ошибок, связанных с совместимостью User Account Control • Операционная система подвергается существенным рискам когда пользователь работает под учетной записью Administrator – Более простая установка вредоносного кода – Возможность повышения привилегий – Открытость для вредоносного кода • Случайные повреждения, вносимые пользователем User Account Control • • • • User Account Control Manifest Standard User vs. Administrator Virtualization User Account Control Windows Resource Protection • Ключевые файлы операционной системы и ключи реестра могут быть заменены на предыдущие версии или вредоносный код – ущерб стабильности и безопасности системы • Задача Windows Resource Protection – защита ключевых компонентов операционной системы, увеличение стабильности, предсказуемости и надежности системы Windows Resource Protection • Запрещены обновления защищенных ресурсов – Только программы установки, известные ОС (Windows Update) – ACL для ресурсов • Распространяется на файлы, папки и ключи реестра – Большинство ключевых модулей ОС (EXE и DLL) – Большинство ключей реестра (HKCR) – Папки, используемые ресурсами ОС • Проверка – SfcIsFileProtected() - файлы – SfcIsKeyProtected() – ключи реестра Mandatory Integrity Control (MIC) • Реализовано в Windows Vista, Windows Server 2008 и Windows 7 • Процессы выполняются на одном из четырех уровней целостности (Integrity Levels): – – – – Системные процессы - System IL Приложения с привилегиями администратора - High IL Стандартные приложения - Medium IL Приложения с ограничениями - Low IL • Защищаемые объекты (файлы, процессы, очереди сообщений и т.п.) задают минимальный уровенб процесса для доступа к ним – Уровень для объектов по умолчанию: Medium Изоляция привилегий интерфейса • UI Privilege Isolation (UIPI) • Использует MIC для запрета посылки сообщений между окнами – Приложения не могут посылать сообщения приложениям, выполняющися с более высоким IL – Приложения с более высоким IL могут разрешить прием сообщений – SendMessage() не возвращает ошибок • Исправление: функция ChangeWindowsMessageFilter() Изоляция сессии 0 Session 0 Windows Station Desktop Services 1st User’s Window 1st User’s Window 1st User’s Window Screen Saver Login Сессии в Windows XP/2000/2003 Возможность атаки Изоляция сессии 0 • Выполнение системных сервисов и пользовательских приложений в сессии 0 может привести к нарушению безопасности – Потенциальная возможность обмена между сервисами и приложениями – Потенциальная возможность повышения привилегий • Выполнение сервисов и приложений в различных сессиях существенно снижает возможность атак, повышает стабильность, надежность и защищенность системы Изоляция сессии 0 Session 0 Session 1 Windows Station Desktop Windows Station Desktop Service 1st User’s Window Service 1st User’s Window 1st User’s Window Screen Saver Login Сессии в Windows Vista и Windows 7 Secure Совместимость • Если приложение работает под Windows Vista, оно будет работать и под Windows 7, но есть нюансы... «Новое» в Windows 7 • • • • • • • • Версия операционной системы Версия Internet Explorer Библиотеки (File Libraries) Windows Mail Новые компоненты системного уровня IE DEP Windows Server 64 Bit WOW64 on Windows Core Версия операционной системы • Windows 7 == Windows 6.1? – dwMajorVersion = остается прежней – dwMinorVersion = изменена • Исправления – Проверяйте не версию, а возможности системы – Используйте операцию >= – Используйте Version lies Version Lies • • • • • • Win95VersionLie WinNT4SP5VersionLie Win98VersionLie Win2000VersionLie Win2000SP1VersionLie Win2000SP2VersionLie • • • • • • • Win2000SP3VersionLie WinXPVersionLie WinXPSP1VersionLie WinXPSP2VersionLie Win2K3RTMVersionLie Win2K3SP1VersionLie VistaRTMVersionLie Version Lie Layers • • • • • • Win95 NT4SP5 Win98 Win2000 Win2000SP2 Win2000SP3 • • • • • • • WinXP WinXPSP1 WinXPSP2 WinXPSP2VersionLie WinSrv03 WinSrv03SP1 VistaRTM Layers vs. Version Lies VistaRTM : – DelayAppDllMain – ElevateCreateProcess – FailObsoleteShellAPIs – FaultTolerantHeap – GlobalMemoryStatus2GB – HandleBadPtr – – – – – – NoGhost RedirectMP3Codec VirtualRegistry VistaRTMVersionLie WRPDllRegister WRPMitigation Версия Internet Explorer • Без режима совместимости: – Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) • С режимом совместимости: – Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0) Библиотеки (File Libraries) • По умолчанию для общих диалоговых панелей: Documents Library • Библиотеки – это файлы (а не папки) • IFileDialog->GetFolder() + IFileDialog->GetFilename() не корректно работают с библиотеками – GetFolder() возвращает файл • Исправление – Используйте IFileDialog->GetResult() Windows Mail • Отсутствующий компонент – заменен на Windows Live Mail или почтовый клиент по выбору • Все API работают, за исключением API, отображающих интерфейсы • Обработчики протоколов и файлов не зарегистрированы • Исправления – Не использовать вызовы устаревших API – Установить почтовый клиент CoStartOutlookExpress msoert2.dll CALL TEST JZ LEA PUSH CALL TEST JZ PUSH PUSH CALL Section .text (0x43D01000) DWORD PTR [KERNEL32.DLL!GetModuleFileNameW] EAX,EAX 0x43D0A613 EAX,[EBP-0x20C] EAX DWORD PTR [SHLWAPI.DLL!PathFindFileNameW] EAX,EAX 0x43D0A60C 'WinMail.exe' EAX DWORD PTR [MSVCRT.DLL!_wcsicmp] Новые компоненты системного уровня • Реорганизация компонентов системы – Пример: функциональность из kernel32.dll и advapi32.dll перенесена в kernelbase.dll • Экпортированные функции перенаправляются в соответствующие библиотеки • Приложения, использующие внутренние функции и структуры могут не работать IE DEP • Data Execution Prevention (NX) – опция включена по умолчанию • Плагины, которые не совместимы с DEP, могут привести к краху браузера • Исправления: – Используйте DEP-совместимые библиотеки (ATL) – Используйте опцию компоновщика /NXCOMPAT Windows Server 64 Bit • Драйвера – Перенос и подписание 64-битных драйверов • 32-битный код – Должен работать под WOW64 – IsWow64Process • 32-битные плагины – Перенос на 64-бита для 64-битных процессов типа Explorer • 16-битный код – Перенос на 32- или 64-бита WOW64 on Windows Core • По умолчанию 32-битный код работать не будет – – – – Active Directory Active Directory Lightweight Directory Services Web server Сторонние приложения • Исправления: – Перенос на 64-бита – Установка компонента WOW64 Switchback • Секция CompatibilityInfo в манифесте приложения – указание на ОС, для которой создано приложение – Windows SxS • Нет секции CompatibilityInfo == совместимость с Vista • Поддержка компонентов в Windows 7: – APIs: GetOverlappedResult, ReadFileEx – RPC exception handling, thread pool mgmt. – DWM fail/lock bit blitting Switchback Manifest <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!-- Windows 7 supported --> <supportedOS Id="{35138b9a-5d96-4fbd-8e2da2440225f93a}"/> </application> </compatibility> </assembly> Полезные утилиты Полезные утилиты • Системные утилиты – MSConfig – Новая информация о системе • SysInternals – Process Explorer – Process Monitor • Средства отладки – Standard User Analyzer – Application Verifier – Debugging Tools for Windows Системные утилиты • MSConfig – Start | Run | MSConfig • System Information – Start | Run | MSInfo32.exe • Event Viewer – Start | Run | EventVwr.exe Process Explorer • Полезные возможности – – – – Определение сервисов Отображение загруженных модулей Отображение используемых ссылок Поиск модулей/ссылок • ProcExp.exe Process Monitor • Новая версия, совместимая с Vista/WS08 • Объединяет RegMon и FileMon • Новая возможность – создание образов • ProcMon.exe SysInternals • http://www.microsoft.com/technet/ sysinternals/ Standard User Analyzer • Часть Application Compatibility Toolkit (ACT) • Использует AppVerifier APIs • Более «удобная» версия тестов LuaPriv Application Verifier • Назначение – Application Verifier – средство проверки неуправляемого кода – Помогает обнаружить ошибки, пропущенные при обычном тестировании приложений • Использование – Графический интерфейс (GUI) – Интерфейс командной строки (CUI) – COM-интерфейсы для скриптинга • AppVerif.exe Application Verifier - GUI • Включить/Отключить проверки для конкретного приложения • Настройка свойств для каждой проверки • Просмотр протокола проверки • И т.д. 68% падений приложений можно было бы идентифицировать с помощью App Verifier Отладка • Расширения отладчика – Команды Windbg, специфичные для AppVerifier • Тесты – LUAPriv – Basic Exceptions Handles Heaps Locks Memory TLS – Low Resource Simulation Новое в Windows 7 • Problem Step Recorder – %windir%\system32\psr.exe – Позволяет выполнить пошаговую запись возникновения проблемы – Создает zip-файл с mht-файлом – Интеграция с Watson Новое в Windows 7 • Windows Troubleshooting – Встроенные средства решения проблем – Доступ через Action Center • Control Panel | All Items | Action Center | Troubleshooting – Расширяемость • Windows SDK: TSPBuilder.exe • Скрипт на PowerShell ACF – решение проблем совместимости приложений • Application Compatibility Factory является лабораторией решения проблем совместимости приложений с клиентскими операционными системами Майкрософт нового поколения – Windows Vista, Windows 7, организованной на базе КОМПАНИИПАРТНЕРА Ищем партнера в России • Цель сотрудничества между Майкрософт и компанией-партнером Application Compatibility Factory – организация профессиональной базы решения проблем совместимости приложений для предприятий, планирующих миграцию на Windows Vista или Windows 7. • Если Ваша компания заинтересована в сотрудничестве – просьба отправить короткий e-mail на oswru@microsoft.com с темой ACF.