День святого вируса

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

    В моем случае было нечто вроде
    <meta http-equiv=«refresh» content=«1;url='valentine.exe'»>

    <a href="valentine.exe">blah-blah</a>

    Неприкрытое приглашение стать новым пользователем вируса. Также аккуратно скачав valentine.exe, и переменовав его в .txt, чтобы ненароком не запустить, можно поковырять его изнутри.

    Онлайн файл-сканнер Касперского определяет этот файл как зараженный вирусом «Email-Worm.Win32.Zhelatin.vg».

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

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



    Общая схема работы вируса такова:
    1. Оригинальный «valentine.exe» извлекает из своего тела кусок кода, который сначала расшифровывается, а затем распаковывается с помощью функции RtlUncompressBuffer. Этот код сохраняется в файле %SYSTEMROOT%/system32/diperto$p-$t.sys, где $p и $t — идентификаторы процесса и потока (в шестнадцатеричном формате) «valentine.exe», записывающего файл. Также создается файл  %SYSTEMROOT%/system32/diperto.ini:
    [config]
    [local]
    uport=1211
    [peers]

    Порт менятся случайным образом. Магическое слово «peers» может означать то, что зараженный компьютер будет входить в ботнет.

    2. «valentine.exe» загружает драйвер «diperto.sys», используя функции Windows API, после чего прекращает свою работу.

    3. «diperto.sys» создает устройство под названием «DRV_MODULE_MYDR», а также эвент под именем «Ir<fk^7k». Все это можно увидеть с помощью WinObj.exe

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

    5. Затем находит процесс под названием «services.exe» - контролер служб Windows, подсоединяется к нему, выделяет в адресном пространстве процесса новый блок памяти, куда записывает расшифрованный кусок кода.

    6. Для передачи управления вредоносному коду, драйвер использует APC — asynchronous procedure call. Используя функцию KeInsertQueueApc он ставит в очередь на исполнение асинхронный вызов, который будет «доставлен» после любого следующего системного вызова из процесса-жертвы. После этого драйвер прекращает свою работу.
    7. Вкратце все это выглядит так:
    valentive --> расшифровывает кусок себя --> diperto.sys -->  расшифровывает кусок себя --> services.exe.

    На данном этапе возникает два вопроса: а) к чему все эти манипуляции? б) как нам защититься это этого зверя?

    Ответ на второй вопрос, в общем-то очевиден. Достаточно закрыть доступ на запись %SYSTEMROOT%/system32, в результате самый первый шаг обламывается и вирус идет лесом. Но, представим на минуту, что он мутировал, и умеет записывать файл в любое другое место. Тогда единственное, что может нас спасти — отобрать у себя право на регистрацию и загрузку драйверов (что, по сути, аналогично праву записи в раздел реестра «HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services»).

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

    Ну и теперь самый интересный вопрос — зачем столько телодвижений? А вот зачем. Обычно подобная операция внедрения кода и запуска его на выполнение производится с помощью связки «OpenProceess — VirtualAllocEx — WriteProcessMemory — CreateRemoteThread», на которую антивирусы обращают пристальное внимание. В нашем случае цепочка выглядит так: «KeAttachProcess — ZwAllocateVirtualMemory — rep movds — KeInsertQueueApc». «rep movsd» означает, что вредоносный код копируется напрямую в пространство жертвы, не используя никакие функции вообще. На сегодняшний день выявить такого рода проникновение антивирусы не в состоянии.

    Немного статистики:
    — размер оригинального файла: 117 248 байтов.
    — размер файла драйвера: 129 920 байтов.
    — оригинальный файл скомпилирован MINGW GCC. Который, кстати, помогает выворачивать мозг наизнанку, когда пытаешься отследить вызовы функций в незнакомом стиле
    mov [esp], a
    mov [esp+4], b
    mov [esp+8], c
    call F      ; calls F(a, b, c);

    — оригинальный файл нашпигован ложными вызовами вроде CreateWaitableTimer(0, 0, 0); или IsBadHugeReadPtr(0, 0); или DeleteAtom(0). Не совсем понятно, кого они призваны сбить с толку — антивирусы или человека.

    Во второй части рассмотрим собственно то, как работает вирус, внедренный в процесс services.exe.
    Поделиться публикацией

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

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

      0
      Спасибо, жду продолжения.... Сам люблю вири ковырять... И когда имел более менее успех в этом деле...
        0
        "люблю" тут как-то не совсем подходит) какого рода успех?
        0
        Захватывающе :)
        +1
        Интересно!
        А с помощью каких инструментов исследуете?
          +4
          Да все как обычно - с помощью отладчика, дизассемблера и какой-то матери :)
          +9
          Похоже на выпуск криминальной хроники, если бы один компьютер показывал его другому :)
            0
            имеете ввиду технические детали? или оформление?
              0
              ну это общее мнение (позитивное, кст.)
            0
            спасибо, люблю подобное почитать.
              +2
              Было бы хорошо, если бы этот пост стал началом цикла постов на эту тематику1
                0
                я тоже за.
                +3
                побольше бы таких постов, а то посты про вебстроительство уже стоят поперек горла
                  0
                  хех... очень поддерживаю, но, к сожалению, тут "рулят популярные темы" ;)
                    0
                    я тоже не прочь почитать популярные темы. но если такая узкоспециальная тема будет интересна хотя бы нескольким людям или кому-то поможет - это же совсем неплохо, по-моему
                      0
                      Не только — взгляните вон, как плюсуют.
                    0
                    Спасибо! Жду продолжения!
                      +1
                      Вот разрываюсь между двумя желаниями: при встрече с вирусописателем 1) пожать ему руку и 2) дать ему в морду.
                        0
                        Пожми руку и, неотпуская, дай в морду! :)
                          0
                          С просто писателем - ну можно поговорить о том, о сем. А вот к тем, кто выпускает таких зверей в живую природу, нужно примерять ректальный криптоанализ.

                          Как вспомню очереди людей на перепрошивку биоса раз в год, так вздрогну :)

                          Да и похоже, это дело становится на прочные рельсы товарно-денежных отношений.
                            0
                            Неужели ВинЧих еще жив ? o0
                            Или это воспоминания давно минувших дней ?
                              0
                              будьте уверены, жив ) Много очень старого злого софта до сих пор живо. Например, на мой ирц-сервер регулярно заходят жертвы какого-то старого виря и ждут команд на запароленном скрытом канале. Жалко, я команд не знаю, а так стал бы владельцем маленького ботнетика машин на 600.
                                0
                                дайте знать жертвам, будьте человеком :)
                                  0
                                  Ещё бы я мог до них достучаться =)))
                          0
                          /me зачем-то хранит на флэшке пару отукдато добытых виндовых вирусов....
                          Зачем они мне? Не знаю. Все равно мне их запускать негде (wine не считается)
                            +2
                            >2. "valentine.exe" загружает драйвеР "diperto.sys"

                            > оригинальный файл скоМпилирован MINGW GCC

                            поправте, пожалуйста
                              +1
                              так же поправьте:
                              Только он [ от? ] первой волны ..
                              котнролер [ kot`n`roll!)) ] служб Windows ..
                                0
                                да, спасибо.
                              0
                              Хорошая статья, да и идея. Можно открыть отдельный коллективный блог по Reverse Engineering.
                              Также хотелось бы узнать инструментарий исследования, использовали ли вы виртуальные машины.
                              Хорошо что даны рекомендации по устранению бреши.
                                0
                                создание блога категорически поддерживаю!
                                  0
                                  да! создание блога так же поддерживаю... я бы сделал... да... не могу пока(
                                    0
                                    инструментарий - отладчик и дизассебмлер, filemon от sysinternals. вмваре использовал, да.
                                    0
                                    Интересно мне вот - а каков процент вирусов от общего числа, которые смогут злодействовать если использовать учётную запись пользователя или даже гостя, а не администратора???

                                    Ни у кого нет такой статистики?
                                      0
                                      думаю, стремится к нулю. единственный путь для таких вирусов - либо сначала повысить себе привелегии, либо вмешаться в процесс загрузки до включения механизмов разграничения прав. ну или еще как-то :)
                                      0
                                      Качественная, дорогая схема. Респект писателям.
                                        0
                                        Кому интерестно, про "Штормого червя" , можете почитать тут:

                                        Storm Worm: St.Valentine\'s wave

                                        http://indetails.info/index.php?module=d…
                                          0
                                          Не знаю.. у меня teaTimer из комплекта Spybot-S&D спрашивает
                                          можно ли процессу прописываться в реестр или нет.
                                          Так что таких проблем не наблюдаю.

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

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