GDI+: Уязвимость в системе безопасности. Взгляд разработчика

Последнее обновление: 2004-10-04
ENGLISH: The English version of this article can be found at http://www.installsite.org/go/gdiplus.htm
GERMAN: Die deutsche Version dieses Artikels steht unter http://www.installsite.de/go/gdiplus.htm

Возможно, Вы уже и слышали о критической уязвимости в системе безопасности, которую обнаружила компания Microsoft в своей библиотеке GDI+. (Если нет, прочтите Информационную статью об обновлении процесса обработки JPEG (GDI+)). Первая атака проявилась уже через несколько дней после выпуска информационной статьи об уязвимости.

В отличие от большинства статей Microsoft описывающих, какие действия должен выполнить пользователь продуктов Microsoft, данная статья сфокусирована на том, какое влияние оказывает эта уязвимость на разработчика программ, особенно в программах установки программного обеспечения.

На заметку: Вы можете распространять GDIPLUS.DLL не зная об этом. Многие инструменты разработчика имеют возможность автоматически включать требующиеся файлы выполнения в вашу программу установки. В случае с инструментами Windows Installer (MSI) это обычно выполняется добавлением gdiplus.msm в Вашу инсталляцию. Таким образом, для Вас сразу не будет очевидно, что GDIPLUS.DLL включена в Вашу программу установки.

Направление атаки

При требовании воспользоваться уязвимостью, специально подготовленное графическое изображение JPEG будет отображено Вашей библиотекой GDI+. Это может быть картинка с Интернет сайта, электронное письмо e-mail или любой другой источник. Если Ваше приложение показывает изображения из непроверенных источников, что включает фотографии или логотип, к примеру, выбранный пользователем, Ваше приложение представляет собой критическую опасность для компьютера Вашего Заказчика. Любая обработка изображения JPEG с использованием GDI+ в вашем приложении может оставить уязвимость. С другой стороны, если Вы используете GDI+ только для вывода изображений, которые заданы жестко в программном коде, встроены в приложение и не могут быть подменены пользователем, риск сравнительно невелик.

Сценарии

В этой части я помещу несколько разных сценариев развития событий. Однажды определив сценарий, подходящий Вам, описания действий, которые я рекомендую, Вы найдете в следующем разделе.

Сценарий 1: Вы распространили GDIPLUS.DLL

Первое, что Вам нужно сделать - обновить компоненты дистрибутивов на компьютерах разработчиков и сборок инсталляций. Если Ваше приложение использует GDI+ уязвимым способом, иными словами Вы выводите изображения JPEG от непроверенных источников, Вам нужно выпустить обновление для Вашего приложения и отправить его Вашим Заказчикам как можно скорее. Если Ваше приложение использует GDI+ менее уязвимым способом, Вы должны включить новую библиотеку GDIPLUS.DLL в очередное обновление.

Сценарий 2: Вы распространили .Net Framework версии 1.0 или 2.0

Дистрибутивы .NET Framework версий 1.0 SP2 и 1.1 (без SP) оба подвержены этой уязвимости. Вы должны обновить дистрибутивы .Net Framework на компьютерах разработчиков и сборок инсталляций до версий 1.0 SP3 или 1.1 SP1.  Если Ваше приложение использует GDI+ уязвимым способом, следует также отправить соответствующий  .NET Framework сервисный пакет Вашим существующим Заказчикам или рекомендовать им установить сервисный пакет с использованием службы Windows Update. Несмотря на то, что Windows Update автоматически предлагает сервисные пакеты  .NET Framework  как обновления "высочайшего приоритета", всегда найдутся пользователи, отключившие на своем компьютере  Windows Update,  или компании, блокирующие автоматическое обновление до того момента, пока они не будут утверждены их системными администраторами. Поэтому Вы должны известить Ваших Заказчиков о возможном риске и убедить их установить обновление.

Сценарий 3: Вы используете GDIPLUS.DLL, установленную вместе с операционной системой

Дистрибутивы Windows XP и Windows 2003 Server не содержат gdiplus.dll непосредственно. Так как Вашей целью являются только эти платформы, поэтому Вам не следует распространять эту библиотеку, служба Windows Update должна позаботиться о результате. Однако всегда найдутся пользователи, отключившие на своем компьютере  Windows Update,  или компании, блокирующие автоматическое обновление до того момента, пока они не будут утверждены их системными администраторами.  Если Ваше приложение использует GDI+ уязвимым способом, то есть Вы отображаете файлы JPEG полученные из непроверенных источников,  следует известить Ваших Заказчиков о возможном риске и убедить их установить обновление.

Сценарий 4: Ни один из вышеперечисленных сценариев Вам не подходит

Вам повезло! Но только пока. В любом случае Вам требуется обновить файлы  дистрибутивов на компьютерах Ваших разработчиков. И Вам потребуется приготовить способ информировать Ваших Заказчиков, который Вы сможете применить в подобной ситуации в будущем.

Рекомендуемые действия

Какое бы действие Вы не выполняли, выполняйте его быстро. Всего через три дня после того как была опубликована информация об уязвимости,  первые изображения, выводившие из строя Internet Explorer с ошибкой переполнения буфера, появились в глобальной сети Интернет. Пока они не содержат злоумышленного кода, но его появление не заставит себя долго ждать.

Обновите GDI+ на компьютерах Ваших разработчиков

Если Вы используете Visual Studio .Net 2002 или 2003 Вам нужно получить и установить соответствующий патч из Сводки по безопасности Microsoft MS04-028. Это обновит объединяемый модуль gdiplus.msm для использования в проектах по распространению Visual Studio. Если Вы распространяете gdiplus.dll отдельно, Вы можете получить GDI+ Platform SDK из того же источника - Сводки по безопасности Microsoft MS04-028. Этот пакет включает обновление библиотеки gdiplus.dll, но не обновленный объединяемый модуль.

Если Вы используете более ранние версии Visual Studio или не используете Visual Studio совсем, на данный момент нет способа получить обновление объединяемого модуля gdiplus.msm. Некоторые производители инструментов MSI включают gdiplus.msm в свои  продукты и снабжают обновленными объединяемыми модулями  своих Заказчиков. Подробнее смотрите ниже.

Распространите последние версии Сервисных Обновлений (Service Pack) .Net Frameworks

Уязвимость GDI+ устранена в недавно выпущенных Сервисных Обновлениях для .Net Framework. Вот перечень этих обновлений:

Распространяемые для установки пакеты .Net Framework 1.0 и 1.1 не включают в себя  сервисного обновления. Это означает, что Вам нужно установить соответствующее Сервисное Обновление в дополнение к основному пакету .Net Framework.

Я обратился к производителям инструмента MSI, чтобы узнать какой из их инструментов содержит последнюю версию Сервисного Обновления  .NET Framework. Вскоре я обновлю эту статью в соответствии с полученными результатами. Если Ваш инструмент не имеет встроенной поддержки для распространения Сервисных Обновлений, Вы можете посмотреть программный код в примере для определения Сервисных Обновлений .Net Framework 1.0 и 1.1 в интернет журнале Арона Штебнера (Арон работает с Microsoft и создает инсталляцию для Visual Studio). Сервисные Обновления  и другие дистрибутивы .Net Framework могут быть получены с сайта Центра Разработки Microsoft .NET.

Обновите Ваше приложение и его инсталляцию

Повторное создание Вашего приложения и его инсталляции с конкретной версией GDIPLUS.DLL это только первый этап. Вам также необходимо отправить эту обновленную версию Вашим Заказчикам. Один из вариантов - это автоматическое обновление приложений с использованием Блока Обновления Приложений. Но этот способ не подходит в случае, если приложение установлено с помощью Windows Installer (MSI). В этом случае Вы можете создать небольшое или значительное обновление, а также патч Windows Installer  (файл .msp) и полный пакет MSI (файл .msi).

Информируйте пользователей об уязвимости и доступных обновлениях

Если Ваше приложение содержит уязвимость, описанную в статье о безопасности GDI+, Вы должны информировать Ваших Заказчиков проактивно (заранее) чтобы быть уверенным, что они установят обновления Вашего приложения или Сервисное Обновление  .NET Framework своевременно. Во-первых, будет отправка сообщения по электронной почте Вашим Заказчикам. Сложность этого подхода состоит в том, что у Вас может не быть электронных адресов конкретных лиц, фактически использующих Ваши программы, или база данных с адресами электронной почты устарела, или Ваше сообщение может в итоге оказаться в мусорной корзине вместе с остальным спамом. По моему мнению, необходимо обновлять службы информирования, которые смогут оповестить Ваших пользователей о том, что новое обновление доступно для установки, или порекомендовать установить Сервисные Обновления  .NET Framework. Некоторые инструменты по созданию программ установки содержат такие службы, которые к тому же не требуют дополнительной платы, для примера InstallShield X или Wise for Windows Installer. Некоторые другие производители предлагают это как отдельные продукт или услугу. Эти инструменты опрашивают интернет сайт на предмет наличия обновлений либо на регулярной основе, либо каждый раз, когда Ваше приложение запускается. Если Вы используете InstallShield X клиентская часть программы информирования об обновлениях может уже транспортироваться без Вашего участия, так как эта альтернатива включена в конфигурацию заданную по умолчанию. В этом случае все, что Вам нужно сделать, это посетить конфигурационный Интернет сайт и опубликовать уведомление.

Даже если на Вас не повлияла проблема GDI+, я рекомендую включать клиент информирования об обновлениях с Вашими инсталляциями, чтобы подготовиться к возникновению подобных критических ситуаций в будущем. Чтобы акцентировать внимание, здесь я приведу цитату от промышленного  эксперта и автора книги Майка Гандерлоя в журнале ADTmag:

"Действительно немногие из производителей приложений, готовы затратить в ближайшем будущем время на разработку способов информировать своих потребителей о том, что пора установить обновление системы безопасности, даже если служба обновлений Windows Update не считает необходимым информировать их в этом случае. Если Вы один из таких производителей, то я выражаю глубочайшую симпатию к Вам".

Вы можете избежать головной боли, приготовившись к таким ситуациям. Со средствами InstallShield X Вы можете добавить клиент Службы Обновлений  в Вашу программу установки одним нажатием кнопки мыши. Если Вы используете Wise for Windows Installer, потребуется выполнить несколько  действий для конфигурирования и включения WiseUpdate в Вашу программу установки. В обоих случаях не потребуется дополнительных затрат для того чтобы быть готовым к критическим ситуациям.

Информация от производителей инструментов MSI

Некоторые производители инструментов по созданию MSI встраивают функцию по установке .Net Framework по мере необходимости. Некоторые инструменты включают пакет gdiplus.msm, выпущенный Microsoft, в свои продукты. Я контактировал с такими производителями, чтобы определить, какие действия предпринимаются ими по вопросу с уязвимостью GDI+. Информация, представленная ниже, основана на ответах компаний InstallShield, Wise, Zero G, Caphyon, Dacris , DigitalWeb, SDS Software, MimarSinan, Avatar Software, TransWest Data Corporation и Qwerty.Msi. В компании AKS DataBasis сообщили, что они более не дорабатывают свои продукты и планируют публиковать их код в открытом виде. Следующие компании не ответили на мои запросы: Corner House, FileStream, MaSaI Solutions, myncos и Object Design Labs.

Предоставление обновленного Объединяемого Модуля

Потребители компаний InstallShield (InstallShield X) могут скачать исправленный Объединяемый Модуль gdiplus в составе Галереи Объединяемых Модулей InstallShield. Wise (Wise for Windows Installer), Zero G (InstallAnywhere .NET) и MimarSinan (InstallAware) также планируют предоставить исправленный Объединяемый Модуль gdiplus своим потребителям. Другие производители ответили, что они не поставляли Объединяемый Модуль, содержащий уязвимость, и таким образом от них не потребуется дополнительных действий.

Распространение Сервисных Обновлений к .Net Framework

Компании InstallShield (InstallShield X), Wise (Wise for Windows Installer), Zero G (InstallAnywhere .NET), MimarSinan (InstallAware) и Avatar Software (MSIStudio) планируют поддерживать последние Сервисные Обновления. Другие инструменты не содержат встроенных средств для распространения .Net Framework.

Об Авторе

Стефан Крюгер работает независимым консультантом по программам установки и развивает Интернет сайт InstallSite.org, место, где разработчики программ установки могут обмениваться ресурсами и информацией с коллегами. Стефан был признан компанией Microsoft как  MVP (Наиболее Ценный Профессионал) по тематике Windows Installer.

Перевод на русский язык

Антон Спицын, MCP (Microsoft Certified Professional), член форума InstallSite.org

Ограничения ответственности автора: Эта статья представляет мое текущее понимание предмета. Я буду пытаться обновить ее, если появится новая информация, но я не могу гарантировать ее верность и полноту.

English News Discussions Windows Installer Related Tools More Help InstallScript About InstallSite Shop Site Search
deutsch Neuigkeiten Diskussionsgruppen Windows Installer MSI FAQ Artikel     Shop Suche

Copyright © by InstallSite Stefan Krueger. All rights reserved. Legal information.
Impressum/Imprint Datenschutzerklärung/Privacy Policy
By using this site you agree to the license agreement. Webmaster contact.