26.12.2011

Анализ CVE-2011-2462 – часть третья

image

Среди воров нет чести, как и среди создателей вредоносного ПО. Зачем кому-нибудь делать всю работу по написанию эксплоита с нуля, когда существует множество готовых шаблонов?

Автор: Brandon Dixon

Среди воров нет чести, как и среди создателей вредоносного ПО. Зачем кому-нибудь делать всю работу по написанию эксплоита с нуля, когда существует множество готовых шаблонов? Когда я впервые взглянул на эту PDF-атаку нулевого дня, я заметил строку "a pwning u3d model". Вбив ее в гугле, вы быстро выйдете на более старый эксплоит (CVE-2009-2990) PoC, написанный Фелипе Андресом Манзано (Felipe Andres Manzano) и имеющий большое число совпадений с данным. Ниже представлен возможный путь, которым следовали хакеры, чтобы построить новый эксплоит, используя код Фелипе.

Назначение страниц

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

Исходя из показанного порядка страниц, первая – пустая страница-заглушка, вторая предназначена для эксплоита Linux-систем, а третья – для эксплоита Windows. Хотя документ содержит дополнительную страницу, в ней нет никаких действий или доказательств попыток использования Linux-эксплоита. Я подозреваю, что атакующие решили не удалять страницу, боясь, что это разрушит структуру документа. Вместо этого они просто ни разу не обращались к ней.

Триггер JavaScript

Для запуска эксплоита необходимо показать U3D-объект. Обязательно ли делать это с помощью JavaScript? Нет, на самом деле можно взять документ с обычным содержимым и вставить туда страницу, которая рендерит некорректный U3D-модуль. Когда пользователь прокрутит документ до этой страницы, он запустит эксплоит. Смысл использования триггера в том, чтобы избежать какого-либо взаимодействия с пользователем и, таким образом, обеспечить более высокий шанс успешного запуска эксплоита.

Выше показано использование "app.platform" и "this.pageNum" из кода Фелипе. Стоит отметить, что проверка платформы необязательна и, видимо, оставлена создателями эксплоита из лени. Фелипе включил ее только для определения, какой из эксплоитов следует запустить, ведь у него были эксплоиты как для Windows, так и для Linux.

U3D-аннотация

Чтобы данный эксплоит заработал, необходимо создать U3D-аннотацию. Эта аннотация существенно определяет U3D-объект и то, как его нужно рендерить в документе. Ниже представлен код Фелипе, генерирующий аннотацию.

Это полностью совпадает с тем, что мы видим внутри данного вредоносного документа.

Мелкие совпадения

Во вредоносном документе обнаружилась пара вещей, которые я не вполне понял. Внутри объекта 7, например, находится закодированная с помощью flatedecode строка «(Aaaaa) Tj». Это значение похоже не играет никакой роли в эксплуатации уязвимости, но присутствует и в коде Фелипе. Включены также метаданные, определяющие автора, его email и web-страницу. Хотя они были изменены, любопытно отметить, что атакующие оставили в адресе устаревший домен "googlepages.com".

Источник U3D

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

Анализ злоумышленника

Когда я смотрю на такие атаки, мне хочется понять, как атакующий мог сгенерировать документ и почему он выбрал этот способ. Существует старое высказывание: «не сломалось – не чини». Я думаю, что в данном случае оно весьма применимо, поскольку атакующие похоже слегка модифицировали то, что уже работало. Нужно было заменить лишь распыляемый по куче код, который был определен довольно просто, и U3D-поток.

Исходя из статических данных, присутствующих во всех имеющихся у меня образцах, я также полагаю, что инструмент, использованный для создания этого документа, довольно прост и обладает малой модульностью. По одной этой причине я едва ли поверю, что эта атака была создана правительственными усилиями. Напротив, я думаю, что она была сделана небольшой группой людей, которые хотели бы поддержать свое правительство и поделиться с ним данными. Такое поведение соответствует модели китайского хакера и придает больше значения китайским признакам, обнаруженным в документе и дроппере (см. часть 2).

Заключение

Прогресс делает людей ленивыми, и это хорошо, но не для написания эксплоитов. Злоумышленники повторно используют код, который находится в открытом доступе и, таким образом, облегчают нашу работу по реагированию на инциденты. Я думаю, не ошибусь, если скажу, что, пока в рассылаемых документах, содержащих данный эксплоит, не будет видно никаких изменений, у нас есть приличный список статических сигнатур, по которым их можно выявить. Рассмотренная атака также показала, что злоумышленники читают то, что публикуют исследователи и иногда берут это на вооружение. Необходимо придавать больше значения демонстрационным атакам (Proof-of-Concept, PoC) и тому, что могут сделать злоумышленники, прежде, чем атака произойдет на самом деле.

или введите имя

CAPTCHA