Исследователи ESET обнаружили новый вайпер и инструмент для его выполнения, оба из которых приписываются APT-группе Agrius. Это произошло в ходе анализа атаки на цепочку поставок, в которой использовался израильский разработчик ПО. Группа известна своими деструктивными действиями.

В феврале 2022 года Agrius начала нацеливаться на израильские HR- и IT-консалтинговые фирмы, а также на пользователей израильского программного пакета, используемого в алмазной индустрии. Мы полагаем, что операторы Agrius провели атаку на цепочку поставок, злоупотребив доверием израильского разработчика ПО, чтобы развернуть свой новый вайпер Fantasy и новый инструмент для бокового перемещения и выполнения Fantasy под названием Sandals.

Вайпер Fantasy создан на основе ранее описанного вайпера Apostle, но не пытается маскироваться под ransomware, как это делал Apostle изначально. Вместо этого он сразу приступает к удалению данных. Жертвы были замечены в Южной Африке — где разведка началась за несколько недель до развертывания Fantasy — а также в Израиле и Гонконге.

Ключевые моменты этой статьи:

  • Agrius провела атаку на цепочку поставок, злоупотребив доверием израильского программного пакета, используемого в алмазной индустрии.
  • Затем группа развернула новый вайпер, который мы назвали Fantasy. Большая часть его кодовой базы взята от Apostle, предыдущего вайпера Agrius.
  • Наряду с Fantasy, Agrius также развернула новый инструмент для бокового перемещения и выполнения Fantasy, который мы назвали Sandals.
  • Среди жертв — израильские HR-фирмы, IT-консалтинговые компании и оптовый продавец алмазов; южноафриканская организация, работающая в алмазной индустрии; и ювелир в Гонконге.

Обзор группы

Agrius — это относительно новая проиранская группа, нацеленная на жертв в Израиле и Объединенных Арабских Эмиратах с 2020 года. Изначально группа развернула вайпер Apostle, замаскированный под ransomware, но позже модифицировала Apostle в полноценный ransomware. Agrius использует известные уязвимости в интернет-приложениях для установки веб-шеллов, затем проводит внутреннюю разведку, прежде чем перемещаться по сети и развертывать свои вредоносные полезные нагрузки.

Обзор кампании

20 февраля 2022 года в организации алмазной индустрии в Южной Африке Agrius развернула инструменты для сбора учетных данных, вероятно, в рамках подготовки к этой кампании. Затем, 12 марта 2022 года, Agrius запустила атаку с использованием вайпера, развернув Fantasy и Sandals, сначала на жертву в Южной Африке, затем на жертв в Израиле и, наконец, на жертву в Гонконге.

Среди жертв в Израиле — компания, предоставляющая услуги IT-поддержки, оптовый продавец алмазов и HR-консалтинговая фирма. Южноафриканские жертвы — это одна организация из алмазной индустрии, а жертва из Гонконга — ювелир.

Рисунок 1. Временная шкала и местоположение жертв

Кампания длилась менее трех часов, и за это время клиенты ESET уже были защищены благодаря обнаружениям, идентифицирующим Fantasy как вайпер, и блокирующим его выполнение. Мы заметили, что разработчик ПО выпустил чистые обновления в течение нескольких часов после атаки. Мы связались с разработчиком ПО, чтобы уведомить его о потенциальном компромете, но наши запросы остались без ответа.

Подготовка к отбытию

Первыми инструментами, развернутыми операторами Agrius на системах жертв (способом, который неизвестен), были:

  • MiniDump, «реализация на C# функциональности mimikatz/pypykatz для дампа учетных данных из дампов LSASS»
  • SecretsDump, Python-скрипт, который «выполняет различные техники для дампа хэшей с [удаленной] машины без выполнения какого-либо агента на ней»
  • Host2IP, кастомный инструмент на C#/.NET, который разрешает имя хоста в IP-адрес.

Имена пользователей, пароли и имена хостов, собранные этими инструментами, необходимы для успешного распространения Sandals и выполнения вайпера Fantasy. Операторы Agrius развернули MiniDump и SecretsDump на первой жертве этой кампании 20 февраля 2022 года, но дождались 12 марта 2022 года, чтобы развернуть Host2IP, Fantasy и Sandals (последовательно).

Sandals: Зажигание Fantasy (вайпера)

Sandals — это 32-битное исполняемое приложение для Windows, написанное на C#/.NET. Мы выбрали такое название, потому что Sandals — это анаграмма некоторых аргументов командной строки, которые оно принимает. Оно используется для подключения к системам в той же сети через SMB, для записи пакетного файла на диск, который выполняет вайпер Fantasy, а затем для запуска этого пакетного файла с помощью PsExec со следующей строкой команды:

  • PsExec.exe /accepteula -d -u «<username>» -p «<password>» -s «C:<path><GUID>.bat»

Параметры PsExec имеют следующие значения:

  • -d – Не ждать завершения процесса (неинтерактивно).
  • /accepteula – Подавить отображение диалогового окна лицензии.
  • -s – Запустить удаленный процесс от имени учетной записи SYSTEM.

Sandals не записывает вайпер Fantasy на удаленные системы. Мы полагаем, что вайпер Fantasy развертывается через атаку на цепочку поставок с использованием механизма обновления программного обеспечения разработчика. Эта оценка основана на нескольких факторах:

  • все жертвы были клиентами затронутого разработчика ПО;
  • вайпер Fantasy был назван аналогично легитимным версиям ПО;
  • все жертвы выполнили вайпер Fantasy в течение 2,5 часов, причем жертвы в Южной Африке были атакованы первыми, затем жертвы в Израиле, и, наконец, жертвы в Гонконге (мы приписываем задержку в таргетинге различиям в часовых поясах и жестко закодированному времени проверки в легитимном ПО); и,
  • наконец, вайпер Fantasy был записан и выполнен из %SYSTEM%WindowsTemp, стандартного временного каталога для систем Windows.

Кроме того, мы полагаем, что жертвы уже использовали PsExec, и операторы Agrius решили использовать PsExec, чтобы смешаться с обычной административной активностью на машинах жертв, а также для простоты выполнения пакетных файлов. Таблица 1 содержит список аргументов командной строки, принимаемых Sandals.

Таблица 1. Аргументы Sandals и их описания

Аргумент Описание Обязательно
-f <filepath> Путь и имя файла, содержащего список имен хостов, которые должны быть целью. Да
-u <username> Имя пользователя, которое будет использоваться для входа в удаленные имена хостов из аргумента -f. Да
-p <password> Имя пользователя, которое будет использоваться для входа в удаленные имена хостов из аргумента -f. Да
-l <filepath> Путь и имя файла вайпера Fantasy на удаленной системе, который будет выполнен пакетным файлом, созданным Sandals. Да
-d <path> Местоположение, куда Sandals запишет пакетный файл на удаленной системе. По умолчанию %WINDOWS%Temp. Нет
-s <integer> Время в секундах, в течение которого Sandals будет ожидать между записью пакетного файла на диск и его выполнением. По умолчанию две секунды. Нет
-a file <filepath> или
-a random или
-a rsa
Если после -a следует слово file и путь с именем файла, Sandals использует ключ шифрования из предоставленного файла. Если после -a следует rsa или random, Sandals использует класс RSACryptoServiceProvider для генерации пары открытого и закрытого ключей размером 2048 бит. Нет
-dn <devicename> Указывает, к какому диску подключаться на удаленной системе через SMB. По умолчанию C:. Нет
-ps <filepath> Местоположение PsExec на диске. По умолчанию psexec.exe в текущем рабочем каталоге. Нет
-ra Если -ra указан во время выполнения, он устанавливает переменную flag в True (изначально установлена в False). Если flag=True, Sandals удаляет все файлы, записанные на диск в текущем рабочем каталоге. Если flag=False, Sandals пропускает шаг очистки файлов. Нет

Пакетный файл, записанный Sandals на диск, называется <GUID>.bat, где имя файла является результатом работы метода Guid.NewGuid(). Пример пакетного файла Sandals показан на Рисунке 2.

Рисунок 2. Пакетный файл Sandals (сверху, красным) и декодированный параметр командной строки (снизу, синим)

Строка base64, следующая за fantasy35.exe, вероятно, является пережитком требований к выполнению Apostle (подробнее в разделе Атрибуция к Agrius). Однако вайпер Fantasy ищет только аргумент 411 и игнорирует все остальные входные данные во время выполнения (см. следующий раздел для получения дополнительной информации).

Вайпер Fantasy

Вайпер Fantasy также является 32-битным исполняемым приложением для Windows, написанным на C#/.NET, названным так из-за имен его файлов: fantasy45.exe и fantasy35.exe соответственно. Рисунок 3 иллюстрирует поток выполнения вайпера Fantasy.

Рисунок 3. Поток выполнения вайпера Fantasy

Изначально Fantasy создает мьютекс, чтобы гарантировать, что запущена только одна копия. Он собирает список фиксированных дисков, но исключает диск, где находится каталог %WINDOWS%. Затем он входит в цикл, перебирая список дисков для построения рекурсивного списка каталогов, и использует метод RNGCryptoServiceProvider.GetBytes для создания криптографически стойкой последовательности случайных значений в массиве размером 4096 байт. Если вайперу передается аргумент во время выполнения 411, цикл for перезаписывает содержимое каждого файла указанным выше байтовым массивом с помощью вложенного цикла while. В противном случае цикл for перезаписывает только файлы с расширением, указанным в Приложении.

Затем Fantasy назначает определенную временную метку (2037-01-01 00:00:00) этим свойствам временной метки файла:

  • CreationTime
  • LastAccessTime
  • LastWriteTime
  • CreationTimeUtc
  • SetLastAccessTimeUtc
  • LastWriteTimeUtc

а затем удаляет файл. Это, предположительно, делается для усложнения восстановления и криминалистического анализа.

Во время цикла for вайпер Fantasy подсчитывает ошибки в текущем каталоге при попытке перезаписи файлов. Если количество ошибок превышает 50, он записывает пакетный файл %WINDOWS%Temp<GUID>.bat, который удаляет каталог с файлами, вызывающими ошибки, а затем самоудаляется. Затем запись файлов возобновляется в следующем каталоге из списка целей.

После завершения цикла for вайпер Fantasy создает пакетный файл в %WINDOWS%Temp под названием registry.bat. Пакетный файл удаляет следующие ключи реестра:

  • HKCR.EXE
  • HKCR.dll
  • HKCR*

Затем он выполняет следующее, чтобы попытаться очистить память кэша файловой системы:

  • %windir%system32rundll32.exe advapi32.dll,ProcessIdleTasks

Наконец, registry.bat удаляет сам себя (del %0).

Далее вайпер Fantasy очищает все журналы событий Windows и создает другой пакетный файл, system.bat, в %WINDOWS%Temp, который рекурсивно удаляет все файлы на %SYSTEMDRIVE%, пытается очистить память кэша файловой системы и самоудаляется. Затем Fantasy ждет две минуты, прежде чем перезаписать Master Boot Record (MBR) системы.

Fantasy затем записывает еще один пакетный файл, %WINDOWS%Tempremover.bat, который удаляет вайпер Fantasy с диска, а затем удаляет сам себя. После этого Fantasy ждет 30 секунд, прежде чем перезагрузить систему с кодом причины SHTDN_REASON_MAJOR_OTHER (0x00000000) — Другая проблема.

Вероятно, восстановление %SYSTEMDRIVE% возможно. Было замечено, что жертвы возвращаются в рабочее состояние в течение нескольких часов.

Атрибуция к Agrius

Большая часть кодовой базы Apostle, который изначально был вайпером, маскирующимся под ransomware, а затем был обновлен до настоящего ransomware, была напрямую скопирована в Fantasy, и многие другие функции в Fantasy были лишь незначительно модифицированы из Apostle, известного инструмента Agrius. Однако общая функциональность Fantasy — это вайпер без каких-либо попыток замаскироваться под ransomware. Рисунок 4 показывает функции удаления файлов в Fantasy и Apostle соответственно. Между оригинальной функцией в Apostle и реализацией Fantasy есть лишь несколько мелких изменений.

