GlassWorm освоює Mac: Нова інфраструктура, нові хитрощі
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
Загроза, що стоїть за GlassWorm, змінила фокус з активності, орієнтованої на Windows, на macOS, поширюючи зловмисні розширення VS Code, які отримують зашифровані JavaScript-платформи за допомогою вказівників C2, похідних від блокчейна Solana. Ця хвиля розширює можливості, додаючи троянізацію апаратних гаманців, продовжуючи розповсюджене викрадення облікових даних через браузери, інструменти розробників і Keychain macOS. Інфраструктура включає адресу гаманця Solana та IP-адресу, повторно використану з попередніх операцій GlassWorm, що свідчить про безперервність інструментів і хостингу оператора. Дослідники зауважили понад 50 000 завантажень до того, як розширення були видалені, вказуючи на значний вплив на середовища розробників.
Розслідування
Koi Security ідентифікувала три зловмисних розширення VS Code на ринку Open VSX і пов’язала їхній робочий процес командування та контролю з гаманцем Solana та спільною IP-адресою, раніше пов’язаною з GlassWorm. Вставки мають 15-хвилинну затримку виконання, потім розшифровують і запускають JavaScript-платформу AES-256-CBC. На macOS стійкість встановлюється через LaunchAgents. Цілі збору включають гаманці браузера та дані гаманця на робочому столі, токени доступу розробника, ключі SSH та матеріали Keychain macOS. Зловмисні дані зберігаються у /tmp/ijewf/ перед ексфільтрацією на серверний шлях подібний до /p2p. Вона також прагне замінити законні додатки супроводу апаратних гаманців на ще троянізовані, такі як Ledger Live та Trezor Suite, щоб захопити цінні секрети та транзакції.
Пом’якшення
Посилення контролю за інструментами розробників шляхом забезпечення дозволу на розширення та вимоги перевірки безпеки для розширень VS Code, особливо тих, що походять від відкритих ринків. Розгортання виявлення оброблених зразків та підозрілих створень або модифікацій LaunchAgents. Моніторинг та блокування підозрілої вихідної активності, пов’язаної з вказівниками Solana дериватами C2, а також додавання мережевих виявлень для незвичних з’єднань з ідентифікованим повторно використаним IP. Вимога MFA для облікових записів розробників і хмарних акаунтів, а також впровадження перевірок цілісності апаратного гаманця (перевірка видавця, нотарізація/перевірка підпису та контрольовані канали оновлення програмного забезпечення).
Реакція
Спрацьовуйте тривоги на нові або змінені LaunchAgents, аномальний доступ до сховищ Keychain, та спроби отримання Solana-посилань C2. Карантин і видалення зловмисних розширень VS Code, а потім знищення будь-якої зв’язаної LaunchAgent стійкості. Проведення цільових судово-експертних досліджень на /tmp/ijewf/ для визначення стадіювання облікових даних та підтвердження зібраних даних. Перевірити цілісність додатків апаратного гаманця (Ledger Live, Trezor Suite) та перевстановити з надійних джерел, якщо підозрюється підроблення. Скидання вражених облікових даних, ротація ключів SSH і токенів розробника, анулювання сесій, розширення полювання на кінцевих точках для однакових ID розширень, шляхів файлів та артефактів стійкості.
"graph TB %% Визначення класів classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef operator fill:#ff9900 classDef tool fill:#cccccc %% Вузли action_initial_access["<b>Дія</b> – Початковий Доступ"] class action_initial_access action technique_vs_code_ext["<b>Техніка</b> – T1176.002: Шкідливе розширення VS Code IDE<br/><b>Опис</b>: Зловмисник надає шкідливе розширення для Visual Studio Code, яке виконує код на системі жертви."] class technique_vs_code_ext technique technique_delay["<b>Техніка</b> – T1497.003: Затримка виконання<br/><b>Опис</b>: Шкідливе програмне забезпечення чекає певний період (наприклад, 15 хвилин) перед запуском свого корисного навантаження, щоб уникнути аналізу."] class technique_delay technique technique_decrypt["<b>Техніка</b> – T1027.009 / T1027.004: Розшифровка AESu2011256u2011CBC навантаження<br/><b>Опис</b>: Зашифроване навантаження розшифровується в пам’яті з використанням AESu2011CBC з 256-бітним ключем."] class technique_decrypt technique technique_c2_retrieve["<b>Техніка</b> – T1573.001: Отримання кінцевої точки від блокчейна Solana<br/><b>Опис</b>: Адреса C2 сервера зберігається на публічному блокчейні та захоплюється шкідливим програмним забезпеченням."] class technique_c2_retrieve technique technique_c2_fetch["<b>Техніка</b> – T1048.003: Передача даних через незашифрований протокол<br/><b>Опис</b>: Шкідливе програмне забезпечення зв’язується з кінцевою точкою C2 за допомогою незашифрованого протоколу (наприклад, HTTP)."] class technique_c2_fetch technique technique_persistence_agent["<b>Техніка</b> – T1543.001: Встановити LaunchAgent<br/><b>Опис</b>: Плешт LaunchAgent розміщується в каталозі LaunchAgents користувача для стійкості."] class technique_persistence_agent technique technique_persistence_daemon["<b>Техніка</b> – T1543.004: Встановити LaunchDaemon<br/><b>Опис</b>: Плешт LaunchDaemon розміщується в каталозі системних LaunchDaemons для стійкості."] class technique_persistence_daemon technique technique_modify_plist["<b>Техніка</b> – T1647: Зміна файлу PLIST<br/><b>Опис</b>: Зловмисник редагує plist для зміни поведінки запуску або додавання шкідливих команд."] class technique_modify_plist technique technique_dump_keychain["<b>Техніка</b> – T1555.001 / T1555.002: Експорт Keychain<br/><b>Опис</b>: Вилучення облікових даних з Keychain для macOS."] class technique_dump_keychain technique technique_steal_keys["<b>Техніка</b> – T1552.001 / T1552.004: Викрадення приватних ключів і токенів<br/><b>Опис</b>: Вилучення приватних криптовалютних ключів і токенів для аутентифікації."] class technique_steal_keys technique technique_stage_data["<b>Техніка</b> – T1074: Стадіювання даних<br/><b>Опис</b>: Зібрані файли копіюються в /tmp/ijewf для подальшої ексфільтрації."] class technique_stage_data technique technique_archive["<b>Техніка</b> – T1560.001 / T1560.003: Архівування зібраних даних<br/><b>Опис</b>: Дані стискаються у формат архіву (наприклад, zip)."] class technique_archive technique technique_exfil["<b>Техніка</b> – T1048.003: Ексфільтрація через незашифрований неC2-канал<br/><b>Опис</b>: Стадійований архів передається через незашифрований канал, не пов’язаний з основним C2."] class technique_exfil technique technique_priv_esc["<b>Техніка</b> – T1548.006: Маніпуляція TCC<br/><b>Опис</b>: База даних прозорості, згоди та контролю (TCC) macOS змінюється для отримання більш високих привілеїв."] class technique_priv_esc technique technique_impact["<b>Техніка</b> – T1496.002: Замінити Ledger Live / Trezor Suite<br/><b>Опис</b>: Законні криптовалютні гаманці замінюються троянізованими версіями для захоплення активів користувача."] class technique_impact technique %% Підключення action_initial_access –>|використовує| technique_vs_code_ext technique_vs_code_ext –>|спрацьовує| technique_delay technique_delay –>|призводить до| technique_decrypt technique_decrypt –>|встановлює| technique_c2_retrieve technique_c2_retrieve –>|зв’язується з| technique_c2_fetch technique_c2_fetch –>|встановлює| technique_persistence_agent technique_c2_fetch –>|встановлює| technique_persistence_daemon technique_persistence_agent –>|змінює| technique_modify_plist technique_persistence_daemon –>|змінює| technique_modify_plist technique_modify_plist –>|вмикає| technique_dump_keychain technique_dump_keychain –>|вмикає| technique_steal_keys technique_steal_keys –>|зберігає в| technique_stage_data technique_stage_data –>|архівує| technique_archive technique_archive –>|ексфільтрує через| technique_exfil technique_exfil –>|сприяє| technique_priv_esc technique_priv_esc –>|вмикає| technique_impact "
Потік атаки
Виявлення
Можлива спроба виявлення паролів браузера MacOS (через командний рядок)
Переглянути
Атоми IOC (SourceIP) для виявлення: GlassWorm переходить на Mac: Нова інфраструктура, нові трюки
Переглянути
Атоми IOC (DestinationIP) для виявлення: GlassWorm переходить на Mac: Нова інфраструктура, нові трюки
Переглянути
Атоми IOC (Електронні адреси) для виявлення: GlassWorm переходить на Mac: Нова інфраструктура, нові трюки
Переглянути
Виявлення доступу до Keychain macOS від GlassWorm [створення процесу Linux]
Переглянути
Можливе виконання AppleScript для доступу до Keychain на macOS [створення процесу Linux]
Переглянути
Виявлення комунікації C2 з блокчейном Solana за допомогою GlassWorm [проксі]
Переглянути
Виконання симуляції
Передумова: перевірка відео та базових налаштувань телеметрії повинна бути успішною.
Обґрунтування: Цей розділ деталізує точне виконання техніки супротивника (TTP), призначеної для спрацьовування правила виявлення. Команди та наратив повинні безпосередньо відображати визначені TTP та прагнути генерувати точну телеметрію, очікувану логікою виявлення. Абстрактні або не пов’язані приклади призведуть до неналежної діагностики.
-
Нападний нарис та команди:
Атака, що вже скомпрометувала обліковий запис користувача macOS з низькими привілеями, бажає здобути пароль облікового запису служби, збережений у Keychain під міткоюpass_users_for_script. Щоб уникнути розгортання окремого виконуваного файлу, нападник пише однорядковий AppleScript, який викликає вбудованийінструмент безпекичерезdo shell script. Скрипт виконується безпосередньо в сесії користувача, створюючи подію створення процесу з точною командною лінією, на яку реагує правило Sigma.# Створити тестовий елемент keychain (тільки для демонстрації; справжній нападник буде цілити на існуючий елемент) security add-generic-password -a attacker -s pass_users_for_script -w SuperSecret123 # Виконати AppleScript, що читає пароль osascript -e 'do shell script "security find-generic-password -s '''pass_users_for_script''' -w"' -
Скрипт тестування регресії:
#!/usr/bin/env bash set -euo pipefail # Крок 1: Переконайтеся, що цільовий запис keychain існує (ідемпотентний) if ! security find-generic-password -s pass_users_for_script -w >/dev/null 2>&1; then security add-generic-password -a attacker -s pass_users_for_script -w SuperSecret123 fi # Крок 2: Виконати AppleScript, що спрацьовує правило виявлення echo "[+] Виконання AppleScript для зчитування запису keychain..." osascript -e 'do shell script "security find-generic-password -s '''pass_users_for_script''' -w"' -
Команди очищення:
# Видалити тестовий елемент keychain, щоб залишити систему чистою security delete-generic-password -s pass_users_for_script echo "[+] Очищення завершено: запис тестового елемента keychain видалено."