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

16 Apr 2026 16:46

Кампанія «Safari» від Північної Кореї доставляє RAT

Author Photo
Ruslan Mikhalov Керівник досліджень загроз у SOC Prime linkedin icon Стежити
Кампанія «Safari» від Північної Кореї доставляє RAT
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

У статті розглядається нова шкідлива програма для macOS під назвою Mach-O Man, яка пов’язана з відомим підрозділом Chollima групи Lazarus. Шкідливе програмне забезпечення поширюється через скомпрометовані акаунти Telegram і фальшиві запрошення на зустрічі, які переконують цілі запускати команду ClickFix на своїх пристроях. Інструментарій включає кілька виконуваних Mach-O файлів, призначених для збору деталей про хост, підтримання стійкості та крадіжки облікових даних і даних браузера, при цьому дані передаються через Telegram. Кампанія, схоже, зосереджена на біржах криптовалют та інших організаціях у фінансовому секторі.

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

Дослідники виявили бінарний файл інсценування з назвою teamsSDK.bin який було завантажено та виконано через послідовність шкідливих команд. Додаткові компоненти, включаючи D1yCPUyk.bin, minst2.bin, і macrasv2, потім використовувалися для інвентаризації системи, створення LaunchAgent для стійкості та збору розширень браузера, даних keychain і файлів cookie. Комунікація командно-контрольного сервера покладалася на сервер HTTP на основі Go, що відкрите кінцеву точку без автентифікації /info і витік токена API бота Telegram. Слідчі також виявили сервіси віддаленого доступу, такі як RDP, WinRM і Chrome Remote Desktop, що відкрили на хості C2.

Зменшення ризиків

Користувачі повинні уникати взаємодії з небажаними посиланнями на зустрічі та підтверджувати легітимність будь-яких термінальних команд, запропонованих під час несподіваних розмов. Організації повинні стежити за несанкціонованими LaunchAgents, вимагати підписання довіреним кодом для виконуваних файлів macOS і обмежувати виконання невідомих файлів. Захист мережі має блокувати вихідні з’єднання із підозрілими HTTP-серверами на основі Go і позначати трафік, що використовує агент Go-http-client юзер агент. Токени бота Telegram повинні бути захищені від розголосу, а сервіси віддаленого доступу повинні бути обмежені контролем доступу з мінімальними привілеями.

Реагування

Команди безпеки повинні виявляти виконання невідомих .bin файлів і стежити за створенням LaunchAgents під назвою com.onedrive.launcher. Також слід генерувати сповіщення про вихідні з’єднання з підозрілою інфраструктурою, що використовують Go-http-client агент, а також повторні POST-запити до /info кінцевих точок. Оборонці повинні стежити за несподіваною активністю API Telegram, пов’язаною з невідомими токенами ботів. Повний форенсік хосту повинен бути проведений для виявлення та видалення всіх шкідливих бінарних файлів, після чого слід скинути облікові дані для будь-яких облікових записів, які могли бути скомпрометовані.

"graph TB %% Class Definitions Section classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ffcc99 classDef process fill:#e6ffe6 classDef file fill:#ffe6cc classDef service fill:#e6e6ff %% Node Definitions initial_access_user_execution["<b>Action</b> – <b>T1204.001 Виконання користувачем</b><br/>Жертва клікає на шкідливий посилання “fix” на зустрічі в Telegram, яке запускає команду curl"] class initial_access_user_execution action tool_curl["<b>Tool</b> – <b>Name</b>: curl<br/><b>Description</b>: утиліта командного рядка для передачі даних з сервера або до сервера"] class tool_curl tool file_teamsSDK_bin["<b>File</b> – <b>Name</b>: teamsSDK.bin (Mach-O)<br/><b>Description</b>: Бінарний файл завантаження, скачаний і виконаний"] class file_teamsSDK_bin file process_curl_download["<b>Process</b> – Завантаження та виконання curl teamsSDK.bin"] class process_curl_download process malware_teamsSDK["<b>Malware</b> – <b>Name</b>: teamsSDK<br/><b>Description</b>: контактує з C2 після виконання"] class malware_teamsSDK malware service_go_http["<b>Service</b> – HTTP-сервер на основі Go<br/><b>Порт</b>: 80/443<br/><b>Кінцева точка</b>: /info (без автентифікації)"] class service_go_http service process_c2_communication["<b>Process</b> – Комунікує з C2 через HTTP POST на /info"] class process_c2_communication process file_minst2_bin["<b>File</b> – <b>Name</b>: minst2.bin"] class file_minst2_bin file process_install_launchagent["<b>Process</b> – Інсталяція plist LaunchAgent для стійкості"] class process_install_launchagent process malware_fake_onedrive["<b>Malware</b> – Фальшивий виконуваний файл “OneDrive”, який запускається при вході"] class malware_fake_onedrive malware tool_macrasv2["<b>Tool</b> – <b>Name</b>: macrasv2<br/><b>Опис</b>: вилучає записи Keychain, паролі браузера, файли cookie, розширення"] class tool_macrasv2 tool process_keychain_extraction["<b>Process</b> – Витягує дані Keychain macOS і дані браузера"] class process_keychain_extraction process action_discovery_system_info["<b>Action</b> – <b>T1082 Виявлення інформації про систему</b><br/>Збирає ID процесора, ім’я хоста, користувача, встановлені додатки"] class action_discovery_system_info action action_discovery_software["<b>Action</b> – <b>T1518 Виявлення ПЗ</b><br/>Перераховує встановлені браузери та розширення"] class action_discovery_software action service_telegram_bot["<b>Service</b> – Telegram Bot API<br/><b>Призначення</b>: Отримання ексфільтрованих облікових даних"] class service_telegram_bot service process_exfiltration["<b>Process</b> – Надсилає зібрані дані боту Telegram"] class process_exfiltration process action_content_injection["<b>Action</b> – <b>T1659 Інжекція контенту</b><br/>Без автентифікації /info кінцева точка дозволяє довільне завантаження файлів"] class action_content_injection action action_dynamic_resolution["<b>Action</b> – <b>T1568 Динамічне розв’язування</b><br/>Розв’язує домен C2 під час виконання"] class action_dynamic_resolution action %% З’єднання initial_access_user_execution –>|використовує| tool_curl tool_curl –>|завантажує| file_teamsSDK_bin file_teamsSDK_bin –>|виконаний| process_curl_download process_curl_download –>|запускає| malware_teamsSDK malware_teamsSDK –>|комунікує з| service_go_http service_go_http –>|отримує дані через| process_c2_communication process_c2_communication –>|тригерний| file_minst2_bin file_minst2_bin –>|інсталює| process_install_launchagent process_install_launchagent –>|створює| malware_fake_onedrive malware_fake_onedrive –>|виконується під час входу| action_discovery_system_info action_discovery_system_info –>|приводить до| action_discovery_software action_discovery_software –>|надає дані| tool_macrasv2 tool_macrasv2 –>|виконує| process_keychain_extraction process_keychain_extraction –>|надає дані| process_exfiltration process_exfiltration –>|надсилає до| service_telegram_bot malware_teamsSDK –>|дозволяє| action_content_injection action_content_injection –>|дозволяє| file_minst2_bin malware_teamsSDK –>|дозволяє| action_dynamic_resolution action_dynamic_resolution –>|розв’язує| service_go_http "

Потік атаки

Імітація виконання

Необхідна умова: перевірка телеметрії та базової конфігурації повинна пройти.

Аргументація: цей розділ детально описує точне виконання техніки супротивника (T1546.006 / T1587.001), призначеної для запуску правила виявлення. Команди відображають реалістичне розгортання «living-off-the-land» з бінарними файлами Mach-O Man.

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

    1. Атакувальник, який вже отримав доступ до хоста macOS, копіює чотири бінарних файли Mach-O Man з місця підготовки (/tmp/stage) у записувану директорію (/usr/local/bin).
    2. Бінарні файли робляться виконуваними і запускаються послідовно, щоб імітувати ініціалізацію комплексу, розвідку, стійкість та фази крадіжки облікових даних.
    3. Стійкість досягається шляхом запису плейлиста запуску демонів, що вказує на minst2.bin.
    # Крок 1 - Підготовка бінарних файлів (імітується копіюванням з папки тестових активів)
    mkdir -p /usr/local/bin/macho
    cp ./assets/teamsSDK.bin /usr/local/bin/macho/
    cp ./assets/D1YrHRTg.bin /usr/local/bin/macho/
    cp ./assets/minst2.bin   /usr/local/bin/macho/
    cp ./assets/macrasv2    /usr/local/bin/macho/
    
    # Крок 2 - Надання виконуваних прав
    chmod +x /usr/local/bin/macho/*.bin
    
    # Крок 3 - Виконання бінарних файлів інсценування та розвідки
    /usr/local/bin/macho/teamsSDK.bin &
    /usr/local/bin/macho/D1YrHRTg.bin &
    
    # Крок 4 - Встановлення стійкості (запуск демона) для minst2.bin
    cat <<'EOF' > /Library/LaunchDaemons/com.macho.minst2.plist
    <?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.macho.minst2</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/bin/macho/minst2.bin</string>
        </array>
        <key>RunAtLoad</key><true/>
    </dict>
    </plist>
    EOF
    sudo launchctl load -w /Library/LaunchDaemons/com.macho.minst2.plist
    
    # Крок 5 - Виконання компонента крадіжки облікових даних/ексфілу
    /usr/local/bin/macho/macrasv2 &
  • Скрипт тестування регресії: (самостійний bash-скрипт, що відтворює наведені вище кроки)

    #!/usr/bin/env bash
    set -euo pipefail
    
    # --- ЗМІННІ -------------------------------------------------
    BIN_DIR="/usr/local/bin/macho"
    ASSET_DIR="$(pwd)/assets"
    PLIST="/Library/LaunchDaemons/com.macho.minst2.plist"
    
    # --- ПОПЕРЕДНІЙ ЗАСІБ -------------------------------------------------
    if [[ $(id -u) -ne 0 ]]; then
      echo "Скрипт вимагає прав адміністратора для встановлення запуску демона. Перезапустіть із sudo."
      exit 1
    fi
    
    # --- РОЗГОРТАННЯ БІНАРНИХ ФАЙЛІВ -------------------------------------------
    mkdir -p "$BIN_DIR"
    for bin in teamsSDK.bin D1YrHRTg.bin minst2.bin macrasv2; do
      cp "$ASSET_DIR/$bin" "$BIN_DIR/$bin"
      chmod +x "$BIN_DIR/$bin"
    done
    
    # --- ВИКОНАННЯ ПІДГОТОВКИ ТА РОЗВІДКИ ------------------------------------
    "$BIN_DIR/teamsSDK.bin" &
    "$BIN_DIR/D1YrHRTg.bin" &
    
    # --- СТІЙКІСТЬ (запуск демона) -------------------------------
    cat <<'EOF' > "$PLIST"
    <?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.macho.minst2</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/bin/macho/minst2.bin</string>
        </array>
        <key>RunAtLoad</key><true/>
    </dict>
    </plist>
    EOF
    launchctl load -w "$PLIST"
    
    # --- ВИКОНАННЯ КОМПОНЕНТА КРАДІЖКИ ОБЛІКОВИХ ДАНИХ -----------------------
    "$BIN_DIR/macrasv2" &
    
    echo "Імітація виконана – зачекайте кілька секунд для появи телеметрії."
  • Команди очистки:

    #!/usr/bin/env bash
    set -euo pipefail
    
    BIN_DIR="/usr/local/bin/macho"
    PLIST="/Library/LaunchDaemons/com.macho.minst2.plist"
    
    # Від'єднати демон запуску
    if [[ -f "$PLIST" ]]; then
      sudo launchctl unload -w "$PLIST"
      sudo rm -f "$PLIST"
    fi
    
    # Зупинити будь-які залишкові шкідливі процеси
    pkill -f teamsSDK.bin || true
    pkill -f D1YrHRTg.bin || true
    pkill -f minst2.bin   || true
    pkill -f macrasv2    || true
    
    # Видалити бінарні файли
    sudo rm -rf "$BIN_DIR"
    
    echo "Очищення завершене."