Желатин again

    Продолжение истории исследования «вируса» желатина, он же 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.
    Поделиться публикацией

    Похожие публикации

    Комментарии 9

      0
      А можно непосвященным какую-то предисторию про желатин ;) В чем отличие от других троянов? В чем именно информационная ценность данного топика?
        0
        в начале поста ссылка на предыдущий выпуск. Отличие желатина от других троянов в том, что он не троян :)

        Ценность топика... смотря для кого как. Прошлым вроде как заинтересовались.
      • НЛО прилетело и опубликовало эту надпись здесь
          0
          да, бред какой-то) поставил
          +1
          Спасибо! Очень было интересно почитать! жду следующего выпуска...
          P.S.
          Может создать отдельный блог о вирусах и антивирусных технологиях? или у нас тут уже такой есть?
          0
          При первых же словах об отсутвии информации... есть инормация, куда лучшая чем от всяких макафии...
          http://indetails.info/?module=detailed&i…
            0
            мда.. это я видимо пропустил, спасибо.
            Немногу пугает, правда, что опубликовано 26.01.08.
            Довольно общие фразы, особенно про овернет. А так - вполне себе ничего.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое