В середине апреля 2015 г. наша антивирусная лаборатория получила в распоряжение исполняемый PE-файл с названием «Liberty2-0.exe», который обнаруживается нашими антивирусными продуктами как Python/Liberpy.A. Эта программа представляла из себя клавиатурный шпион (кейлоггер), который отправлял злоумышленникам информацию о нажатых пользователем клавишах на клавиатуре, а также о перемещениях курсора мыши.



Мы смогли обнаружить в нашей коллекции файлов еще один исполняемый файл с похожим именем – «Liberty1-0.exe». Этот файл обнаруживался нашими антивирусными продуктами как Python/Spy.Keylogger.G. Первый упоминавшийся нами образец кейлоггера предоставил нам важные подсказки о происхождении этой кампании, которые мы смогли подтвердить с помощью наших собственных данных.

Согласно информации нашей облачной технологии ESET Live Grid, 98% всех обнаружений этой угрозы приходились на Венесуэлу. Позднее наш анализ подтвердил, что злоумышленники нацеливали ее именно на пользователей этой страны. В более широком смысле, это вредоносное ПО было использовано злоумышленниками для компрометации пользователей Латинской Америки в рамках операции, которую мы назвали Liberpy.

Распространение и статистика

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


Рис. Пример фишингового сообщения, которое использовалось злоумышленниками для распространения вредоносного ПО. Видно, что в нем используется тема почтовой доставки.

Когда пользователь окажется заражен вредоносной программой, она будет автоматически инфицировать и съемные USB-носители, подключаемые к компьютеру. В дальнейшем, эти носители будут использованы для последующего распространения вредоносной программы. Таким образом, подобный способ заражения является еще одним вектором распространения Python/Liberpy, которая является не единственной вредоносной программой с таким механизмом распространения. Схожие методы используются в таких вредоносных программах как Win32/Dorkbot, JS/Bondat и VBS/Agent.NDH.


Рис. Схема работы вредоносной программы.

Зараженный компьютер постоянно взаимодействует со своим управляющим C&C-сервером для передачи злоумышленникам данных пользователя. Частота этого взаимодействия зависит от версии бота. В случае с первой версией частота составляет 10 мин., в случае со второй, час.

Шаги процесса заражения пользователя указаны выше на картинке, ниже они расписаны по пунктам.

  • Злоумышленники инициируют вредоносную кампанию по распространению фальшивых электронных сообщений со ссылкой на вредоносное ПО.
  • Пользователь получает электронное письмо и проходит по ссылке, которая ведет на установку вредоносного ПО.
  • Бот начинает посылать злоумышленникам информацию с компьютера.
  • Как только пользователь подключает съемное USB-устройство, Liberpy заражает его, а свои файлы размещает в скрытой папке вместе с файлами пользователя, которые там уже располагались.
  • На следующем этапе скомпрометированный носитель попадает к другому пользователю, который также заражается (при условии слабых настроек безопасности в Windows).

Как мы уже упоминали, бот Liberpy написан на языке Python и взаимодействует с управляющим C&C-сервером через HTTP-протокол на 80-й порт. Использование этого порта существенно маскирует его деятельность, поскольку данный порт является достаточно распространенным и не вызовет подозрений у пользователя. С другой стороны, вредоносная программа не использует шифрование трафика при работе с удаленным сервером. Оба этих фактора, т. е. использование фиксированного номера порта, а также передача трафика в открытом виде, значительно упрощают анализ механизмов взаимодействия бота с C&C-сервером. Это позволило нам также провести операцию по демонтажу ботнета, а также подсчитать количество ботов в ботнете.

Используя алгоритм перенаправления DNS для IP-адресов, используемых атакующими (sinkhole), а также проанализировав первые 600 байт отправленных сервером на 80-й порт, который прослушивается ботом, мы смогли детально проанализировать деятельность ботнета. Важно отметить, что для реализации операции sinkhole мы получали доступ только к первым 600 байтам, которые пересылались между ботом и сервером, т. о. мы не имели доступа к пересылаемым ботом персональным данным пользователя. Используя этот метод нам удалось получить информацию о частоте взаимодействия бота с C&C-сервером, географическом расположении ботов, а также сведения об используемых ОС.

Мы использовали sinkhole на протяжении 48 часов. За это время нам удалось получить достаточные сведения о работе ботнета, а также подсчитать количество ботов – 2 тыс. машин. Когда бот взаимодействует с управляющим C&C-сервером, он отправляет ему параметр User Agent, в котором указывается тип зараженной системы.


