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

Silence — группа, которая специализируется на краже средств клиентов банков и атаках на банковские системы.

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

6 февраля мы зафиксировали интересное распространение вредоносного ПО, нацеленное на клиентов банков.

В результате анализа цепочки заражения мы получили и проанализировали новую версию загрузчика Silence.



Загрузка и запуск загрузчика Silence



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

Злоумышленники распространяют вредоносное ПО с помощью писем некой Wiki, которая предлагает посмотреть запись секретных переговоров (тема письма: «Бродяги новости посматри»).

К письму приложен вредоносный документ в формате DOC. В теле вредоносного документа спрятана DLL: ее содержимое скрыто в виде таблиц (рис.

1).



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

Рис.

1. Часть содержимого DLL скрыта в теле документа.

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

Например:

  • 9460301 конвертировано в 4д 5а 90 00 ;
  • 3 конвертировано в 03 00 00 00 ;
  • 4 конвертировано в 04 00 00 00 .

Обратите внимание, что вредоносный документ содержит как 64-битную, так и 32-битную версии библиотеки.

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

2.

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

Рис.

2. Часть вредоносного макроса После сборки библиотеки макрос копирует ее в каталог %TEMP% с именем icutils.dll и загружает. Далее макрос вызывает функцию из библиотеки клонировать , в результате чего скачивается и запускается новая версия загрузчика Silence. В рамках недавнего информационного бюллетеня содержимое загрузчика было скачано с адреса hxxps://pastebin[.

]com/raw/Jyujxy7z .

Вскоре после рассылки этот ресурс стал недоступен.



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

32-разрядная версия библиотеки icutils.dll записывает свой код в адресное пространство процесса notepad.exe, а 64-разрядная версия записывает свой код в адресное пространство процесса cmd.exe. После этого обе библиотеки выполняют одинаковую последовательность действий:
  • скачать контент с адреса hxxps://pastebin[.

    ]com/raw/Jyujxy7z с помощью функции InternetReadFile;

  • записать это содержимое в файл, расположенный по пути %TEMP%\ .

    дат;

  • декодировать и расшифровать содержимое %TEMP%\ .

    dat-файл.

Если первые 2 байта полученного буфера совпадают с заголовком PE-файла (MZ), то буфер записывается в файл, расположенный по пути %TEMP%\.

.

exe, и этот файл выполняется.

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

Детальный анализ библиотек icutils.dll мы проведем на примере 64-битной версии.

Напомним, что он работает в адресном пространстве процесса cmd.exe. Для начала рассмотрим функцию клонирования, отвечающую за загрузку и запуск загрузчика Silence. На первом этапе расшифровывается код (рис.

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

4), необходимые для корректной работы кода.



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

Рис.

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

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

Рис.

4. Расшифровка данных с помощью XOR После этого происходит следующее:

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

5).



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

Рис.

5. Внедрить в cmd.exe Как видно на скриншоте, в параметре lpStartAddress код из inj_func_start и структура lpParameter содержит расшифрованные данные из inj_data_start (включая адрес hxxps://pastebin[.

]com/raw/Jyujxy7z ).

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

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

6).



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

Рис.

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

]com/raw/Jyujxy7z и запись этого содержимого в файл с расширением .

dat (рис.

7).



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

Рис.

7. Загрузка и запись контента с ресурса в DAT-файл.

hxxps://pastebin[.

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

8).



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

Рис.

8. Получение и запуск исполняемого файла Следует отметить, что функция DecryptAndSave завершается успешно только в том случае, если первые 2 байта полученного контента имеют значение «MZ».

Это помогает избежать загрузки неправильного контента, например, если содержимое ресурса hxxps://pastebin[.

]com/raw/Jyujxy7z был удален (что в итоге и произошло).

После нескольких неудачных попыток процесс завершается.



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

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

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

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

9.

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

Рис.

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

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

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

9).

В отличие от библиотеки, загрузчик делает это дважды.

Вредоносный код и данные для первой инъекции расшифровываются с помощью XOR (рис.

10).



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

Рис.

10. Функция расшифровки кода и данных для первой инъекции Вредоносная программа создает дочерний процесс cmd.exe (#2) в приостановленном состоянии.

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

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



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

Рис.

11. Код, перезаписывающий точку входа процесса cmd.exe (№2).

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

рис.

11) заменяется адресом выделенной области памяти, куда ранее были записаны вредоносный код и данные.

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

12).



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

Рис.

12. Получение адресов импортируемых функций В результате выполнения вредоносного кода вредоносная программа загружает изображение с ресурса.

hxxps://i.imgur[.

]com/sGD7lrl.png и сохраняет его в файл на диске по пути %TEMP%/< random-hex-string > .

png. Участок кода, отвечающий за загрузку (рис.

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



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

Рис.

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

9).

Полученный код записывает файл, скачанный с hxxps://pastebin[.

]com/raw/Jyujxy7z , для автозагрузки.

