суббота, 19 июня 2010 г.

Adobe ≠ безопасность или "долгоиграющий" 0-day

На протяжении всего текущего года компания Adobe уже не раз нас радовала серьезными уязвимостями, которые влекли за собой возможность удаленного выполнения произвольного кода. В этот раз очередной "шедевр" (CVE-2010-1297) был связан с уязвимостью в Adobe Reader и некоторыми особенностями обработки встроенных в pdf флеш-роликов. Многие уязвимости в продуктах Adobe (CVE-2010-129 входит в их число) могут эксплуатироваться не только на платформе windows, но на многих других, на которые они официально подставляются. Другое дело, что провести успешную атаку эксплойтом на одних плотформах проще, а на других сложнее. Сама Adobe не спешит выпускать заплатку для этой уязвимости и она запланирована только на конец июня, получается, что пользователи продукции этой компании подвержены риску почти на протяжении целого месяца. На мой взгляд для столь массовых продуктов это просто не допустимо. Ну, а теперь давайте рассмотрим саму уязвимость.
Итак, уязвимость находиться в модуле authplay.dll, при обработке специально сформированного SWF. Корнем зла на этот раз оказался тег DoABC, использующийся при вставке swf в pdf-файлы. Во вредоносном SWF-файле заменен всего лишь один опкод, но именно он и приводит к ошибке. Оригинальный байт-код 0x66 (GetProperty) заменен на 0x40 (newfunction).

Судя по всему уязвимость была найдена с применением методов фаззинга файловых форматов.
Но выполнению SWF предшествует heap-spraying, используется для обхода DEP.



В итоге мы получаем ret2lib в BIB.DLL, после чего начинается выполнение шелл-кода. Подобная техника обхода DEP была использована в нашумевшей атаке codname: Aurora. Сейчас она приминяется очень часто в различных эксплойтах.

Для того чтобы попасть в библиотеку BIB.dll используются техники return-oriented programming (ROP), недостаток этого метода в достаточно длительном времени работы. Например, публичный эксплойт на CVE-2010-1297, опубликованный в рамках Metasploit. Оказался очень медленным и нестабильным в работе.
На днях была опубликована программа BH'2010 USA та, что проводиться в Вегасе и на ней было замечено достаточно большое количество докладов посвященных ROP. Конец лета будет интересным :)

Напоследок небольшая демка, которую я записал для корпоративного блога, но мне она нравится и пожалуй продублирую ее здесь тоже :) На ней отчетливо видно, как не быстро отрабатывает ROP shellcode (из Metasploit'а работает как минимум в двое медленее). В качестве сандтрека была взята заглавная тема к фильму Pi.

Материал по теме:
Подробное исследование от Zynamics
Исследование от Symantec
Исследование от Websense

5 комментариев:

  1. Что самое интересное, подобная дырка действительно находится элементарно даже ну самым примитивным мутационным фаззером. Странно, что столь поверхностные баги в столь распостранённом софте обнаруживаются до сих пор, уже который год подряд.

    ОтветитьУдалить
  2. мне кажется, что ROP работает секунды....
    Может тормозит все из-за heap-spray

    ОтветитьУдалить
  3. Алекс Сотиров и Дино Дай Зови говорят:
    "С прогрессом баги находятся все проще и проще, а вот написание эксплойтов становится все сложнее и сложнее..."
    даже графики они показывали соответсвующие)

    Вот этот эксплойт - явный пример. Бага находится тупо фаззингом, зато эксплойт сложный, в три этапа работающий... чего стоит только то, как тут решили задачу замены стекового фрейма на страницу из heap-spray (что бы ESP=0x0C0C0C0C)... красота, тут даже пример возвратно-ориентированого программирования без самих "возвратов" (без окончания на RETN)

    ОтветитьУдалить
  4. Мне тоже удивительно, что Adobe до сих пор не завела у себя группу профессиональных людей, которые будут заниматься анализом безопасности их продуктов внутри компании. В том же MS этим занимается достаточно большое кол-во людей и багов после внедрения такого процессинга стало несколько меньше. Ну или замечать их стали раньше не зависимо от появления паблик сплойтов :)
    Основное время съедает действительно heap-spray, а этапов выполнения в анализируемом сплойте было аж 5 штук. На последнем дропался даунлодер и ...

    ОтветитьУдалить
  5. >>Сейчас она приминяется
    C0101010: grammar error

    ОтветитьУдалить