Группа хакеров из КНДР, известная под обозначением UNC1069, продолжает совершенствовать свои методы для атак на компании в сфере криптовалют и децентрализованных финансов (DeFi). Специалисты компании Mandiant, входящей в Google Cloud, расследовали инцидент в одной из финтех-компаний этого сектора. Расследование выявило сложную цепочку заражения, в ходе которой на компьютер жертвы было установлено семь уникальных семейств вредоносного ПО, включая три новых инструмента для кражи данных: SILENCELIFT, DEEPBREATH и CHROMEPUSH. Особенностью атаки стало использование социальной инженерии с компрометированным аккаунтом в Telegram, фальшивой конференцией в Zoom и, по заявлениям жертвы, AI-сгенерированным видео для обмана.
Описание
Атака началась с того, что злоумышленники связались с целью через взломанный аккаунт исполнительного директора криптовалютной компании в мессенджере Telegram. После установления контакта жертве была отправлена ссылка Calendly для планирования встречи. Ссылка вела на поддельную страницу видеоконференции Zoom, размещенную на инфраструктуре злоумышленников. Во время звонка, по словам жертвы, демонстрировалось видео с CEO другой криптокомпании, которое выглядело как глубокий фейк. Хотя эксперты Mandiant не смогли найти прямых цифровых следов использования AI-моделей в этом конкретном случае, описанная схема совпадает с ранее публиковавшимися инцидентами.
В ходе фальшивого звонка злоумышленники имитировали проблемы со звуком, чтобы провести так называемую атаку ClickFix. В этой технике злоумышленник убеждает пользователя выполнить ряд команд для "устранения неполадок". На веб-странице были предложены два набора команд - для macOS и Windows. В одну из них для macOS был встроен скрытый вызов, который инициировал цепочку заражения. Команда с помощью утилиты curl загружала и исполняла вредоносный скрипт с контролируемого хакерами домена.
Первым на систему был загружен упакованный бэкдор, получивший название WAVESHAPER. Он стал точкой входа для развертывания последующих инструментов. Через загрузчик HYPERCALL злоумышленники получили доступ к системе и установили несколько новых вредоносных программ, включая бэкдор HIDDENCALL для ручного управления, загрузчик SUGARLOADER и минималистичный бэкдор SILENCELIFT для передачи системной информации на командный сервер.
Особое внимание экспертов привлекли два инструмента для кражи данных - DEEPBREATH и CHROMEPUSH. DEEPBREATH, написанный на Swift, использует сложный метод для обхода системы защиты конфиденциальности Transparency, Consent, and Control в macOS. Манипулируя базой данных TCC, вредоносная программа получает широкий доступ к файловой системе для кражи учетных данных из связки ключей Keychain, данных браузеров Chrome, Brave и Edge, информации из Telegram и Apple Notes. Собранные данные архивируются и выгружаются на удаленный сервер.
Второй сборщик данных, CHROMEPUSH, написан на C++ и действует как вредоносное расширение для браузеров на движке Chromium. Оно маскируется под инструмент для офлайн-редактирования Google Docs. Расширение регистрируется как native messaging host, что обеспечивает ему автоматический запуск вместе с браузером. CHROMEPUSH способен перехватывать нажатия клавиш, учетные данные, вводимые в формы, и извлекать файлы cookie браузера, завершая сбор конфиденциальной информации на хосте.
Для обеспечения устойчивости в системе злоумышленники вручную создали launch daemon, который автоматически запускает загрузчик SUGARLOADER при загрузке macOS. Интересно, что в расследовании помог встроенный в macOS антивирус XProtect, а именно его поведенческий компонент XProtect Behavioral Service. Несмотря на то что он не блокирует выполнение, он записывает информацию о нарушителях в базу данных. Анализ этих записей позволил специалистам восстановить последовательность событий и пути выполнения вредоносных файлов, даже несмотря на отсутствие на системе продуктов класса EDR.
Группа UNC1069, деятельность которой отслеживается с 2018 года, традиционно мотивирована финансовой выгодой и связана с КНДР. За последние годы хакеры перешли от фишинга и атак на традиционные финансовые институты к целенаправленному преследованию игроков Web3-индустрии. В данном инциденте эксперты отметили необычно большое количество уникальных вредоносных инструментов, развернутых на одном хосте, что указывает на высокоцелевую атаку. Ее целью был не только прямой финансовый ущерб через кражу криптовалюты, но и сбор данных для будущих кампаний социальной инженерии, где личность и информация жертвы могли бы быть использованы для атак на ее контакты.
Это расследование подтверждает растущую тенденцию интеграции передовых технологий, включая генеративный искусственный интеллект, в арсенал киберпреступников, что делает социальную инженерию все более изощренной и опасной.
Индикаторы компрометации
Domains
- breakdream.com
- cmailer.pro
- dreamdie.com
- mylingocoin.com
- supportzm.com
- support-zoom.us
- zmsupport.com
- zoom.uswe05.us
SHA256
- 03f00a143b8929585c122d490b6a3895d639c17d92C2223917e3a9ca1b8d30f9
- 1a30d6cdb0b98feed62563be8050db55ae0156ed437701d36a7b46aabf086ede
- 603848f37ab932dccef98ee27e3c5af9221d3b6ccfe457ccf93cb572495ac325
- b452C2da7c012eda25a1403b3313444b5eb7C2c3e25eee489f1bd256f8434735
- b525837273dde06b86b5f93f9aeC2C29665324105b0b66f6df81884754f8080d
- c3e5d878a30a6c46e22d1dd2089b32086c91f13f8b9c413aa84e1dbaa03b9375
- c8f7608d4e19f6cb03680941bbd09fe969668bcb09c7ca985048a22e014dffcd
YARA
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | rule G_Backdoor_WAVESHAPER_1 { meta: author = "Google Threat Intelligence Group (GTIG)" date_created = "2025-11-03" date_modified = "2025-11-03" md5 = "c91725905b273e81e9cc6983a11c8d60" rev = 1 strings: $str1 = "mozilla/4.0 (compatible; msie 8.0; windows nt 5.1; trident/4.0)" $str2 = "/tmp/.%s" $str3 = "grep \"Install Succeeded\" /var/log/install.log | awk '{print $1, $2}'" $str4 = "sysctl -n hw.model" $str5 = "sysctl -n machdep.cpu.brand_string" $str6 = "sw_vers --ProductVersion" condition: all of them } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | rule G_Backdoor_WAVESHAPER_2 { meta: author = "Google Threat Intelligence Group (GTIG)" date_created = "2025-11-03" date_modified = "2025-11-03" md5 = "eb7635f4836c9e0aa4c315b18b051cb5" rev = 1 strings: $str1 = "__Z10RunCommand" $str2 = "__Z11GenerateUID" $str3 = "__Z11GetResponse" $str4 = "__Z13WriteCallback" $str5 = "__Z14ProcessRequest" $str6 = "__Z14SaveAndExecute" $str7 = "__Z16MakeStatusString" $str8 = "__Z24GetCurrentExecutablePath" $str9 = "__Z7Execute" condition: all of them } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | rule G_Downloader_HYPERCALL_1 { meta: author = "Google Threat Intelligence Group (GTIG)" date_created = "2025-10-24" date_modified = "2025-10-24" rev = 1 strings: $go_build = "Go build ID:" $go_inf = "Go buildinf:" $lib1 = "/inject_mac/inject.go" $lib2 = "github.com/gorilla/websocket" $func1 = "t_loader/inject_mac.Inject" $func2 = "t_loader/common.rc4_decode" $c1 = { 48 BF 00 AC 23 FC 06 00 00 00 0F 1F 00 E8 ?? ?? ?? ?? 48 8B 94 24 ?? ?? ?? ?? 48 8B 32 48 8B 52 ?? 48 8B 76 ?? 48 89 CF 48 89 D9 48 89 C3 48 89 D0 FF D6 } $c2 = { 48 89 D6 48 F7 EA 48 01 DA 48 01 CA 48 C1 FA 1A 48 C1 FE 3F 48 29 F2 48 69 D2 00 E1 F5 05 48 29 D3 48 8D 04 19 } condition: (uint32(0) == 0xfeedface or uint32(0) == 0xcafebabe or uint32(0) == 0xbebafeca or uint32(0) == 0xcefaedfe or uint32(0) == 0xfeedfacf or uint32(0) == 0xcffaedfe) and all of ($go*) and any of ($lib*) and any of ($func*) and all of ($c*) } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | rule G_Backdoor_SILENCELIFT_1 { meta: author = "Google Threat Intelligence Group (GTIG)" md5 = "4e4f2dfe143ba261fd8a18d1c4b58f2e" date_created = "2025/10/23" date_modified = "2025/10/28" rev = 2 strings: $ss1 = "/usr/libexec/PlistBuddy -c \"print :IOConsoleUsers:0:CGSSessionScreenIsLocked\" /dev/stdin 2>/dev/null <<< \"$(ioreg -n Root -d1 -a)\"" ascii fullword $ss2 = "pkill -CONT -f" ascii fullword $ss3 = "pkill -STOP -f" ascii fullword $ss4 = "/Library/Caches/.Logs.db" ascii fullword $ss5 = "/Library/Caches/.evt_" $ss6 = "{\"bot_id\":\"" $ss7 = "\", \"status\":" $ss8 = "/Library/Fonts/.analyzed" ascii fullword condition: all of them } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | rule G_APTFIN_Downloader_SUGARLOADER_1 { meta: author = "Google Threat Intelligence Group (GTIG)" md5 = "3712793d3847dd0962361aa528fa124c" date_created = "2025/10/15" date_modified = "2025/10/15" rev = 1 strings: $ss1 = "/Library/OSRecovery/com.apple.os.config" $ss2 = "/Library/Group Containers/OSRecovery" $ss4 = "_wolfssl_make_rng" condition: all of them } |
| 1 2 3 4 5 6 7 8 9 10 | rule G_APTFIN_Downloader_SUGARLOADER_2 { meta: author = "Google Threat Intelligence Group (GTIG)" strings: $m1 = "__mod_init_func\x00lko2\x00" $m2 = "__mod_term_func\x00lko2\x00" $m3 = "/usr/lib/libcurl.4.dylib" condition: (uint32(0) == 0xfeedface or uint32(0) == 0xfeedfacf or uint32(0) == 0xcefaedfe or uint32(0) == 0xcffaedfe or uint32(0) == 0xcafebabe) and (all of ($m1, $m2, $m3)) } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | rule G_Datamine_DEEPBREATH_1 { meta: author = "Google Threat Intelligence Group (GTIG)" strings: $sa1 = "-fakedel" $sa2 = "-autodat" $sa3 = "-datadel" $sa4 = "-extdata" $sa5 = "TccClickJack" $sb1 = "com.apple.TCC\" as alias" $sb2 = "/TCC.db\" as alias" $sc1 = "/group.com.apple.notes\") as alias" $sc2 = ".keepcoder.Telegram\")" $sc3 = "Support/Google/Chrome/\")" $sc4 = "Support/BraveSoftware/Brave-Browser/\")" $sc5 = "Support/Microsoft Edge/\")" $sc6 = "& \"/Local Extension Settings\"" $sc7 = "& \"/Cookies\"" $sc8 = "& \"/Login Data\"" $sd1 = "\"cp -rf \" & quoted form of " condition: (uint32(0) == 0xfeedfacf) and 2 of ($sa*) and 2 of ($sb*) and 3 of ($sc*) and 1 of ($sd*) } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | rule G_Datamine_CHROMEPUSH_1 { meta: author = "Google Threat Intelligence Group (GTIG)" date_created = "2025-11-06" date_modified = "2025-11-06" rev = 1 strings: $s1 = "%s/CA%02d%02d%02d%02d%02d%02d.dat" $s2 = "%s/tmpCA.dat" $s3 = "mouseStates" $s4 = "touch /Library/Caches/.evt_" $s5 = "cp -f" $s6 = "rm -rf" $s7 = "keylogs" $s8 = "%s/KL%02d%02d%02d%02d%02d%02d.dat" $s9 = "%s/tmpKL.dat" $s10 = "OK: Create data.js success" condition: (uint32(0) == 0xfeedface or uint32(0) == 0xcefaedfe or uint32(0) == 0xfeedfacf or uint32(0) == 0xcffaedfe or uint32(0) == 0xcafebabe or uint32(0) == 0xbebafeca or uint32(0) == 0xcafebabf or uint32(0) == 0xbfbafeca) and 8 of them } |