Рисунок 4. Функции удаления файлов из вайпера Fantasy (сверху, красным) и ransomware Apostle (снизу, зеленым)

Рисунок 4. Функции удаления файлов из вайпера Fantasy (сверху, красным) и ransomware Apostle (снизу, зеленым)

На Рисунке 5 показано, что функция перечисления каталогов почти полностью скопирована, лишь переменные функции немного изменены между Apostle и Fantasy.

Рисунок 5. Функции перечисления каталогов из вайпера Fantasy (сверху, красным) и ransomware Apostle (снизу, зеленым)

Наконец, функция GetSubDirectoryFileListRecursive на Рисунке 6 также является почти точной копией.

Рисунок 6. Функции рекурсивного перечисления каталогов из вайпера Fantasy (сверху, красным) и ransomware Apostle (снизу, зеленым)

Кроме того, мы видим следы потока выполнения Apostle в Fantasy. В оригинальном анализе Apostle SentinelOne отмечает, что «Для корректного выполнения версии ransomware требуется передать ей аргумент, закодированный в base64, содержащий XML-объект ‘RSAParameters’. Этот аргумент передается и сохраняется как открытый ключ, используемый для процесса шифрования, и, скорее всего, генерируется на машине, принадлежащей злоумышленнику.» Мы видим в пакетном файле на Рисунке 7, который Sandals создает на удаленных системах для запуска Fantasy, что тот же аргумент, закодированный в base64 и содержащий XML-объект RSAParameters, передается Fantasy во время выполнения. Однако Fantasy не использует этот аргумент во время выполнения.

Рисунок 7. Sandals передает Fantasy тот же объект RSAParameters, что использовался ransomware Apostle

Заключение

С момента своего обнаружения в 2021 году Agrius сосредоточена исключительно на деструктивных операциях. С этой целью операторы Agrius, вероятно, провели атаку на цепочку поставок, нацелившись на механизмы обновления программного обеспечения израильской компании, чтобы развернуть Fantasy, свой новейший вайпер, для жертв в Израиле, Гонконге и Южной Африке. Fantasy во многих аспектах похож на предыдущий вайпер Agrius, Apostle, который изначально маскировался под ransomware, прежде чем был переписан в настоящее ransomware. Fantasy не прилагает никаких усилий, чтобы замаскироваться под ransomware. Операторы Agrius использовали новый инструмент, Sandals, для удаленного подключения к системам и выполнения Fantasy.

По любым вопросам, касающимся наших исследований, опубликованных на WeLiveSecurity, пожалуйста, свяжитесь с нами по адресу threatintel@eset.com.

ESET Research также предлагает закрытые отчеты по APT-интеллекту и потоки данных. По любым вопросам, касающимся этой услуги, посетите страницу ESET Threat Intelligence.

IoCs

SHA-1 Имя файла Обнаружение Описание
1A62031BBB2C3F55D44F59917FD32E4ED2041224 fantasy35.exe MSIL/KillDisk.I Вайпер Fantasy.
820AD7E30B4C54692D07B29361AECD0BB14DF3BE fantasy45.exe MSIL/KillDisk.I Вайпер Fantasy.
1AAE62ACEE3C04A6728F9EDC3756FABD6E342252 host2ip.exe clean Разрешает имя хоста в IP-адрес.
5485C627922A71B04D4C78FBC25985CDB163313B MiniDump.exe MSIL/Riskware.LsassDumper.H Реализация Mimikatz для дампа учетных данных из LSASS.
DB11CBFFE30E0094D6DE48259C5A919C1EB57108 registry.bat BAT/Agent.NRG Пакетный файл, который стирает некоторые ключи реестра и сбрасывается и выполняется вайпером Fantasy.
3228E6BC8C738781176E65EBBC0EB52020A44866 secretsdump.py Python/Impacket.A Python-скрипт, который дампит хэши учетных данных.
B3B1EDD6B80AF0CDADADD1EE1448056E6E1B3274 spchost.exe MSIL/Agent.XH Инструмент бокового перемещения Sandals и распространитель Fantasy.

MITRE ATT&CK техники

Эта таблица составлена с использованием версии 12 фреймворка MITRE ATT&CK.

Тактика ID Название Описание
Разработка ресурсов T1587 Разработка возможностей Agrius создает утилиты для использования во время активного процесса эксплуатации.
T1587.001 Разработка возможностей: Вредоносное ПО Agrius создает кастомное вредоносное ПО, включая вайперы (Fantasy) и инструменты для бокового перемещения (Sandals).
Первоначальный доступ T1078.002 Действительные учетные записи: Учетные записи домена Операторы Agrius пытались перехватить кешированные учетные данные, а затем использовать их для бокового перемещения.
T1078.003 Действительные учетные записи: Локальные учетные записи Операторы Agrius пытались использовать кешированные учетные данные локальных учетных записей для получения первоначального доступа к дополнительным системам внутри внутренней сети.
Выполнение T1059.003 Интерпретатор команд и скриптов: Командная оболочка Windows Fantasy и Sandals используют пакетные файлы, которые запускаются через командную оболочку Windows.
Повышение привилегий T1134 Манипуляция токеном доступа Fantasy использует API LookupPrivilegeValue и AdjustTokenPrivilege в advapi32.dll для предоставления своему токену процесса привилегии SeShutdownPrivilege для перезагрузки Windows.
Обход защиты T1070.006 Удаление индикаторов на хосте: Timestomp Операторы Agrius использовали timestomp для временных меток компиляции Fantasy и Sandals.
Доступ к учетным данным T1003 Дамп учетных данных ОС Операторы Agrius использовали несколько инструментов для дампа учетных данных ОС для использования в боковом перемещении.
Обнаружение T1135 Обнаружение сетевых ресурсов Операторы Agrius использовали кешированные учетные данные для проверки доступа к другим системам внутри внутренней сети.
Боковое перемещение T1021.002 Удаленные службы: SMB/Windows Admin Shares Операторы Agrius использовали кешированные учетные данные для подключения по SMB к системам внутри скомпрометированной внутренней сети.
T1570 Перенос инструментов бокового перемещения Операторы Agrius использовали Sandals для передачи пакетных файлов через SMB на другие системы внутри внутренней сети.
Воздействие T1485 Уничтожение данных Вайпер Fantasy перезаписывает данные в файлах, а затем удаляет файлы.
T1561.002 Стирание диска Fantasy стирает MBR диска Windows и пытается стереть раздел ОС.
T1561.001 Стирание диска: Стирание содержимого диска Fantasy стирает все содержимое диска с не-Windows-дисков, являющихся фиксированными дисками.
T1529 Завершение работы/перезагрузка системы Fantasy перезагружает систему после завершения своих полезных нагрузок по стиранию диска и данных.

Приложение

Расширения файлов (682), на которые нацелен вайпер Fantasy, когда он не нацелен на все расширения файлов. Расширения файлов, выделенные желтым (68), являются распространенными расширениями имен файлов в Windows. Примечательно отсутствуют расширения файлов dll и sys.

