Компания
240,78
рейтинг
1 сентября 2010 в 15:59

Разное → TDL4 – первый полноценный руткит для x64 систем (Win7, Vista …)

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

TDL4 удаётся успешно обходить защитный механизм проверки цифровой подписи в х64 версиях windows-систем. Авторы TDL4 применили довольно изящный способ обхода, который заключается в использовании техник заражения MBR и старта вредоносного кода раньше самой операционной системы. Подобные методологии уже активно применялись такими вредоносными программами, как Mebroot, StonedBoot и др.

Последней распространенной версией TDL3, о которой мы проводили летом подробное исследование, была 3.273. Сейчас отcчет версий ведется с начала, и рассматриваемая в статье версия идет под номером 0.02 (версию можно увидеть в конфигурационном файле бота). Столь странный номер версии наводит на мысли, что авторы пока только отлаживают новые технологии, появившиеся в этой версии, и в дальнейшем нас ожидает что-то более интересное. С точки зрения функционала принципиальных изменений, кроме нового способа инсталляции драйвера через заражение MBR и небольших изменений в скрываемой файловой системе, мы не заметили. Драйвер очень похож на то, что мы уже видели в TDL3 и, вероятнее всего, был просто пересобран с учетом особенностей х64 систем. Предыдущая версия руткита использовала для загрузки вредоносного функционала механизм инфицирования системных драйверов без изменения их размера, но так как в х64 системах при загрузке драйвером проверяется цифровая подпись, злоумышленники от этого механизма отказались.

Итак, теперь заражение осуществляется следующим образом:

— Открывается описатель физического устройства (в нашем случае это \\??\PhysicalDrive0), на котором располагается раздел с именем C:
— Подготавливается и записывается образ своей файловой системы в конец жесткого диска
— Перезаписывается MBR — кодом, который осуществляет загрузку модулей в ранее подготовленной файловой системе
— После успешного заражения на x64 системах происходит перезагрузка, при помощи вызова функции ExitWindowsEx().

Вот так выглядит расшифрованный код MBR, и мы видим имя вредоносного модуля, который должен будет выполниться для дальнейшего запуска руткита:

image

Алгоритм шифрования достаточно прост и сводится к вызову в цикле процессорной команды ROR:

image

Процедура запуска TDL4 с учетом обхода механизма проверки цифровой подписи:

— Bios считывает первый сектор загрузочного диска и передает управление на код главной загрузочной записи MBR и таким образом начинается выполнение кода TDL4
— Далее происходит расшифрование кода для дальнейшего выполнения, который предназначен для загрузки модуля с именем ldr16 из файловой системы руткита
— Загруженный модуль ldr16 осуществляет перехват прерывания 13h, которое отвечает за работу с жестким диском. Основная задача данного модуля определить разрядность операционной системы (x32 или x64), и в зависимости от нее осуществляется загрузка ldr32 или ldr64.
— Оба модуля ldr32 и ldr64 предназначены для загрузки основного драйвера TDL4, которая осуществляется без использования стандартного API, чтобы обойти механизм проверки цифровой подписи.
— Сначала происходит размещение кода драйвера в памяти по адресам предлежащим ядру ОС. Далее проводится его регистрация, как драйвера ОС, при помощи вызова недокументированной функции IoCreateDriver(). После этого драйвер можно считать загруженным.

Затем продолжается загрузка операционной системы с драйвером TDL4 на борту, после старта происходит внедрение вредоносного кода в некоторые процессы, и в дальнейшем его поведение очень похоже на предыдущую версию TDL3. Вот так выглядит конфигурационный файл бота:

image

TDL4, как и его предыдущие собратья, попал в семейство вредоносных программ Win32/Olmarik и обнаруживается нами, как руткит Win32/Olmarik.ADA.
Автор: @SVH
ESET NOD32
рейтинг 240,78

