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

08 Apr 2026 14:50

Викрадальники для MacOS, виявлено: на що слід звертати увагу захисникам

Author Photo
Ruslan Mikhalov Керівник досліджень загроз у SOC Prime linkedin icon Стежити
Викрадальники для MacOS, виявлено: на що слід звертати увагу захисникам
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

Стаття профілює крадія облікових даних для macOS, пов’язаного з екосистемою AMOS, який доставляється через фальшиві сторінки оновлення програмного забезпечення. Жертви змушені запускати ланцюжок команд, який завантажує допоміжний двійковий файл з rvdownloads.com, виконує його через zsh і запускає зашифрований AppleScript для збору паролів, артефактів браузера, розширень криптовалютного гаманця, нотаток Apple і локальних файлів. Постійність забезпечується за допомогою шкідливого LaunchAgent plist, який маскується під справжній компонент Spotlight. Стаття також ділиться спостереженими IOC та кроками аналізу для перевірки потоку зараження.

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

Дослідник захопив початковий однорядковий curl, що отримав URL-адресу, закодовану в Base64, декодував її і спостерігав за подальшим завантаженням допоміжного двійкового файлу за допомогою curl. Допоміжний виконання виконав два скрипти AppleScript: один для виявлення ВМ і інший, який займався збором і ексфільтрацією. Крадій витягнув облікові дані з Keychain, спробував закрити інструменти безпеки, зібрав дані браузера і гаманця, скопіював нотатки Apple, зібрав результати в архів і завантажив їх на laislivon.com. Постійність була створена за допомогою встановлення LaunchAgent, який знову запускає повний ланцюг сценаріїв при вході користувача.

Пом’якшення

Зменшіть вплив, заблокувавши виявлені шкідливі домени, обмеживши виконання непідписаних сценаріїв і спостерігаючи за незвичайною активністю loadctl, пов’язаною з новими LaunchAgent. Використовуйте контроль кінцевих точок, які відзначають підозрілі поєднання curl і osascript, особливо під час завантаження вмісту з незнайомих хостів. За можливості обмежте привілейоване виконання та застосовуйте білі списки додатків, щоб запобігти запуску ненадійних допоміжних двійкових файлів.

Реакція

Якщо виявлено індикатори, ізолюйте кінцеву точку, завершите активні зловмисні процеси, видаліть допоміжний двійковий файл і видаліть шахрайський LaunchAgent plist. Скиньте потенційно скомпрометовані облікові дані та токени, приділяючи пріоритет уваги секретам Keychain і даним, збереженим у браузері. Зберіть судово-медичні артефакти для перелічених IOC, перегляньте журнали системи на предмет виконання curl/osascript і стежте за повторними викликами або спробами завантаження, пов’язаними з тією ж інфраструктурою C2.

"graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef technique fill:#ffedcc classDef process fill:#e2e2ff %% Nodes u2013 Actions action_initial_access["<b>Action</b> – <b>T1219 Інструменти віддаленого доступу</b><br/>Виконати команду curl, що декодує base64 URL і запускає оболонку zsh для завантаження вторинного корисного навантаження з rvdownloads.com/frozenfix/update."] class action_initial_access action action_obfuscation["<b>Action</b> – <b>T1027 Заплутування</b><br/>Допоміжний скрипт приховує рядки, використовуючи Base64, спеціальні арифметичні дії, двійкове підбиття та вставку небажаного коду."] class action_obfuscation action action_sandbox_evasion["<b>Action</b> – <b>T1497.002 Уникнення пісочниці віртуалізації</b><br/>AppleScript перевіряє вихід системного профіля на показники ВМ, такі як QEMU, VMware і KVM."] class action_sandbox_evasion action action_credential_harvest["<b>Action</b> – <b>T1056.002 Захоплення введення через GUI</b><br/>Фальшивий осаскрипт запрошує адміністраторський пароль, перевіряє його за допомогою Keychain і зберігає в ~/.pwd."] class action_credential_harvest action action_defense_evasion["<b>Action</b> – <b>T1027.005 Видалення індикаторів з інструментів</b><br/>Зловмисне ПЗ завершує Little Snitch і BlockBlock та вигружає їхні агенти запуску."] class action_defense_evasion action action_browser_theft["<b>Action</b> – <b>T1217 Виявлення інформації про браузер</b><br/>Перераховує профілі Chrome, Brave, Edge, Opera і Firefox та витягує дані входу, куки, автозаповнення та дані розширень, націлюючись на розширення криптогаманців."] class action_browser_theft action action_notes_theft["<b>Action</b> – Крадіжка даних Apple Notes<br/>Копіює базу даних SQLite Notes та пов’язані з нею медіафайли до відповідної папки."] class action_notes_theft action action_data_staging["<b>Action</b> – <b>T1132 Кодування даних</b><br/>Копіює зібрані файли в /tmp/stolen_data і стискає їх у archive.tar.gz."] class action_data_staging action action_c2["<b>Action</b> – <b>T1102 Веб-служба</b><br/>Завантажує стиснутий архів через curl POST на https://laislivon.com/upload."] class action_c2 action action_persistence["<b>Action</b> – <b>T1543.001 Постійність агента запуску</b><br/>Записує файл LaunchAgent plist (com.apple.mdworker.plist) до ~/Library/LaunchAgents і завантажує його через launchctl."] class action_persistence action action_execution["<b>Action</b> – <b>T1127.003 Виконання через проксі утиліти довіреного розробника</b><br/>Виконує зловмисний AppleScript кожного разу при вході за допомогою osascript, використовуючи утиліти довіреного розробника."] class action_execution action %% Nodes u2013 Tools tool_curl["<b>Tool</b> – <b>Назва</b>: curl<br/><b>Опис</b>: Передає дані з віддалених серверів, використовуючи синтаксис URL."] class tool_curl tool tool_osascript["<b>Tool</b> – <b>Назва</b>: osascript<br/><b>Опис</b>: Виконує скрипти AppleScript або JavaScript для автоматизації на macOS."] class tool_osascript tool tool_launchctl["<b>Tool</b> – <b>Назва</b>: launchctl<br/><b>Опис</b>: Керує агентами запуску та демонами на macOS."] class tool_launchctl tool %% Nodes u2013 Techniques (additional detail) tech_T1027_008["<b>Technique</b> – T1027.008 Алгоритми без символів<br/>Корисні навантаження позбавлені символів та налагоджувальної інформації, щоб ускладнити аналіз."] class tech_T1027_008 technique tech_T1027_001["<b>Technique</b> – T1027.001 Двійкове підсинювання<br/>Додає нефункціональні байти до двійкових файлів, щоб змінити розмір і хеш."] class tech_T1027_001 technique tech_T1027_007["<b>Technique</b> – T1027.007 Динамічна резолюція API<br/>Розв’язує API виклики під час виконання, щоб уникнути статичного детекту."] class tech_T1027_007 technique tech_T1027_016["<b>Technique</b> – T1027.016 Вставка зайвого коду<br/>Вставляє нерелевантні інструкції, щоб заплутати інструменти аналізу."] class tech_T1027_016 technique tech_T1140["<b>Technique</b> – T1140 Розшифрування/Декодування файлів або інформації<br/>Розшифровує або декодує дані перед виконанням."] class tech_T1140 technique tech_T1555_001["<b>Technique</b> – T1555.001 Облікові дані з сховищ паролів: Keychain<br/>Витягує збережені облікові дані з Keychain macOS."] class tech_T1555_001 technique tech_T1555_002["<b>Technique</b> – T1555.002 Облікові дані з сховищ паролів: Пам’ять Securityd<br/>Зчитує облікові дані з пам’яті демона безпеки."] class tech_T1555_002 technique tech_T1555_003["<b>Technique</b> – T1555.003 Облікові дані з веб-браузерів<br/>Краде збережені паролі з браузерів."] class tech_T1555_003 technique tech_T1606_001["<b>Technique</b> – T1606.001 Підробка веб-облікових даних: Веб-куки<br/>Збирає куки браузера для викрадення сесії."] class tech_T1606_001 technique tech_T1132_001["<b>Technique</b> – T1132.001 Стандартне кодування<br/>Використовує стандартне кодування (наприклад, gzip) для стиснення даних."] class tech_T1132_001 technique tech_T1546_009["<b>Technique</b> – T1546.009 Виконання у випадку події: AppCert DLLs<br/>Тригерить виконання через довірені системні події."] class tech_T1546_009 technique %% Flow Connections action_initial_access –>|використовує| tool_curl tool_curl –>|завантажує| action_obfuscation action_obfuscation –>|застосовує| tech_T1027_008 action_obfuscation –>|застосовує| tech_T1027_001 action_obfuscation –>|застосовує| tech_T1027_007 action_obfuscation –>|застосовує| tech_T1027_016 action_obfuscation –>|застосовує| tech_T1140 action_obfuscation –>|призводить до| action_sandbox_evasion action_sandbox_evasion –>|перевіряє| tech_T1497_002 action_sandbox_evasion –>|призводить до| action_credential_harvest action_credential_harvest –>|використовує| tool_osascript action_credential_harvest –>|захоплює| tech_T1056_002 action_credential_harvest –>|витягує| tech_T1555_001 action_credential_harvest –>|витягує| tech_T1555_002 action_credential_harvest –>|призводить до| action_defense_evasion action_defense_evasion –>|видаляє| tech_T1027_005 action_defense_evasion –>|призводить до| action_browser_theft action_browser_theft –>|виявляє| tech_T1217 action_browser_theft –>|краде| tech_T1555_003 action_browser_theft –>|збирає| tech_T1606_001 action_browser_theft –>|призводить до| action_notes_theft action_notes_theft –>|зберігає у| action_data_staging action_data_staging –>|стискає за допомогою| tech_T1132 action_data_staging –>|використовує кодування| tech_T1132_001 action_data_staging –>|призводить до| action_c2 action_c2 –>|завантажує через| tool_curl action_c2 –>|використовує| tech_T1102 action_c2 –>|призводить до| action_persistence action_persistence –>|створює| tech_T1543_001 action_persistence –>|завантажує за допомогою| tool_launchctl action_persistence –>|призводить до| action_execution action_execution –>|виконує за допомогою| tool_osascript action_execution –>|використовує| tech_T1127_003 action_execution –>|тригериться| tech_T1546_009 "

Потік атаки

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

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

Обґрунтування: Цей розділ детально описує точне виконання техніки противника (TTP), призначеної для тригеру правила виявлення. Команди та наратив МАЄ відображати вказані TTP і ставити за мету генерувати точну телеметрію, очікувану логікою виявлення.

  • Наратив та команди атаки:

    Атакуючий, який отримав доступ на рівні користувача на машині жертви, хоче встановити стійкість і ексфільтрувати зібрані облікові дані.

    1. Стійкість: Атакуючий записує шкідливий LaunchAgent plist до стандартного каталогу macOS LaunchAgents (змодельовано на колекторі Linux через шлях до домашньої директорії).
    2. Збір даних: Чутливі файли копіюються в папку для підготовки.
    3. Підготовка до ексфільтрації: Підготовлені дані архівуються в /tmp/archive.tar.gz використовуючи рідний tar утиліту.
    4. Активація: Атакуючий завантажує LaunchAgent за допомогою launchctl, що змушує зловмисний код виконуватись при кожному вході користувача.

    Точні командні рядки відповідають рядкам, які спостерігаються за правилом, забезпечуючи активацію сповіщення.

  • Скрипт регресійного тесту:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # 1. Створити фіктивний "вкрадений" файл
    echo "password123" > /tmp/credentials.txt
    
    # 2. Створити шкідливий плейліст LaunchAgent (змодельоване місце розташування)
    PLIST_PATH="$HOME/Library/LaunchAgents/com.apple.mdworker.plist"
    mkdir -p "$(dirname "$PLIST_PATH")"
    cat > "$PLIST_PATH" <<EOF
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Label</key><string>com.apple.mdworker</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/bin/cat</string>
            <string>/tmp/credentials.txt</string>
        </array>
        <key>RunAtLoad</key><true/>
    </dict>
    </plist>
    EOF
    
    # 3. Архівувати "вкрадені" дані (точний шлях, який спостерігається за правилом)
    tar -czf /tmp/archive.tar.gz -C /tmp credentials.txt
    
    # 4. Завантажити LaunchAgent (це генерує командний рядок, що спостерігається за правилом)
    launchctl load "$PLIST_PATH"
    
    echo "Симуляція завершена – виявлення мало бути активовано."
  • Команди очищення:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # Вивантажити LaunchAgent
    launchctl unload "$HOME/Library/LaunchAgents/com.apple.mdworker.plist" || true
    
    # Видалити файли
    rm -f "$HOME/Library/LaunchAgents/com.apple.mdworker.plist"
    rm -f /tmp/archive.tar.gz
    rm -f /tmp/credentials.txt
    
    echo "Очищення завершено."