Это происходит следующим образом:

  • во время выполнения полученного кода исполняемый файл копируется на диск в произвольную папку, расположенную в каталоге %TEMP%, с именем local.exe;
  • ярлык с именем Файл .

    lnk создается в каталоге %TEMP%, который затем копируется с именем local.lnk в папку %UserProfile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup.

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



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

Основной цикл общения с сервером управления показан на рис.

14.

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

Рис.

14. Основной цикл связи с сервером управления Связь между загрузчиком и сервером управления основана на следующем принципе:

  • грузчик связывается по адресу hxxp(s)://minkolado[.

    ]top/ и получает номер – порядковый номер жертвы;

  • все последующие запросы выполняются по адресу hxxp(s)://minkolado[.

    ]top/{num} ;

  • Ответ от сервера управления будет содержать команду для загрузчика.



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

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

15.

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

Рис.

15. Псевдокод функции получения адресов API-функций Похожий код присутствовал в примерах основного модуля Silence. Как и в основном модуле Silence, строки получаются по идентификатору и расшифровываются с помощью XOR. Список всех расшифрованных строк представлен в таблице ниже (на самом деле используются не все расшифрованные строки).

Идентификатор Линия
0 pcinfo.txt
1 журнал.

txt

2 ядро32.dll
3 СоздатьПроцессW
4 WinInet.dll
5 ИнтернетOpenW
6 Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20101111 Firefox/42.0
7 ИнтернетКоннектВ
8 HttpSendRequestExW
9 HttpOpenRequestW
10 cmd /C %s %s \"%s\"
11 ИнтернетЧитатьФайл
12 HttpQueryInfoW
13 HttpSendRequestW
14 ИнтернетзапросДанныеДоступно
15 ИнтернетЗаписатьФайл
16 ИнтернетSetOptionW
17 ИнтернетЗакрытьРучка
18 ИнтернеткуеропционВ
19 HttpEndRequestW
20 ПОЛУЧАТЬ
21 ПОЧТА
22 mincolado.top
23 443
24 80
25 MSCF
26 URLDownloadToFileW
27 Урлмон.

dll

28 cmd /c makecab /V3 \"%s\" \"%s\"
29 темп.

кабина

30 cmd /c расширить \"%s\" \"%s\"
31 /содержание/%s
32 /%d/%s
33 представить.

dat

34 Создать поток
35 GetModuleFileNameW
36 Shell32.dll
37 SHGetFolderPathW
38 > >
39 эхо ---%d---
40 нетстат -на
41 ipконфигурация
42 кто я
43 имя хоста
44 список заданий
45 системная информация
46 /
47 /%d
48 /%d/%s
49 svchost.exe
50 лучший
51 практические
52 полиграфическим
53 наш
54 cmd /c ping localhost -n 15 > nul & del \"%s\"
55 ShlWApi.dll
56 ПутьОбъединитьW
57 Спать


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

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

16).



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

Рис.

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

  • new_identity_command
  • nop_command
  • download_and_execute_command
  • set_destroy_command
  • pc_info_command
Имена команд принимаются в соответствии с названиями классов, унаследованных от класса server_command_bas е (рис.

17).

Сорт server_command_base содержит 4-байтовое поле для идентификатора команды от сервера управления (определено на рис.

16 как код_команды ).



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

Рис.

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

new_identity_command Команда выполняется, если от сервера управления получена строка, преобразованная в целочисленное значение.

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

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

]top/1337 .

nop_command Команда выполняется, если строка получена с сервера управления лучший («есть» на польском языке).

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

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

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

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

    кабина файл svchost.exe .

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

set_destroy_command Команда выполняется, если строка получена с сервера управления практические («практически» на польском языке).

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

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

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

Это происходит следующим образом:

  • загрузчик перенаправляет результат выполнения команды нетстат -на , ipконфигурация , кто я , имя хоста , список заданий , системная информация в файл %UserProfile%\AppData\Local\pcinfo.txt;
  • С помощью стандартной утилиты Windows makecab загрузчик упаковывает файл pcinfo.txt подать темп.

    кабина ;

  • перед следующим запросом команды от сервера управления (это происходит каждые три секунды) файл темп.

    кабина будет загружен в C&C под именем submit.dat (hxxp(s)://minkolado[.

    ]top/{num}/introduce.dat).

неопределенная_команда Следует отметить, что в коде загрузчика есть еще один класс, обрабатывающий команды от сервера — неопределенная_команда .

Используется, если от C&C были получены некорректные данные.

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

18).



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

Рис.

18. Класс неопределенной_команды

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

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

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

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

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

неопределенная_команда


МОК



мд5

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


URL-адрес

  • hxxp(s)://minkolado[.

    ]top/

Теги: #информационная безопасность #обратное проектирование #вредоносное ПО #обратное проектирование #вредоносное ПО #анализ вредоносного ПО #тишина #bi.zone
Вместе с данным постом часто просматривают: