SHA1-хеши:
- 847855b9240afb0b8e1e11de412cc779db51020e — основное тело бэкдора
- 5f51e7319c582a8ccdd4971d22515977213b8639 — задача task_autorun_lnk
- d45d42225db3ce5cd1407dff55d88dc5ffa843e2 — задача task_autorun_reg
- 940390c98276ceda423574c7357188728ea83074 — задача task_autorun_scheduler
- b3d694a7832cd4f228df9cbeaee10e996b583d18 — задача task_fdwd
- db86d55f3394d82f10f9b17b2250d11bb38149c5 — задача task_punto2_diary
- 5a17ed042b3209d993cd81b56f420a36bd1f3b3a — задача task_punto_install
- 0d2226f7cf71c8685f52d490586ed63bb3393fc1 — задача task_s
Описание
Вредоносная программа, написанная на скриптовом языке JavaScript и предназначенная для работы на компьютерах под управлением ОС семейства Microsoft Windows. Представляет собой бэкдор, выполняющий команды злоумышленников. Его основная задача — кибершпионаж. Эта программа может использоваться для кражи файлов с атакованных компьютеров, отслеживания вводимой на клавиатуре информации, создания скриншотов и т. д. Кроме того, бэкдор способен загружать собственные обновления и расширять функциональность благодаря модульной архитектуре.
Принцип действия
JS.BackDoor.60 является многокомпонентным трояном, использующим собственный фреймворк на языке JavaScript. Он состоит из обфусцированного тела, а также ряда вспомогательных модулей, которые поступают от C&C-сервера и содержат основную функциональность бэкдора. Эти модули одновременно являются и частью JS.BackDoor.60, и непосредственно задачами, которые тот исполняет через общие для них JavaScript-функции.
Тело JS.BackDoor.60 циклически принимает и выполняет полезную нагрузку (целевой вредоносный JavaScript-код — задачу) с C&C-сервера. Для ее получения на сервер отправляется пакет, содержащий сообщение ping. После принятия полезной нагрузки на сервер передается пакет с сообщением pong.
Предназначенный для исполнения код поступает бэкдору в следующем формате:
<main_sleep>15000</main_sleep><taskn>1</taskn><task1><id>167e315b7fc67</id><monkeycode>...</monkeycode></task1>
Тэг taskn обозначает количество пришедших с C&C-сервера задач.
Тэги taskN задают каждую задачу, где N — ее номер.
Тэг id внутри каждой задачи задает ее идентификатор, который представляет собой случайную hex-строку.
Тэг monkeycode содержит непосредственно JavaScript-код задачи для исполнения.
Общие функции, содержащиеся в задачах
Поступающие JS.BackDoor.60 задачи имеют общие функции, которые используются в каждой из них с разной степенью периодичности.
На момент анализа бэкдора были обнаружены следующие общие функции:
- lr_run_exe(cmd)
- lr_is_elevated()
- lr_url(msg)
- lr_post(data, msg)
- lr_stats(msg)
- lr_statse(msg)
- lr_cmdr(data)
- lr_screensh()
- lr_check_scr(sec)
- lr_upload(srcPath, url, sec, canSplit, checkScr)
lr_run_exe(cmd)
Функция создает новый процесс. Используется следующий аргумент:
- cmd — команда, запускаемая как новый процесс.
Создание объекта происходит через обращение к интерфейсу WMI. В пространстве имен \root\CIMV2 используются следующие сущности:
- Win32_ProcessStartup — создатель процессов;
- Win32_Process — описание процесса.
lr_is_elevated()
Функция проверяет права текущего процесса. Проверка осуществляется выполнением команды net session.
lr_url(msg)
Функция формирует ссылку для отправки ответа на С&C-сервер. Используется следующий аргумент:
- msg — сообщение, добавляемое в параметр запроса.
Ссылка для ответа формируется из базовой ссылки и параметров запроса. Последние делятся на две категории: UserToken и метаданные.
Базовая ссылка имеет вид hxxps[:]//rembo.solkvize[.]com/__utm.gif?.
К ней добавляются следующие параметры из группы UserToken:
- v=<appVersion> — в данном случае appVersion является константой 501;
- e=<is_elevated> — в зависимости от прав текущего процесса выставляется либо 1 (процесс запущен от имени администратора), либо 0 (процесс запущен не от имени администратора);
- p=<pid> — PID текущего процесса;
- ch=hw3a5928b7213d9 — константа.
Если при получении одного из полей этих параметров возникает ошибка, то вместо них будет передан параметр u=get-err.
Далее к ссылке добавляются параметры метаданных:
- t=<Date> — текущее время;
- s=<url_sequenceCounter> — эта переменная подсчитывает количество отправленных запросов от данной задачи;
- tid=1d288ddcb195f — идентификатор задачи;
- m=<msg> — сообщение, закодированное с помощью encodeURIComponent.
Кроме того, к ней могут добавляться дополнительные параметры запроса (например: lr_upload(path, lr_url('upldf') + '&fp=' + encodeURIComponent(path))).
lr_post(data, msg)
Функция через POST-запрос отправляет на C&C-сервер пакет с данными. Используются следующие аргументы:
- data — данные, отправляемые в параметре body;
- msg — сообщение для формирования ссылки для отправки ответа С&C-серверу (аргумент, передаваемый в lr_url).
Особые заголовки, выставляемые в данном пакете:
- Content-Type = application/x-www-form-urlencoded
- XJ-Ver = 501
lr_stats(msg)
Функция через GET-запрос отправляет на C&C-сервер пакет, отвечающий за логирование выполнения задачи. Используется следующий аргумент:
- msg — сообщение для формирования ссылки для отправки ответа С&C-серверу (аргумент, передаваемый в lr_url).
Пример цепочки отправляемых пакетов с информацией о логировании выглядит следующим образом:
- lr_download_start:<pathToSave>
- lr_download_start_u:<url>
- lr_del_file_delf:<pathToSave>:y
- lr_download_end:1:<pathToSave>
- lr_unpack_zip_start:<pathZipFile>
- lr_unpack_zip_end:<pathFile>
- lr_del_file_delf:<zipFilePath>:y
- lr_scr_r:ret:<retValue>:pid:<PID>
- lr_del_file_wait_delf:<pathImgSrc>:y
lr_statse(msg)
Функция через GET-запрос отправляет на C&C-сервер пакет, отвечающий за логирование ошибок во время выполнения задачи. Используется следующий аргумент:
- msg — сообщение для формирования ссылки для отправки ответа С&C-серверу (аргумент, передаваемый в lr_url).
При возникновении ошибки во время выполнения текущей задачи данная функция вызывает функцию lr_stats(msg) и к строке из аргумента msg добавляет значение err.
lr_cmdr(data)
Функция через POST-запросы отправляет на C&C-сервер пакеты с данными о том, с каким результатом завершилось исполнение целевого JavaScript из задачи. Она вызывает функцию lr_post со следующими аргументами:
- msg — константа, имеет значение cmdr;
- data — содержит данные о статусе выполнения задачи.
Пример передаваемого параметра data:
task_punto2_diary=1, где:
- task_punto2_diary — имя задачи;
- 1 — результат исполнения задачи
lr_screensh()
Функция, отвечающая за создание и отправку снимков экрана на C&C-сервер. Она проверяет, была ли на целевой компьютер ранее загружена программа nircmd.exe и требуется ли ее принудительная переустановка.
При наличии указанной программы функция запускает команду %TEMP%/nircmd/nircmd.exe savescreenshotfull "<имя файла>". Эта команда создает скриншот всех доступных мониторов и сохраняет их во временный файл. Далее итоговое изображение передается на C&C-сервер.
Данная функция одновременно является и задачей, более подробно ее функциональность описана в соответствующем подразделе «Выполняемые задачи».
lr_check_scr(sec)
Функция-таймер, выполняющая проверку времени для создания скриншота. Используется следующий аргумент:
- sec — время, прошедшее между созданием скриншотов.
Таймер работает следующим образом. При вызове функции отправки скриншота таймер проверяет время, прошедшее с момента передачи последнего изображения. Если оно меньше заданного (по умолчанию задано значение в 30 секунд), скриншот не отправляется.
lr_upload(srcPath, url, sec, canSplit, checkScr)
Функция отправки файла на сервер. Используются следующие аргументы:
- srcPath — путь до отправляемого файла;
- url — ссылка, сформированная функцией lr_url. К этому аргументу всегда добавляется дополнительный параметр запроса fp=encodeURIComponent(path);
- sec — время паузы между отправляемыми блоками (по умолчанию задан интервал в 3 секунды);
- canSplit — флаг, который сигнализирует о том, нужно ли разделять файл на блоки (по умолчанию имеет значение true);
- checkScr — флаг, который сигнализирует о том, нужно ли во время отправки файла создавать скриншоты и передавать их на C&C-сервер (по умолчанию имеет значение true);
Функция создает таймер скриншотов, после чего считывается отправляемый файл. Если выставлен флаг canSplit, происходит поблочная отправка файла. Длина одного блока составляет 1048576 байт.
Пакет для одного передаваемого блока имеет следующие характеристики.
Запрос выполняется методом POST. Параметры запроса:
- &bl — номер блока (начиная с первого);
- &bs — размер блока;
- &bc — общее число блоков;
- &fs — размер отправляемого файла.
После отправки такого пакета происходит передача скриншота на C&C-сервер (если ранее был выставлен флаг canSplit и заданный таймер завершился).
В ответ на отправленный пакет C&C-сервер передает пакет, который может содержать одно или несколько указанных ниже полей с командами:
- <stopmonkey></stopmonkey> — прекратить отправку файла, завершить функцию отправки с ошибкой;
- <main_sleep></main_sleep> — приостановить процесс отправки;
- <fexists>([0-9]+)</fexists> — повторно отправить блок;
- <fexistsskip></fexistsskip> — прекратить отправку файла, завершить функцию отправки без ошибки.
Особенности функций, отправляющих на C&C-сервер пакеты с запросами
В функциях lr_post(data, msg), lr_stats(msg), lr_statse(msg), lr_screensh(), lr_upload и lr_cmdr механизм отправки пакетов на C&C-сервер реализован по общей схеме.
Для отправки пакета с запросом используется один из следующих объектов:
- MSXML2.XMLHttp.6.0
- MSXML2.XMLHttp.5.0
- MSXML2.XMLHttp.4.0
- MSXML2.XMLHttp.3.0
- MSXML2.XMLHttp
- Microsoft.XMLHttp
- WinHttp.WinHttpRequest.5.1
Для запроса выставляются следующие заголовки:
- Timeouts = 15000, 30000, 30000, 30000
- Option = 2, 13056
Если задача не смогла создать ни один из выше перечисленных объектов, используется объект XMLHttpRequest с выставленным timeout со значением 15000.
Выполняемые задачи
При анализе бэкдора были выявлены следующие задачи, поступившие ему на выполнение:
- task_autorun_lnk
- task_autorun_reg
- task_autorun_scheduler
- task_fdwd
- task_punto2_diary
- task_punto_install
- task_s
- task_systeminfo
Задача task_autorun_lnk
JS.BackDoor.60 обходит следующие каталоги:
- Desktop
- %appdata%\Microsoft\Internet Explorer\Quick Launch
- %appdata%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
Кроме того, он рекурсивно обходит каталог Desktop с глубиной вложенности 6.
При считывании содержимого целевых каталогов выполняется модификация всех найденных в них ярлыков, кроме Explorer.lnk или Проводник.lnk. Изменения вносятся таким образом, чтобы запускаемым приложением стало %windir%\system32\wscript.exe со следующими аргументами: /nologo /E:jscript "<lnk_name>:lnk" "<app_name>" <args>, где:
- <lnk_name> — имя модифицированного ярлыка;
- <lnk_name>:lnk — альтернативный поток данных (ADS), в который записывается тело трояна;
- <app_name> — путь к исходному приложению, которое запускалось ярлыком до его модификации;
- <args> — аргументы запуска исходного приложения, которые были указаны в ярлыке до его модификации.
Такое преобразование ярлыков приводит к тому, что через них первым запускается троян, а уже потом — изначально заданные приложения.
В ADS модифицируемых ярлыков копируется один из стартующих скриптов трояна (2023-10-06_135209.js, 2023-10-06_135225.js или 2023-10-06_135235.js), расположенных в директории starters.
По завершении выполнения задачи бэкдор вызывает две функции: lr_cmdr с аргументом done=1 и lr_stats с аргументом task_autorun_lnk:end.
Задача task_autorun_reg
Создает недостающие каталоги и файлы по заданным локальным путям:
- C:\ProgramData\MicrosoftSecurityChecker\SecurityCheck.js
- C:\Program Files\MicrosoftSecurityChecker\SecurityCheck.js
Загружает с C&C-сервера файл 2023-09-06_121321.js и заменяет им следующие файлы:
- C:\ProgramData\updater.js (либо С:\Users\Public\updater.js)
- C:\ProgramData\MicrosoftSecurityChecker\SecurityCheck.js (либо C:\Program Files\MicrosoftSecurityChecker\SecurityCheck.js)
Создает ключ реестра Flash Player Update в ветке HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ со значением wscript.exe <path_updater.js>, где path_updater.js — локальный путь, указывающий на расположение загруженного с C&C-сервера троянского файла updater.js.
После этого вызывается функция lr_stats, которая логирует результат выполнения задачи.
Создает ключ реестра Microsoft Security Check в ветке HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ со значением wscript.exe <path_SecurityCheck.js>, где path_SecurityCheck.js — локальный путь, указывающий на расположение загруженного с C&C-сервера троянского файла SecurityCheck.js.
После этого вызывается функция lr_stats, которая логирует результат создания ключа.
По завершении выполнения задачи бэкдор вызывает две функции: lr_cmdr с аргументом done=1 и lr_stats с аргументом task_autorun_reg:end.
Задача task_autorun_scheduler
Создает недостающие каталоги и файлы по заданным локальным путям:
- C:\ProgramData\MicrosoftSecurityChecker\SecurityCheck.js
- C:\Program Files\MicrosoftSecurityChecker\SecurityCheck.js
Загружает с C&C-сервера файл 2023-09-06_121358.js и заменяет им следующие файлы:
- C:\ProgramData\updater.js (либо С:\Users\Public\updater.js)
- C:\ProgramData\MicrosoftSecurityChecker\SecurityCheck.js (либо C:\Program Files\MicrosoftSecurityChecker\SecurityCheck.js)
Далее выполняет проверку версии операционной системы зараженного компьютера. Получение сведений о ней происходит через обращение к интерфейсу WMI. В пространстве имен \root\CIMV2 используется следующая сущность:
- Win32_OperatingSystem — структура, содержащая основную системную информацию.
Если версия системы относится к устаревшим (OperatingSystem.Version < 6), создается объект Win32_ScheduledJob системного планировщика заданий с запуском файла updater.js. В противном случае выполняется попытка создать задачу планировщика по команде schtasks.exe /create /tn 'Microsoft Security Check' /sc ONLOGON /tr "<cmd1>" /rl HIGHEST /f, где:
- cmd1 — параметр, имеющий значение wscript.exe C:\ProgramData\updater.js;
- /tn — имя службы;
- /sc ONLOGON — параметр, указывающий, что задача выполняется при каждом входе любого пользователя в систему;
- /tr — параметр, указывающий путь до программы;
- /rl HIGHEST — параметр, указывающий уровень запуска. В данном случае создаваемые задачи будут выполняться с наивысшим уровнем привилегий;
- /f — параметр, позволяющий создать задачу с отключением предупреждений о ранее созданной задаче с таким именем.
В случае возникновения ошибки выполняется попытка выполнить ту же команду, но без использования флага /rl HIGHEST.
Далее выполняется попытка создать задачу планировщика по команде schtasks.exe /create /tn 'Flash Player Update' /sc HOURLY /tr "<cmd2>" /f, где:
- cmd2 — параметр, имеющий значение wscript.exe C:\ProgramData\MicrosoftSecurityChecker\SecurityCheck.js;
- sc HOURLY — параметр, указывающий количество часов перед выполнением задачи.
Затем с использованием команды schtasks.exe /query /v /fo csv /tn <task_name> выполняется проверка созданных задач в планировщике. Результаты проверки сохраняются во временный файл, который отправляется на C&C-сервер. Во время его отправки создается снимок экрана, который также загружается на сервер. При отправке этих файлов к запросу добавляется специальный параметр. Для результатов проверки созданной задачи Microsoft Security Check добавляется параметр &status=check1. Для результатов проверки задачи Flash Player Update добавляется параметр &status=check2.
Проверка привилегий создаваемых заданий выполняется через запуск net session.
По завершении выполнения задачи бэкдор вызывает две функции: lr_cmdr с аргументом done=1 и lr_stats с аргументом task_autorun_scheduler:end.
Задача task_fdwd
Запускает команду wmic logicaldisk get deviceid,volumename,caption,description,size.
Результат ее выполнения сохраняется во временный файл, который загружается на C&C-сервер, после чего удаляется с компьютера.
Задача task_punto2_diary
Выполняет проход по каталогу ProgramData и находит файлы вида debug<data>.log, где data — любая последовательность символов. Далее загружает каждый найденный файл на C&C-сервер. Если тот или иной файл в настоящее время используется другим приложением и не может быть отправлен, он добавляется в архив командой 7z.exe a -t7z -r0 -mmt2 -ms=off -y "<tmpPath>" -mx1 "<srcPath>" -scsWIN –ssw, где:
- tmpPath — временный файл архива, в который добавляются найденные файлы;
- srcPath — путь до файла, который добавляется в архив;
- a — параметр для добавления файлов в архив. Если архивного файла не существует, он будет создан;
- -t7z — тип архива;
- -r0 — рекурсивное архивирование для каталогов. Параметр задается числом: от 0 (включить в архив все каталоги) до количества уровней каталогов, которые нужно включить в архив;
- -mmt2 — количество потоков процессора, которые можно задействовать для работы программы-архиватора;
- -ms = off — параметр для использования режима непрерывного архива (on — включает режим, off — выключает режим);
- -y — утвердительно ответить на все вопросы, которые может задать система;
- -mx1 — параметр для использования самой быстрой компрессии (минимальный уровень сжатия);
- -scsWIN — устанавливает стандартную кодировку в Windows;
- -ssw — включить файл в архив, даже если он в данный момент используется.
При отправке создаваемого архива на C&C-сервер к запросу добавляется дополнительный параметр fp, содержащий локальный путь до передаваемого файла в объекте urlencoded.
Задача task_punto_install
По наличию файла %appdata%\Yandex\Punto Switcher\User Data\preferences.xml.back проверяет, установлено ли на целевом компьютере приложение Punto Switcher. Если файл присутствует, задача завершается.
Если файл не найден, задача выполняет следующие действия:
- Скачивает файлы hxxps[:]//rembo.solkvize[.]com/tools/punto.zip и hxxps[:]//rembo.solkvize[.]com/tools/7z.zip. Первый содержит приложение Punto Switcher, второй — архиватор 7-Zip.
- Распаковывает приложение Punto Switcher в C:\Users\Public\PuntoSwitcher.
- Копирует файл C:\Users\Public\PuntoSwitcher\preferences.xml в %appdata%\Yandex\Punto Switcher\User Data\preferences.xml.
- Копирует файл C:\Users\Public\PuntoSwitcher\preferences.xml в %appdata%\Yandex\Punto Switcher\User Data\preferences.xml.back.
- Запускает приложение Punto Switcher.
Файл preferences.xml хранит настройки программы Punto Switcher. Содержащиеся в них поля EnableDiary и RunAtStartup имеют флаги со значением Yes. Для большинства остальных полей флаги выставлены в значении No.
<?xml version="1.0" encoding="UTF-8" ?>
<PuntoSwitcherSettings version="7">
<PuntoHotkeys>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</PuntoHotkeys>
<LayoutSwitchKey>0</LayoutSwitchKey>
<SeparateLangCombination>0</SeparateLangCombination>
<TransparentFormsFiller>0</TransparentFormsFiller>
<CheckForUpdate>No</CheckForUpdate>
<RunAtStartup>Yes</RunAtStartup>
<DontConvertCapitals>Yes</DontConvertCapitals>
<DontShowTrayIcon>Yes</DontShowTrayIcon>
<ChangeIconClrOnMisprint>No</ChangeIconClrOnMisprint>
<ShowCurLayoutInWndIcon>No</ShowCurLayoutInWndIcon>
<ShowPopupOnException>No</ShowPopupOnException>
<ExceptionCount>2</ExceptionCount>
<FixTwoUpperLetters>No</FixTwoUpperLetters>
<FixInvertedCase>No</FixInvertedCase>
<ShowLayoutFlags>No</ShowLayoutFlags>
<OneKeySwitchLayoutEnabled>No</OneKeySwitchLayoutEnabled>
<BinarySwitchLayout>No</BinarySwitchLayout>
<DisablePreHandle>Yes</DisablePreHandle>
<AllSoundsEnabled>No</AllSoundsEnabled>
<FirstLaunch>No</FirstLaunch>
<SeparateLangKeysEnabled>No</SeparateLangKeysEnabled>
<ShowQuickWordsListInLeftBtnMenu>No</ShowQuickWordsListInLeftBtnMenu>
<DontReactOnOtherLangs>No</DontReactOnOtherLangs>
<SingleLayout>No</SingleLayout>
<ShowTooltips>No</ShowTooltips>
<EnableDiary>Yes</EnableDiary>
<DiarySkipSepWords>No</DiarySkipSepWords>
<ScrollAsCaps>No</ScrollAsCaps>
<HidePopIndicAfterLayoutChange>No</HidePopIndicAfterLayoutChange>
<PSWorks>No</PSWorks>
<DisableHotKeysWhenTurnedOff>No</DisableHotKeysWhenTurnedOff>
<FixPopupIndicator>No</FixPopupIndicator>
<ShowUsefulTips>No</ShowUsefulTips>
<EnableIntelliMenus>No</EnableIntelliMenus>
<AutoReplaceAlways>No</AutoReplaceAlways>
<TurnOffDiaryInProgExceptions>No</TurnOffDiaryInProgExceptions>
<ShowFormsFiller>No</ShowFormsFiller>
<ReplaceOnEnterAndTab>No</ReplaceOnEnterAndTab>
<ReplaceOnSpace>No</ReplaceOnSpace>
<DontShowTranslitWin>Yes</DontShowTranslitWin>
<FullUnhookWhenDisabled>No</FullUnhookWhenDisabled>
<EnableClipboardHistory>Yes</EnableClipboardHistory>
<PersistentClipboardHistory>Yes</PersistentClipboardHistory>
<AutoSaveClipboardToDiary>Yes</AutoSaveClipboardToDiary>
<EnableMouseEmulation>No</EnableMouseEmulation>
<DisableCapsLock>No</DisableCapsLock>
<PopupIndicatorPos>CPoint(10300, 10300)</PopupIndicatorPos>
<FormsFillerRect>CRect(100, 100, 350, 500)</FormsFillerRect>
<RestrictKeysEnabled>Yes,Yes,Yes,Yes,Yes,Yes,Yes</RestrictKeysEnabled>
<MinDiaryRecordWords>1</MinDiaryRecordWords>
<CurrentAdviceNum>0</CurrentAdviceNum>
<DontSwitchOnOtherLangs>No</DontSwitchOnOtherLangs>
<Sounds>C:\Users\Public\PuntoSwitcher\Sounds\typerus.wav,C:\Users\Public\PuntoSwitcher\Sounds\typeeng.wav,C:\Users\Public\PuntoSwitcher\Sounds\switch.wav,C:\Users\Public\PuntoSwitcher\Sounds\misprint.wav,C:\Users\Public\PuntoSwitcher\Sounds\ru.wav,C:\Users\Public\PuntoSwitcher\Sounds\en.wav,C:\Users\Public\PuntoSwitcher\Sounds\reverse.wav,C:\Users\Public\PuntoSwitcher\Sounds\switch.wav,C:\Users\Public\PuntoSwitcher\Sounds\switch.wav,C:\Users\Public\PuntoSwitcher\Sounds\switch.wav,C:\Users\Public\PuntoSwitcher\Sounds\switch.wav,C:\Users\Public\PuntoSwitcher\Sounds\switch.wav,C:\Users\Public\PuntoSwitcher\Sounds\switch.wav,C:\Users\Public\PuntoSwitcher\Sounds\switch.wav,C:\Users\Public\PuntoSwitcher\Sounds\switch.wav,C:\Users\Public\PuntoSwitcher\Sounds\replace.wav</Sounds>
<SoundsStates>98304003,131072003,163840003,45875203,65536003,131072003,131072003,131072003,131072003,131072003,131072003,98304003,111411203,124518403,32768003,26214403</SoundsStates>
<AskF12Support>No</AskF12Support>
<ShowLayoutFlagsAlwaysInColor>No</ShowLayoutFlagsAlwaysInColor>
<DoubleBackSpaceAction>0</DoubleBackSpaceAction>
<ShareHotKeyForUndoConvertAndSelectionConvert>No</ShareHotKeyForUndoConvertAndSelectionConvert>
<DiarySaveDays>0</DiarySaveDays>
<FolderExceptions></FolderExceptions>
<ProgramsExceptions></ProgramsExceptions>
<TitlesExceptions></TitlesExceptions>
</PuntoSwitcherSettings>
Такая конфигурация позволяет использовать Punto Switcher в качестве кейлоггера, поскольку приложение перестает каким-либо образом проявлять себя на зараженном компьютере и ведет запись действий пользователя (отслеживает нажатия клавиатуры и содержимое буфера обмена при копировании в него).
Задача task_s
Проверяет, была ли на целевой компьютер ранее загружена программа nircmd.exe и требуется ли ее принудительная переустановка.
Если программа отсутствует, выполняет ее загрузку с указанного адреса:
hxxps[:]//rembo.solkvize[.]com/tools/nircmd.zip
Далее сохраняет приложение nircmd.exe в каталог %TEMP%/nircmd.
При наличии этой программы на атакуемом компьютере запускается команда %TEMP%/nircmd/nircmd.exe savescreenshotfull "<имя файла>". Она создает скриншот всех доступных мониторов и сохраняет их во временный файл. Далее изображение передается на C&C-сервер.
Затем через вызов функции lr_url формируется ссылка для отправки ответа на C&C-сервер.
Для отправки пакета используется один из следующих объектов:
- MSXML2.XMLHttp.6.0
- MSXML2.XMLHttp.5.0
- MSXML2.XMLHttp.4.0
- MSXML2.XMLHttp.3.0
- MSXML2.XMLHttp
- Microsoft.XMLHttp
- WinHttp.WinHttpRequest.5.1
Выставляются следующие заголовки запроса:
- Timeouts = 15000, 30000, 30000, 30000
- Option = 2, 13056
Если задача не смогла создать ни один из выше перечисленных объектов, используется объект XMLHttpRequest с выставленным timeout со значением 15000.
Отправляемые пакеты делятся на два вида: пакет состояния и завершающий пакет.
Пакет состояния использует метод GET и передается с целью логирования выполненных задачей действий, а также отправки сообщений о возникших ошибках.
В качестве параметра msg передается текущее действие или ошибка. Пример:
lr_download_start:<pathToSave>
Завершающий пакет использует метод POST и непосредственно отправляет скриншот на C&C-сервер. В качестве параметра msg передается строка u. К пакету также добавляется дополнительный параметр запроса:
- sz=<size> — размер передаваемого изображения.
Задача task_systeminfo
Запускает cmd.exe с параметрами /u /c systeminfo /fo csv. Результат исполнения сохраняется во временный файл, который затем передается на C&C-сервер. Туда же отправляется пакет с информацией о доступных системных полномочиях.