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 заглушки. Для розшифровки використовувався ключ 0x6B130E06, причому розмір расшифровываемой частині дорівнює 0x45c.


Рис. Код XOR заглушки. Далі управління передається на розшифрований блок коду розміром 0x45C байт.

Цікавою особливістю Virlock є будова його розшифрованого коду (Частина 2). Майже кожна функція в ньому зашифрована ще раз і починається з заглушки, яка розшифровує код самої функцію. Це істотно ускладнює аналіз шкідливої програми, оскільки код функцій можна проаналізувати в дізассемблер. Код заглушки досить простий і використовує алгоритм XOR для розшифровки тіла функції. Після виконання функції, її код у пам'яті зашифровується назад, при цьому шифрування проводиться з використанням нового ключа. Нижче на малюнку показаний приклад такого коду. Інструкція rdtsc використовується для отримання ключа шифрування, далі операція XOR застосовується для шифрування для декількох змінних та тіла функції.


Рис. Код шифрування тіла функції після її виконання.

Таку особливість шкідливої програми можна назвати поліморфізмом періоду виконання (run-time polymorphіsm). При запуску декількох її копій, дампи пам'яті виконуваного файлу будуть відрізнятися.

При розшифровці Частини 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, показує, що деякі жертви вже сплатили викуп зловмисникам.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.