Polyglot – фальшивый CTB-Locker

Тема в разделе "Аналитические статьи", создана пользователем akok, 30 сен 2016.

  1. akok
    Оффлайн

    akok Команда форума Администратор

    Сообщения:
    12.448
    Симпатии:
    13.950
    На сегодняшний день шифровальщики – одна из самых актуальных угроз для пользователей и компаний. Очевидно, что для организации эффективной защиты необходимо использовать защитные решения с большим арсеналом технологий, которые могут предотвратить попадание шифровальщика на компьютер потенциальной жертвы или же вовремя остановить процесс шифрования и откатить изменения. Но что делать, если заражение все-таки произошло, и важная информация оказалась зашифрована? (Заражение может произойти на узлах, которые по некоторым причинам не были защищены защитным решением или решение было отключено администратором.) В таких случаях жертве придется надеяться только на то, что злоумышленник допустил ошибки в реализации криптографического алгоритма или использовал некриптостойкий алгоритм.

    Краткое описание
    Шифровальщик, получивший название Polyglot, появился в конце августа. По нашим данным распространяется он в спамовых письмах со ссылкой на вредоносный rar-архив. Внутри архива содержится исполняемый файл зловреда.

    Примеры известных ссылок:

    hXXp://bank-info.gq/downloads/reshenie_suda.rar

    hXXp://bank-info.gq/downloads/dogovor.rar

    После запуска заражённого файла, на первый взгляд, ничего не происходит. Однако в это время зловред копируется под случайными именами в десяток мест, прописывается в автозапуск, а также в TaskScheduler. После установки начинается шифрование файлов. Внешне зашифрованные пользовательские файлы не меняются (так как имена остаются оригинальными), но открыть их пользователю не удается.

    Закончив шифрование, зловред меняет заставку рабочего стола (что примечательно, заставка будет индивидуальной для каждого пострадавшего), а также выводит окошко с требованиями выкупа.

    [​IMG]

    Главное окно зловреда

    [​IMG]

    Новая заставка рабочего стола с уникальным для каждой машины блоком «открытого ключа»

    Пользователю предлагается бесплатно расшифровать несколько файлов.

    [​IMG]

    Окно пробной расшифровки файлов

    После чего он должен будет оплатить расшифровку файлов биткойнами. Сумму выкупа и биткойн-адрес, на который эту сумму требуется перевести, зловред запрашивает со своего C&C, расположенного в сети Tor.

    [​IMG]

    Окно взаимодействия с командным сервером

    Далее зловред предоставляет пользователю возможность самостоятельно проверять факт подтверждения сервером оплаты.

    [​IMG]

    Реквизиты для оплаты

    Если оплата не была проведена в срок, то будет выведено предупреждение о дальнейшей невозможности расшифровки файлов и «само-удалении» вредоносной программы.

    [​IMG]

    Последнее окно Poliglot

    Мимикрия под CTB-Locker
    Данный зловред изначально привлек наше внимание тем, что он во всем подражает другому известному шифровальщику CTB-Locker (Trojan-Ransom.Win32.Onion). Окно графического интерфейса, переключение языков, последовательность действий при запросе ключа, страница оплаты, обои рабочего стола – всё это очень похоже на CTB-Locker. Особенно тщательно воспроизводится внешний вид, а текст сообщений в окнах Polyglot просто скопирован у «собрата».

    Главное окно графического интерфейса:

    Polyglot CTB-Locker
    [​IMG]
    [​IMG]

    Список зашифрованных файлов:

    Polyglot CTB-Locker
    [​IMG] [​IMG]
    Окно тестовой расшифровки 5 случайных файлов:

    Polyglot CTB-Locker
    [​IMG]
    [​IMG]

    Окно запроса ключа для расшифровки:

    Polyglot CTB-Locker
    [​IMG]
    [​IMG]

    Обои рабочего стола:

    Polyglot CTB-Locker
    [​IMG]

    [​IMG]

    Ошибка отсутствия соединения:

    Polyglot CTB-Locker
    [​IMG] [​IMG]
    Инструкции офлайн-расшифровки:

    Polyglot CTB-Locker
    [​IMG] [​IMG]
    Но этим сходство не ограничивается. Даже криптоалгоритмы, использованные злоумышленниками, явно выбраны так, чтобы сымитировать шифрование CTB-Locker.


    Polyglot CTB-Locker
    Алгоритмы, использованные при шифровании файлов Содержимое файла упаковывается в архив ZIP, а затем шифруется AES-256. Содержимое файла сжимается Zlib, а затем шифруется AES-256.
    Алгоритмы, использованные при работе с ключами ECDH (elliptic curve Diffie-Hellman), кривая curve25519, SHA256. ECDH (elliptic curve Diffie-Hellman), кривая curve25519, SHA256.
    Расширения зашифрованных файлов Не меняет расширения. В разных версиях по-разному:
    — .ctbl
    — .ctb2
    — 7 случайных букв нижнего регистра латинского алфавита
    Демо-расшифровка 5 файлов, ключи для их расшифровки и имена файлов сохраняются в реестре. 5 файлов, ключи для расшифровки сохраняются только в оперативной памяти во время работы процесса.
    Расположение C&C C&C в сети Tor, коммуникация через публичный tor2web-сервис. C&C в сети Tor, коммуникация через встроенный в троянца клиент Tor либо (в некоторых версиях CTB-Locker) через публичный tor2web-сервис.
    Защита/обфускация трафика Побитовая операция not. Шифрование AES.
    При всем этом важно отметить: при детальном анализе выяснилось, что Polyglot реализован независимо от CTB-Locker, т.е. общего кода в двух троянцах не обнаружилось (за исключением публично доступного библиотечного кода). Возможно, авторы Polyglot хотели сбить с толку пострадавших пользователей и исследователей и написали практически полную копию CTB-Locker с нуля, чтобы шифрование выглядело как результат атаки CTB-Locker, и у пользователей не оставалось надежды на бесплатное возвращение своих файлов.

    Коммуникация с командным сервером
    Троянец связывается с сервером C&C, расположенным в сети Tor, посредством публичного tor2web-сервиса. Коммуникация осуществляется по протоколу HTTP.

    Перед каждым из описанных ниже запросов с данными отправляется POST-запрос с единственным параметром «live=1».

    Запрос 1.

    В начале работы зловред рапортует C&C о факте заражения. На сервер отправляются следующие данные:

    {
    «ip»:«xxx.xxx.xxx.xxx», //ip-адрес зараженной машины
    «method»:«register», //тип действия. «register» = троянец сообщает C&C о новом заражении
    «uid»:«xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx», //Идентификатор зараженной машины
    «version»:«10f», //Версия троянца, содержится в теле
    «info»:«Microsoft (build xxxx), 64-bit», //Версия ОС зараженной машины
    «description»:« », //Всегда пробел (« »)
    «start_time»:«14740xxxxx», //Время запуска троянца
    «end_time»:«0», //Время окончания шифрования. 0 = шифрование еще не запускалось
    «user_id»:«5» //Число, зашитое в сампле
    }

    Этот блок данных пропускается через побитовую операцию not, затем кодируется в Base64 и отправляется POST-запросом.

    [​IMG]

    Содержимое отправляемого запроса

    Параметры POST-запроса:

    signature – crc32 от передаваемых данных
    ver – версия троянца
    gcdata – данные, содержимое которых описано выше.

    [​IMG]

    Запрос первого типа и ответ на него, полученный от C&C

    Запрос 2.

    После того, как шифрование файлов пользователя завершено, троянец отправляет еще один запрос. Его содержимое идентично содержимому первого запроса, за исключением поля «end_time», которое теперь равно времени окончания шифрования.

    Запрос 3.

    Получение от командного сервера биткойн-адреса для оплаты и суммы выкупа.

    {
    «method»:«getbtcpay»
    «uid»:«xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx»
    }

    В ответ сервер присылает следующие данные:

    {
    «code»:«0»,
    «text»:«OK»,
    «address»:«xxxxxxxx», //адрес биткойн (варьируется)
    «btc»:0.7, //сумма для оплаты в BTC (варьируется)
    «usd»:319.98 //сумма для оплаты в USD (варьируется)
    }

    Запрос 4.

    Получение ключа для расшифровки файла.

    {
    «method»:«getkeys»,
    «key»:«»,
    «uid»:«xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx»,
    «info»:[«DYqbX3m9u0Pk9bE9Rg2Co3empC2M/yrnqgNS3r0AT2vwCw8Zas08bd4BNiO3XuAqi6/5WQ0VBiUkRUToo+YFL/QtPkiRIQ/D9RyKhzpBHlNpf2hPb9eloDzpkonQl7L6cQyJ2FipEG2ggZOdTDBcNAEAAAA=»]
    }

    Запрос 5.

    Передача на сервер сообщения о завершении расшифровки и количества расшифрованных файлов.

    {
    «method»:«setend»,
    «uid»:«xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx»,
    «decrypted»:«1»
    }

    Описание алгоритма шифрования
    Во время анализа вредоносного кода стало понятно, что троянец зашифровывает файлы в три этапа, с созданием промежуточных файлов:

    • сначала оригинальный файл помещается в запароленный zip-архив, созданный архив имеет имя оригинального файла, но расширение «a19»;
    • созданный запароленный архив Polyglot зашифровывает алгоритмом AES-256-ECB, получившийся файл опять же имеет имя оригинального файла, но расширение на этот раз – «ap19»;
    • далее зловред удаляет оригинальный файл и файл с расширением «a19», а расширение зашифрованного архива меняет с «ap19» на расширение оригинального файла.
    [​IMG]

    Граф вызовов процедуры поиска и шифрования файлов

    Для каждого файла ключ AES генерируется индивидуально и является ничем иным как «общим секретом», сгенерированным по протоколу Диффи-Хеллмана на эллиптической кривой. Но обо всём по порядку.

    Перед шифрованием файлов зловред генерирует две случайные последовательности длиной 32 байта. Дайджесты SHA256 каждой последовательности становятся приватными ключами s_ec_priv_1 и s_ec_priv_2. Далее, используя эллиптическую кривую Бернштейна (Curve25519), из каждого приватного ключа будут получены публичные ключи s_ec_pub_1 и s_ec_pub_2 соответственно.

    Случайную последовательность, на основе которой будет сформирован ключ s_ec_priv_1, строку machine_guid, взятую из реестра, а также несколько нулевых байт зловред записывает в созданную структуру decryption_info:

    struct decryption_info
    {
    char s_rand_str_1[32];
    char machine_guid[36];
    char zeroes[12];
    };

    Используя приватный ключ s_ec_priv_2 и публичный ключ злоумышленника mal_pub_key, будет получен общий секрет mal_shared_secret = ECDH(s_ec_priv_2, mal_pub_key). Структура decryption_info зашифровывается алгоритмом AES-256-ECB на ключе, который представляет собой дайджест SHA256 этого секрета. Для дальнейшего удобства полученные 80 байт зашифрованной структуры назовём encrypted_info.

    Только после получения encrypted_info Polyglot приступает к генерации сессионного ключа AES для файла. Описанным выше способом создаётся новая пара ключей – f_priv_key и f_pub_key. Используя f_priv_key и s_ec_pub_1, будет получен общий секрет f_shared_secret = ECDH(f_priv_key, s_ec_pub_1).

    Дайджест SHA256 этого секрета и будет тем самым ключом AES, на котором зашифруется файл.

    Чтобы определить, что файл уже был зашифрован, и иметь возможность расшифровать этот файл, злоумышленник сохраняет в начале каждого зашифрованного файла структуру file_info:

    struct file_info
    {
    char label[4] = {‘H’,’U’, ‘I ‘, 0x00};
    uint32_t label2 = 1;
    uint64_t archive_size;
    char f_pub_key[32];
    char s_ec_pub_1[32];
    char s_ec_pub_2[32];
    char encrypted_info[80];
    };

    Эллиптическая кривая, протокол Диффи-Хеллмана, AES-256, запароленный архив – все было почти безупречно. «Почти», потому что злоумышленник допустил несколько ошибок при реализации, что дало нам возможность помогать пострадавшим – восстанавливать файлы, зашифрованные Polyglot.

    Ошибки вирусописателя
    Как было описано выше, все создаваемые ключи основываются на случайно сгенерированном массиве символов. А значит, стойкость ключей определяется стойкостью генератора. И каково было наше удивление, когда мы увидели реализацию этого самого генератора:

    [​IMG]

    Графическое представление процедуры генерации случайной последовательности

    Для упрощения восприятия, приведём эту же функцию в псевдокоде:

    [​IMG]

    Обратите внимание: при выборе очередного случайного байта будет использоваться не весь результат функции rand(), а только остаток от деления результата на 32. Одному лишь злоумышленнику известно, почему он решил так сильно ослабить создаваемую случайную строку – перебор всего множества возможных ключей, получающихся на выходе такого генератора псевдослучайных чисел, на обычном ПК можно осуществить приблизительно за несколько минут.

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

    Взглянем на формирование ключа для архива:

    [​IMG]

    Видно, что длина ключа составляет всего 4 байта, да и те представляют собой определённые байты строки MachineGuid – уникального идентификатора, присваемого машине операционной системой. Мало того, несколько переформированная строка MachineGuid попадает в текст требований, демонстрируемых жертве, а значит, если знать позиции, на которых стоят 4 символа пароля ZIP, можно без труда распаковать архив.

    [​IMG]
    MachineGuid, записываемый в требования

    Заключение
    Расшифровка файлов, зашифрованным данным шифровальщиком, поддерживается в нашей бесплатной утилите RannohDecryptor Version 1.9.3.0.

    Все решения «Лаборатории Касперского» детектируют данный шифровальщик следующими вердиктами:

    Trojan-Ransom.Win32.Polyglot

    PDM:Trojan.Win32.Generic

    MD5

    c8799816d792e0c35f2649fa565e4ecb – Trojan-Ransom.Win32.Polyglot.a


    https://securelist.ru
     
    Kиpилл, Охотник, Dragokas и ещё 1-му нравится это.
  2. SNS-amigo
    Оффлайн

    SNS-amigo SNS System Watch Freelance reporter

    Сообщения:
    5.220
    Симпатии:
    8.894
    Первоначальное международное название JokeFromMars (Шутка от Марса) или MarsJoke от строки в исходном коде "HelloWorldItsJokeFromMars".
    Название Polyglot используется ЛК, дано от 3-5-8 языков, используемых в разных окнах и на сервисе оплаты.
    Кстати, первоначально в ЛК назывался Zip-Locker, т.с. черновое название.
     
    Последнее редактирование: 30 сен 2016
    Kиpилл, Охотник, Dragokas и ещё 1-му нравится это.

Поделиться этой страницей