Мифическое зло. История руткита Rustock.C

Рассказывая об исследованиях бэкдора Sinowal, я обещал остановиться подробнее на рутките Rustock.C, который отнес к изучаемому образцу Sinowal. Правда, они относятся друг к другу не в буквальном смысле, так как алгоритмы действий этих зловредов абсолютно отличны, ну разве что имеют какие- то общие концепции, присущие и другим обитателям киберпросторов, относящимся к вредоносному программному обеспечению. Связывает эти два зловреда совсем другая ниточка, о которой я скажу позже. История с Rustock не менее интересна, чем с продолжателем его руткитских дел.

Слухами земля полнится

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

В начале мая 2008 года антивирусная компания «Доктор Веб» заявила всей антивирусной общественности о том, что у них имеется образец руткита Rustock (далее русток). По информации, которую огласила «Доктор Веб», образец у них появился в конце марта 2008 года, и, естественно, пока аналитики компании проводили изучение и вырабатывались средства противодействия заразе, компания молчала о наличии такого экземпляра.

Руткит был неуловимым с октября 2007 года, именно этой датой обозначен файл, который исследовали аналитики Вэба. После обнародования информации сразу же появились мнения, что за этот период руткитом была создана самая массивная сеть зомби, для рассылки спама. Ведь именно этим и занимались предшественники Rustock.C – Rustock.A и .B (по классификации «Лаборатории Касперского» - Trojan-Clicker.Win32.Costrat и SpamTool.Win32.Mailbot). Однако впоследствии открылись гораздо более крупные масштабы проблемы, нежели простая бот-сеть.

Файл образца вируса имел размер 244.448 байт и представлял собой драйвер Windows. Дроппер, который проводил установку руткита в систему, отсутствовал. Информации о процессе распространения руткита не было вообще никакой, поэтому аналитиком пришлось взяться за дело для получения полной картины происходящего.

Под микроскопом

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

Все исследованные варианты зловреда были не старше сентября 2007 года, хотя это совсем не означало, что где-то не «гуляет» более ранняя версия руткита. Ну а что же означали те слухи, которые ходили в конце 2006 года? Скорее всего, вируса тогда не существовало вообще, мало того, автор русток версии .С и автор русток версий .А и .В – совершенно разные люди. Дело в том, что исследуя код зловреда, аналитики нашли несколько противоречий. Автор русток .А и .В в коде указывал название «spambot», а в коде версии .С было четко прописано название «Rustock.C». Это все создавало впечатление, что русток .С создавался под шумиху, которая возникла в 2006 году без каких-либо оснований. Хотя есть вариант, который подразумевает, что это был просто пиар перед выпуском. В любом случае, точно это известно только автору зловреда (рис.1).

Анализ полученных лабораторией 599 файлов помог выявить наличие модификаций руткита, которых оказалось 4 штуки.

Первый вариант С1 датируется 10 сентября 2007 года, его размер варьируется от 244.440 до 244.512 байт и он содержит драйвер и DLL. Вариант С2 относится к 26 сентября. Имеет размер 158.432-158.464 байт. Варианты C3 и С4 относятся к 9-10 октября 2007 года. Их размер варьируется в пределах 158.400-158.496 байт. Несмотря на то, что модификация С1 отличается от последующих почти на 100 Кб, принципиальных различий между ними нет. Автор лишь несколько оптимизировал алгоритм обфускации тела руткита. Все варианты имеют незначительные отличия, касающиеся изменений в коде DLL (спам-бота) (рис.2).

В течение пяти дней руткит был полностью распакован и его запустили на виртуальных машинах. При этом установщик (дроппер) все также отсутствовал. Все это позволило получить доступ к DLL (спам-боту) и изучить код библиотеки.

В ходе своей работы руткит извлекает DLL из себя и исполняет ее в системной памяти, внедряя в процесс winlogon.exe. Эта DLL никогда не существует в виде файла на диске и присутствует только в памяти компьютера. По такому принципу построен spy-модуль бэкдора Sinowal (если помните, то я оговаривал это при рассказе о подгружаемой DLL-библиотеке). Ее (DLL) задача – рассылка спама с зараженного компьютера. Для выполнения этой задачи она обращается к серверу 208.66.194.215 и получает оттуда шаблоны писем для рассылки. IP-адрес принадлежит американскому хостинг-провайдеру MCCOLO, на ресурсах которого уже довольно давно размещаются и вредоносные программы, и сайты киберпреступных группировок.

Зараза была классифицирована как Virus.Win32.Rustock.a. Почему вирус, если это руткит? Просто потому, что ведет себя зловред как обычный файловый вирус классического типа, но это фактически, а вот логически он относится к руткитам.

С добавлением средств детектирования осложнений никаких не возникло – такое чувство, что автор был на 100% уверен в шифровании кода и поэтому не добавил в руткит никаких способов противодействия антивирусным системам.

Дальше – больше

После проведения исследований цель была достигнута – антивирусная система лаборатории Касперского стала без проблем детектировать зловреда. Однако оставалось еще много пробелов, которые не давали покоя аналитикам как профессионалам. Поэтому исследование продолжилось с целью изучить алгоритм работы зловреда полностью.

В течение нескольких дней все полученные сэмплы вируса детально исследовались и анализировались. В итоге было выяснено, что из всех 599 экземпляров 590 попали в ловушки в период с 10 сентября по 23 ноября 2007 года, 9 штук — с 23 ноября 2007 по май 2008 года. Это позволило выстроить своеобразный график распространения вируса (рис. 3).

Полученные результаты очень интересны. Заметьте, что распространение зловреда носит характер всплесков. Это означает, что авторы не сделали выбор в пользу неконтролируемой эпидемии. Все было подконтрольно, и в определенные промежутки времени процесс распространения совершал скачок. После чего затихал на неопределенное время.

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

Появился на свет вирус действительно в сентябре 2007 года и никаких ранних версий не было, следовательно, слухи оказались именно слухами. Да и пользователи были не так уж беззащитны, но об этом ниже.

Вопрос, который был острее всех, пожалуй, - распространение зловреда. Обратите внимание на следующие слова: CoolWebSearch, IFrameBiz, Trafficadvance, LoadAdv. Что-то знакомое? Те, кто искушен в информационной безопасности, отлично поняли, о чем я, остальным немного поясню. Все эти слова относятся к одной из наиболее опасных хакгрупп – IframeBiz. Эта группа фигурировала во всех значимых событиях андерграунда. Кроме того, они и их «проекты» всегда были на вершине технологической пирамиды. В свое время именно они первыми стали массово использовать троянские загрузчики в chm-файлах, именно на их серверах были обнаружены первые варианты эксплойтов уязвимостей в обработке ANI- и ICO-файлов. Они использовали троянские программы, написанные на Java (Trojan-Downloader.Java.ClassLoader) и они же задали моду на использование скриптовых загрузчиков. Визитной карточкой группы долгое время были домены в зоне .biz и имена файлов, подобные loadadv*.exe.

Следы IframeBiz ведут в Россию, а многие из их первых серверов находились именно в Санкт-Петербурге. За 4 года активной работы IframeBiz создали огромный по масштабам ботнет, применяемый для распространения зловредов. Машины, зараженные большим количеством загрузчиков, без проблем могли за считанные минуты загрузить практически любое вредоносное программное обеспечение. Эта технология распространения работала эффективно и очень часто использовалась.

Клиент оплачивает время, в течение которого будет производиться распространение, и после этого загрузчики на зараженных компьютерах принимаются за работу. Вполне возможно было одновременно распространять и несколько зловредов. К услугам этой хакгруппы активно прибегали инициаторы DDoS, создатели adware и т.д. Еще бы, ведь за плату они получали гарантированное распространение. А это намного эффективнее, чем игра 50/50 при использовании какого либо алгоритма или даже drive-by технологии.

К IframeBiz обратились и создатели рустока летом 2007 года. Однако или загрузчики IframeBiz не способны были залить и установить руткит в системе на должном уровне, или авторы просто опасались кражи исходников виря, но для заливки по каналам группы этого зловреда был создан отдельный модуль.

Что же происходило в конце сентября 2007 года на компьютерах-жертвах? А происходило примерно следующее: загрузчик, установленный на машину (именно тот, вернее, один из тех, который осуществлял операции, относящиеся к бизнесу IframeBiz), загружал файл loadadv351.exe с сервера в зоне hk (это Хорватия, именно серверы в этой зоне в то время использовала группа). После запуска файл инжектировался в процесс explorer.exe, за что и получил по классификации Лаборатории Касперского имя Trojan.Win32.Inject.mt. Сделав инжект, он получал возможность доступа в сеть и возможность бесконтрольной загрузки файлов. Зверек отсылал пакеты на серверы и получал приказы: указания, какие файлы откуда загружать. Вот эти файлы и были телами руткита. Одновременно с загрузкой производится сбор данных о системе (железо, ОС, ПО и т.д.). Таким образом в систему загружаются некоторые файлы. Для нас интерес представляют только два. Чтобы было удобно, я, следуя примеру КасперскиЛаб, назову эти файлы 1.exe и 2.exe. О первом мы будем много говорить, а ко второму вернемся в конце статьи.

