TorrentLocker - нова модифікація трояна-шифровальщика FileCoder, частина 2

минулій частині нашого дослідження, присвяченого шифровальщику TorrentLocker, ми описали загальні механізми його роботи, а також розглянули можливі сценарії його поширення. Друга частина присвячена аналізу цієї шкідливої програми, її роботі з віддаленим C&C-сервером, а також статистикою заражень різних країн.



Перед безпосереднім виконанням корисного навантаження (payload), TorrentLocker здійснює впровадження свого коду (injection) в інші процеси. Цей процес виконується в два етапи. На першому етапі дроппер запускає спеціальний процес — завантажувач. Завантажувач розшифровує допоміжний код, який потім впроваджується в процес explorer.exe. TorrentLocker віддалено створює потік в explorer.exe, причому в якості стартової функції виступає експортується функція __remote_entry.



Ми спостерігали кілька різних версій дроппера, але цей аналіз присвячений одній з таких версій, яка має дату компіляції 15 жовтня 2014 р. (SHA-1 хеш цього семпла починається з 40B1D84B).

Дроппер містить кілька широко відомих трюків для ускладнення аналізу виконуваного файлу. Один з таких трюків полягає у використанні динамічних экспортов. Він також використовує анти-налагоджувальний прийом, який полягає в багаторазовому використанні API-функції OutputDebugString. При виклику OutputDebugString з контексту процесу, до якого не підключений відладчик, вона не виконує ніяких корисних функцій. Однак, якщо до процесу підключений відладчик, вона посилає йому рядок для висновку. Код дроппера викликає цю функцію 320,500 раз, що змушує відладчик зависнути. Такий метод також дозволяє шкідливій програмі обійти механізм пісочниці (sandbox), який запускає програму в режимі налагодження.


Рис. Код дроппера викликає функцію OutputDebugString 320,500 разів.

Пакувальник дроппера використовує два ресурсу виконуваного PE-файлу для вилучення корисного навантаження. Перший ресурс містить 16-бітний ключ на початку своїх даних. Цей ключ використовується для розшифровки решти даних цього ресурсу. Ця частина містить ключ, який буде використовуватися для розшифровки другого ресурсу. Другий ресурс представляє з себе конфігурацію пакувальника. Конфігурація може задавати поведінку самого пакувальника, наприклад, задавати для нього використання прийомів виявлення віртуальних машин через використання інструкцій in vpcext. Обидві інструкції використовуються для виявлення VMWare і VirtualPC.

Вищезазначені ресурси зашифровані з використанням модифікованої версії алгоритму RC4. Процес розшифрування містить помилку, так як одна із змінних, яка повинна бути ініціалізований нулем, залишається недоторканою. Схожу помилку в коді расшифровщика містить одна з версій шкідливої програми MiniDuke, яка була описана фахівцями F-Secure.

Дані другої секції після правильної розшифровки представляють із себе PE-файлу. При цьому дроппер створює новий процес в загальмованому стані (suspended), виділяє регіон пам'яті в цьому новому процесі і записує вміст цього PE-файлу в цей регіон. Далі процес відновлює свою роботу з точки входу в скопированном PE-файлі. Цей процес ми називаємо завантажувачем (launcher).

Компонент TorrentLocker, званий завантажувачем, досить простий. Він виконує дві функції: копіює файл дроппера в іншу директорію і запускає на виконання інший компонент шкідливої програми під назвою «core». Компонент core знаходиться в тілі шкідливої програми в стислому і зашифрованому вигляді. Завантажувач розпаковує його з допомогою бібліотеки aPlib і впроваджує його код в системні процеси explorer.exe і svchost.exe. У разі, якщо завантажувачу не вистачить привілеїв для виконання цієї операції (адміністратор), він запросить ці привілеї і перезапустить свій виконуваний файл.

TorrentLocker зберігає в системі деяку конфігураційну інформацію. Для цього використовується розділ системного реєстру. Більш нові варіанти шкідливої програми також можуть зберігати конфігураційні дані всередині директорії з довільним ім'ям всередині системних директорій Application Data або директорії Programs All Users. Файли, розташовані там, зашифровані за допомогою алгоритму AES-256-CBC. Ключ розшифровки жорстко зашитий в тілі виконуваного файлу шкідливої програми і розрізняється в залежності від використовуваної зловмисниками кампанії. Дроппер також містить код з генерації AES ключа. Він формується на основі дати встановлення ОС на комп'ютер. Однак, найбільш шкідливою програмою цей код не використовується, можливо, він зарезервований для майбутнього використання.



TorrentLocker спеціалізується на зборі інформації використовується користувачем поштового клієнта. Він може викрадати дані для аутентифікації SMTP-сервера і адресної книги жертви. Підтримуються різні поштові клієнти, включаючи Thunderbird, Outlook, Outlook Express, Windows Mail.


Рис. TorrentLocker використовує Protected Storage API для отримання конфігурації поштового клієнта.


Рис. Частину коду TorrentLocker, яка відповідає за розбір адресної книги поштового клієнта Thunderbird.

Враховуючи той факт, що зловмисники використовують повідомлення електронної пошти як основного вектора доставки шкідливої програми, крадіжка такої інформації як список контактів, може істотно полегшити задачу подальшого поширення TorrentLocker. Вони також можуть використовувати викрадену інформацію SMTP з метою використання легітимного сервера для розсилки фішингових повідомлень.

Шкідлива програма TorrentLocker взаємодіє з керуючим C&C-сервером використовуючи жорстко зашитий в тіло дроппера URL-адресу. Він може використовувати різні модифікації свого мережевого протоколу для роботи з C&C і описувана далі модифікація використовувалася в семплах, які поширювалися зловмисниками з жовтня по грудень 2014 р. У разі недоступності C&C-сервера за вказаною в тілі шкідливої програми URL-адресою, вона використовує спеціальний Domain Generation Algorithm (DGA) для отримання допоміжного списку з 30-ти нових доменів. Механізм DGA для отримання нових адрес C&C був доданий в семплах TorrentLocker, які були виявлені в жовтні 2014 р.

Насправді TorrentLocker використовує досить простий протокол для взаємодії з C&C-сервером. Проте, як згадувалося, у попередньому абзаці, він може різнитися в залежності від версії шкідливої програми. Для роботи з C&C використовується SSL-протокол, який використовує шифрування для переданого трафіку. Деякі модифікації замість SSL використовують для шифрування т. н. chain XOR алгоритм. Кожен HTTPS POST-запит до C&C-сервера з боку шкідливої програми має наступний формат.




Рис. Приклад повідомлення, яке шкідливе програма відправляє на C&C-сервер.


Рис. Відповідності полів запиту з даними з повідомлення, яке наведене вище.

Коли TorrentLocker на зараженому комп'ютері контактує зі своїм C&C-сервером, відбувається генерація спеціального «ID користувача» або «ідентифікатор користувача». Цей ID використовується в подальшому для ідентифікації жертви і на його основі C&C-сервер передає TorrentLocker URL-посилання на сторінку оплати викупу та отримання інструменту розшифровки файлів. Такий URL-адреса має такий вигляд.



Для більш простого доступу до .onion домену, веб-сторінка з вимогою викупу містить посилання на веб-сайти з доступом через Tor2Web. Використання такого механізму дозволяє жертві отримати доступ до веб-сторінці оплати викупу навіть з браузера, який не підтримує Tor.

Згадуваний вище ID користувача представляє з себе рядок з шести довільним чином підібраних символів. Проте, якщо два зараження шкідливою програмою відбуваються в один і той же час, ID заражених систем можуть бути схожі. Подальший аналіз цього алгоритму показав, що код генерації ідентифікаторів є передбачуваним. В якості прикладу розглянемо три підібраних C&C-сервером ідентифікатора.



Для ідентифікатора використовується тридцяти шестеричная основа (base 36). Після конвертації в десяткову систему (base 10) ідентифікатор постає у вигляді звичайної комбінації цифр від нуля до десяти. Якщо відокремити п'ять останніх цифр, то вийде дві серії. При цьому видно, що до старшої серії застосовується операції инкрементации, коли до молодшої застосовується декрементация. Видно, що якщо скласти два числа за такою схемою, то в сумі завжди буде виходити число 99999. Це дозволяє перевіряти коректність ідентифікатора з боку оператора шкідливої програми. Знаючи алгоритм генерації ідентифікатора, ми змогли отримати з віддаленого сервера всі можливі веб-сторінки з вимогою викупу. При чому це було зроблено для різних C&C-серверів.

У вересні 2014 security-ресерчер Nixu опублікував пост з описом різних трюків, які дозволяли розшифрувати файли зашифровані TorrentLocker. Також був випущений спеціальний інструмент з графічним інтерфейсом, який дозволяв виконувати операцію розшифровки автоматично. Така ситуація з «несанкціонованої» розшифровкою стала можливим із-за використовуваної шкідливою програмою алгоритму AES-256 в режимі шифрування Counter Mode (CTR). При цьому для всіх файлів використовувався один і той же ключ, а також вектор ініціалізації (IV), що робило алгоритм вразливим. Більш нові версії TorrentLocker використовують AES в режимі шифрування CBC (Cipher Block Chaining), що виключають можливу розшифровку файлів. Для роботи з цим криптографічним алгоритмом код шкідливої програми використовує бібліотеку LibTomCrypt.

Єдиний ключ AES-256 шифрування файлів генерується при виконанні дроппера. Він використовується для шифрування всіх файлів в системі. При цьому для самої процедури генерації ключа використовується генератор псевдовипадкових чисел Yarrow і наступні Windows API-функції (повернуті ними значення).

  1. GetTickCount
  2. GetCurrentProcessId
  3. GetCurrentThreadId
  4. GetDesktopWindow
  5. GetForegroundWindow
  6. GetShellWindow
  7. GetCapture
  8. GetClipboardOwner
  9. GetOpenClipboardOwner
  10. GetFocus
  11. GetActiveWindow
  12. GetKBCodePage
  13. GetProcessHeap
  14. GetThreadTimes(GetCurrentThread())
  15. GetProcessTimes(GetCurrentProcess())
Перед безпосереднім шифруванням файлів, AES-ключ шифрується публічним ключем RSA, який знаходиться у файлі шкідливої програми. Потім він відправляється на віддалений C&C-сервер з встановленим значенням типу запиту (request type) в одиницю.

Щоб уникнути накладних витрат, пов'язаних з продуктивністю, TorrentLocker шифрує тільки перші 2MB файлу. Очевидно, що навіть у разі великих файлів, такої довжини достатньо, щоб зробити файл повністю непрацездатним чи непридатним для використання. В кінець кожного зашифрованого файлу шкідлива програма додає три спеціальних поля, формат яких вказано нижче.



Контрольна сума Adler-32, яка вказана в таблиці, можливо, використовується для перевірки AES ключа і того факту, що сам файл зашифрований саме TorrentLocker. Такий спосіб зберігання AES ключа в зашифрованому файлі, що дозволяє операторам TorrentLocker або іншому володарю закритого ключа RSA, легко розшифрувати вміст файлу, не звертаючись до інших джерел. Він також може використовуватися для відновлення AES ключа у разі, якщо C&C-сервер недоступний.

Подібності TorrentLocker і Hesperbot

Банківський троян Hesperbot був виявлений аналітиками ESET в 2013 р. і представляє з себе складний шкідливий інструмент, який використовувався зловмисниками для крадіжки грошових коштів з рахунків онлайн-банкінгу користувачів в різних країнах по всьому світу. Він використовував впровадження свого шкідливого HTML і JavaScript коду веб-сторінки запущеного браузера. Ми виявили схожість між TorrentLocker і Hesperbot. Схоже, що авторство коду обох шкідливих програм належить одній злочинній групі, яка також займається кампаніями по їх розповсюдженню. Спам-кампанії по поширенню обох троянів спрямовані на одні і ті ж країни, наприклад, Туреччини, Чехії, Австралії.

Веб-сторінки, які використовувалися для поширення Hesperbot на початку 2014 р. були дуже схожі на ті, які залучалися для поширення у випадку з TorrentLocker. У березні цього року один із security-ресерчеров Zoltan Balazs опублікував інформацію про веб-сторінках поширення Hesperbot, які містили механізм CAPTCHA. Це дуже схоже на метод дистрибуції TorrentLocker. Шаблон URL-адреси, в деяких випадках, закінчувався на .php?id=[digits].


Рис. Порівняння URL-адрес, які використовувалися для розповсюдження шкідливих програм.

Варто зазначити, що IP-адреси C&C-серверів обох шкідливих програм також збігаються. Hesperbot використовував в якості віддаленого C&C-сервера домен updatesecurehost1.ru з IP адресою 46.149.111.178. Той же IP-адресу використовувався семплом TorrentLocker у вересні 2014 р. В якості домену виступав nigerianpride.net.

В обох родинах шкідливих програм, їх ранні версії містили рядок шляху до PDB-файлу. Для того, щоб побачити цей шлях, семпл повинен бути розпакований. Для Hesperbot (модуль procblock) шлях до pdb мав вигляд.



У серпні 2014, нам до рук потрапив семпл TorrentLocker, який містив дуже схожий шлях (модуль rack-core).



Інший семпл містив шлях до модуля rack-dropper.



Ідентичність ієрархії директорій в шляхах може свідчити, що виконувані файли компілювати однією групою осіб або на одному комп'ютері.

Статистика

Вище ми описували механізм генерації ID користувачів, який використовувався авторами шкідливої програми для впізнання заражених TorrentLocker комп'ютерів. Використовуючи ці ідентифікатори, нам вдалося отримати інформацію про жертви з віддаленого C&C-сервера. Цей експеримент був проведений 24 листопада 2014 р. Нижче зазначений список віддалених C&C-серверів, які використовувалися для вилучення згадуваної інформації.



Ми отримали 47,365 веб-сторінок з викупом від п'яти різних C&C-серверів. З цього числа, 39,670 веб-сторінок представляли справжніх користувачів, ідентифікатори яких були згенеровані зараженої системою. Інші ідентифікатори були видалені з бази операторами, оскільки були вже застарілими або взагалі не були результатом успішного зараження користувача шкідливою програмою (могли бути створені дослідниками шкідливої програми). Зі згадуваного числа реальних жертв, 570 користувачів сплатили викуп зловмисникам і отримали посилання на ПО для розшифровки файлів. Так само 20 веб-сторінок свідчать про те, що сума викупу була отримана не повністю.


Рис. Статистика оплати викупу TorrentLocker.

Веб-сторінки оплати викупу переведені на відповідний для регіону мову. Всього підтримується 13 різних країн. Нижче представлена статистика, яка наочно демонструє кількість заражень TorrentLocker в різних країнах.


Рис. Статистика заражень по країнам.

Висновок

Кіберзлочинці поширювали TorrentLocker як мінімум з лютого 2014 р. Їм вдалося зібрати зі своїх жертв велика кількість биткоинов. Користувачі готові були викласти свої грошові кошти для відновлення доступу до своїх файлів. Використання кріптовалюти биткоинов робить зловмисників практично невразливими для правоохоронних органів, які не зможуть встановити адресу призначення при проведенні платежу.

Автори TorrentLocker переключилися на використання режиму CBC симетричного алгоритму шифрування AES, замість раніше використовуваного CTR. Таким чином, вони звели до нуля можливість «несанкціонованої» розшифровки файлів. Розшифровка можлива тільки у разі отримання закритого ключа RSA від зловмисників, за допомогою якого можна розшифрувати AES ключ. Цей зашифрований публічним ключем RSA AES ключ зберігається в кінці зашифрованого файлу і використовується для безпосередньої розшифровки файлів (або його перших 2-х MB). Як ми описували вище, публічний ключ RSA розташовується в тілі шкідливої програми.

В якості основної захисної заходи від наслідків зараження TorrentLocker і шифрування файлів слід використовувати резервне копіювання файлів на жорсткому диску. Слід пам'ятати, що TorrentLocker спеціалізується на шифрування файлів, розташованих на мережевих дисках, які підключені до зараженому комп'ютері. В цьому випадку файли з резервної копією даних краще зберігати на віддаленому пристрої, який не підключено до комп'ютера, в іншому випадку, вони також можуть бути скомпрометовані TorrentLocker.


Рис. Типи файлів, які шифрує TorrentLocker.

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

0 коментарів

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