Рис. Первый этап взаимодействия бота с C&C-сервером.

На картинке выше видно, что бот отправляет параметр User Agent, в котором указано значение python-requests/CPython 2.3.0/2.7.8 Windows/7. Ниже указаны результаты анализа работы нашего sinkhole сервиса, который предоставил нам информацию о зараженных ботами ОС.


Рис. Различные версии ботов, которые были подсчитаны по User Agent.

В течение 40 часов, за которые мы отслеживали деятельность ботнета, мы наблюдали всего 5 различных User Agent. Ниже показана статистика распределения ботов по версиям.


Рис. Распределение версий бота.

Полученные данные показывают, что ботнет Liberpy состоит из компьютеров под управлением Windows 7, а также Windows XP c 25% и оставшиеся 10% принадлежат Windows 8, Windows Vista и единственная система с Windows Server 2012. Скорее всего, эта серверная система была заражена через съемный накопитель.

Как мы уже указывали выше, наиболее пострадавшей страной от деятельности Liberpy стала Венесуэла, следующая диаграмма показывает географическое распределение ботов. Отметим, что из 2,047 ботов, 1,953 принадлежат Венесуэле.


Рис. География распространения вредоносной программы (данные ESET Live Grid).

Ниже показана детальная статистика распределения IP-адресов зараженных компьютеров (ботов) по странам.


Рис. Детальная статистика распространения ботов по странам.

Ниже та же самая статистика представлена более наглядно.



Данные нашего sinkhole механизма совпадают с данными облачной технологии ESET Live Grid. Ниже указаны данные ESET Live Grid, где видно, что Венесуэла является самым зараженным регионом.


Рис. Распространение вредоносной программы по данным ESET Live Grid.

Нужно отметить, что первая версия бота распространялась злоумышленниками начиная с августа 2014 г., а вторая версия с января 2015.

Анализ вредоносной программы

Исполняемый PE-файл с названием Liberty1-0.exe является одним из первых вариантов полезной нагрузки вредоносной программы, который был нами обнаружен. Он представляет из себя скрипт на языке Python, скомпилированный с помощью инструмента PyInstaller (ссылка). Этот PE-файл содержит в себе все функции по кейлоггингу и получению информации о передвижениях указателя мыши.

Несмотря на то, что вредоносный файл является исполняемым, нам не составило труда восстановить код на Python обратно и, таким образом, получить доступ к исходным скриптам, а также тем библиотекам, которые использовались авторами при разработке. Ниже приведен исходный текст такого скрипта, на котором виден путь установки вредоносной программы, несколько URL-адресов, а также комментарии на испанском языке.


Рис. Часть исходного кода вредоносной программы на Python.

Таким образом, когда система заражена вредоносной программой, в директории C:\MSDcache будет располагаться вредоносная программа, а в другой директории C:\MSDcache\system будут храниться файлы с полученной информацией кейлоггера (лог-файлы). Для хранения данных в этих лог-файлах используется формат HTML.

Механизм, который позволяет вредоносной программе обеспечивать себе выживаемость в системе, является тривиальным и основан на использовании раздела реестра HKLM\SOFTWARE\Microsoft\CurrentVersion\Run.

Сам скрипт содержит два параметра, которые связаны с механизмом обновления вредоносной программы. Первый представляет из себя таймер обновления, который задан на время равное двум часам (7,200 секунд) и второй update_url, который представляет из себя URL-адрес ресурса обновления. В случае рассматриваемого нами образца вредоносной программы в качестве адреса указан URL hxxp://sapolipon.ddns.net.

Далее, на основе ответа C&C-сервера и возвращаемого методом get_url() значения, вредоносная программа выполнит соответствующие действия по обновлению URL-адреса C&C-сервера или отправит ему информацию.


Рис. Исходный код функции обновления, на котором присутствуют комментарии на испанском.

Используя указанный выше метод и на основе информации, полученной от C&C-сервера, вредоносная программа выполнит соответствующее действие. При этом вредоносная программа может обновить URL-адреса управляющего C&C-сервера или адрес, по которому отправляются извлеченные вредоносной программой данные. Для оформления таких запросов C&C-сервер использует тэги и .

Ниже указаны различные URL-адреса, которые использовались злоумышленниками в операции Liberpy.



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


Рис. Одна из функций кейлоггера.

На скриншоте функции исходного текста вредоносной программы видно, что в случае совпадения названия заголовка окна, в котором выполняется захват нажатий клавиатуры, с указанной вредоносной программой строкой, информация о нажатиях сохраняется в лог-файл. Ниже еще на одном скриншоте показаны комментарии на испанском языке.


Рис. Часть исходного текста скрипта с комментариями на испанском языке.

Вторая версия Python/Liberpy.A отличается от предыдущей некоторыми свойствами, которые указаны ниже.

  • Список URL-адресов управляющего C&C-сервера.
  • Строки, относящиеся к получаемой злоумышленниками информации.
  • Некоторые внутренние функции.

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


Рис. Наглядные различия в коде между первой и второй версиями вредоносной программы выделены желтым цветом.

Вторая версия вредоносной программы также распространяется через фишинговые сообщения электронной почты, а также зараженные съемные носители. Ниже представлена часть кода скрипта на Python, который используется для заражения съемных носителей.


Рис. Функция заражения съемных носителей второй версии этой вредоносной программы.

Для обеспечения своей выживаемости после перезагрузки эта версия также использует ветку реестра HKLM\SOFTWARE\Microsoft\CurrentVersion\Run.

Ниже указаны URL-адреса, которые злоумышленники использовали для распространения второй версии вредоносного ПО.



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


Рис. Код функции кейлоггера второй версии.

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


Рис. Код функции отслеживания перемещений курсора мыши.

Более наглядно изменения показаны ниже на скриншоте.


Рис. Различия в коде функций отслеживания перемещений курсора первой и второй версий вредоносной программы.

Ниже на другом скриншоте продемонстрированы различия в конфигурации двух версий вредоносных программ. Видны различия в именах файлов вредоносной программы, а также URL-адресах управляющего C&C-сервера.


Рис. Различия в параметрах конфигурации первой и второй версий вредоносной программы.

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

Ниже указаны различия в коде функций кейлоггера.


Рис. Различия в коде функций кейлоггера между первой и второй версиями вредоносной программы.

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

Функция обновления второй версии имеет следующий вид.


Рис. Функция обновления второй версии вредоносной программы.

Ниже указан код второй версии вредоносной программы, который специализируется на загрузке новых исполняемых файлов в систему. Это существенное отличие от первой версии, которое позволяет злоумышленникам устанавливать в систему другие вредоносные программы или инструменты для кражи конфиденциальной информации пользователя.


Рис. Функция, которая специализируется на загрузке других вредоносных программ в систему.

Для анализа Liberpy мы использовали скомпрометированную систему для контроля различных действий, а также просмотра лог-файла с информацией захваченных кейлоггером данных. Ниже на скриншоте представлен фрагмент лог-файла.


Рис. Содержимое лог-файла с захваченными данными кейлоггера.

В директории вредоносной программы хранится скрытая директория.


Рис. Скрытая директория с файлом кейлоггера.

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


Рис. Функция шифрования данных.

Ниже указан фрагмент взаимодействия вредоносной программы с управляющим C&C-сервером (Wireshark).


Рис. Часть сессии обмена данными между C&C-сервером и ботом.

Далее показан фрагмент запроса бота к C&C-серверу на обновление или получение новых инструкций.


Рис. Запрос бота на сервер.

На следующем скриншоте показан процесс отправки зашифрованных данных лог-файла ботом на удаленный сервер. Для этого используется POST-запрос HTTP-протокола, при этом отправляется также контрольная сумма данных, чтобы можно было проверить их целостность на принимающей стороне.


Рис. Бот отправляет данные кейлоггера на C&C-сервер.

Заключение

Вредоносная программа Liberpy имеет все основные свойства кейлоггера и бота. Она позволяет злоумышленникам получать доступ к информации зараженного компьютера через взаимодействие с управляющим C&C-сервером. Механизм обновлений позволяет злоумышленникам вовремя переконфигурировать это вредоносное ПО, указав новые домены для обновлений в том случае, если старые стали недоступны или заблокированы.

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

Комментарии (2)


  1. Cheater
    26.07.2015 16:11
    +1

    Мда, мельчают вирусописатели. Вирус на питоне, необфусцированный, проживающий по фиксированному пути и вообще никак не защищённый от попыток обнаружения и удаления, передающий данные в незащищенной форме по HTTP, со сценарием заражения вида «скачайте и запустите exe-шник» (неужели кто-то ещё попадается на это)…


    1. bakatrouble
      26.07.2015 16:28

      А мы смеялись над шутками про «вирусы на Java» после вирусов, требующих Visual C++