Файл 1.exe – еще один загрузчик, именно тот, о котором я упоминал, когда говорил, что для распространения рустока был создан отдельный даунлоадер. Самое смешное, так это то, что в базах сигнатур Касперского этот загрузчик был с первого дня своего появления и обзывается он - Downloader.Win32.Agent.ddl. Вот такая вот ирония, руткит не могли найти аж до весны следующего года, а дроппер руткита был известен с момента появления.

Downloader.Win32.Agent.ddl – фактически руткит. Он загружается в ядро операционной системы, что позволяет ему скачать и установить русток. Само тело загрузчика зашифровано достаточно мощным алгоритмом, который очень похож на алгоритм пакования рустока. В общем, после дешифровки было абсолютно точно понятно, что это дроппер руткита Rustok (рис.4).

Теперь я немного подробнее расскажу о загрузчике. Как было отмечено выше, троянец состоит из двух компонентов – основного тела и драйвера. Драйвер собирает информацию о системе: идентификаторы производителя и модель устройств на материнской плате, дату установки и точную версию операционной системы. Затем эта информация зашифровывается и пересылается на сервер автора (или заказчиков) Rustock: 208.66.194.215. Если немного точнее, то на сервер в зашифрованном виде передавалась следующая информация: TSC, Bridge0, Bridge1, InstallDate, Version, ProductID.

Сервер, на который идет отправка данных (208.66.194.215), тот же, который мы уже видели в DLL (спам-боте) руткита — именно оттуда Rustock получает письма для рассылки. Однако метод взаимодействия драйвера загрузчика с сервером отличается от метода, использованного в спам-боте.

Драйвер Agent.ddl работает с виртуальным устройством TCP/IP напрямую из нулевого кольца, в результате чего исходящий с машины трафик при активном заражении невозможно обнаружить с помощью некоторых снифферов/межсетевых экранов. Agent.ddl устанавливает соединение на 443-й порт, пытаясь замаскировать данные под пакеты протокола HTTPS. В результате исследователь, даже перехватив трафик на шлюзе, не сразу поймет, что это никакой не HTTPS, а просто зашифрованные данные, собранные на зараженном компьютере (рис.5).

Ключ шифрования при каждом новом запуске меняется. При этом авторы неплохо постарались для того, чтобы усложнить жизнь аналитикам. Ниже буде пример зашитого в тело вируса IP-сервера и порта подключения:

push 00000BB01; порт — 443
push 0E00C04E1
sub d,[esp],00849C211; разность равна 0xD7C242D0, т.е. IP-адресу 208.66.194.215

Над обфускацией кода тоже потрудились неплохо. Вот такая простая операция:

mov [eax], ecx

после процесса обфускации выглядит вот так:

push ebx
mov ebx, 0x03451b8c
sub ebx,eax
sub ebx, 0x03451b8c
neg ebx
mov [ebx], ecx
pop ebx

Заметьте, что вместо одной инструкции получилось семь – неплохой результат.

В конце

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

Rustock.C, которым так сильно пугали в 2006 году, на самом деле тогда и не существовал. Что это было: обычные слухи или грамотный устрашающий пиар – известно только тому, кто заговорил о рутките в первый раз. Заметьте, что с первых дней, несмотря на неуловимость руткита, в базах сигнатур находился его дроппер, что уже давало значительный процент защиты. Ну а неуловимость зловреда обуславливалась не какими-то сверхтехнологиями противостояния антивирусным системам, а особенностью распространения (использовалась зомби-сеть хакгруппы IframeBiz и в распространении прослеживалась периодичность).

Я обещал рассказать про какой-то файл 2.exe :). Ну, теперь пришло время хлопнуть в ладоши от удовольствия, которое получаешь, когда все звенья цепи становятся на нужные места. Этот файл был ничем иным, как еще одним зловредом. Sinowal, тот, который через месяц после окончания этой истории опять доставил хлопот специалистам Лаборатории Касперского. Rustock и Sinowal распространялись через один ботнет, при помощи одного дроппера. Новые версии Rustock перестали появляться в середине октября 2007 года. Первые образцы «буткита» были обнаружены спустя месяц — в ноябре 2007 года. Возможно, что это простые совпадения, но я так не считаю. Напомню, что после «первых ласточек» бэкдора Sinowal он начал использовать достаточно интересный способ drive-by-download, который заключался не в размещении вредоносных скриптов, а в подмене ссылок.

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

Евгений Кучук http://sa-sec.org


Компьютерная газета. Статья была опубликована в номере 21 за 2009 год в рубрике безопасность

©1997-2024 Компьютерная газета