SNOWLIGHT: извлечение конфигурации и C2-порта из ELF с помощью LIEF

Загрузчик SNOWLIGHT, определённый Mandiant, представляет собой компактный ELF‑исполняемый файл (ELF), написанный на C и предназначенный для получения и выполнения удалённых полезных нагрузок в системах Linux. При размере менее 10 КБ он устанавливает соединение с командно‑управляющей инфраструктурой (C2) через необработанный TCP‑сокет (TCP), при этом используемый порт варьируется между образцами. Понимание механизма извлечения конфигурации критично для обнаружения и нейтрализации этой угрозы.

Ключевые характеристики SNOWLIGHT

  • Очень компактный ELF‑бинарник — меньше 10 КБ.
  • Связывание с C2 по необработанному TCP-сокету; порт не фиксирован и различается между образцами.
  • Динамически разрешаемые вызовы и использование GOT/PLT для сетевой настройки.
  • Конфигурационные данные хранятся в разделе .rodata и содержат маркировки, позволяющие локализовать C2‑адрес и порт.

Инструменты и методология анализа

Для автоматизации извлечения конфигурации из SNOWLIGHT аналитики используют библиотеку LIEF. Эта кроссплатформенная библиотека специально разработана для разбора и модификации исполняемых форматов (ELF, PE, MachO) и предоставляет доступ к низкоуровневым двоичным структурам — заголовкам, таблицам релокаций, экспортируемым символам и т.п. LIEF облегчает контролируемую модификацию и чтение двоичных файлов без ущерба их целостности и играет решающую роль в обратном инжиниринге.

Процесс извлечения конфигурации — пошагово

Разработка надёжного экстрактора конфигурации опирается на чётко структурированный подход. Основные этапы следующие:

  • Ручной анализ нескольких образцов SNOWLIGHT для понимания формата хранения конфигурационных данных.
  • Парсинг раздела .rodata с использованием разделителя нулевого байта 'x00' для получения списка строкоподобных шаблонов.
  • Поиск общего маркера — в анализируемых образцах встречается строка «kworker/0:2», непосредственно за которой находится значение C2.
  • Определение адреса функции main (точки входа) — LIEF предоставляет доступ к экспортируемым символам, что позволяет получить виртуальный адрес main.
  • Дизассемблирование байтов начиная с main для анализа последовательности инструкций и выявления динамических вызовов.
  • Восстановление динамической компоновки через разрешение таблиц GOT и PLT, чтобы сопоставить инструкции с реальными адресами функций (например, вызовов сокетов и функций обработки строк).
  • Автоматизированное сопоставление разобранных инструкций с адресами из LIEF — это позволяет восстановить жестко закодированный порт C2, даже если он определяется через динамически разрешаемые вызовы.

Технические нюансы, важные для экстрактора

При реализации средства извлечения следует учесть следующие моменты:

  • Парсинг .rodata: раздел часто содержит маркеры и последовательности байтов, разделённые 'x00'. Поиск стабильных маркеров (например, «kworker/0:2») заметно ускоряет локализацию C2‑данных.
  • Идентификация функции main: получение виртуального адреса main через экспортируемые символы LIEF даёт отправную точку для дизассемблирования.
  • Разрешение GOT/PLT: для динамически связанных ELF‑файлов критично восстановить соответствие между PLT‑записями и реальными адресами библиотечных функций — это позволяет интерпретировать вызовы сетевой и строки обработки.
  • Инструкция‑ориентированный анализ: сопоставление конкретных инструкций и байтовых шаблонов с разрешёнными адресами служит «якорем» (sentinel/anchor) для определения места формирования порта и адреса C2.
  • Автоматизация на базе LIEF: объединение результатов парсинга LIEF с анализом инструкций делает экстрактор стабильным и масштабируемым для множества образцов.

«Общий маркер «kworker/0:2» помогает быстро локализовать C2 — значение сервера чаще всего следует непосредственно за этой меткой».

Практическое значение для защитников

Понимание описанного процесса важно для команд по реагированию на инциденты и исследований угроз, поскольку SNOWLIGHT маскирует критические параметры коммуникации через динамическое разрешение вызовов. Наличие экстрактора, умеющего корректно парсить .rodata, определять main и восстанавливать соответствия GOT/PLT, позволяет:

  • Автоматически извлекать адреса и порты C2 из множества образцов.
  • Создавать индикаторы компрометации (IoC) и правила детектирования на основе извлечённых строк и байтовых шаблонов.
  • Ускорить процедуру ответных мер и блокирования инфраструктуры злоумышленников.

Рекомендации по инструментам и дальнейшим шагам

  • Использовать LIEF в сочетании с дизассемблерами (например, IDA, Ghidra, radare2) для точного сопоставления инструкций и таблиц PLT/GOT.
  • Автоматизировать парсинг .rodata с учётом разделителя 'x00' и поиска устоявшихся маркеров.
  • Разрабатывать тестовый набор образцов для валидации экстрактора на различных вариантах SNOWLIGHT.
  • Документировать все найденные маркеры и шаблоны вызовов для обмена с сообществом и продуктами детекта.

SNOWLIGHT демонстрирует, как небольшой, но технически продуманный загрузчик может скрыть важные сетевые параметры через динамическую компоновку. Комбинация статического анализа раздела .rodata, идентификации точки входа и восстановления GOT/PLT — ключ к надёжному извлечению конфигурации и обнаружению этой угрозы.

Отчет получен из сервиса CTT Report Hub. Права на отчет принадлежат его владельцу.

Ознакомиться подробнее с отчетом можно по ссылке.

Технологии киберугроз
Автор: Технологии киберугроз
Технологии киберугроз – технологическая компания, специализирующаяся на решениях по анализу угроз для предприятий любого размера. Мы собираем, нормализуем, обогащаем информацию о киберугрозах со всего мира. Нашими источниками являют более 260 открытых фидов, более 100 открытых поставщиков Threat Intelligence-отчетов, открытые online sandbox, социальные сети и репозитории GitHub. Мы также предоставляем ряд сервисов по: семантическом анализу Threat Intelligence-отчетов и приведения их в машиночитаемый формат STIX 2.1, проверки IoC на потенциальные ложноположительные сработки, а также получению WHOIS-записей для доменных имен.
Комментарии: