Как стать автором
Обновить

Желатин again

Время на прочтение 5 мин
Количество просмотров 732
Продолжение истории исследования «вируса» желатина, он же Storm Worm, он же Peacomm и так далее. Начало см. в прошлом выпуске.

Итак, желатин. Хм. Снова.

Первое, с чем я столкнулся — отсутствие какой-либо технической информации о желатине. Гугл, естественно, посылает прямиком в википедию [WIKI]. Здесь мы узнаем немногое.

1. Вирус включает зараженные машины в ботнет [WIKI1];
2. Сеть желатина представляет собой модификацию сети Overnet.

Немного истории желатина на русском также содержится в [KASP].

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

Пройдя путь в несколько ссылок, я нашел некое описание сети желатина [PPT]. Попытки найти готовые реализации клиентов Overnet также увенчались успехом [KADC]. Одного взгляда на библиотеку KadC было достаточно, чтобы узнать смутные черты дизассемблированного кода валентинистого зловреда. Пусть даже и с некоторыми изменениями, но код KadC вполе может являться базой для желатина. Только этой причиной можно объяснить совершенно наглое высказывание специалистов компании McAffee:
«Bot technology is rapidly evolving, often aided and
abetted, unfortunately, by the open-source movement».

[MCAF], также обсуждается в [CNET1] и [ASHIMMY]. Очень хотелось бы обратить внимание товарищей из McAffee, что неплохо бы им расширить свой взгляд на мир, включив в обвинение бравых ученых из MIT, разработавших Kademlia.

Одним из самых ценных ресурсов оказался [REC]. Там можно взять оригинальную версию одного из самых первых желатинов. Тогда он представлял собой практически обычный :) зашифрованный исполняемый файл, следы деятельности которого тщательно конспирировались руткитовым драйвером. Преимущество первых версий в том, что они не ксорили сообщения, а значит и wireshark сумеет декодировать их в формате edonkey.

Кстати, об «обксореном» трафике. Дело в том, что предпоследний вид желатина (а последний, как мы знаем, распространялся первого апреля), создает обычные сообщения, которые понятны и прошлым модификациям, и клиентам Overnet, кстати. Но перед отправкой он проходится по нему ксором, используя хардкоданную таблицу. Тот факт, что только представители только «валентинистого штамма» способны обработать трафик своих «братьев», свидетельствует об уменьшении размеров ботнета, который строится на данной модификации [HAC]. Были и другие, более ранние данные о том, что бонет разделился на несколько небольших [ZD].

Строго говоря, желатин и ему подобные… э… программы… вирусами не являются. Они не инфицируют файлы на локальных носителях, не совершают деструктивных действий. Они лишь :) распространяют себя, спам, участвуют в дос-атаках и, наверное, делают что-то еще [SCH]. Очевидно, что в первую очередь нужно выяснить как общаются между собой отдельные экземпляры желатина.

Желатин использует сеть Overnet [WIKI2], которая является реализацией идеи Kademlia [WIKI3], модели распределенной хэш-таблицы, разработанной в MIT, это вам не хухры-мухры. Основной боевой единицей сети является узел, peer. Первоочередная задача любого сознательного узла — прежде всего войти в сеть. Для этого у желатина есть список узлов, к которым он пробует подключиться в первую очередь. В первых версиях этот список был захардкодан прямо в теле вируса, в последних — тоже захардкодан в теле, но извлекался и сохранялся в ini файле. Без него, — без файла, — кстати, валентиновый желатин работать отказывается. Адреса узлов «первого круга» записаны примерно а таком виде:

00003D6C8F338A3FDD3DF3648666F55C=BE56062A5DC600
0100A634122F3553A046EC451061927C=4B6EB028151500
02007E238D780D25FD5511285E2E596E=58E941B3100A00


где число до знака разно — это OvernetID (oid), или хэш узла, 128-битовое число, которое генерируется вроде как случайным образом.Про него подробно мы позднее поговорим. После знака идут IP-адрес (BE56062A = BE.56.06.2A = 190.86.5.42), порт (5DC6 = 24006) и последний байт — тип узла.

Первым (и самым часто используемым) сообщением, которое новый узел посылает другим узлам, является «PUBLICIZE». Это своеобразный пинг, с помощью которого стороны удостоверяются в доступности друг друга. Это сообщение в некоторых источниках прочно называют «HELLO». Внутри него посылается oid узла-отправителя, его IP адрес, порт и тип. Вобщем, такие же данные, как и в ini файле.

