• XSS.stack #1 – первый литературный журнал от юзеров форума

Анатомия Skitnet/Bossnet

MaFio

(L2) cache
Пользователь
Регистрация
23.02.2021
Сообщения
324
Реакции
321
Гарант сделки
2
png.png


Эта штука активно толкается на Rаmр с апреля 2024. В этом посте представлен обработанный технический анализ Skitnet от наших "друзей" Продафтов.

Skitnet, также известный как Bossnet, представляет собой многоступенчатый вредоносный программный комплекс, разработанный группой LARVA-306. Данное ПО характеризуется использованием нескольких языков программирования и продвинутых техник сокрытия с целью доставки основной полезной нагрузки и обеспечения устойчивого персистентного доступа к инфицированным системам.

Автор распространяет как серверную часть, так и клиентские модули. Рекламируется компактный пакет с полностью автоматизированной установкой посредством Bash-скриптов. Особо отмечается, что серверный компонент автоматически уничтожает следующие данные для затруднения криминалистического анализа: журналы SSH-соединений, IP-адреса, историю команд и кэш.

Технический анализ
  1. Первичный загрузчик (Rust)
    • Начальный исполняемый файл разработан на языке Rust, что подтверждается артефактами компиляции (например, пути вида C:\Users\user\.cargo\registry\src\index.crates.io-6f17d22bba15001f\chacha20-0.9.1\src\lib.rs).
    • Ключевой функцией данного модуля является дешифрование встроенного полезного нагрузки. Для этого используется библиотека шифрования ChaCha20, идентифицируемая по строкам expand 32-byte k. Ключ и вектор инициализации (IV) жестко закодированы. Размер зашифрованных данных составляет 0x2E400 (T1140 - Deobfuscate/Decode Files or Information, T1027 - Obfuscated Files or Information).
    • После дешифрования, полученный PE-файл рефлективно внедряется (Reflective Code Loading, T1620) в адресное пространство текущего процесса с использованием функционала библиотеки manualmap из DInvoke-rs. Это позволяет избежать записи исполняемого кода на диск. Иных функций, кроме дешифрования и рефлективного маппинга, Rust-компонент не выполняет, передавая управление следующей стадии.
  2. Основной модуль (Nim)
    • Вторая стадия реализована на языке Nim, что потенциально снижает вероятность обнаружения сигнатурными методами.
    • Основная задача этого модуля – установление обратного шелла (reverse shell) с C2-сервером посредством DNS-туннелирования (T1071.004 - DNS). Для формирования и обработки DNS-запросов используется библиотека nim-dnsprotocol.
    • Для уклонения от статического анализа и детектирования по таблицам импорта, адреса API-функций разрешаются динамически во время выполнения через GetProcAddress (T1106 - Native API).
    • Механизм DNS-шелла:
      • Генерируются два случайных значения, которые используются для формирования инициализирующих DNS-запросов формата: "100000000000000"+rand_value.hex()+".com".
      • Запускается процесс cmd.exe (T1059 - Command and Scripting Interpreter).
      • Создаются два дополнительных потока:
        • Поток 1: Каждые 10 секунд отправляет DNS-запросы типа "маяк" (1000000000000000.com) на C2-сервер.
        • Поток 2: Отслеживает вывод процесса cmd.exe. При наличии данных, они шифруются с использованием сессионных ключей (T1573.001 - Symmetric Cryptography) и отправляются на C2-сервер в виде DNS-запроса.
      • Основной поток ожидает DNS-ответы от C2, дешифрует их содержимое и перенаправляет в канал ввода (pipe) процесса cmd.exe.
  3. Панель управления и серверная логика C2
    • Для управления инфицированными системами используется веб-панель. Идентификация клиентов происходит по серийному номеру диска C.
    • Серверный код Skitnet включает проверку идентификатора клиента (/:id) с помощью регулярного выражения для предотвращения использования нежелательных символов, что может служить мерой защиты от некоторых видов атак на веб-приложения.
    • Реализованы фильтры по IP-адресам, странам и провайдерам.
    • Анализ комментариев и записей в файле readme.log на серверной стороне указывает на русскоязычное происхождение разработчика.
  4. Поддерживаемые команды (преимущественно на базе PowerShell)
    • startup: Обеспечение персистентности.
      • Загружаются три файла: ISP.exe (легитимный, подписанный файл Asus), вредоносная SnxHidLib.DLL и pas.ps1 в каталог C:\ProgramData\huo.
      • Используется техника DLL Hijacking (T1574 - Hijack Execution Flow): ISP.exe при запуске загружает подменённую SnxHidLib.DLL.
      • Вредоносная SnxHidLib.DLL (Rust-бинарь) создает PowerShell-процесс и выполняет скрипт C:\ProgramData\huo\pas.ps1 (T1059.001 - PowerShell).
      • Скрипт pas.ps1 получает серийный номер диска C и в бесконечном цикле формирует GET-запрос вида http://178.236.247.7/{serial_number}. Ответ сервера (PowerShell-скрипт) выполняется через Invoke-Expression.
      • Функция Invoke-Startup в этом скрипте загружает необходимые файлы и создает ярлык для ISP.exe в папке автозагрузки (T1547.001 - Registry Run Keys / Startup Folder).
    • screen: Захват скриншота рабочего стола (T1113 - Screen Capture) средствами PowerShell. Изображение загружается на Imgur, URL отправляется на C2.
    • anydesk/rutserv: Развертывание легитимных средств удаленного доступа AnyDesk или RUT-Serv. Реализовано сокрытие окон и иконок уведомлений этих программ.
    • shell: Запуск дополнительного PowerShell-шелла. Обмен данными с C2 происходит через GET-запросы: параметр c используется для отправки логов/команд на сервер ($url+"?c=Shell%20started.."); параметр m используется для запроса команд с сервера ($url+"?m") каждые 5 секунд. Сервер возвращает команды из очереди (JSON array shift).
    • av: Получение списка установленных продуктов безопасности (T1518.001 - Security Software Discovery) через WMI-запрос к пространству имен root\SecurityCenter2: SELECT * FROM AntiVirusProduct. Результаты отправляются на C2.
  5. .NET-загрузчик дополнительной полезной нагрузки
    • Оператор может инициировать загрузку .NET-компонента.
    • В каталог C:\ProgramData помещается PowerShell-скрипт web.log.
    • Устанавливается переменная окружения X (например, f25e3262b78a0422dae9a4508db1b7cbfec80e7f-c47c9de3-s).
    • Скрипт web.log декодирует Base64-строку, выполняет операцию XOR с жестко закодированными байтами и загружает .NET DLL с помощью Assembly::Load. Вызывается экспортируемая функция Hkzgg с двумя аргументами: целочисленная константа и значение переменной X.
    • Загруженная .NET DLL обфусцирована с использованием непрозрачных предикатов и шифрования строк. Присутствует статическая функция дешифрования строк (Base64-декодирование, затем XOR с целочисленным ключом), которая может быть использована для восстановления исходного кода.
    • Второй аргумент функции Hkzgg (значение переменной X) используется для дешифрования встроенной полезной нагрузки. Сегмент строки X до первого дефиса (-) используется как ключ RC4.
    • Дешифрованная полезная нагрузка представляет собой вторую стадию .NET DLL, использующую аналогичные техники обфускации.
    • Эта вторая стадия также использует RC4 для дешифрования URL C2-сервера. Сегмент переменной X после первого дефиса (например, c47c9de3 из f25e3262b78a0422dae9a4508db1b7cbfec80e7f-c47c9de3-s) формирует путь на C2-сервере (например, rushpapers.com/c47c9de3) для загрузки следующего этапа полезной нагрузки.

Skitnet является сложным, многокомпонентным вредоносным ПО, демонстрирующим применение разнообразных языков программирования (Rust, Nim, PowerShell, .NET) и техник уклонения от обнаружения. Использование Rust для дешифрования и рефлективного внедрения, Nim для реализации DNS-канала управления, а также активное применение PowerShell для выполнения команд и обеспечения персистентности (включая DLL Hijacking легитимного ПО) свидетельствуют о высоком уровне технической подготовки разработчиков. Многоступенчатая загрузка .NET-компонентов с использованием переменных окружения для передачи конфигурации и ключей шифрования дополнительно усложняет анализ и обнаружение.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх