Silence — группа, которая специализируется на краже средств клиентов банков и атаках на банковские системы.
В отличие от других группировок (RTM, Carbanak, Buhtrap), Silence наиболее избирательна в выборе жертвы, а также обладает богатым арсеналом инструментов, которые использует в зависимости от ситуации и жертвы.
6 февраля мы зафиксировали интересное распространение вредоносного ПО, нацеленное на клиентов банков.
В результате анализа цепочки заражения мы получили и проанализировали новую версию загрузчика Silence.
Загрузка и запуск загрузчика Silence
Документ с макросом
Злоумышленники распространяют вредоносное ПО с помощью писем некой Wiki, которая предлагает посмотреть запись секретных переговоров (тема письма: «Бродяги новости посматри»).К письму приложен вредоносный документ в формате DOC. В теле вредоносного документа спрятана DLL: ее содержимое скрыто в виде таблиц (рис.
1).
Рис.
1. Часть содержимого DLL скрыта в теле документа.
Макрос, содержащийся в документе, преобразует каждое поле таблицы в 4 байта будущей библиотеки: текст ячейки обрабатывается как целочисленное значение.
Например:
- 9460301 конвертировано в 4д 5а 90 00 ;
- 3 конвертировано в 03 00 00 00 ;
- 4 конвертировано в 04 00 00 00 .
Содержимое 64-битной библиотеки находится между ключевыми словами SeasonValue и AppendCell, а содержимое 32-битной библиотеки — между Visions и FindWords. Разрядность загружаемой библиотеки выбирается в соответствии с разрядностью процесса winword.exe. Часть макроса, загружающая и выполняющая библиотеки DLL, показана на рис.
2.
Рис.
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-файл.
.
exe, и этот файл выполняется.
После нескольких неудачных попыток процесс, в памяти которого выполняется библиотека, завершается.
Детальный анализ библиотек icutils.dll мы проведем на примере 64-битной версии.
Напомним, что он работает в адресном пространстве процесса cmd.exe. Для начала рассмотрим функцию клонирования, отвечающую за загрузку и запуск загрузчика Silence. На первом этапе расшифровывается код (рис.
3), который будет выполняться в адресном пространстве процесса cmd.exe, а также данные (рис.
4), необходимые для корректной работы кода.
Рис.
3. Расшифровка кода с помощью XOR
Рис.
4. Расшифровка данных с помощью XOR После этого происходит следующее:
- создание дочернего процесса cmd.exe;
- запись расшифрованного кода и данных в адресное пространство процесса cmd.exe;
- передача управления записанному коду с помощью функции CreateRemoteThread.
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-файл.
]com/raw/Jyujxy7z После получения DAT-файла он декодируется из base64, расшифровывается с помощью XOR и, если корректно, записывается в файл — за все это отвечает функция DecryptAndSave. Наконец, исполняемый файл запускается с помощью функции CreateProcessW (рис.
8).
Рис.
8. Получение и запуск исполняемого файла Следует отметить, что функция DecryptAndSave завершается успешно только в том случае, если первые 2 байта полученного контента имеют значение «MZ».
Это помогает избежать загрузки неправильного контента, например, если содержимое ресурса hxxps://pastebin[.
]com/raw/Jyujxy7z был удален (что в итоге и произошло).
После нескольких неудачных попыток процесс завершается.
Новая версия загрузчика Silence.
Предыдущий загрузчик Silence, также известный как TrueBot, делал следующее:- сбор информации о зараженной системе с помощью системных утилит Windows и запись полученной информации в файл;
- загрузка полученного файла на сервер управления и ожидание команды от сервера;
- самоудаление или загрузка и запуск дополнительного ПО в зависимости от полученной команды.
- практика присвоения идентификатора зараженным пользователям;
- способ получения импортированных функций и расшифрованных строк.
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. Получение адресов импортируемых функций В результате выполнения вредоносного кода вредоносная программа загружает изображение с ресурса.
]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;
- ярлык с именем Файл .
lnk создается в каталоге %TEMP%, который затем копируется с именем local.lnk в папку %UserProfile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup.
Анализ распакованного загрузчика
Основной цикл общения с сервером управления показан на рис.
14.
Рис.
14. Основной цикл связи с сервером управления Связь между загрузчиком и сервером управления основана на следующем принципе:
- грузчик связывается по адресу hxxp(s)://minkolado[.
]top/ и получает номер – порядковый номер жертвы;
- все последующие запросы выполняются по адресу hxxp(s)://minkolado[.
]top/{num} ;
- Ответ от сервера управления будет содержать команду для загрузчика.
Получение адресов импортируемых функций и расшифровка строк
Псевдокод функции получения адресов API-функций показан на рис.
15.
Рис.
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).
Рис.
16. Псевдокод функции CommandHandler. Загрузчик поддерживает следующие команды:
- new_identity_command
- nop_command
- download_and_execute_command
- set_destroy_command
- pc_info_command
17).
Сорт server_command_base содержит 4-байтовое поле для идентификатора команды от сервера управления (определено на рис.
16 как код_команды ).
Рис.
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 .
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).
Рис.
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/
-
Сок Для Новичков. Задачи Soc: Мониторинг
19 Oct, 24 -
Армия Влюбленных — Videovaganza
19 Oct, 24