После того, как новенький узел удостоверился в том, что адресат доступен и ответил (сообщение «PUBLICIZE_ACK», длиной два байта — заголовок и код сообщения), он посылает запрос на CONNECT. По структуре сообщение идентично сообщению «PUBLICIZE». В ответ на это сообщение принимающая сторона

1. Отправляет список узлов, известных ему и
2. добавляет отправителя в этот список (и, соответственно, будет посылать адрес «новенького» в ответ на новые «CONNECT»).

Новый узел добавляет адреса, которые он получил, в список своих хостов. Если посчитать на пальцах, то diperto.ini в составе валентинистого желатина содержал адреса 823 узлов. И если хотя бы половина ответила двадцатью адресами, то… К счастью, желатин написан «правильно». Размер списка известных узлов ограничен 1024-мя элементами.

Следующим шагом выясняется, под каким адресом наш узел выглядит для узла назначения. Для этого желатин открывает tcp порт и начинает его слушать. Помер порта он передает в сообщении IP_REQ, на что получивший это сообщение отвечает сообщением IP_REQ_RES с адресом, от которого он это сообщение получил. Сделано это для обхода ограничений NAT и фаерволов.

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

Кстати, для того, чтобы прекратить цикл обработки входящих сообщений, достаточно послать ему число 74BE2A5Dh. Это не баг — он сам себе его посылает, чтобы завершить работу. Возможно, даже для апгрейда своего исполняемого кода, но факт таков, что желатин работает, но напрочь отказывается обрабатывать входящие сообщения. Такой топорный метод можно попробовать для его обезвреживания на зараженных машинах.

Итак, последовал обмен сообщениями вида (Z — Желатин, H — хост):
Z → PUBLICIZE → H
Z ← PUBLISIZE_ASK ← H
Z → CONNECT → H
Z ← CONNECT_RES ← H
Z → IP_REQ → H
Z ← IP_REQ_RES ← H

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

Хост, которому нужно опубликовать некие данные, вычисляет MD4-хэш содержимого файла (или ключевых слов, в зависимости от того, какая информация публикуется), затем ищет узел, OID которого наиболее близок к этому хэшу. (Степень близости определяется результатом операции XOR, которая, как мы знаем, возвращает ноль для одинаковых битов. То есть для абсолютно одинаковых хэшей мы получим ноль). Для этого публикующий посылает всем хостам из своего списка сообщение SEARCH, в котором содержится нужный хэш. Получившие такое сообщение узлы находят несколько(?) адресов из своих списков, в порядке убывания близости и отсылают обратно этот список с сообщением SEARCH_NEXT. Поиск заканчивается, если узел отправляет внутри SEARCH_NEXT свой собственный адрес. Отдельно публикуются мета-данные и данные об узле, с которого можно скачать этот файл.

Точно таким же образом, но в другую сторону, происходит и поиск. Вычисляется определенным образом хэш, и затем обмен SEARCH-SEARCH_NEXT, после чего выясняются параметры подключения по TCP, после чего файл скачивается.

В простейшем варианте желатин находит нужный хост, скачивает с него список емейлов и начинает не по-дестки спамить.

Например, вот так:
220 hnicpmaa01.vnn.vn ESMTP Service (7.3.118.8) ready
HELO xxxx.xxx.xxxx.com
250 hnicpmaa01.vnn.vn
MAIL From:pcec-vmi-onsite@aliceadsl.fr
250 MAIL FROM:pcec-vmi-onsite@aliceadsl.fr OK
RCPT TO:dmchn@hn.vnn.vn
550 RCPT TO:dmchn@hn.vnn.vn User unknown
QUIT
221 hnicpmaa01.vnn.vn QUIT


a href=«mailto:» — это не моя выдумка, почему-то автоматически подставляет(

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

Литературка.

ASHIMMY. McAfee's open source statements are fighting words to Matt Asay.
CNET1. McAfee's libel against open source.
HAC. Ботнеты становятся меньше.
KADC. KadC library.
KASP. Современные информационные угрозы, I квартал 2008//Шторм продолжается.
MCAF. Killing Botnets.
PPT. Brandon Enright.
REC. Peacomm.C — Cracking the nutshell.
SCH. The Storm Worm.
WIKI. Storm Worm.
WIKI1. Storm botnet.
WIKI2. Overnet.
WIKI3. Kademlia.
ZD. Storm Worm botnet partitions for sale.
Теги:
Хабы:
+11
Комментарии 9
Комментарии Комментарии 9

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн