STOCKSTAY: почему modular malware лучше искать по контрактам между компонентами
Авторская схема Virusologia: сигналы, контрольные точки, evidence и критерий ретеста.
Коротко: Hash и filename удобны для первого поиска, но надежный hunt строится вокруг совместного старта ролей, IPC, доступа к конфигурации, proxy-aware WebSocket и расхождения между образом приложения и его поведением.

Проблема

IOC-only detection быстро стареет: файл переименовывается, архив пересобирается, инфраструктура меняется. При этом зрелый modular implant должен сохранять внутренние обязанности компонентов и способы обмена между ними, иначе разработчику приходится переписывать всю экосистему.

Исследование GTIG описывает STOCKSTAY как многокомпонентный .NET-backdoor с orchestrator, network relay, task modules, IPC и secure WebSocket. Для защитника ценность здесь не в запоминании имен, а в построении связного behavior graph.

Решение: коррелировать роли и границы

Начните с process graph: какие бинарники стартуют рядом по времени, кто является parent, какие модули загружаются и какие файлы конфигурации читаются. Затем добавьте IPC и сеть: редкие WM_COPYDATA-подобные обмены, длительные WebSocket-соединения, proxy discovery и несоответствие signer, path и заявленной функции приложения.

Каждая отдельная аномалия может быть benign. Finding появляется только после корреляции нескольких независимых слоев и сохранения artifacts, достаточных для повторной проверки.

Что проверить руками

  • Сопоставить process start, module load, file access и network connect в одной timeline.
  • Проверить signer, original filename, install path и parent process каждого компонента.
  • Выделить WebSocket flows с редким destination, долгим lifetime и необычным client process.
  • Снять memory map и список loaded assemblies до изоляции.
  • Проверить environment-bound configuration на owned forensic copy, не запуская образец в production.

Безопасный пример: Sigma-кандидат для enrichment

Правило ниже не объявляет malware verdict. Оно поднимает enrichment-задачу для редкого пользовательского процесса, открывшего secure WebSocket после загрузки неподписанной библиотеки.

title: Rare User Process With WebSocket And Unsigned Module
status: experimental
logsource:
  category: network_connection
  product: windows
detection:
  selection:
    DestinationPort: 443
    Initiated: true
  filter_known:
    Image|startswith:
      - 'C:\\Program Files\\'
      - 'C:\\Windows\\System32\\'
  condition: selection and not filter_known
fields:
  - Image
  - ParentImage
  - DestinationHostname
  - User
falsepositives:
  - Legitimate portable applications
level: medium

Типичные ошибки

  • Создавать high-severity alert по одному WebSocket или одному имени файла.
  • Запускать неизвестный sample на аналитической рабочей станции ради быстрой проверки.
  • Изолировать host до preservation volatile evidence, когда это не требуется немедленной угрозой.
  • Публиковать IOC без first seen, confidence, source и expiration policy.

Evidence и критерий ретеста

  • Сохранены process tree, loaded modules, IPC evidence, network metadata и hashes artifacts.
  • Detection проверена на clean baseline и известных portable applications.
  • После remediation повторный hunt не находит исходную behavior chain, а не только старые hashes.
Первичные материалы

Материал написан Virusologia с нуля как авторская инженерная интерпретация. Факты сверены по первичным публикациям, формулировки и практические выводы не копируют исходные тексты.

Этическая рамка

Материал предназначен для защиты, controlled labs и аудита систем, которыми вы владеете или на проверку которых имеете явное разрешение. Он не содержит эксплуатационных payload-цепочек или инструкций для несанкционированного доступа.