Новый загрузчик Silence

    Silence — группировка, которая специализируется на краже средств у клиентов банков и атаках на банковские системы. В отличие от других группировок (RTM, Carbanak, Buhtrap) Silence наиболее избирательно подходит к выбору жертвы, а также имеет богатый арсенал инструментов, который использует в зависимости от ситуации и жертвы. 6 февраля мы зафиксировали интересную рассылку вредоносного ПО (ВПО), нацеленную на клиентов банков. В результате анализа цепочки заражения нами была получена и проанализирована новая версия загрузчика Silence.

    Скачивание и запуск загрузчика Silence


    Документ с макросом


    Злоумышленники распространяют ВПО с помощью писем от некой Вики, которая предлагает посмотреть запись секретных переговоров (тема письма: «Tramp novosti posmatri»). К письму приложен вредоносный документ в формате DOC.

    В теле вредоносного документа спрятана DLL-библиотека: ее содержимое скрыто в виде таблиц (рис. 1).



    Рис. 1. Часть содержимого DLL-библиотеки, спрятанного в теле документа

    Макрос, содержащийся в документе, преобразует каждое поле таблицы в 4 байта будущей библиотеки: текст ячейки обрабатывается как значение с типом integer. Например:


    • 9460301 преобразуется в 4d 5a 90 00;
    • 3 преобразуется в 03 00 00 00;
    • 4 преобразуется в 04 00 00 00.

    Заметим, что вредоносный документ содержит как 64-битную, так и 32-битную версии библиотеки. Содержимое 64-битной библиотеки находится между ключевыми словами SeasonValue и AppendCell, а содержимое 32-битной — между Visions и FindWords. Разрядность загруженной библиотеки выбирается в соответствии с разрядностью процесса winword.exe.

    Часть макроса, осуществляющая загрузку и исполнение DLL-библиотек, представлена на рис. 2.



    Рис. 2. Часть вредоносного макроса

    После сборки библиотеки макрос копирует ее в директорию %TEMP% с именем icutils.dll и загружает. Далее макрос вызывает из библиотеки функцию clone, в результате чего происходит скачивание и запуск новой версии загрузчика Silence.

    В рамках недавней рассылки содержимое загрузчика скачивалось с адреса hxxps://pastebin[.]com/raw/Jyujxy7z. В скором времени после рассылки этот ресурс оказался недоступен.

    Описание библиотек icutils.dll


    32-битная версия библиотеки icutils.dll записывает свой код в адресное пространство процесса notepad.exe, а 64-битная — в адресное пространство процесса cmd.exe.

    После этого обе библиотеки совершают одинаковую последовательность действий:


    • скачивают содержимое по адресу hxxps://pastebin[.]com/raw/Jyujxy7z при помощи функции InternetReadFile;
    • записывают это содержимое в файл, расположенный по пути %TEMP%\<random-hex-string>.dat;
    • декодируют и расшифровывают содержимое файла %TEMP%\<random-hex-string>.dat.

    Если первые 2 байта полученного буфера совпадают с заголовком PE-файла (MZ), то буфер записывается в файл, расположенный по пути %TEMP%\<random-hex-string>.exe, и данный файл исполняется. При нескольких неудачных попытках процесс, в памяти которого исполняется библиотека, завершается.

    Детальный анализ библиотек icutils.dll проведем на примере 64-битной версии. Напомним, она функционирует в адресном пространстве процесса cmd.exe.

    Для начала рассмотрим функцию clone, которая отвечает за скачивание и запуск загрузчика Silence.

    На первом этапе происходит расшифровка кода (рис. 3), который будет исполняться в адресном пространстве процесса cmd.exe, а также данных (рис. 4), необходимых для корректной работы кода.



    Рис. 3. Расшифровка кода с помощью XOR



    Рис. 4. Расшифровка данных с помощью XOR

    После этого происходит следующее:


    • создание дочернего процесса cmd.exe;
    • запись расшифрованных кода и данных в адресное пространство процесса cmd.exe;
    • передача управления записанному коду с помощью функции CreateRemoteThread.

    Наглядно это представлено в псевдокоде из декомпилятора Hex-Rays (рис. 5).



    Рис. 5. Инжект в cmd.exe

    Как видно из скриншота, в параметр lpStartAddress записывается код из inj_func_start, а структура lpParameter содержит расшифрованные данные из inj_data_start (в том числе и адрес hxxps://pastebin[.]com/raw/Jyujxy7z).

    Рассмотрим теперь код функции inj_func_start.

    Адреса импортируемых функций получаются по значениям CRC32 от их имен (рис. 6).



    Рис. 6. Получение адресов импортируемых функций (константы со значениями CRC32 заменены на имена соответствующих им API-функций)

    Далее происходит скачивание содержимого с ресурса hxxps://pastebin[.]com/raw/Jyujxy7z и запись этого содержимого в файл с расширением .dat (рис. 7).



    Рис. 7. Скачивание и запись в DAT-файл содержимого с ресурса hxxps://pastebin[.]com/raw/Jyujxy7z

    После получения DAT-файла происходит его раскодирование из base64, расшифровка с помощью XOR и, в случае корректности, запись в файл — за все это отвечает функция DecryptAndSave. Наконец, с помощью функции CreateProcessW запускается исполняемый файл (рис. 8).



    Рис. 8. Получение и запуск исполняемого файла

    Следует отметить, что функция DecryptAndSave выполняется успешно только в том случае, если первые 2 байта полученного содержимого — «MZ». Это помогает избежать скачивания некорректного содержимого, например если бы содержимое ресурса hxxps://pastebin[.]com/raw/Jyujxy7z было удалено (а это в итоге и произошло). После нескольких неудачных попыток процесс завершается.

    Новая версия загрузчика Silence


    Предыдущий загрузчик Silence, также известный как TrueBot, выполнял следующие действия:


    • сбор информации о зараженной системе при помощи системных утилит Windows и запись полученной информации в файл;
    • загрузку полученного файла на управляющий сервер и ожидание команды с сервера;
    • самоудаление или загрузку и запуск дополнительного ПО в зависимости от полученной команды.

    Новый загрузчик Silence сочетает в себе особенности TrueBot и главного модуля Silence. В частности, с главным модулем у него совпадают:


    • практика присваивания идентификатора зараженным пользователям;
    • способ получения импортируемых функций и расшифрованных строк.

    Общий процесс исполнения загрузчика представлен на рис. 9.



    Рис. 9. Граф процессов во время исполнения загрузчика

    Получение распакованного загрузчика


    Как и 64-битная библиотека icutils.dll, загрузчик записывает свой код в адресное пространство процесса cmd.exe (#2 на рис. 9). В отличие от библиотеки загрузчик делает это дважды.

    Вредоносный код и данные для осуществления первого инжекта расшифровываются с помощью XOR (рис. 10).



    Рис. 10. Функция расшифровки кода и данных для первого инжекта

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



    Рис. 11. Код, которым перезаписывается точка входа процесса cmd.exe (#2)

    Перед возобновлением процесса cmd.exe (#2) константа 0xCBCBCBCB (см. рис. 11) заменяется адресом выделенной области памяти, куда ранее были записаны вредоносный код и данные.

    Вредоносный код, работающий в результате первого инжекта, имеет значительное сходство с кодом вредоносной библиотеки icutils.dll. Адреса импортируемых функций получаются по значениям CRC32 от их имен (рис. 12).



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

    В результате исполнения вредоносного кода ВПО загружает изображение с ресурса hxxps://i.imgur[.]com/sGD7lrl.png и сохраняет его в файл на диске по пути %TEMP%/< random-hex-string >.png.

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



    Рис. 13. Код загрузки изображения

    Содержимое загруженного изображения используется для получения исполняемого файла загрузчика Silence, а также кода и данных, осуществляющих его исполнение в адресном пространстве дочернего процесса cmd.exe (#7 на рис. 9).

    Полученный код прописывает файл, загруженный с hxxps://pastebin[.]com/raw/Jyujxy7z, в автозагрузку. Происходит это так:


    • во время исполнения полученного кода исполняемый файл копируется на диск в произвольную папку, находящуюся в директории %TEMP%, с именем local.exe;
    • в директории %TEMP% создается ярлык с именем <random-hex-string>.lnk, который далее копируется с именем local.lnk в папку %UserProfile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup.

    После этого вредоносный код исполняет загрузчик Silence в адресном пространстве дочернего процесса cmd.exe (#7).

    Анализ распакованного загрузчика


    Главный цикл общения с управляющим сервером изображен на рис. 14.



    Рис. 14. Главный цикл общения с управляющим сервером

    Общение загрузчика с управляющим сервером строится по следующему принципу:


    • загрузчик обращается по адресу hxxp(s)://minkolado[.]top/ и получает число — порядковый номер жертвы;
    • все последующие обращения осуществляются по адресу hxxp(s)://minkolado[.]top/{num};
    • ответ управляющего сервера будет содержать команду для загрузчика.

    Получение адресов импортируемых функций и расшифровка строк


    Псевдокод функции для получения адресов API-функций изображен на рис. 15.



    Рис. 15. Псевдокод функции для получения адресов API-функций

    Аналогичный код присутствовал в образцах главного модуля Silence.

    Как и в главном модуле Silence, строки получаются по идентификатору и расшифровываются с помощью XOR.

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

    Идентификатор


    Строка


    0


    pcinfo.txt


    1


    log.txt


    2


    Kernel32.dll


    3


    CreateProcessW


    4


    WinInet.dll


    5


    InternetOpenW


    6


    Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20101111 Firefox/42.0


    7


    InternetConnectW


    8


    HttpSendRequestExW


    9


    HttpOpenRequestW


    10


    cmd /C %s %s \"%s\"


    11


    InternetReadFile


    12


    HttpQueryInfoW


    13


    HttpSendRequestW


    14


    InternetQueryDataAvailable


    15


    InternetWriteFile


    16


    InternetSetOptionW


    17


    InternetCloseHandle


    18


    InternetQueryOptionW


    19


    HttpEndRequestW


    20


    GET


    21


    POST


    22


    minkolado.top


    23


    443


    24


    80


    25


    MSCF


    26


    URLDownloadToFileW


    27


    Urlmon.dll


    28


    cmd /c makecab /V3 \"%s\" \"%s\"


    29


    temp.cab


    30


    cmd /c expand \"%s\" \"%s\"


    31


    /content/%s


    32


    /%d/%s


    33


    introduce.dat


    34


    CreateThread


    35


    GetModuleFileNameW


    36


    Shell32.dll


    37


    SHGetFolderPathW


    38


    >>


    39


    echo ---%d---


    40


    netstat -na


    41


    ipconfig


    42


    whoami


    43


    hostname


    44


    tasklist


    45


    systeminfo


    46


    /


    47


    /%d


    48


    /%d/%s


    49


    svchost.exe


    50


    jest


    51


    praktycznie


    52


    poligraficznym


    53


    nasz


    54


    cmd /c ping localhost -n 15 > nul & del \"%s\"


    55


    ShlWApi.dll


    56


    PathCombineW


    57


    Sleep


    Описание команд с управляющего сервера


    Команды с управляющего сервера обрабатываются в функции CommandHandler (рис. 16).



    Рис. 16. Псевдокод функции CommandHandler

    Загрузчик поддерживает следующие команды:


    • new_identity_command
    • nop_command
    • download_and_execute_command
    • set_destroy_command
    • pc_info_command

    Имена команд взяты в соответствии с именами классов, унаследованных от класса server_command_base (рис. 17). Класс server_command_base содержит поле размером 4 байта под идентификатор команды с управляющего сервера (на рис. 16 определен как command_code).



    Рис. 17. Некоторые классы, определенные злоумышленниками

    Далее приведем детальное описание каждой команды.

    new_identity_command

    Команда выполняется в том случае, если с управляющего сервера была получена строка, конвертируемая в целочисленное значение. После получения данной команды загрузчик изменяет порядковый номер пользователя, то есть относительный адрес, по которому происходит взаимодействие с управляющим сервером.

    Например, если сервер прислал строку «01337», то адрес взаимодействия с C&C для данного зараженного пользователя поменяется на hxxp(s)://minkolado[.]top/1337.

    nop_command

    Команда выполняется в том случае, если с управляющего сервера получена строка jest («есть» по-польски). При получении данной команды загрузчик ничего не делает.

    download_and_execute_command

    Команда выполняется в том случае, если с управляющего сервера получена строка nasz («наш» по-польски). Вместе со строкой nasz передается относительный адрес для скачивания дополнительного вредоносного ПО.

    При получении данной команды загрузчик совершает следующие действия:


    • загружает данные с полученного адреса;
    • проверяет заголовок загруженных данных — первые 4 байта должны составлять заголовок CAB-файла (MSCF);
    • если скачанные данные имеют верный заголовок, сохраняет их в файл %UserProfile%\AppData\Local\temp.cab;
    • с помощью стандартной утилиты Windows expand извлекает из CAB-архива temp.cab файл svchost.exe.

    Если файл svchost.exe успешно извлечен, он запускается из той же директории.

    set_destroy_command

    Команда выполняется в том случае, если с управляющего сервера получена строка praktycznie («практически» по-польски).

    При получении данной команды загрузчик самоудаляется с использованием команды ping localhost -n 15 > nul & del {self_file_name}.

    pc_info_command

    Команда выполняется в том случае, если с управляющего сервера получена строка poligraficznym («печать» по-польски). При получении данной команды загрузчик собирает и отправляет на управляющий сервер информацию о зараженной системе. Это происходит следующим образом:


    • загрузчик перенаправляет результат выполнения команд netstat -na, ipconfig, whoami, hostname, tasklist, systeminfo в файл %UserProfile%\AppData\Local\pcinfo.txt;
    • с помощью стандартной утилиты Windows makecab загрузчик запаковывает файл pcinfo.txt в файл temp.cab;
    • перед следующим запросом команды с управляющего сервера (это происходит каждые три секунды) файл temp.cab будет загружен на C&C с именем introduce.dat (hxxp(s)://minkolado[.]top/{num}/introduce.dat).

    undefined_command

    Следует отметить, что в коде загрузчика присутствует еще один класс-обработчик команды с сервера — undefined_command. Он используется, если с C&C пришли некорректные данные.

    Злоумышленники назвали этот класс с опечаткой — undefinded_command (рис. 18).



    Рис. 18. Класс undefinded_command

    Сводная таблица


    Для наглядности сведем все в одну таблицу.

    Название класса-обработчика


    Строка, которая приходит с сервера


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


    new_identity_command


    Строка, конвертируемая в целочисленное значение


    Установить относительный адрес, по которому происходит взаимодействие с управляющим сервером


    nop_command


    jest


    Ничего не делать


    download_and_execute_command


    nasz


    Скачать CAB-архив с дополнительным ВПО, распаковать и запустить файл из архива


    set_destroy_command


    praktycznie


    Самоудалиться


    pc_info_command


    poligraficznym


    Собрать информацию о зараженной системе с помощью системных утилит Windows и загрузить CAB-архив с информацией на управляющий сервер


    undefinded_command








    IOCs


    md5


    • 0c37a0c640ccae74fca520f578707961 — DOC-файл
    • 1d53c2a16a049c7340e31a603ccd95dc — загрузчик Silence
    • f10b8d4d286d8f48574c41e81c2e87f6 — распакованный загрузчик Silence

    URL


    • hxxp(s)://minkolado[.]top/
    BI.ZONE
    Компания

    Похожие публикации

    Комментарии 0

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

    Самое читаемое