Тема воздушных шаров достаточно актуальна сейчас… Поговорим про распространенное семейство программ-вымогателей Zeppelin, или иначе Buran, осуществляющих шифрование файлов на всех дисках и доступных сетевых ресурсах. По ряду причин я отношу Zeppelin к фриковым семействам вымогателей. Семейство не новое, оно появилось в 2019 году. Программы разработаны на языке программирования Delphi в среде разработки CodeGear RAD Studio 2007. В программах Zeppelin содержится проверка языковых и локальных настроек для предотвращения шифрования файлов на компьютерах, которые имеют отношение к России и некоторым странам СНГ. Тем не менее, Zeppelin часто используется для атак на российские компании. За декриптор, как и в случае другого семейства – Dharma, атакующие просят немного, и жертвы нередко покупают его, а точнее их, так декриптор необходим соответственно для каждого компьютера. Мы рассмотрим более свежий образец, датированный августом 2022 года, использованный в атаках конца 2022 и начала 2023 годов: Образец на VirusTotal Строки в программе обфусцированы, а именно зашифрованы с помощью алгоритма шифрования RC4, в начале данных содержится 32-байтный ключ расшифровки. Аналогично в процессе работы программа шифрует и другие служебные данные, для шифруемых данных генерируется свой случайный 32-байтный ключ, который помещается в начало. В зависимости от параметров командной строки программа-вымогатель может осуществлять шифрование конкретного объекта (каталога, файла, сетевого ресурса) или полное шифрование системы. Шифрование указанного каталога или файла: PATH – путь к существующему каталогу или файлу. Программа-вымогатель в этом случае осуществляет шифрование отдельного файла или рекурсивное шифрование файлов в указанном каталоге и его подкаталогах. При таком способе запуска программа осуществляет шифрование файлов бОльшими блоками вне зависимости от данных конфигурации. Про варианты шифрования будет рассказано ниже. При отсутствии аргументов командной строки или их некорректных значениях осуществляется полное шифрование системы. Первоначально программа-вымогатель проверяет различными способами принадлежность скомпрометированной системы определенным странам. Если в конфигурации программы установлен логический флаг использования сети интернет, программа определяет страну местоположения внешнего IP-адреса скомпрометированной системы. Для этого программа открывает ссылку на публичный ресурс геолокации http://geoiptool.com и из полученных данных извлекает название страны, в которой располагается IP-адрес. Программа завершает работу, если страна соответствует одной из списка: Ukraine Belorussia Kazakhstan  Russian Federation    В случае если логический флаг использования сети интернет не установлен, программа проверяет язык пользователя по умолчанию и завершает свою работу, если он соответствует одному из следующих: Ukrainian 422 Belarusian 423 Russian 419 Kazakh 43F Дополнительно программа определяет код страны в информации о локальных настройках системы. Программа завершает свою работу, если код страны соответствует одному из следующих: RU, KZ 7 BY 375 UA 380 В нашем образце был установлен флаг использования сети интернет. При отсутствии доступа в интернет, проверка на основе геолокации не может быть осуществлена, но при этом программа "резонно" делает вывод, что компьютер не российский и шифрует его. Также если установлен логический флаг использования сети интернет, программа проверяет значение параметра реестра: Если параметр отсутствует или имеет иное значение, программа направляет HTTP-запрос GET по адресу https://iplogger.org/1nLDZ4.torrent: VICTIM_ID – идентификатор жертвы такого вида, как например "949-ED3-D07". Указанная ссылка представляет собой логгер геолокации, который позволяет отслеживать местоположение IP-адресов, с которых открывают указанную ссылку. Таким образом злоумышленники дополнительно отслеживают геолокацию своей жертвы. После отправки HTTP-запроса программа устанавливает значение параметра реестра "Knock", равным 29Ah. Далее программа получает список дисков и общих ресурсов для шифрования. Шифрование файлов в зависимости от логического флага в конфигурации может осуществляться в текущем процессе или для каждого диска или общего ресурса из списка запускаются копии программы-вымогателя (по терминологии автора, агенты). Если шифрование осуществляется только текущим процессом, для получения списка общих ресурсов вместо перечисления общих ресурсов с помощью функций WNet API используется команда оболочки: При запуске с использованием агентов программа-вымогатель сохраняет список дисков и общих ресурсов в раздел реестра: PATH_0, …, PATH_N – пути для шифрования файлов. Далее программа-вымогатель запускает свой исполняемый файл со следующими параметрами: N – индекс пути в списке / наименование параметра в реестре, содержащего путь. Каждая такая запущенная копия программы-вымогателя (агент) извлекает из соответствующего параметра реестра путь и осуществляет шифрование файлов по данному пути. Если шифрование файлов осуществляется только текущим процессом, диски и общие ресурсы шифруются последовательно в цикле.  Таким образом, Zeppelin не умеет шифровать файлы многопоточно, но зато может шифровать многопроцессно. В корне каждого диска и общего сетевого ресурса создаются текстовые файлы .Zeppelin, содержащие шестнадцатеричную строку с экспонентой E ключа RSA-2048, который содержится в коде программы. При полном шифровании системы программа-вымогатель для удаления теневых копий разделов, удаления резервных копий состояния системы, отключения восстановления в загрузочном меню Windows выполняет с помощью командного интерпретатора следующие команды: Также в конфигурационных данных программы содержится BAT-файл: Так как в конфигурации установлен соответствующий логический флаг, программа извлекает BAT-файл под именем %Temp%\~temp001.bat и запускает его. При полном шифровании системы программа-вымогатель создает поток, который проверяет значение параметра реестра и при его соответствии определенному значению, завершает работу программы, то есть своего рода killswitch: KILLSWITCH – строка, контрольная сумма CRC32 которой равна 2F3DA86Fh. Анализ декрипторов Zeppelin показал, что в качестве такого значения параметра используется строка "8D9A1F76‑A705‑426D‑8722‑CCD4F4263E2C". Декриптор устанавливает этот параметр реестра, чтобы завершить процессы шифрования перед расшифровкой файлов. Также можно сбрутить любую строку, которая будет соответствовать указанной контрольной сумме CRC32. Только стоит учесть, что в Zeppelin реализация CRC32 немного упрощена. Такими строками могут быть, например: "rDL71", "V43RiB", "UPEDXFY", "gvccozo" и множество еще других. По завершении процесса полного шифрования программа-вымогатель удаляет раздел реестра: Но по ряду причин раздел может остаться. Как уже сказано выше, программа-вымогатель осуществляет однопоточное шифрование файлов на дисках и доступных сетевых ресурсах. Программа пропускает при шифровании каталоги, пути к которым содержат следующие подстроки: :\$Windows.~bt\ \Mozilla\ \Windows Security\ :\System Volume Information\ \Opera Software\ \Embedded Lockdown Manager\ :\Windows.old\ \Opera\ \Windows Journal\ :\Windows\ \Tor Browser\ \MSBuild\ :\intel\ \Common Files\ \Reference Assemblies\ :\nvidia\ \Internet Explorer\ \Windows Sidebar\ :\inetpub\logs\ \Windows Defender\ \Windows Defender Advanced Threat Protection\ \All Users\ \Windows Mail\ \Microsoft\ \AppData\ \Windows Media Player\ \Package Cache\ \Apple Computer\Safari\ \Windows Multimedia Platform\ \Microsoft Help\ \Application Data\ \Windows NT\ \Microsoft.NET\ \Boot\ \Windows Photo Viewer\ \Microsoft Visual Studio \Google\ \Windows Portable Devices\ %WINDIR% \Google\Chrome\ \WindowsPowerShell\  \Mozilla Firefox\ \Windows Photo Viewer\  Программа пропускает при шифровании файлы со следующими именами: boot.ini desktop.ini ntldr ntuser.ini bootfont.bin iconcache.db ntuser.dat thumbs.db bootsect.bak ntdetect.com ntuser.dat.log !!! ALL YOUR FILES ARE ENCRYPTED !!!.TXT Также не шифруются файлы с расширениями: ".hta", ".bat", ".cmd", ".com", ".cpl", ".dll", ".msc", ".msp", ".pif", ".scr", ".sys", ".log", ".lnk", ".zeppelin" В программе-вымогателе содержится публичный ключ RSA-2048 в виде шестнадцатеричных строк с модулем N и экспонентой E. При первом запуске программа генерирует пару ключей RSA-155. Сгенерированный публичный ключ шифруется с помощью RC4 и в кодировке Base64 сохраняется в параметр реестра: ENC_PUB_KEY – зашифрованный публичный ключ в кодировке Base64. Приватный ключ RSA-155 (рис. 1) шифруется с помощью публичного ключа RSA‑2048, содержащегося в теле программы. Полученное в результате данного шифрования большое число в виде десятичной строки (рис. 2) также шифруется с помощью RC4 и в кодировке Base64 сохраняется в параметр реестра: ENC_PRIV_KEY – зашифрованный приватный ключ в кодировке Base64. При каждом следующем запуске программа-вымогатель использует уже значения ключей RSA-155 из указанных выше параметров реестра и не осуществляет их генерацию. Для реализации RSA в Zeppelin используется библиотека DFF Library, а также демо-проект RSA Public Key Demo. Шифрование данных осуществляется с использованием алгоритма AES-256 CBC. Для каждого файла генерируются 32-байтный ключ и 16-байтный вектор инициализации IV. В зависимости от конфигурационных данных и способа вызова программы шифрование файлов может осуществляться блоками в двух вариантах: размер блока – 16 килобайт, общий размер блоков – не более 256 килобайт; размер блока – 64 килобайта, общий размер блоков – не более 1 мегабайта. Данные файлы шифруются одним блоком, в начало которого предварительно добавляется строка "666" размером 3 байта. Это сделано, чтобы еще больше усложнить и так не легкую жизнь вирусных аналитиков. Ключ шифрования и вектор IV шифруются публичным ключом RSA-155 (рис. 3). После шифрования данных файла в его начало (рис. 4) и конец добавляются блоки метаданных.   Блок метаданных в начале файла Смещение Размер Описание 000h 36 Маркер зашифрованного файла DA C4 C4 C4 C4 C4 C4 C4 C4 BF 0D 0A B3 5A 45 50  50 45 4C 49 4E B3 0D 0A C0 C4 C4 C4 C4 C4 C4 C4  C4 D9 0D 0A  024h 8 Размер выровненных зашифрованных данных 02Сh 8 Размер оригинальных данных   Блок метаданных в конце файла Смещение Размер Описание -M_SIZE 4 Размер зашифрованного списка смещений блоков   Зашифрованный (RC4) список смещений блоков зашифрованных данных в виде 64-битных целых чисел  4 Размер зашифрованных ключа и IV AES-256 CBC   Зашифрованные ключ и IV AES-256 CBC. Данные зашифрованы публичным ключом RSA-155, в зашифрованном виде данные представляют большое число в виде строки в десятичном представлении. Указанная строка дополнительно зашифрована RC4  4 Размер зашифрованного приватного ключа RSA-155   Зашифрованный приватный ключ RSA-155. Приватный ключ зашифрован публичным ключом RSA-2048, в зашифрованном виде данные представляют большое число в виде строки в десятичном представлении. Указанная строка дополнительно зашифрована RC4 -010h 4 Размер блока шифруемых данных -00Ch 8 Размер оригинального файла -004h 4 Размер блока метаданных (M_SIZE) Имена зашифрованных файлов имеют следующий вид: <FILENAME>.<RANSOM_EXT>.<VICTIM_ID> FILENAME – оригинальное имя файла; RANSOM_EXT – расширение, содержащееся в коде программы ("loplup"); VICTIM_ID – идентификатор жертвы, сформированный из первых 11 шестнадцатеричных символов модуля N публичного ключа RSA‑155 (рис. 1), в которой 3-й и 7‑й символы (нумерация с 0) заменены на дефис (например, "949-ED3-D07"). После обработки каждого подкаталога программа-вымогатель записывает в параметр реестра информацию о текущем количестве зашифрованных файлов и путь к последнему обработанному каталогу: ENC_FILE_COUNT – текущее количество зашифрованных файлов; DIR_PATH – путь к последнему обработанному подкаталогу. В каждом обработанном каталоге программа-вымогатель создает текстовые файлы !!! ALL YOUR FILES ARE ENCRYPTED !!!.TXT (рис. 5) с требованием выкупа за расшифровку файлов. У вас может возникнуть резонный вопрос: "А можно расшифровать данные?" Ответ в данном случае: теоретически, да. В данной статье коллеги из Unit221b рассказывают, как это можно сделать. Очевидно, приватный ключ RSA‑155, расшифровать не удастся, ключ зашифрован публичным ключом RSA-2048. А вот получить его вполне возможно, только надо решить задачу факторизации, то есть разложить модуль ключа n RSA-155 на простые числа – факторы p и q: n = p * q Полученные факторы p и q, а также открытая экспонента e позволят получить компонент приватного ключа – закрытую экспоненту d. Не буду останавливаться на этом подробно, кому интересно, почитайте про RSA, поверьте, будет интересно. Тем более, китайские математики предрекли в ближайшие годы конец криптографической жизни RSA. Все хорошо, но откуда взять компоненты открытого ключа RSA‑155 n и e? Оказывается, все просто! Ключ в зашифрованном виде (RC4) содержался в параметре реестре "Public Key". Если даже раздел Zeppelin удален, то ничто не помешает извлечь эти данные из журнала транзакций реестра и расшифровать (RC4). В итоге, у коллег из Unit221b распределенный процесс факторизации занял на их вычислительном кластере всего 6 часов. Так что расшифровать можно, но это, увы, доступно не всем. Логические флаги, определяющие настройки программы-вымогателя Текущее значение Описание False Использовать для шифрования компьютера содержащиеся в конфигурации локальные ключи RSA-155 False Осуществлять полное шифрование системы только в текущем процессе, в ином случае для шифрования каждого диска или общего ресурса запускается копия программы-вымогателя в режиме агента (с аргументом командной строки "-agent") False Не используется True Использовать сеть интернет для определения страны местоположения внешнего IP-адреса скомпрометированной системы и отправки HTTP-запроса по указанной в конфигурации ссылке IP Logger False Осуществлять закрепление в системе. Программа выбирает случайным образом имя для EXE-файла из следующих имен: services.exe, TrustedInstaller.exe, csrss.exe, explorer.exe, lsass.exe, smss.exe, spoolsv.exe, svchost.exe, taskeng.exe. Выбранное имя сохраняется в зашифрованном (RC4) и кодированном в Base64 виде в параметр реестра:"Process"="<ENC_EXE_NAME>"ENC_EXE_NAME – зашифрованное имя EXE-файла в кодировке Base64.Программа копирует свой исполняемый файл под именем:%APPDATA%\Microsoft\Windows\<EXE_NAME>EXE_NAME – выбранное имя EXE-файла.Программа регистрирует свой скопированный файл в разделе автозапуска Run:[HKCU\Software\Microsoft\Windows\CurrentVersion\Run]   "<EXE_NAME>"="\"%APPDATA%\Microsoft\Windows\<EXE_NAME>\" ‑start"Далее программа запускает свою скопированную копию:%APPDATA%\Microsoft\Windows\<EXE_NAME> ‑start True Запустить содержащийся в теле программы-вымогателя BAT-файл. Если флаг установлен, программа извлекает BAT-файл под именем %Temp%\~temp001.bat и запускает его False Завершать указанные в конфигурации процессы False Пытаться разблокировать и снова шифровать файл после неудачной попытки шифрования False Удалять себя. Если флаг установлен, программа запускает процесс notepad.exe, в который внедряет код, удаляющий исполняемый файл программы-вымогателя False При закреплении программы-вымогателя осуществлять запуск ее скопированного исполняемого файла от имени администратора (runas) False Осуществлять шифрование файлов большими блоками Конфигурационные данные Модуль N публичного ключа RSA-2048 FCDD4C30E0B55FABEFA8018666ED3BF37C5BD8B1A6AFD88CD11D3E513F0C8F586AE4F72D108793E4508A0D40D44013B42BBFDF318E224A46D4D95351C474E20B39A560CBC591F26CE9006F1E5C5C010C59FB09DA11EC1282FEF63840CAC09DD99F233ECC91C7BB7B7870D918BE3D78F5D0614B8746F0DF3612DBA11B59452AF0B21EDF1819003E125936D0D0E167C50E7B3549727837B8EBBDCB9DCAA145FA39B9BA8216A6713C90017E77FAAAF31E21E0F22E211CEB74191F1FC802FF77349BF3E5FBCD2788AA9CB0D0E428F4383357D1D95B5FBD85FD964BB316D28C7EE665BC581C31FAF7EB289646035AF1D7A388763787EA1ED48FE89B09BB016453ECA83 Экспонента E публичного ключа RSA-2048 2CA05C480A4A739B04DC407C4F86AE5BC9D1B892873C9E6648E14C84C32A11AA865E53188F1A4101E1B3F63AEA8EAD17ABB1A300A5B7F57464A2D6A42880125D6ACFB8FF8C83D2606BDF1A2FC30929287342DBD3F63D31260107858BAAD1DA883F6912E708542DF220FE1E386924CEBBFB285DEB042CB86230F89D17CA6B2C6663D238219CE0F45E169A97059DE6AC9B31C40615A9DF9009A4BF547F010F68DF6F914609B3C9FAF1BD6A2C85E26AA7F87C3B369904CE9D6181F351FA47ECA984B99ADD54D9A26CA0A3515CB0D410C7D14F7BDF85FAB85DB2B0E6364260622ADD58555B4CD756CA05C763A79C44E4CA0F7F44183D260034E1E33AA29001861AA77 Локальный публичный ключ RSA-155 !!! LOCALPUBKEY !!! Локальный Зашифрованный приватный ключ RSA-155 !!! ENCLOCALPRIVKEY !!! UID (не используется) {1DA6602B-AE79-E683-204C-6AF523983C5A} Белый список имен файлов boot.ini;bootfont.bin;bootsect.bak;desktop.ini;iconcache.db;ntdetect.com;ntldr;ntuser.dat;ntuser.dat.log;ntuser.ini;thumbs.db; Белый список подстрок путей к файлам :\$Windows.~bt\;:\System Volume Information\;:\Windows.old\;:\Windows\;:\intel\;:\nvidia\;:\inetpub\logs\;\All Users\;\AppData\;\Apple Computer\Safari\;\Application Data\;\Boot\;\Google\;\Google\Chrome\;\Mozilla Firefox\;\Mozilla\;\Opera Software\;\Opera\;\Tor Browser\;\Common Files\;\Internet Explorer\;\Windows Defender\;\Windows Mail\;\Windows Media Player\;\Windows Multimedia Platform\;\Windows NT\;\Windows Photo Viewer\;\Windows Portable Devices\;\WindowsPowerShell\;\Windows Photo Viewer\;\Windows Security\;\Embedded Lockdown Manager\;\Windows Journal\;\MSBuild\;\Reference Assemblies\;\Windows Sidebar\;\Windows Defender Advanced Threat Protection\;\Microsoft\;\Package Cache\;\Microsoft Help\;\Microsoft.NET\;\Microsoft Visual Studio; Список завершаемых процессов agntsvc.exe;agntsvc.exeagntsvc.exe;agntsvc.exeencsvc.exe;agntsvc.exeisqlplussvc.exe;anvir.exe;anvir64.exe;apache.exe;backup.exe;ccleaner.exe;ccleaner64.exe;dbeng50.exe;dbsnmp.exe;encsvc.exe;far.exe;firefoxconfig.exe;infopath.exe;isqlplussvc.exe;kingdee.exe;msaccess.exe;msftesql.exe;mspub.exe;mydesktopqos.exe;mydesktopservice.exe;mysqld-nt.exe;mysqld-opt.exe;mysqld.exe;ncsvc.exe;ocautoupds.exe;ocomm.exe;ocssd.exe;oracle.exe;oracle.exe;procexp.exe;regedit.exe;sqbcoreservice.exe;sql.exe;sqlagent.exe;sqlbrowser.exe;sqlserver.exe;sqlservr.exe;sqlwriter.exe;synctime.exe;taskkill.exe;tasklist.exe;taskmgr.exe;tbirdconfig.exe;tomcat.exe;tomcat6.exe;u8.exe;ufida.exe;visio.exe;xfssvccon.exe; Содержимое BAT-файла для запуска :: If you don't know what is it, don't touch!:: Commands run at the beginning (batch file) -->:powershell.exe -ExecutionPolicy ByPass -Command "Get-WmiObject Win32_Shadowcopy | ForEach-Object {$_.Delete();}"WMIC.exe shadowcopy delete /nointeractive IP Logger URL https://iplogger.org/1nLDZ4.torrent Имя текстового файла с требованием выкупа !!! ALL YOUR FILES ARE ENCRYPTED !!!.TXT Расширение зашифрованных файлов loplup Различные программы на Python, связанные с программами-вымогателями Zeppelin, YARA-правило для детектирования и т.п вы можете найти на моем гитхабе.  Malware analyst, reverse engineer, APT researcher