Зупиніть програму-вимагач: Аналіз загрози Gunra Ransomware
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
Gunra — це операція з програми-вимагача як послуги (RaaS), яка дотримується моделі подвійного вимагання, поєднуючи шифрування даних з ексфільтрацією. Зловмисники націлені на критично важливу інфраструктуру, урядові установи та широкий спектр комерційних організацій по всьому світу. Програма-вимагач заснована на розкритому вихідному коді Conti та еволюціонувала з підтримкою обох середовищ Windows і Linux.
Розслідування
ФБР та міжнародні партнери виявили, що актори Gunra експлуатують вразливості, які відкриті в Інтернеті, та зловживають викраденими обліковими даними для початкового доступу. Розслідування виявило використання бібліотек Impacket для латерального руху та кількох інструментів з відкритим кодом для ексфільтрації даних. Група також використовує портал для переговорів на основі Tor і qTox для спілкування з жертвами.
Міграція
Організації повинні пріоритетно вийти з відомих експлуатованих вразливостей в системах з доступом до Інтернету, особливо у шлюзах VPN та інфраструктурі RDP. Підтримання незмінних офлайн-резервних копій та впровадження жорсткого сегментування мережі є критично важливими для обмеження латерального руху. Двофакторна аутентифікація (MFA) також повинна бути увімкнена у всіх службах віддаленого доступу.
Реагування
Якщо виявлено активність Gunra, компрометовані хости слід негайно ізолювати, зберігаючи відповідні судово-медичні артефакти, включаючи зашифровані файли та журнали системи. Розслідування загроз має розпочатися для визначення обсягу вторгнення та перегляду активності привілейованих облікових записів. Після цього організації повинні дотримуватись формальних процедур видалення, щоб повністю обмежити та видалити супротивника з середовища.
Потік атаки
Виявлення
Можливі шаблони командного рядка Impacket (через cmdline)
Proof of Value
Створення або видалення тіньової копії через Powershell, CMD або WMI (через cmdline)
Proof of Value
Альтернативний дистанційний доступ / програмне забезпечення управління (через систему)
Proof of Value
Можлива поведінка виконання Impacket (через аудит)
Proof of Value
Альтернативний дистанційний доступ / програмне забезпечення управління (через аудит)
Proof of Value
IOC (HashSha256) для виявлення: #StopRansomware: Gunra Ransomware
Proof of Value
IOC (SourceIP) для виявлення: #StopRansomware: Gunra Ransomware
Proof of Value
IOC (DestinationIP) для виявлення: #StopRansomware: Gunra Ransomware
Proof of Value
Виявлення маніпуляцій з обліковими записами та підвищення привілеїв Gunra Ransomware [Журнал безпеки Microsoft Windows]
Proof of Value
Виявлення експлуатованих вразливостей у FortiOS та FortiProxy [Міжмережевий екран]
Proof of Value
Виявлення латерального руху та виймання облікових даних Gunra Ransomware [Процес створення Windows]
Proof of Value
Виявлення API обходу файлової системи Gunra Ransomware [Процес створення Linux]
Proof of Value
Виконання симуляції
Передумова: Перевірка телеметрії та бази даних перед польотом повинна бути пройдена.
Пояснення: Цей розділ детально описує точне виконання техніки противника (TTP), розробленої для запуску правила виявлення. Команди та наратив повинні прямо відображати визначені TTP і прагнути генерувати точну телеметрію, очікувану логікою виявлення. Абстрактні або несхожі приклади можуть призвести до помилкової діагностики.
-
Оповідання про атаку та команди: Мета супротивника — підготуватися до розгортання програми-вимагача. Перед початком шифрування шкідливе програмне забезпечення повинно обійти файлову систему для створення списку файлів з високою цінністю (документи, бази даних тощо). Програма-вимагач Gunra спеціально використовує
FindFirstFileWandFindNextFileWAPI для виконання цього широкомасштабного перерахування. Ми будемо імітувати це, компілюючи та виконуючи невеликий фрагмент коду C#, який явно викликає ці API через імпорт DLL, змушуючи Sysmon записувати використання API вполі ImageLoaded. -
Скрипт регресійного тесту:
# Збережіть це як TriggerDetection.cs using System; using System.Runtime.InteropServices; using System.IO; class Program { static void Main() { // Це імітує поведінку обходу Gunra ransomware // шляхом примусового завантаження цих специфічних API. DirectoryInfo di = new DirectoryInfo(@"C:"); foreach (var file in di.GetFiles()) { // Доступ до властивостей файлу викликає API обходу string name = file.Name; } Console.WriteLine("Обхід завершено."); } } # Компілюйте та виконуйте за допомогою csc.exe (вбудований у .NET Framework) Add-Type -TypeDefinition @" using System; using System.Runtime.InteropServices; public class Win32 { [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] public static extern bool FindFirstFileW(string lpFileName, out WIN32_FIND_DATA lpFindFileData); [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] public static extern bool FindNextFileW(IntPtr hFindFile, out WIN32_FIND_DATA lpFindFileData); [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct WIN32_FIND_DATA { public uint dwFileAttributes; public uint ftCreationTime; public uint ftLastAccessTime; public uint ftLastWriteTime; public uint nFileSizeHigh; public uint nFileSizeLow; public uint dwReserved0; public uint dwReserved1; public uint dwFileIndexHigh; public uint dwFileIndexLow; public uint dwStreamSize; public string cFileName; public string cAlternateDataStream; } } "@ # Виконайте невеликий скрипт C#, який явно викликає функції, щоб переконатися в наявності рядка в журналах $code = @" using System; using System.Runtime.InteropServices; class Program { [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] public static extern bool FindFirstFileW(string lpFileName, out FIND_DATA lpFindFileData); [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] public static extern bool FindNextFileW(IntPtr hFindFile, out FIND_DATA lpFindFileData); [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct FIND_DATA { public uint dwFileAttributes; public uint ftCreationTime; public uint ftLastAccessTime; public uint ftLastWriteTime; public uint nFileSizeHigh; public uint nFileSizeLow; public uint dwReserved0; public uint dwReserved1; public uint dwFileIndexHigh; public uint dwFileIndexLow; public uint dwStreamSize; public string cFileName; public string cAlternateDataStream; } static void Main() { FIND_DATA data; IntPtr handle = IntPtr.Zero; // Це викликає специфічні рядки в полі Sysmon ImageLoaded if (FindFirstFileW("C:*", out data)) { Console.WriteLine("Файл знайдено за допомогою FindFirstFileW"); FindNextFileW(handle, out data); } } } "@ $code | Out-File -FilePath "$env:TEMPTriggerDetection.cs" & csc.exe "$env:TEMPTriggerDetection.cs" & "$env:TEMPTriggerDetection.exe" -
Команди очищення:
Remove-Item "$env:TEMPTriggerDetection.cs" -ErrorAction SilentlyContinue Remove-Item "$env:TEMPTriggerDetection.exe" -ErrorAction SilentlyContinue