$$$ blend drw jsp nyf qualsoftcode tdb
$db blend1 dsb kb2 oab quicken2015backup tex
001 blend2 dss kbx obj quicken2016backup tga
002 blob dtd kc2 obk quicken2017backup thm
003 bm3 dwg kdb odb quickenbackup tib
113 bmk dxb kdbx odc qv~ tibkp
3dm bookexport dxf kdc odf r3d tif
3ds bpa dxg key odg raf tig
3fr bpb em1 kf odm rar tis
3g2 bpm epk kpdx odp rat tlg
3gp bpn eps layout ods raw tmp
3pr bps erbsql lbf odt rb tmr
73b bpw erf lcb oeb rbc tor
7z bsa esm ldabak ogg rbf trn
__a bup exe litemod oil rbk ttbk
__b c exf llx old rbs txt
ab caa fbc lnk onepkg rdb uci
ab4 cas fbf ltx orf re4 upk
aba cbk fbk lua ori rgss3a v2i
abbu cbs fbu lvl orig rim vb
abf cbu fbw m ost rm vbk
abk cdf fdb m2 otg rmbak vbm
abu cdr ff m3u oth rmgb vbox-prev
abu1 cdr3 ffd m4a otp rofl vcf
accdb cdr4 fff m4v ots rrr vdf
accde cdr5 fh map ott rtf vfs0
accdr cdr6 fhd max oyx rw2 vmdk
accdt cdrw fhf mbf p12 rwl vob
ach cdx fla mbk p7b rwz vpcbackup
acp ce2 flat mbw p7c s3db vpk
acr cel flka mcmeta pab safenotebackup vpp_pc
act cenon~ flkb mdb pages sas7bdat vrb
adb cer flv mdbackup pak sav vtf
adi cfp fmb mdc paq say w01
ads cfr forge mddata pas sb w3x
aea cgm fos mdf pat sbb wallet
afi cib fpk mdinfo pba sbs walletx
agdl ck9 fpsx mef pbb sbu war
ai class fpx mem pbd sdO wav
ait cls fsh menu pbf sda wb2
al cmf ftmb mfw pbj sdc wbb
apj cmt ful mig pbl sdf wbcat
apk config fwbackup mkv pbx5script sid wbk
arc cpi fxg mlx pbxscript sidd wbx
arch00 cpp fza mmw pcd sidn win
arw cr2 fzb moneywell pct sie wjf
as4 craw gb1 mos pdb sim wma
asd crds gb2 mov pdd sis wmo
asf crt gbp mp3 pdf skb wmv
ashbak crw gdb mp4 pef sldm wotreplay
asm cs gho mpb pem sldx wpb
asmx csd ghs mpeg pfi slm wpd
asp csh gray mpg pfx sln wps
aspx csl grey mpqge php sme wspak
asset csm gry mrw php5 sn1 wxwanam
asv css gs-bck mrwref phtml sn2 x
asvx csv gz msg pk7 sna x11
asx d3dbsp h msi pkpass sns x3f
ate da0 hbk msim pl snx xbk
ati dac hkdb mv_ plc spf xf
avi das hkx myd plc spg xis
awg dash hplg mynotesbackup png spi xla
ba6 dazip hpp nb7 pot sps xlam
ba7 db htm nba potm sqb xlk
ba8 db-journal htm1 nbak potx sql xlm
ba9 db0 html nbd ppam sqlite xlr
bac db3 hvpl nbd pps sqlite3 xls
back dba ibank nbf ppsm sqlitedb xlsb
backup dbf ibd nbi ppsx sr2 xlsm
backup1 dbk ibk nbk ppt srf xlsx
backupdb dbs ibz nbs pptm srr xlt
bak dbx icbu nbu pptx srt xltm
bak2 dc2 icf ncf pqb-backup srw xltx
bak3 dcr icxs nco prf st4 xlw
bakx dcs idx nd prv st6 xml
bak~ ddd iif nda ps st7 ycbcra
bank ddoc iiq ndd psa st8 yrcbck
bar ddrw incpas nef psafe3 std yuv
bat dds indd nfb psd stg zbfx
bay der index nfc psk sti zip
bbb des inprogress nk2 pspimage stw ztmp
bbz desc iso nop pst stx ~cw
bc6 design itdb noy ptb sty
bc7 dgc itl npf ptx sum
bck dim itm nrbak pvc sv$
bckp divx iv2i nrs pvhd sv2i
bcm diy iwd nrw qba swf
bdb djvu iwi ns2 qbb sxc
bff dmp j01 ns3 qbk sxd
bgt dna jar ns4 qbm sxg
bif dng java nsd qbmb sxi
bifx doc jbk nsf qbmd sxm
big docm jdc nsg qbr sxw
bik docx jpa nsh qbw syncdb
bk1 dot jpe ntl qbx t12
bkc dotm jpeg nwb qby t13
bkf dotx jpg nwbak qdf tar
bkp dov jps nx2 qic tax
bkup dpb js nxl qsf tbk
bkz drf

Читать полный анализ на WeLiveSecurity →