Комментарии (56)

  • +2
    Ссылки в студию!
  • +2
    Хоть бы написали как его можно получить и его цель =)
    Почитаешь и не поймёшь, как же он попадает на комп?
  • +6
    2010 год. Windows — самая супер-пупер система.
    Как? Скажите, как вирус, запущенный из-под простого пользователя может обратиться напрямую к диску и записать что-то в MBR?
    • 0
      s/вирус/руткит/
    • 0
      Флешка, вставленная не вытащенная из компа перед запуском + закрузка с usb раньше hdd
      • 0
        А у вас каждая флешка размечена, как загрузочная?
        И там нормальная MBR есть?
        Или вирус ее переразметит?
        • 0
          Если я без прав админа (под winXP правда) делаю загрузочкую флеш c kubuntu с помощью unetbootin, то что мешает сделать это вирусу?
        • –1
          Это не вирус, это руткит. Вас поправили же один раз. Или вы не знаете что это такое?
          • 0
            Естественно, знаю…
            Даже примерно технологию распространения могу представить…

            А о средствах диагностики и лечения хотелось бы почитать…

            Потому как наблюдаю тенденцию, что к каждому зловреду свой набор микстур, которые не успевают за модификациями заразы…

            А я от этого направления отстаю все больше и больше, потому как моя повседневная жизнь не требует практических применений старых навыков…
            • 0
              Если знаете, то почему называете это вирусом и спрашиваете «или вирус её разметит». Не разметит он ничего. Надо самому стартануть руткит до старта основной системы.
              • 0
                Открутите тред немного назад.
                Был вопрос: «Скажите, как вирус, запущенный из-под простого пользователя может обратиться напрямую к диску и записать что-то в MBR? „
                Был ответ: “Флешка, вставленная не вытащенная из компа перед запуском + закрузка с usb раньше hdd»

                Соответственно, обсуждался вопрос подготовки такой флешки.

                Я исключил вариант осознанной подготовки и спросил, кто и каким образом такую флешку подготовит.

                Если я не ошибаюсь, то руткит нужно запустить на исполнение, то есть, предоставить ему полноценную среду исполнения (Live OS).
                Так как руткит 64-битный, то это однозначно 64-битная ОСь. Автозапуск после загрузки, надеюсь, проблем не вызывает.

                То есть, должна быть не просто «вставленная не вытащенная» флешка, а флешка со специально подготовленной 64-битной Виндой.

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

                Что у нас осталось?
                Подгрузка исполняемого файла неким трояном и последующий запуск его, либо доставка того же файла под безобидным именем (соц.инженеринг).

                Но в каждом из этих случаев программа запускается от имени простого пользователя.
                При этом, к диску обращается через HAL, а не прямо.

                Таким образом «самому стартануть руткит до старта основной системы» не получается…

                Или поясните, как это происходит.
                • 0
                  Руткиты всегда запускаются осознанно и всегда им нужна подготовленная среда для запуска. По определению.
                  • 0
                    Тут рядом Bahusss ответил чуток подробнее и значительно понятнее ;)

                    Спасибо.
                    • 0
                      Ну, вы же сказали, что знаете что такое rootkit :) То, что сказал Bahusss следует из определения. Rootkit не вирус и не эксплоит.
                      • –3
                        Разве я сказал, что не знаю, что такое rootkit? Клевета…
                        Перечитайте тред…

                        Меня интересовала технология распространения и запуска.
                        Точнее, методы противодействия…

                        Если в своей рабочей ОСи я умею обеспечить противодействие как-то, худо-бедно, то в «более другой» уже как-то стал забывать.
                        Особенно, последние версии, которые мне тщательно изучить не повезло (или повезло не изучить) :)
    • –1
      Как зловред смог, интересно, но не так,
      как узнать, сможет ли антивирь вычистить его?
      На низком-то уровне…
      • +1
        В качестве способа борьбы — старый добрый метод — блокировка mbr на запись из биоса
        А вычислять в данном случае — неблагодарное дело, боюсь. Как-то обойти руткит при обращении к mbr диска. Проще загрузиться с другого устройства.
        • –2
          Блокировка MBR, как вариант…
          А диск с загаженной MBR на полочку, как напоминание?
          С таким подходом полочка не выдержит, в скорости…

          P.S.
          Я спрашивал не про «вычислить», а про «вычистить»…

          С такими тенденциями ко мне ж скоро очередь выстроится ;)
          А я как-то, подотстал от «антивирусных» тем…

          И не спрашивайте, почему…
          Не скажу…

          ;)
          • +1
            Я имел виду загруриться с другого устройства и проверить/вылечить mbr
        • 0
          Разве bios не на уровне int13h блокирует запись?

          Windows-драйвер HDD вряд ли использует int 13, работая через порты.
          • 0
            А это вопрос хороший… Требует отдельного курения манов
            • 0
              да чего курить-то, bios работает в real-mode, winxp ставит свои драйвера и игнорирует его

              другое дело, что этот virus protection поможет от упомянутого выше примера с загрузкой с зараженной флешки и т.д., т.е. именно от классических boot-вирусов
    • +4
      > Скажите, как вирус, запущенный из-под простого пользователя может обратиться напрямую к диску и записать что-то в MBR?

      Никак. Нужны права администратора: CreateFile -> msdn.microsoft.com/en-us/library/aa363858.aspx -> «The caller must have administrative privileges. For more information, see Running with Special Privileges.»

      Шутка юмора в том, что согласно статье support.microsoft.com/kb/942448:

      A file system can write to a volume handle only if the following conditions are true:
      Condition 1: The sectors that are being written to are boot sectors.
      Note: This condition exists to support programs such as _antivirus programs_, Setup programs, and other programs that have to update the startup code of the system volume. The system volume cannot be locked.
      • 0
        Это кондишены, позволяющие открыть волум при наличии прав.
  • –2
    Статьи про вирусы читать страшно…
    А писать комментарии, так вообще :)

    За инфу спасибо, интересно было почитать «как там, у них»…

    • НЛО прилетело и опубликовало эту надпись здесь
      • –2
        Тссссс…
        А то будет, как мне в соседнем топике…
        Ни кому не говори, что есть ОСи, в которых вирусы хоть и есть парочку, но не работают, или работают с огромными проблемами…

        И читай внимательно все, что тут пишут…
        Потому как есть опасность дисквалифицироваться, если не знать, как с вирусами бороться…

        А вдруг прийдут с коньяком и попросят полечить, а мы-то и не умеем уже…

        ;)
        • +1
          Вот оно подтверждение моих слов из того-самого соседнего топика. И так каждый раз…
          • –1
            Да, где-то так…
            Потому я и предложил читать внимательно…
            Вдруг чего полезного узнаю…

            И ни кому ни чего не предлагаю ;)
        • +1
          Да блин, не вирусы, а руткиты. Руткитов — целая туча под Linux.
          • –3
            Куча их там, куча…
            Только есть возможность одним-двумя действиями отбить их все или почти все…
            Тот же /home с опцией noexec смонтировать…
            Не ставить ПО из левых репозиториев и не собирать самому из непроверенных исходников…
            Отключить все неиспользуемые сервисы.
            И уже вероятность сводится к бесконечно малым…
            Ну и всякие мониторинги изменения файлов важных…
            В нормальных дистрибутивах это по умолчанию…

            Но нужно ж знать не только свою ОС, но и соседа, который может помощи попросить…
            • +1
              Вы так говорите, как будто в Windows как-то иначе. Чтобы руткит нельзя было установить, так же нужно ряд действий сделать. «Из коробки» Linux и Windows не защищены.
      • +1
        Перестаньте уже читать про вирусы и антивирусы. Мы тут руткит обсуждаем. Эта зараза приползла к нам как раз из-под Linux/Unix.
  • 0
    спасибо, очень интересно!
  • +1
    — Подготавливается и записывается образ своей файловой системы в конец жесткого диска

    А куда именно записывается образ — в пустые 8 МБ, оставленные для преобразования диска, или же прямо поверх существующей ФС?
    • +1
      Руткит получает адрес последнего сектора и в зависимости от необходимого объема размещает их там. Используется предположение, что диск до конца не может быть заполнен, если руткиту нужно добавить данных, то рост осуществляться к началу диска, если там уже есть данные то они затираются.
  • –2
    Узнаю редактор HIEW на скриншотах.
  • +1
    обожаю читать такие разборы спасибо!

    скажите, а если в качестве загрузчика стоит grub то этот руткит будет работать?
    • +1
      MBR это еще до груба. Я думаю что при виде груба вирус просто сдаст управление :)
  • +3
    Что-то я не понял, кто в какой последовательности что делает. Если MBR запускается до ОС, то он не может вызывать никаких функций ОС. А если после — то каким образом он запускается?
    • +1
      Сначала он работает на уровне прерываний в реальном режиме. Благодаря тому, что загрузчик руткита стартует первым, он может загрузить ОС и остаться на нулевом кольце.
      • +1
        Я не понимаю вашей терминологии. Что такое «уровень прерываний»? ring0, ring1,...,ring 3, условный ring -1 гипервизоров в VT/Pacifica. Это уровни исполнения кода. Понятно, что код из MBR будет исполняться на ring0, ок. Но после этого он передаёт управление в ОС — и я не вижу причины, почему ОС должна ему передать что-либо обратно. Насколько я знаю, все современные ОС перенастраивают таблицы прерываний и используют собственные драйвера для доступа к оборудованию.
        • +1
          как-то так: для того, чтобы операционной системе использовать драйвер диска, драйвер нужно предварительно прочитать с диска. для этого используется функция биос (прерывание 13h). вот тут-то и поджидает систему страшный и ужасный tdl4 :)
          • +1
            Ага, понятно. Ну тут можно сказать только одно «винда — дырявое ядро». Линукс задачу курицы и яйца (загрузки драйверов диска для загрузки) давно решил средствами initrd (initramfs). Понятно, что его можно подменить, но это будет сильно сложнее (т.к. придётся распаковывать и запаковывать обратно initrd, он у каждого ядра свой, не говоря уже про ABI модулей и ядра).
            • 0
              а по-моему с линуксом то же самое: в какой-то момент ядру нужно будет получить доступ к диску, чтобы initramfs прочитать, и единственный способ это сделать — использовать функции биоса
              • 0
                Тут есть очень очень важный момент: ядро не читает ничего через биос. Это делает внешний загрузчик. Lilo, grub или даже виндовый бутлоадер. Соответственно, любой резидент на int13h будет иметь возможность только обмануть бутлоадер, но никак не зарегистрироваться в ОС ещё средствами.
                • 0
                  из любопытства даже посмотрел исходники ядра линукс — прерывания биос из него вызываются, в основном 10h (настройки видеорежима), в одном месте есть и 13h, вот: google.com/codesearch/p?hl=ru#fgLeHA0uieM/arch/x86/boot/edd.c&q=intcall\%280x13,%20package:kernel.org&sa=N&cd=1&ct=rc (ссылка малость некликабельная получилась, но в браузер её вставить можно)

                  так что линукс ничем защищённее винды в данном случае
                  • 0
                    Да, это интересно. Теперь вопрос: в этот момент у ядра уже syscall'ы доступны?
                    • 0
                      в какой момент?
                      хотя, в любом случае, мой ответ будет таким: понятия не имею
  • +2
    tdss кончился господа — dogma millions прекращает свое существование
    возможно фейк, но видимо вскоре от авторов появится что-то новое на основе текущей версии
    исследование интересное, спасибо!)
    • +1
      После публикации в статье от Eset'а, догма никак не могла продолжать работать. Какое-то время они будут продолжать выплаты, но, видимо, скоро поднимут новый проект.
      • +1
        да точно, плюс ко всему парочка бравых ребят порутали их серваки и опубликовали наинтереснейшие подробности о статистике и прочем (об этом можно почитать в e-zine NOBUNKUM)
  • +1
  • 0
    Теперь fixmbr станет более популярным? =)
  • +1
    OMG, я думал перезапись MBR осталась в прошлом, вместе с Win9x.
    Воистину, история движется по спирали (=
  • +1
    26 числа ещё нашли, слоупочите
    www.prevx.com/blog/154/TDL-rootkit-x-goes-in-the-wild.html

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

Самое читаемое Разное