Атака на ланцюг постачання на Axios завантажує шкідливу залежність з NPM
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
Зловмисний пакет npm, plain-crypto-js@4.2.1, був опублікований і пізніше підтриманий як транзитивна залежність через скомпрометовані випуски широко використовуваного клієнта JavaScript HTTP Axios. Пакет використовує скрипт після встановлення для доставки багатостадійного трояну віддаленого доступу, націленого на Windows, macOS та Linux. Атака, схоже, спиралася на довготривалі маркери npm, які дозволяли загрозливим акторам надсилати зловмисні версії поза звичайним процесом випуску проекту. Виявлення пошкодженої залежності на ранньому етапі може зупинити RAT до виконання на уражених системах.
Розслідування
Дослідження Socket провели статичний аналіз setup.js дропера і декодували закодовані рядки, щоб виявити домен C2, логіку доставки навантаження та націлені шляхи файлової системи. Дослідники виявили три скомпрометовані версії Axios і два додаткові пакети npm, які містили той самий зловмисний код. Вони також вийняли мережеві індикатори, шляхи файлів і рядки користувацьких агентів, які можна використовувати для створення правил виявлення.
Пом’якшення
Організації повинні анулювати будь-які довготривалі маркери npm і змінити облікові дані для всіх потенційно уражених облікових записів. Скомпрометовані версії Axios і будь-які пакети, що залежать від plain-crypto-js@4.2.1 повинні бути негайно видалені або знижені. Команди також повинні перевірити lockfiles, CI/CD конвеєри та заходи безпеки ланцюга поставок програмного забезпечення, щоб ідентифікувати несанкціоновану публічну активність та зменшити ризик майбутнього компрометації пакетів.
Реакція
Команди безпеки повинні моніторити журнали установки npm на предмет згадок про plain-crypto-js@4.2.1 і уражені версії Axios. Повинні бути створені правила виявлення для виконання гачка postinstall, доступу до мережі на sfrclak.com, і зловмисного рядка користувацького агента. Якщо компрометація підтверджена, уражені системи повинні бути поміщені в карантин, зібрана летуча пам’ять для аналізу, а хост перевстановлений, якщо RAT виявлено.
Потік атаки
Виявлення
Підозрілі місцезнаходження та назви MacOS – Plist (через file_event)
Перегляд
Підозрілі дочірні процеси NodeJS [Windows] (через cmdline)
Перегляд
Віддалене завантаження / завантаження файлів через стандартні інструменти (через cmdline)
Перегляд
Макос Підозрілі зміни дозволів на файли в папці Tmp (через cmdline)
Перегляд
Підозріле використання CURL (через cmdline)
Перегляд
Можливе виконання за допомогою chmod та nohup в одній команді (через cmdline)
Перегляд
Завантаження до підозрілих папок (через cmdline)
Перегляд
LOLBAS WScript / CScript (через process_creation)
Перегляд
Можливість виконання через приховані командні рядки PowerShell (через cmdline)
Перегляд
Використання Nohup (через cmdline)
Перегляд
IOC (SourceIP) для виявлення: Атака на ланцюг поставок в Axios тягне зловмисну залежність з npm
Перегляд
IOC (DestinationIP) для виявлення: Атака на ланцюг поставок в Axios тягне зловмисну залежність з npm
Перегляд
IOC (Emails) для виявлення: Атака на ланцюг поставок в Axios тягне зловмисну залежність з npm
Перегляд
Евразійська тактика PowerShell і VBScript в атаці на ланцюг поставок [Створення процесу Windows]
Перегляд
Виявлення виконання зловмисного гачка postinstall пакету npm [Створення процесу на Linux]
Перегляд
Виявлення зловмисного сценарію Python і тимчасового файлу в атаці на ланцюг поставок на Linux [Подія файлу Linux]
Перегляд
Перейменований термінал Windows та самовидалювана VBScript виявлені [Подія файлу Windows]
Перегляд
Виконання скрипту PowerShell з прихованими і обхідними прапорами [Windows Powershell]
Перегляд
Виконання моделювання
Передумова: Телеметрія та передполітна перевірка базових ліній повинні бути успішно завершені.
Обґрунтування: Цей розділ розкриває точне виконання техніки супротивника (TTP), призначеної для спрацьовування правила виявлення. Команди і наратив повинні прямо відображати ідентифіковані TTPs і прагнути згенерувати саме ту телеметрію, яку очікує логіка виявлення.
-
Опис атаки і команди:
Нападник, який отримав обмежені привілеї користувача на скомпрометованій робочій станції, бажає завантажити зловмисний платіжний файл VBScript через легітимний пакет npm (сценарій ланцюга поставок). Щоб уникнути загального виявлення PowerShell, нападник копіює
powershell.exeдо нового файлу з ім’ямpowershell_renamed.exe, але зберігає рядок підпису “powershell” у імені файлу (щоб ще відповідало “Image|contains” перевірці). Потім нападник виконує “where powershell” для пошуку шляху перейменованого двійкового файлу і, нарешті, запускає платіжний файл VBScript за допомогоюcscript //nologoдля усунення банера логотипу.cscript //nologoТестовий сценарій регресії: -
# ————————————————- # Крок 1: Створити перейменовану копію powershell.exe # ————————————————- $src = “$env:SystemRootSystem32WindowsPowerShellv1.0powershell.exe” $dst = “$env:Temppowershell_renamed.exe” Copy-Item -Path $src -Destination $dst -Force # ————————————————- # Крок 2: Використовуйте ‘where’, щоб посилатися на перейменований двійковий файл # ————————————————- $whereOutput = & where.exe powershell_renamed Write-Host “Located renamed PowerShell at: $whereOutput” # ————————————————- # Крок 3: Створити простий зловмисний платіжний файл VBScript # ————————————————- $vbsPath = “$env:Tempmalicious.vbs” @” Set objShell = CreateObject(“WScript.Shell”) objShell.Run “cmd.exe /c echo pwned > $env:Temppwned.txt”, 0, False “@ | Set-Content -Path $vbsPath -Encoding ASCII # ————————————————- # Крок 4: Виконати VBScript тихо, використовуючи cscript //nologo # ————————————————- & $dst -Command “cscript //nologo `”$vbsPath`”” # ————————————————- # Кінець моделювання # ————————————————-
Команди очищення: -
Cleanup Commands:
# Видалити перейменований двійковий файл PowerShell Remove-Item -Path "$env:Temppowershell_renamed.exe" -Force -ErrorAction SilentlyContinue # Видалити зловмисний платіжний файл VBScript Remove-Item -Path "$env:Tempmalicious.vbs" -Force -ErrorAction SilentlyContinue # Видалити докази виконання Remove-Item -Path "$env:Temppwned.txt" -Force -ErrorAction SilentlyContinue