SOC Prime Bias: Високий

20 May 2026 22:10 UTC

Як Storm-2949 перетворив скомпрометовану ідентичність у хмарне порушення

Author Photo
SOC Prime Team linkedin icon Стежити
Як Storm-2949 перетворив скомпрометовану ідентичність у хмарне порушення
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Резюме

Storm-2949 використовував соціальну інженерію та зловживання самостійно виконуваним скиданням пароля для компрометації облікових записів Microsoft Entra ID. Після отримання привілейованого доступу загрозливий актор використовував дії з управління Azure для доступу до Сервісів додатків, Key Vaults, облікових записів зберігання та SQL баз даних. Дані були ексфільтровані з Microsoft 365, сховищ Azure та інших хмарних ресурсів. Пізніше вторгнення прогресувало до розгортання інструменту віддаленого доступу ScreenConnect на віртуальних машинах для подальшої розвідки та крадіжки облікових даних.

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

Аналітики Microsoft спостерігали, як нападники перелічують користувачів та програми за допомогою Microsoft Graph API з допомогою користувацьких інструментів Python. Вони отримували профілі публікацій з Azure App Services, вилучали секрети з Key Vaults, змінювали правила брандмауера та використовували розширення VMAccess для створення облікових записів локального адміністратора на віртуальних машинах. На пізньому етапі PowerShell скрипт встановлював ScreenConnect, очищував журнали та маскував сервіси, щоб зменшити видимість. Розслідування зв’язало цю активність з трьома IP-адресами, які контролюються нападниками.

Захист

Організації повинні активувати MFA та вимагати аутентифікацію, стійку до фішингу, для привілейованих облікових записів. Дозволи Azure RBAC мають бути суворо обмежені та контролюватися, особливо доступ рівня Owner до Key Vaults та App Services. Непотрібні розширення Azure VM мають бути вимкнені, а журнали мають бути активовані для Run Command та VMAccess активності. Microsoft Defender for Cloud та Defender for Endpoint також повинні бути активовані з захистом від втручання та блокуючим режимом.

Відповідь

Захисники повинні негайно заблокувати визначені шкідливі IP-адреси та відкликати скомпрометовані облікові дані. Паролі та реєстрації MFA для уражених облікових записів повинні бути скинуті, і всі секрети, що зберігаються в Key Vaults, мають бути обернуті. Команди безпеки також повинні провести повний перегляд призначень Azure RBAC та видалити надмірні привілеї. Правила виявлення мають бути оновлені, щоб визначати підозрілі запити профілів публікації, доступ до секретів Key Vault та неочікувану активність розширень VM.

graph TB classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef operator fill:#ff9900 action_phishing[“<b>Дія</b> – <b>T1566 Фішинг</b><br/><b>Опис</b>: Зловмисник надсилав цільові фішингові повідомлення, використовуючи механізм скидання пароля самообслуговування для того, щоб змусити користувачів підтверджувати MFA та розкривати дійсні облікові дані.”] class action_phishing action action_valid_accounts[“<b>Дія</b> – <b>T1078 Дійсні Облікові Записи</b><br/><b>Опис</b>: Викрадені облікові дані використовувалися для входу в Microsoft Entra ID та підписки Azure.”] class action_valid_accounts action action_account_manipulation[“<b>Дія</b> – <b>T1098 Маніпуляція Обліковими Записами</b><br/><b>Опис</b>: Зловмисник скидав паролі, видаляв наявні фактори MFA та реєстрував шкідливий автентифікатор для закріплення доступу.”] class action_account_manipulation action action_cloud_role_add[“<b>Дія</b> – <b>T1098.003 Додаткові Хмарні Ролі</b><br/><b>Опис</b>: До скомпрометованих облікових записів були додані привілейовані ролі Azure RBAC.”] class action_cloud_role_add action action_cloud_account_discovery[“<b>Дія</b> – <b>T1087.004 Розвідка Хмарних Облікових Записів</b><br/><b>Опис</b>: Microsoft Graph API використовувався для переліку користувачів, застосунків і service principal.”] class action_cloud_account_discovery action action_cloud_group_discovery[“<b>Дія</b> – <b>T1069.003 Розвідка Хмарних Груп</b><br/><b>Опис</b>: Було перелічено групи та ролі для визначення привілейованих членів.”] class action_cloud_group_discovery action action_cloud_service_discovery[“<b>Дія</b> – <b>T1526 Розвідка Хмарних Сервісів</b><br/><b>Опис</b>: Перелічено сервіси Azure (App Service, Key Vault, Storage, SQL).”] class action_cloud_service_discovery action action_storage_object_discovery[“<b>Дія</b> – <b>T1619 Розвідка Об’єктів Хмарного Сховища</b><br/><b>Опис</b>: Перелічено blob-контейнери Azure Storage.”] class action_storage_object_discovery action action_keyvault_secret_access[“<b>Дія</b> – <b>T1555.006 Отримання Даних із Сховищ Паролів</b><br/><b>Опис</b>: Секрети були витягнуті з Azure Key Vault.”] class action_keyvault_secret_access action action_remote_services[“<b>Дія</b> – <b>T1021.007 Віддалені Хмарні Сервіси</b><br/><b>Опис</b>: Використано дійсні облікові дані для доступу до ресурсів Azure.”] class action_remote_services action tool_screenconnect[“<b>Інструмент</b> – <b>Назва</b>: ScreenConnect (ConnectWise Control)<br/><b>Опис</b>: Програмне забезпечення віддаленого доступу, встановлене на скомпрометованих віртуальних машинах.”] class tool_screenconnect tool action_automated_collection[“<b>Дія</b> – <b>T1119 Автоматизоване Збирання</b><br/><b>Опис</b>: Python-скрипти завантажували великі обсяги файлів з OneDrive, SharePoint та Azure Storage.”] class action_automated_collection action action_scripting_interpreter[“<b>Дія</b> – <b>T1059 Інтерпретатор Команд і Скриптів</b><br/><b>Опис</b>: Виконання скриптів через розширення Azure VM.”] class action_scripting_interpreter action action_indicator_removal[“<b>Дія</b> – <b>T1070 Видалення Ознак</b><br/><b>Опис</b>: Журнали подій Windows та тимчасові файли були видалені.”] class action_indicator_removal action action_file_deletion[“<b>Дія</b> – <b>T1070.004 Видалення Файлів</b><br/><b>Опис</b>: Артефакти були видалені з скомпрометованих VM.”] class action_file_deletion action action_obfuscation[“<b>Дія</b> – <b>T1027.005 Обфускація Інформації</b><br/><b>Опис</b>: Інструменти безпеки були змінені або обфусковані.”] class action_obfuscation action action_defeat_defenses[“<b>Дія</b> – <b>T1562.008 Уникнення Захисту</b><br/><b>Опис</b>: Microsoft Defender був вимкнений, а журнали хмари змінені.”] class action_defeat_defenses action action_phishing –>|призводить_до| action_valid_accounts action_valid_accounts –>|призводить_до| action_account_manipulation action_account_manipulation –>|призводить_до| action_cloud_role_add action_cloud_role_add –>|призводить_до| action_cloud_account_discovery action_cloud_account_discovery –>|призводить_до| action_cloud_group_discovery action_cloud_group_discovery –>|призводить_до| action_cloud_service_discovery action_cloud_service_discovery –>|призводить_до| action_storage_object_discovery action_storage_object_discovery –>|призводить_до| action_keyvault_secret_access action_keyvault_secret_access –>|призводить_до| action_remote_services action_remote_services –>|використовує| tool_screenconnect tool_screenconnect –>|дозволяє| action_automated_collection action_automated_collection –>|використовує| action_scripting_interpreter action_scripting_interpreter –>|дозволяє| action_indicator_removal action_indicator_removal –>|включає| action_file_deletion action_file_deletion –>|включає| action_obfuscation action_obfuscation –>|підтримує| action_defeat_defenses class action_phishing,action_valid_accounts,action_account_manipulation,action_cloud_role_add,action_cloud_account_discovery,action_cloud_group_discovery,action_cloud_service_discovery,action_storage_object_discovery,action_keyvault_secret_access,action_remote_services,action_automated_collection,action_scripting_interpreter,action_indicator_removal,action_file_deletion,action_obfuscation,action_defeat_defenses action class tool_screenconnect tool

Потік атак

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

Передумова: Перевірки телеметрії та базових даних повинні бути успішними.

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

    Супротивник, який отримав дійсний обліковий запис Azure AD (або стандартний об‘єкт обслуговування), хоче ексфільтрувати вихідний код додатка та знімки бази даних. Атакувальник виконує наступні кроки виключно за допомогою Azure CLI, генеруючи точні назва операції події, які відстежує правило:

    1. Публікація XML конфігурації веб-додатка – вилучає конфігурацію веб-додатка (включаючи облікові дані для розгортання).
    2. Створіть новий обліковий запис зберігання – забезпечує контейнер для етапу ексфільтрованих даних.
    3. Додайте правило брандмауера до SQL-сервера – відкриває сервер для діапазону IP-адрес атакуючого, що дозволяє пряме копіювання даних.

    Кожен крок створює запис у журналі активності з назва операції відповідає списку дозволених правил, що призводить до спрацьовування виявлення.

  • Скрипт тесту на регресію:

    #!/usr/bin/env bash
    # Передумова: az CLI увійшов у систему з компрометованим/дійсним Azure AD об'єктом.
    set -euo pipefail
    
    # Змінні - змініть за потребою для тестового аренда
    RG="test-rg-$(date +%s)"
    WEBAPP="test-webapp-$RANDOM"
    STORAGE="teststorage$RANDOM"
    LOCATION="eastus"
    SQLSERVER="testsql$RANDOM"
    MY_IP=$(curl -s https://api.ipify.org)
    
    echo "=== Створити ресурсну групу ==="
    az group create --name "$RG" --location "$LOCATION"
    
    echo "=== Розгорніть тестовий веб-додаток ==="
    az appservice plan create --name "${WEBAPP}Plan" --resource-group "$RG" --sku B1 --is-linux
    az webapp create --resource-group "$RG" --plan "${WEBAPP}Plan" --name "$WEBAPP"
    
    echo "=== Публікація XML конфігурації (тригер виявлення) ==="
    az webapp config backup create 
        --resource-group "$RG" 
        --webapp-name "$WEBAPP" 
        --backup-name "xmlbackup-$(date +%s)" 
        --output none
    
    echo "=== Створити обліковий запис зберігання (тригер виявлення) ==="
    az storage account create 
        --name "$STORAGE" 
        --resource-group "$RG" 
        --location "$LOCATION" 
        --sku Standard_LRS 
        --kind StorageV2 
        --output none
    
    echo "=== Створити SQL-сервер (потрібно для правила брандмауера) ==="
    az sql server create 
        --name "$SQLSERVER" 
        --resource-group "$RG" 
        --location "$LOCATION" 
        --admin-user "sqladmin" 
        --admin-password "P@ssw0rd1234!" 
        --output none
    
    echo "=== Додати правило брандмауера до SQL-сервера (тригер виявлення) ==="
    az sql server firewall-rule create 
        --resource-group "$RG" 
        --server "$SQLSERVER" 
        --name "AllowMyIP" 
        --start-ip-address "$MY_IP" 
        --end-ip-address "$MY_IP" 
        --output none
    
    echo "=== Симуляція завершена. Перевірте Azure Sentinel для сигналів тривоги. ==="
  • Команди для очищення:

    #!/usr/bin/env bash
    set -euo pipefail
    
    # Змінні повинні відповідати тим, що використовувалися в сценарії симуляції
    RG="test-rg-..."
    # Якщо ви зберегли точні назви з попереднього виконання, замініть відповідно заповнювачі.
    
    echo "=== Видалення ресурсної групи і всіх містять ресурсів ==="
    az group delete --name "$RG" --yes --no-wait
    echo "Очищення розпочато."