Продолжение истории исследований желатинового «вируса», он же Storm Worm, он же Peacomm и так далее.
Смотрите начало.
Итак, желатин.
Хм.
Снова.
Первое, с чем я столкнулся, это отсутствие какой-либо технической информации о желатине.
Google, конечно, отправляет прямо в Википедию [WIKI].
Мы здесь мало чему учимся.
1. Вирус включает зараженные машины в ботнет [WIKI1]; 2. Желатиновая сеть является модификацией сети Overnet. Немного истории желатина на русском языке также содержится в [КАСП].
Понимание того, как работает Overnet, является основой для дальнейших обсуждений.
Поэтому в этом выпуске мы изучим эту основу.
Пройдя по нескольким ссылкам, я нашел описание желатиновой сети [PPT].
Попытки найти готовые реализации клиентов Overnet также оказались успешными [KADC].
Одного взгляда на библиотеку KadC было достаточно, чтобы распознать смутные особенности дизассемблированного кода вредоносной программы Valentin. Даже с некоторыми изменениями код KadC в полевых условиях может стать основой для желатина.
Только этой причиной можно объяснить совершенно нахальное заявление специалистов McAffee:
«Бот-технология быстро развивается, часто с помощью и к сожалению, этому способствует движение за открытый исходный код».[MCAF], также обсуждаемый в [CNET1] и [ASHIMMY].
Очень хотелось бы обратить внимание товарищей из McAffee, что им было бы неплохо расширить свой взгляд на мир, включив в обвинение отважных учёных из MIT, разработавших Кадемлию.
Одним из наиболее ценных ресурсов оказался [REC].
Там вы сможете взять оригинальный вариант одного из самых первых желатинов.
Тогда это был почти обычный :) зашифрованный исполняемый файл, следы которого тщательно скрывал драйвер руткита.
Преимущество первых версий в том, что они не повреждали сообщения, а это значит, что Wireshark сможет декодировать их в формате edonkey. Кстати, о «ненавистном» трафике.
Дело в том, что предпоследний тип желатина (а последний, как мы знаем, был распространен 1 апреля), создает обычные сообщения, понятные как предыдущим модификациям, так и клиентам Overnet, кстати.
Но перед отправкой он проверяется с помощью жестко закодированной таблицы.
Тот факт, что только представители «штамма Валентина» способны обрабатывать трафик своих «собратьев», свидетельствует об уменьшении размеров ботнета, построенного на этой модификации [HAC].
Были и другие, более ранние данные, что бонет делился на несколько мелких [ЗД].
Строго говоря, желатин и подобные ему.
э-э.
программы.
не являются вирусами.
Они не заражают файлы на локальных носителях и не выполняют деструктивных действий.
Они просто :) сами себя распространяют, спамят, участвуют в дос-атаках и, наверное, еще что-то делают [СЧ].
Очевидно, что первое, что вам нужно сделать, это выяснить, как отдельные образцы желатина общаются друг с другом.
Желатин использует сеть Overnet [WIKI2], которая является реализацией идеи Кадемлии [WIKI3], модели распределенная хеш-таблица , разработанный в Массачусетском технологическом институте, это не брехня.
Основной боевой единицей сети является узел, пир.
Первым приоритетом любого сознательного узла является вход в сеть.
Для этого у желатина есть список узлов, к которым он пытается подключиться в первую очередь.
В первых версиях этот список был жестко запрограммирован непосредственно в теле вируса, в последних версиях он также был жестко запрограммирован в теле вируса, но извлекался и сохранялся в ini-файле.
Без него, без напильника, кстати, желатин Валентин работать отказывается.
Адреса узлов «первого круга» записываются примерно в таком виде:
00003D6C8F338A3FDD3DF3648666F55C=BE56062A5DC600 0100A634122F3553A046EC451061927C=4B6EB028151500 02007E238D780D25FD5511285E2E596E=58E941B3100A00где число до знака отличается, это OvernetID (oid) или хэш узла, 128-битное число, которое генерируется, по-видимому, случайно.
Мы поговорим об этом подробно позже.
После знака идет IP-адрес (BE56062A = BE.56.06.2A = 190.86.5.42), порт (5DC6 = 24006) и последний байт — тип узла.
Первое (и наиболее часто используемое) сообщение, которое новый узел отправляет другим узлам, — «ПУБЛИЦИЯ».
Это своего рода пинг, с помощью которого стороны проверяют доступность друг друга.
В некоторых источниках это сообщение твердо называется «HELLO».
Внутри него пересылается oid узла-отправителя, его IP-адрес, порт и тип.
В общем те же данные что и в ini файле.
После того, как новый узел проверил, что пункт назначения достижим, и ответил (сообщение «PUBLICIZE_ACK», длиной два байта — заголовок и код сообщения), он отправляет запрос CONNECT. Структура сообщения идентична сообщению «ПУБЛИЦИЯ».
В ответ на это сообщение принимающая сторона 1. Отправляет список известных ему узлов и 2. добавляет отправителя в этот список (и соответственно будет отправлять адрес «нового парня» в ответ на новое «CONNECT»).
Новый узел добавляет полученные адреса в свой список хостов.
Если посчитать на пальцах, в файле diperto.ini содержались адреса 823 узлов в составе валентинного желатина.
А если хотя бы половина ответила двадцатью адресами, то.
К счастью, желатин пишется «правильно».
Размер списка известных узлов ограничен 1024 элементами.
Следующий шаг — выяснить, по какому адресу выглядит наш узел по отношению к узлу назначения.
Для этого желатин открывает TCP-порт и начинает его прослушивать.
Он передает номер порта в сообщении IP_REQ, на что получатель этого сообщения отвечает сообщением IP_REQ_RES с указанием адреса, с которого он получил это сообщение.
Это было сделано для обхода ограничений NAT и брандмауэров.
На этом процесс подключения к сети завершен, но Gelatin продолжит с высокой частотой пинговать узлы из своего списка, чтобы оперативно удалить те, которые по каким-то причинам стали недоступны.
Кстати, чтобы остановить цикл обработки входящих сообщений, достаточно отправить ему номер 74BE2A5Dh. Это не баг - он отправляет его себе для выполнения задания.
Возможно даже обновить его исполняемый код, но дело в том, что желатин работает, но совершенно отказывается обрабатывать входящие сообщения.
Этот неуклюжий метод можно попробовать обезвредить на зараженных машинах.
Итак, последовал обмен сообщениями вида (Z – Желатин, H – хост): Я → ОПУБЛИКОВАТЬ → Ч З ← PUBLISIZE_ASK ←Ч Я → СОЕДИНЯТЬ → Ч З ← CONNECT_RES ←Ч Я → IP_REQ → Ч З ← IP_REQ_RES ← Ч Теперь сделаем небольшой экскурс в основное назначение сети Overnet как распределенной хеш-таблицы.
Основное назначение сети – обмен файлами, а точнее публикация данных о файлах и их местонахождении таким образом, чтобы максимально ускорить поиск.
В упрощенном виде эта схема выглядит так.
Хост, которому необходимо опубликовать некоторые данные, вычисляет MD4-хеш содержимого файла (или ключевых слов, в зависимости от того, какая информация публикуется), а затем ищет хост, OID которого ближе всего к этому хешу.
(Степень близости определяется результатом операции XOR, которая, как мы знаем, для одинаковых битов возвращает ноль.
То есть для абсолютно одинаковых хешей мы получим ноль).
Для этого издатель отправляет всем хостам в своем списке сообщение ПОИСК, содержащее нужный хеш.
Узлы, получившие такое сообщение, находят несколько (?) адресов из своих списков в порядке убывания близости и отправляют обратно этот список с сообщением SEARCH_NEXT. Поиск заканчивается, если узел отправляет свой собственный адрес внутри SEARCH_NEXT. Метаданные и информация об узле, с которого можно скачать этот файл, публикуются отдельно.
Точно так же, но в другую сторону происходит поиск.
Определенным образом вычисляется хеш, а затем происходит обмен SEARCH-SEARCH_NEXT, после чего определяются параметры TCP-соединения, после чего скачивается файл.
В самом простом варианте желатин находит нужный хост, загружает с него список писем и начинает спамить, как ребенок.
Например, вот так:
a href="mailto:" - это не моя выдумка, почему-то автоматически подставляет( О том, что именно и как ищут желатин в Интернете, мы поговорим в следующем выпуске.220 hnicpmaa01.vnn.vn ESMTP Service (7.3.118.8) ready HELO xxxx.xxx.xxxx.com 250 hnicpmaa01.vnn.vn MAIL From:[email protected] 250 MAIL FROM:[email protected] OK RCPT TO:[email protected] 550 RCPT TO:[email protected] User unknown QUIT 221 hnicpmaa01.vnn.vn QUIT
Литература.
АШИММИ.
Заявления McAfee об открытом исходном коде — это резкие слова Мэтту Эсэю.
CNET1. Клевета McAfee на открытый исходный код. ВАК.
Ботнетов становится все меньше.
КАДК.
КАСП.
Современные информационные угрозы, I квартал 2008 г.
//Шторм продолжается.
МКАФ.
ППТ.
Брэндон Энрайт. РЕК.
СЧ.
ВИКИ.
ВИКИ1. Штормовой ботнет. ВИКИ2. Овернет. ВИКИ3. Кадемлия.
ЗД.
Продаются разделы ботнета Storm Worm. Теги: #вирусы #Чулан
-
Macspoon Подкаст №21
19 Oct, 24 -
Краткая История Javascript. Часть 1
19 Oct, 24 -
Ваша Жизнь Имеет Смысл. Сет Годин
19 Oct, 24 -
Улучшения Вредоносных Скриптов
19 Oct, 24