Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #117, СЕНТЯБРЬ 2008 г.

Обзор эксплойтов

Крис Касперски



В середине августа Microsoft порадовала нас очередной порцией заплаток, допускающих удаленный захват управления системой. Практически все они относятся к MS Office, файлы которого давно стали международным стандартом де-факто. Остается только гадать, сколько непатченных систем можно захачить.

MS Excel – множественные ошибки переполнения

Brief

Microsoft подтвердила и исправила сразу четыре критических ошибки в Excel, обнаруженных различными независимыми исследователями. Первая ошибка связана с косой обработкой записи (record) AxesSet, которая размещена в диаграмме (chart), встроенной в электронную таблицу (spreadsheet). Записи этого типа (используемые для задания позиций и размеров координатных осей диаграммы) не документированы и отсутствуют в официальном описании формата файлов Office, недавно обнародованном Microsoft. Однако OpenOffice (поставляющийся в исходных тестах) все прекрасно поддерживает, открывая огромный простор для творческих экспериментов. Физически AxesSet представляет собой массив индексов координатных осей диаграммы, причем значения индексов не проверяются. В специально сконструированном файле они могут указывать куда угодно, выходя далеко за пределы «родного» массива. В общем случае это приводит к «удару» по памяти и непредсказуемому поведению Excel. Как правило, все заканчивается его падением. Не исключена и возможность удаленного захвата управления. Хакеры уже работают в этом направлении, правда, пока не очень успешно. Уязвимости присвоен кодовый номер CVE-2008-3004. Подробнее о ней можно прочитать на: cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-3004, labs.idefense.com/intelligence/vulnerabilities/display.php?id=740 и securityfocus.com/bid/30638.

Еще одна ошибка индексного переполнения (на этот раз связанная с документированной записью типа «RECORD», размещенной внутри электронной таблицы) проходит под кодовым номером CVE-2008-3005. Так же, как и в предыдущем случае, здесь отсутствует какой-либо контроль индексов. Что позволяет им выходить за границы массива, модифицируя любую ячейку стековой памяти по усмотрению атакующего. А вот это уже серьезно! Уязвимость носит отнюдь не академический, а вполне реалистический характер. Впрочем, в поздних версиях Офиса, откомпилированных новым Си-компилятором от Microsoft, хакер не может ни подменить адрес возврата из функции (он проверяется перед выходом), ни даже перезаписать указатели на процедуры (они зашифрованы псевдослучайным числом, генерируемом при запуске приложения). SEH-обработчики также убраны из стека и вынесены в специальную секцию PE-файла. Это усложняет атаку, хотя и не делает ее невозможной. Тем более, младшие версии Офиса (скажем, довольно популярный Office XP) практически никак не защищены от хакерской агрессии. Атакующим дан зеленый свет. Подробную карту маршрута можно отрыть на securityfocus.com/bid/30639 и labs.idefense.com/intelligence/vulnerabilities/display.php?id=741.

Третья ошибка реализует тривиальное переполнение буфера (и тоже ведет к возможности захвата управления). Excel поддерживает файлы формата BIFF, но поддержка эта выполнена не вполне корректно. При обработке записи типа Country (8Ch), программа выделяет буфер фиксированного размера, копируя туда пользовательские данные. Проверка длины не производится. В результате, содержимое ячеек памяти, находящихся за концом буфера, затирается и Excel падает – однако, передача управления на shell-код вполне возможна, особенно в ранних версиях Офиса. Ошибке присвоен номер CVE-2008-3006 и более подробную информацию можно посмотреть на zerodayinitiative.com/advisories/ZDI-08-048, а также на securityfocus.com/bid/30640/info.

О последней (четвертой по счету) ошибке с номером CVE-2008-3003 известно меньше всего. Пришлось повозиться с дизассемблером, прежде чем я разобрался, что к чему. Выяснилось, что баг существует только в Office 2007 и связан с удаленным доступом к данным .xlsx-файла, явно защищенным паролем от посторонних личностей, но, поскольку, Excel кэширует пароль (чтобы не спрашивать его у пользователя всякий раз), сохраняя его непосредственно в самом файле, то атакующий может захачить его без особых проблем. Во всяком случае, в теории. А на практике необходимо, чтобы при создании файла использовались фрагменты других файлов, заботливо начиненные «взрывчаткой». Причем, «заимствование» фрагментов должно осуществляться напрямую через буфер обмена без всяких «посредников» типа FAR'а, удаляющих оттуда все ненужное. Кто у нас копирует через FAR? Уж точно не секретарши.

С другой стороны, навязать жертве свои ресурсы для перетаскивания их в секретный документ — крайне затруднительно, и тут без социальной инженерии тут не обойтись. Ну а чисто техническую информацию можно найти на: cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-3003. Прежде, чем заканчивать с Excel'ем, стоит сказать еще одну вещь. Для изготовления exploit'ов необходимо либо воспользоваться официальной спецификацией на Excel-формат от Microsoft (ищи ее на нашем DVD), либо сравнить оригинальный и залатанный Excel на наличие различий. Сравнивать лучше всего программой Excel Viewer. Она и бесплатная, и весит всего несколько метров, так что разобраться в ней нетрудно. Просто берем xlviewer.exe с DVD и устанавливаем программу на виртуальную машину. Делаем бэкап всех файлов, затем качаем патч: download.microsoft.com/download/c/a/8/ca83a37c-2760-439e-9a5c-11485f260bac/office2003-KB951589-FullFile-ENU.exe. Устанавливаем и смотрим различия, которые в наглядном виде отображает бесплатный PatchBiff (полноценный аналог коммерческого BinDiff'а, стоящего немереных денег): cgi.tenablesecurity.com/tenable/dl.php?p=patchdiff2-2.0.3.zip.

Targets

  • CVE-2008-3004: Excel 2K SP3, 2K2 SP3, 2K3 SP2/SP3, Excel Viewer 2003;
  • CVE-2008-3005: Excel 2K SP3, 2K2 SP3,
  • CVE-2008-3006: Excel 2K SP3, 2K2 SP3, 2K3 SP2/SP3, 2K7, 2K7 SP1, Viewer 2003/SP1;
  • CVE-2008-3003: Excel 2K7, 2K7 SP1.

Exploits

Сплоиты находятся в стадии активной разработки и пишутся по заказу Endeavor Security, Inc для тестирования набора сигнатур. Крупнейшим поставщиком которого она, собственно говоря, и является. Поскольку никакие права фирме не передаются, то после выпуска сигнатур exploit'ы вместе с исходным кодом будут опубликованы и выложены на моем сервере: nezumi.org.ru/souriz/hack.

Solution

Установить заплатки от Microsoft, доступные всем желающим (без проверки подлинности лицензии) по адресу: microsoft.com/technet/security/bulletin/ms08-043.mspx.

MS PowerPoint – множественные ошибки

Brief

В PowerPoint'е найдено три критические ошибки, допускающие удаленный захват управления, что реально высаживает на измену. Если .xls-файлы из Сети качают немногие, а по почте их получают, в основном, от более-менее «проверенных лиц», то ситуация с .ppt прямо противоположная. В Сети болтаются тысячи презентаций в PowerPoint-формате и не качать их почти невозможно. К счастью, для честных тружеников клавиатуры и к большому хакерскому огорчению, две из трех ошибок воздействуют только на редко кем используемый PowerPoint Viewer. Зато третья распространяется на все версии Офиса, допуская передачу управления на shell-код со всеми вытекающими отсюда последствиями. Но не будем забегать вперед! Первая уязвимость (CVE-2008-0120) связана с классической ошибкой строкового переполнения MFC CSting, выделяющей память в куче. Куча это дело такое – достаточно хорошо защищенное в последних версиях XP и Висте, а потому, чтобы забросить на целевую машину shell-код, хакеру придется попотеть. Технические подробности находятся на: labs.idefense.com/intelligence/vulnerabilities/display.php?id=739.

Вторая ошибка (CVE-2008-0121), обнаруженная тем же самым исследовательским коллективом, очень похожа на первые три ошибки в Excel'е – отсутствие проверки границ массива при обработке индексов, выход за пределы которого в данном случае дает замечательную возможность перезаписи указателей на виртуальные функции, что обеспечивает быстрый и надежный захват управления, к сожалению, работающий только под PowerPoint Viewer'ом. У кого, интересно, он установлен? Впрочем, почитать об этой дыре не помешает: labs.idefense.com/intelligence/vulnerabilities/display.php?id=738.

Третья дыра, затрагивающая все версии Офиса, проходит под номером CVE-2008-1455 и связана с ошибкой парсинга .ppt-файлов. Вызывает она традиционное переполнение буфера с возможностью захвата управления. Подробностей известно немного, и я все еще ковыряюсь дизассемблером. Почитать кое-какую инфу об уязвимости можно на securityfocus.com/bid/30579/info.

Targets

  • CVE-2008-0120: PowerPoint Viewer 2003;
  • CVE-2008-0121: PowerPoint Viewer 2003;
  • CVE-2008-1455: PowerPoint 2K SP3, 2K2 SP3, 2K3 SP2/SP3, 2K7, 2K7 SP1, Viewer 2K3.

Еxploits

Сплоиты также находятся в стадии активной разработки и пишутся по заказу Endeavor Security, Inc. Ищи их позже на моем сервере: nezumi.org.ru/souriz/hack.

Solution

Установить заплатки от Microsoft, доступные без проверки подлинности лицензии, по адресу: microsoft.com/technet/security/bulletin/ms08-051.mspx.

MS Office graph filters — множественные ошибки

Brief

Набор графических фильтров, используемых всеми приложениями Офиса, также не свободен от ошибок. Уточним: их там просто тьма! Последнее обновление от Microsoft, выпущенное 12 августа, затыкает пять крупных дыр, связанных с дефектами обработки файлов следующих форматов: WPG, EPS, PICT и BMP. В простеньком PICT обнаружено сразу две дыры. Надо же было так постараться! BMP-уязвимости присвоен номер CVE-2008-3020, а гнездится она в BMPIMP32.FLT-файле. Тот считывает BMP-заголовок, содержащий, среди прочего, количество цветов, при превышении которого происходит разрушение кучи, допускающее возможность захвата управления по вполне стандартному сценарию: labs.idefense.com/intelligence/vulnerabilities/display.php?id=736. Подробно описывать дыры в остальных форматах мне откровенно лениво, поэтому ограничимся тем, что перечислим их номера. CVE-2008-3019 — отвечает за ошибку в EPS. Дыры в PICT награждены номерами CVE-2008-3018 и CVE-2008-3021 (по одному номеру на каждую дыру), а WPG (также вызывающий контролируемое разрушение кучи) проходит под номером CVE-2008-3460 и уже довольно детально исследован хакерами: labs.idefense.com/intelligence/vulnerabilities/display.php?id=736.

Targets

MS Office 2K SP3, Office XP SP3, Office 2K3 SP2, Office Project 2K2 SP1, MS Works 8.

Exploits

Сплоиты будут выложены позже на моем сервере: nezumi.org.ru/souriz/hack.

Solution

Как обычно, установить заплатки от Microsoft, доступные всем желающим (то есть без проверки подлинности лицензии) по адресу: microsoft.com/technet/security/bulletin/ms08-044.mspx. Если же заплатку по каким-либо причинам устанавливать не хочется, можно воспользоваться временным обходным решением. Открываем папку \Program Files\Common Files\Microsoft Shared\Grphflt\, находим там файл имя_фильтра.ftl (для BMP это будет BMPIMP32.FLT), переименовываем его, например, в BMPIMP32.FLT_, после чего создаем пустой файл BMPIMP32.FLT. Несмотря на отсутствие фильтра, BMP можно будет по-прежнему импортировать в Офис (в дополнение к набору фильтров там имеются и внутренние конверторы).

Свершилось! Компания Tenable-Security взяла и выпустила некоммерческий аналог знаменитого коммерческого BinDiff'а от Zynamics, обозвав новинку PatchDiff'ом. Да не просто выпустила, но и обогнала его по функциональности. Казалось бы, что такое BinDiff и зачем он вообще нужен, когда есть куча всяких fc.exe, сравнивающих бинарные файлы, а WinDiff замечательно сравнивает текстовые? На самом деле, BinDiff совсем не то же самое, что fc.exe. Во-первых, это не самостоятельный продукт, а plug-in для IDA-Pro. Во-вторых, он сравнивает файлы довольно изощренным образом. Анализируя поток управления (со всеми ветвлениями), он разбивает его на блоки и, игнорируя мелкие различия, занимается поиском масштабных изменений – отыскивает похожие или полностью идентичные функции, что очень полезно при анализе заплаток. Ведь чтобы написать рабочий exploit, необходимо знать, какая именно дыра была заткнута, а для этого необходимо «запеленговать» измененный код. Побайтовое сравнение ничего не дает, поскольку заплатка представляет собой полностью перекомпилированный файл, как правило, с другими ключами оптимизации или даже совершенно другой версией компилятора. Короче, смещения всех функций «уплывают», а в самом коде обнаруживается огромное количество несущественных изменений, «ослепляющих» тривиальное побайтовое сравнение. Зато анализ потока управления (в смысле, ветвлений) рулит только так. Конечно, без ложных срабатываний не обходится, но дополнительные проверки и другие подобные изменения обнаруживаются без труда и визуализируются в наглядной графической форме. Скачать PatchDiff можно в любое время дня и ночи: cgi.tenablesecurity.com/tenable/dl.php?p=patchdiff2-2.0.3.zip (или взять с нашего диска).

15 февраля 2008 года Microsoft выложила в открытый доступ достаточно полную спецификацию формата бинарных файлов, используемых в Офисе версий 97-2007. Событие осчастливило как создателей бесплатного ПО, вынужденных поддерживать эти форматы в своих приложениях, так и хакеров, у которых буквально крышу срывает от радости. Вряд ли стоит объяснять, насколько упрощается анализ заплаток на тот же MSWord при наличии спецификации на .doc. Даже и без всяких заплаток — теперь можно осознанно экспериментировать с различными полями, пытаясь добиться их переполнения. Чем же еще можно объяснить взрывной рост дыр, обнаруживаемых в Офисе с конца зимы этого года? Если раньше хакерам приходилось блуждать впотьмах, то ныне все тайное стало явным! Впрочем, не стоит обольщаться. Microsoft изменила бы самой себе, если бы не оставила кучу недокументированных возможностей (кстати говоря, уже известных конкурентам и успешно поддерживаемых пакетом OpenOffice, исходные тексты которого окажутся замечательным подспорьем к документации, выложенной на microsoft.com/interop/docs/officebinaryformats.mspx#EAB).

Содержание