Win32/Virlock – первый саморазмножающийся вымогатель
Вредоносная программа Win32/Virlock представляет из себя первый известный на сегодняшний день вымогатель (ransomware), который специализируется на заражении исполняемых файлов, т. е. ведет себя как файловый вирус. Virlock умеет блокировать рабочий стол пользователя с требованием выкупа, шифровать файлы пользователя, а также размножать свое тело как полиморфный вирус.
Семейства вымогателей, который мы наблюдали ранее, фактически, можно разделить на две большие группы: блокировщики экрана (LockScreen) и шифровальщики файлов (Filecoder). В первом случае вымогатель блокирует пользователю доступ к рабочему столу до получения выкупа, а во втором шифрует файлы пользователя, делая невозможным их использование. При этом сообщение с требованием выкупа может появится в качестве обоев рабочего стола, в виде открытого текстового файла, а также через простое окно (как в случае с Cryptolocker).
В некоторых случаях, вымогатель может применить гибридный подход и содержать обе этих возможности, т. е. блокирование доступа к рабочему столу или устройству сопровождается шифрованием файлов на нем. При этом код вредоносной программы будет использовать специальные механизмы для запрещения закрытия появившегося окна. Примером такой вредоносной программы является вымогатель Android/Simplocker.
В октябре мы зафиксировали новый тип такого вредоносного ПО как вымогатель. Вредоносная программа Win32/Virlock могла блокировать рабочий стол пользователя с требованием выкупа, шифровать файлы, а также заражать исполняемый файлы как полиморфный вирус, встраивая в них свой код. Недавно мы обнаружили несколько новых модификаций этого вируса, что указывает на его активное развитие со стороны злоумышленников. Код VirLock демонстрирует высокий уровень технической подготовки авторов этой вредоносной программы.
Win32/Virlock использует особый прием для шифрования файлов. Вместо обычного метода побайтового шифрования всего файла или его начала, такой файл преобразуется в исполняемый и к нему дописывается код Virlock. Вредоносная программа специализируется на компрометации следующих типов файлов: *.exe, *.doc, *.xls, *.zip, *.rar, *.pdf, *.ppt, *.mdb, *.mp3, *.mpg, *.png, *.gif, *.bmp, *.p12, *.cer, *.psd, *.crt, *.pem, *.pfx, *.p12, *.p7b, *.wma, *.jpg, *.jpeg. При этом Virlock способен заражать файлы на сетевых дисках и съемных носителях.
При заражении (шифровании) файла, который не является исполняемым, Virlock создает для него новый исполняемый Win32 PE-файл, в который записывается код вируса и зашифрованное содержимое документа. Оригинальный файл удаляется, а на его месте появляется новый с тем же именем и добавленным расширением .exe к имени. При запуске такого файла на исполнение, он расшифровывает оригинальный файл, записывает его в текущую директорию и открывает.
Запуск зараженного Virlock файла сопровождается созданием двух его новых файлов, которые аналогичны оригинальному дропперу, но из-за полиморфизма содержат разный исполняемый код. Один файл создается в директории %userprofile%, а второй в %alluserprofile%. Для обеспечения автозагрузки, вредоносная программа прописывает путь к своему файлу в соответствующем разделе реестра Run обоих разделов HKLM и HKCU. Мы также наблюдали модификации Virlock, которые извлекали из себя третий исполняемый файл. Он регистрировался в качестве сервиса. Эти извлеченные файлы отвечали за дальнейшее заражение файлов в системе.
Часть кода вымогателя ответственна за отображение пользователю экрана блокировки, при этом используя уже ставшие типичными методы самозащиты, в том числе завершение процессов проводника и диспетчера задач.
Рис. Экран блокировки одной из модификаций вредоносной программы.
Сообщение в окне блокировки содержит текст предупреждения для пользователя и предлагает оплатить сумму выкупа в биткоинах. Недавно мы писали про другой вымогатель TorrentLocker, который также вымогает у пользователя денежные средства в этой криптовалюте. Ниже представлен экран блокировки более новой версии Virlock, он позволяет пользователю использовать приложения веб-браузер и блокнот.
Рис. Другой вид экрана блокировки. Отображается вкладка оплаты.
Рис. Вкладка с информацией о работе с биткоинами в случае с Канадой.
Код вредоносной программы, который отвечает за вывод экрана блокировки, способен выполнять некоторую локализацию интерфейса самого экрана (окна). Для этого используется соединение с веб-сайтом google.com и дальнейший анализ домена, на который осуществляется перенаправление, например, google.com.au, google.ca, google.co.uk, google.co.nz. Также используется функция GetUserGeoID. Для стран, соответствующих вышеперечисленным доменам, отображается свой флаг, стоимость биткоинов и текущий курс национальной валюты.
С технической точки зрения наиболее интересной частью вредоносной программы является механизм заражения файлов и полиморфизм. Полиморфизм Virlock гарантирует уникальность тела вредоносной программы в каждом зараженном файле. Virlock использует несколько слоев шифрования файла.
Исполняемый файл Virlock включает в себя специальный код, который мы называем XOR stub builder. Он располагается в файле в не зашифрованном состоянии. Остальные данные вредоносной программы и ее код, а также данные оригинального файла (в случае, если мы имеем дело не с оригинальным дроппером, а файлом который был заражен) находятся в зашифрованном виде.
Упоминаемый XOR stub builder состоит из восьми блоков кода и используется для генерации инструкций типа XOR, которые будут использоваться для расшифровки данных файла. Один из таких блоков изображен ниже на рисунке.
Рис. Блок кода XOR stub builder.
Блоки кода XOR stub builder являются полиморфными, т. е. различаются от одного зараженного файла к другому. В любом случае, исполнение каждого из них приводит к вычислению определенного двойного слова (DWORD) и его записи по фиксированному смещению в памяти. Эти слова представляют из себя инструкции XOR stub, т. е. заглушки с инструкциями XOR, которые расшифровывают остальную часть файла.
Мы говорили про многоуровневый подход, который Virlock использует при шифровании файла. В такой схеме, XOR заглушка используется для расшифровки небольшого участка кода исполняемого файла (Часть 1). Такой код состоит из нескольких функций. На скриншоте ниже приведен фрагмент кода XOR заглушки. Для расшифровки использовался ключ 0×6B130E06, причем размер расшифровываемой части равен 0×45c.
Рис. Код XOR заглушки. Далее управление передается на расшифрованный блок кода размером 0×45C байт.
Интересной особенностью Virlock является строение его расшифрованного кода (Часть 2). Почти каждая функция в нем зашифрована еще раз и начинается с заглушки, которая расшифровывает код самой функцию. Это существенно осложняет анализ вредоносной программы, поскольку код функций нельзя проанализировать в дизассемблере. Код заглушки достаточно прост и использует алгоритм XOR для расшифровки тела функции. После исполнения функции, ее код в памяти зашифровывается обратно, при этом шифрование производится с использованием нового ключа. Ниже на рисунке показан пример такого кода. Инструкция rdtsc используется для получения ключа шифрования, далее операция XOR применяется для шифрования нескольких переменных и тела функции.
Рис. Код шифрования тела функции после ее исполнения.
Такую особенность вредоносной программы можно назвать полиморфизмом периода исполнения (run-time polymorphism). При запуске нескольких ее копий, дампы памяти исполняемого файла будут различаться.
При расшифровке Части 2, код вредоносной программы также прибегает к применению еще одной процедуры расшифровки. Как мы упоминали, Часть 1, которая расшифрована с использованием XOR stub, расшифровывает остальную часть файла вредоносной программы и содержимое зараженного файла, в случае его присутствия. Процедура расшифровки состоит в применении операции циклического сдвига вправо ROR. Используемый ключ расшифровки жестко зашит в теле вредоносной программы.
Таким образом, Virlock использует трехуровневую схему шифрования:
Первая часть (Часть 1) кода вредоносной программы расшифровывается кодом XOR stub, который в свою очередь формируется с помощью XOR stub builder. Вторая часть (Часть 2) кода вредоносной программы расшифровывается с помощью первой части (Часть 1). Каждая функция кода второй части (Часть 2) зашифрована и расшифровывается своей собственной заглушкой, которая расположена в самом начале функции. После исполнения функции, ее код в памяти зашифровывается обратно. Virlock содержит код, который реализует файловый полиморфизм (заражение файлов) во второй части. Когда управление получает соответствующая функция, она копирует тело вредоносной программы в выделенный участок памяти. Таким образом, файловый полиморфизм является следствием полиморфизма в памяти (run-time), поскольку скопированное в участок памяти тело вредоносной программы уже подверглось модификации со стороны алгоритмов шифрования и модификации кода (со стороны функций второй части, которые исполнились перед кодом инфектора). Далее этот код подвергается повторному шифрованию, в соответствии с уровнями описанными выше. Скопированный код представляет из себя так называемую вторую часть, которая вместе с содержимым заражаемого файла подвергается шифрованию с использованием новых ключей. После этого в памяти формируется блок функций XOR stub builder, он будет ответственен за расшифровку первой части.Выполнив все указанные шаги, Virlock записывает сформированный файл, который содержит зашифрованное тело вируса и оригинальные данные файла на диск. Для этого оригинальный файл, который подвергся заражению, перезаписывается. В случае, если зараженный файл не являлся исполняемым PE-файлом, к его имени и существующему расширению дописывается новое расширение .exe.
Заключение
Наша система телеметрии LiveGrid показывает, что заражению Virlock подверглось небольшое количество пользователей. Их количество не сравнимо с количеством пользователей, которые подверглись заражению TorrentLocker или других подобных ему вымогателей. Тем не менее, анализ транзакций, проведённых по указанному счету Bitcoin, показывает, что некоторые жертвы уже оплатили выкуп злоумышленникам.