Защита от 0-day в Internet Explorer

Защита от 0-day в Internet Explorer

В этой статье будут рассмотрены возможные временные решения для предотвращения эксплуатации уязвимости нулевого дня в Microsoft Internet Explorer.

Редакция SecurityLab.ru
По материалам Microsoft SVRD

Как простому человеку защитить себя?

Если вы не компьютерный гуру и не читаете перед сном SecurityLab, можете смело выполнить инструкции из этого раздела и спокойно работать. Для выполнения одного из предложенных решений необходимо скачать файл solutions.zip и/или oledb32.zip и следовать нижеперечисленным инструкциям.

Для быстрого решения проблемы выполните инструкции, описанные в решении #4.

Информация об уязвимости

Уязвимость «нулевого дня» была обнаружена в Internet Explorer 7, и, по результатам исследований присутствует в других версиях Internet Explorer. Злоумышленник может выполнить произвольный код в уязвимой системе и установить вредоносные программы на компьютер при просмотре Web-сайта.

Уязвимость существует из-за повреждения памяти при обработке связываний DHTML данных (DHTML Data Binding) в Internet Explorer. Уязвимость распространяется на все поддерживаемые в настоящее время версии Internet Explorer. Специально сформированный HTML код, который использует эту уязвимость, приводит к тому, что IE создает массив из объекта связывания данных. Вредоносный код приводит к тому, что IE ссылается на объект, который был ранее инициализирован. Этот класс уязвимости эксплуатируется путем подготовки динамической памяти, содержащей контролируемые злоумышленником данные (“heap spray”), до разыменования некорректного указателя.

В настоящее время уязвимость активно используется для установки вредоносного программного обеспечения через взломанные сайты (ссылки).

Какое временное решение следует использовать?

Сейчас уведомление Microsoft содержит 8 различных вариантов блокирования уязвимости. Microsoft добавила дополнительные способы решения проблемы в последней версии уведомления, чтобы дать пользователям больше возможностей для устранения уязвимости. Только в IE8 существует возможность полностью отключить механизм связывания данных. Если вы не используете IE8, вам понадобится следующее:

  1. заблокировать доступ к уязвимому коду в библиотеке MSHTML.dll через OLEDB, что позволяет блокировать текущие векторы использования уязвимости
  2. применить самую безопасную конфигурацию, блокирующую проблемный код против этой уязвимости

Опциональный вариант (C) может применяться для усложнения контроля злоумышленника над динамической памятью.

Временное решение

A

B

C

1. Установить зоны безопасности Internet и Local в значение «High». Это позволит выводить окно с запросом на выполнение/запрет AсtiveX компонентов и Active Scripting в этих зонах для каждого сайта.

 

X

X

2. Настройть Internet Explorer на вывод запроса перед запуском Active Scripting или отключите Active Scripting в зонах безопасности Internet и Local.

 

X

X

3. Запретить Internet Explorerиспользовать OLEDB32.dll с помощью Integrity Level ACL

X

 

 

4. Запретить функционал Row Position в OLEDB32.dll

X

 

 

5. Отменить регистрацию OLEDB32.DLL

X

 

 

6. Использовать ACL для запрета OLEDB32.DLL

X

 

 

7. Запретить функционал XML Island

X

 

 

8. Включить DEP для Internet Explorer на Windows Vista и Windows Server 2008

 

 

X

9. Отключить поддержку связывания данных в Internet Explorer 8

X

X

 

Применение временного решения из колонки (A) поможет защититься от настоящих атак. Для полноценной защиты от уязвимости мы также рекомендует применить решение из колонки (B).

Зачем перечислять 4 вида опций для защиты от вектора атаки, использующего провайдер OLEDB данных?

Давайте кратко обсудим временные решения 3-5, каждый из которых описывает способ защиты от вектора атаки на провайдер OLEDB.

5 & 6 –отменить регистрацию или отключить OLEDB32.DLL через ACL (списки контроля доступа)

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

Решение #5

Отмена регистрации OLEDB32.DLL

Для 32-битной системы (Windows 2000, XP, 2003, Vista, 2008) выполните команду:

Regsvr32.exe /u "%ProgramFiles%\Common Files\System\Ole DB\oledb32.dll"

Для 64-битной системы (Windows 2000, XP, 2003, Vista, 2008) выполните команды:

Regsvr32.exe /u "%ProgramFiles%\Common Files\System\Ole DB\oledb32.dll"
Regsvr32.exe /u "%ProgramFiles(x86)%\Common Files\System\Ole DB\oledb32.dll"

Повторная регистрация (отмена временного решения) OLEDB32.DLL в системе

Для 32-битных систем выполните команду:

Regsvr32.exe "%ProgramFiles%\Common Files\System\Ole DB\oledb32.dll"

Для 64-битных систем выполните команды:

Regsvr32.exe "%ProgramFiles%\Common Files\System\Ole DB\oledb32.dll"
Regsvr32.exe "%ProgramFiles(x86)%\Common Files\System\Ole DB\oledb32.dll"

Решение #6

Отключение OLEDB32.DLL с помощью ACL

Скачайте архив solutions.zip и выполните соответствующий файл:

Для 32-битных ОС Windows 2000, XP, 2003

DisableACL-32bit.cmd

Для 64-битных Windows XP и 2003

DisableACL-64bit.cmd

Для 32-битных Windows Vista и Windows 2008

DisableACL-Vista-32bit.cmd

Для 64-битных Windows Vista и Windows 2008

DisableACL-Vista-64bit.cmd

Для отмены временного решения по отключению OLEDB32.DLL с помощью ACL и выполните соответствующий файл:

Для 32-битных ОС Windows 2000, XP, 2003

EnableACL -32bit.cmd

Для 64-битных Windows  XP и 2003

EnableACL-64bit.cmd

Для 32-битных Windows Vista и Windows 2008

EnableACL-Vista-32bit.cmd

Для 64-битных Windows Vista и Windows 2008

EnableACL-Vista-64bit.cmd

4 – Отключитьфункционал Row Positionв OLEDB32.dll

По нашим данным, отключение одного COM объекта OLEDB32 достаточно для блокировки доступа к уязвимой части кода. Хотя мы и указываем решения 5 и 6 в уведомлении, но решение #4 более предпочтительно, т.к. также эффективно как решения 5 и 6, но менее заметно.

Для отключения COM объекта OLEDB32 необходимо выполнить следующий reg файл:

DisableRowPosition.reg

Для отмены временного решения выполните файл:

UndoDisableRowPosition.reg

- Запретить Internet Explorer использовать OLEDB32.dll с помощью Integrity Level ACL

Это еще одно решение для блокировки доступа к провайдеру OLEDB данных. Большой плюс этого решения – доступ блокируется только для Internet Explorer и не затронет другие приложения. Применение этого решения возможно только, когда включены UAC и IE Protected Mode (по умолчанию на Windows Vista и Windows Server 2008). Мы более подробно опишем это решение, т.к. оно достаточно хорошее.

Подробности решения с IntegrityLevelACL

Внимание, это решение применимо только для ОС Windows Vista и выше

Для внедрения этого типа защиты, наше решение базируется на том факте, что по умолчанию Internet Explorer запускается с включенным Protected Mode. Это означает, что процесс iexplore.exe запускается на низком уровне целостности. Подробности работы этого режима можно найти по адресу: http://msdn.microsoft.com/en-us/library/bb250462.aspx. Как написано в статье, механизм целостности позволяет заблокировать процессу возможность записи данных в защищенные объекты (например, файлы), имеющие более высокий уровень целостности. Но в статье не указывается, что также возможно запретить процессу читать и выполнять защищенные объекты с более высоким уровнем целостности. Это осуществляется путем применения специальной записи ACL для объекта. Ниже, мы расскажем, как это осуществить для OLEDB32.DLL.

Перед реализацией решения необходимо создать временную директорию и скопировать в нее inf файл из архива oledb32.zip. Для 32-битной системы используйте BlockAccess_x86.inf, для 64-битной - BlockAccess_x64.inf. Запустите командную строку с привилегиями администратора, перейдите в созданную вами директорию и выполните следующую команду:

>SecEdit /configure /db BlockAccess.sdb /cfg <файл.inf>

При успешном выполнении команды будет выдан следующий результат:

    The task has completed successfully.
    See log %windir%\security\logs\scesrv.log for detail info.

SecEdit также создаст файл BlockAccess.sdb в текущей директории. Его можно будет удалить вместе с inf файлом.

Проверка работоспособности временного решения

Для 32-битной системы достаточно выполнить команду:

icacls "%ProgramFiles%\Common Files\System\Ole DB\oledb32.dll"

Для 64-битной системы будет нужно выполнить команду icacls дважды:

icacls "%ProgramFiles%\Common Files\System\Ole DB\oledb32.dll"
icacls "%ProgramFiles(x86)%\Common Files\System\Ole DB\oledb32.dll"

Наличие следующей строки в выводе команды icacls свидетельствует об успешном применении временного решения:

Mandatory Label\Medium Mandatory Level:(NW,NR,NX)

Значения NR и NX свидетельствуют об успешном выполнении команды, отсутствие строки или одного из значений (NR либо NX) говорит о неуспешно выполненной операции.

Отключение временного решения

Для отмены временного решения необходимо скопировать из архива inf файл (для 32-битной системы UnblockAccess_x86.inf, и UnblockAccess_x64.inf для 64-битной), и выполнить команду:

SecEdit /configure /db UnblockAccess.sdb /cfg <файл.inf>

Ссылки:

http://blogs.technet.com/swi/archive/2008/12/12/Clarification-on-the-various-workarounds-from-the-recent-IE-advisory.aspx
http://www.microsoft.com/technet/security/advisory/961051.mspx
http://msdn.microsoft.com/en-us/library/ms531388(vs.85).aspx
http://msdn.microsoft.com/en-us/library/bb250462.aspx
http://blogs.technet.com/swi/attachment/3167803.ashx
http://www.securitylab.ru/vulnerability/364549.php
http://www.securitylab.ru/analytics/364556.php
http://www.securitylab.ru/blog/personal/tecklord/7341.php

Ваша приватность умирает красиво, но мы можем спасти её.

Присоединяйтесь к нам!