Бесфайловая атака в действии: вредонос появляется из ниоткуда и исчезает без следа

Бесфайловая атака в действии: вредонос появляется из ниоткуда и исчезает без следа

Слышали о таком виде вредоносного ПО как fileless malware? Термин «бесфайловый» описывает не отсутствие следов, а способ исполнения. Код не ложится на накопитель в виде привычного исполняемого модуля, а загружается по сети, расшифровывается в буфер и запускается прямо в оперативной памяти. Следы всё равно появляются — журналы сценариев, необычные цепочки процессов, артефакты в реестре, подписки на события, а также характерные участки в адресном пространстве. Разберём по шагам жизненный цикл таких атак, используемые техники и практические меры, которые действительно снижают риск.

Что на самом деле означает «бесфайловость»

Классический цикл «сохранить и запустить» заменяется на подгрузку и выполнение из памяти. В качестве промежуточного хранилища часто используют реестр, планировщик задач или инфраструктуру WMI . Нередко это сочетается с подходом living off the land — злоумышленник задействует штатные системные утилиты Windows, известные под общим сокращением LOLBins, чтобы скрыться среди легитимных действий.

Сценарий от первичного запуска до закрепления

Точка входа. Макрос в документе, вредоносная ссылка, сценарий с социальной инженерией, эксплойт в уязвимом приложении или запуск доверенной системной утилиты. Цель — минимальная видимость и быстрый выход на управляющий сервер.

Доставка полезной нагрузки. Загружается зашифрованный модуль, который сразу раскладывается в память. Это может быть оболочка команд, сборка .NET, собственный исполняемый код или скрипт на JavaScript.

Маскировка и выполнение. Нагрузка внедряется в адресное пространство доверенного процесса — браузера, офисного приложения, системной службы. Дальше выполняются задачи нападения: сбор учётных данных, перемещение по сети, обход мониторинга.

Повторный старт. Закрепление достигается через таймеры, WMI-подписки, ветки автозагрузки с компактным однострочным скриптом. При перезагрузке этот фрагмент снова подтягивает модуль в память и запускает его.

Ключевые техники на Windows

PowerShell и загрузка .NET-кода в память

Популярная схема — доставить байтовый массив, превратить его в сборку .NET напрямую в памяти и вызвать нужную точку входа. На диске при этом не появляется ни исполняемый файл, ни библиотека. Такой подход исторически применяли и открытые фреймворки, и коммерческие инструменты. Защитные механизмы Microsoft дают заметный шанс на детект: интерфейс AMSI перехватывает содержимое скриптов до запуска, режим Script Block Logging и журналирование модулей пишут важные фрагменты в логи, режим Constrained Language ограничивает доступ к опасным интерфейсам. Любые попытки отключить AMSI или заглушить телеметрию хорошо видны в расследованиях и должны повышать приоритет инцидента.

Штатные утилиты как исполняющая оболочка

Доверенные двоичные файлы часто используют для запуска чужого кода. Типичные примеры — rundll32, regsvr32, mshta, wscript и cscript, а также installutil. Эти компоненты помогают обойти простые политики и выглядят легитимно в первом приближении. В реальности они становятся транспортом: загружают скрипт или оболочку в память, после чего управление переходит к вредоносной логике. Управляет этим белый список приложений. На практике лучше перейти на модель Windows Defender Application Control или настроить AppLocker. Полезна и группа правил Attack Surface Reduction, которая режет цепочки вроде «офисный документ запускает сценарный хост» и блокирует обфусцированные команды.

Инъекции и исполнение в чужом процессе

Чтобы раствориться в шуме, код размещают внутри уже работающего приложения. Распространены отражённая загрузка библиотек, подмена образа процесса в технике hollowing, принудительное создание удалённого потока, маппинг секций памяти без сопоставления с файлом. Такие операции оставляют следы — частные страницы с правами на выполнение без файлового соответствия, структуры формата PE в памяти, новые потоки у процесса, которому это не свойственно. Охота по этим признакам ведётся через трассировку событий Windows, телеметрию загрузки модулей, сетевые события и Sysmon с корректно настроенным конфигом. В терминах MITRE ATT&CK это техники T1055, T1218, T1546, T1112 и T1027.

Закрепление без размещения на диске

Персистентность строят на механизмах, которые вызывают короткий скрипт и повторяют подгрузку в память. Чаще всего это планировщик, подписки WMI, ветки Run и RunOnce. Иногда используют шаблоны в документах, COM-объекты или службы, которые дергают сценарный движок. Формального исполняемого файла на диске нет, но события старта и сами «крючки» остаются в журналах и реестре.

Попытки «ослепить» защиту и что с этим делать

Атакующие стремятся убрать с дороги сенсоры. По AMSI это изменения возвращаемых кодов функций, подмена адресов в таблицах импорта, плотная обфускация. По трассировке событий отключают интересующие провайдеры или патчат ключевые функции. Политика безопасности должна считать эти действия самостоятельными индикаторами компрометации. Практика такова: AMSI включён, журналы PowerShell собирают блоки сценариев и модули, старая версия PowerShell отключена, WDAC или AppLocker работают в режиме белых списков, правила ASR включены, макросы из интернета блокируются, метка происхождения MOTW соблюдается, WMI и планировщик под централизованным аудитом.

Как это выглядит на Linux и macOS

Linux

Часто применяют связку memfd_create и fexecve. Получается запуск образа без файлового следа на диске. Встречаются инъекции через ptrace, а также подмена библиотек через переменную окружения LD_PRELOAD. Закрепление нередко строят на systemd-таймерах, заданиях cron, правилах udev. Доставку делают через конвейеры оболочки. Детект держится на аудите системных вызовов, сенсорах eBPF и анализе исполняемых страниц без файлового бэка. Для пост-инцидентного разбора пригодится проект Volatility — он помогает вытащить из снимка памяти следы инъекций, скрытые потоки, незамапленные участки.

macOS

В экосистеме Apple встречаются загрузки кода через JXA и AppleScript, манипуляции рантаймом Objective-C, инъекции в процессы через закрытые интерфейсы. Закрепление реализуют через LaunchAgents и LaunchDaemons, профили конфигурации и незаметные плагины, которые подкачивают сценарии из сети. Контроль обеспечивают механизмы Endpoint Security и политика на профили. FileVault защищает том, но не мешает исполнению из памяти в уже запущенной системе, поэтому логика противодействия та же, что и на других платформах.

Что видит синяя команда

  • Нестандартные пары процессов. Офисный редактор стартует PowerShell, браузер запускает административную утилиту, служба печати устанавливает внешнее соединение.
  • Исполняемые страницы без файлового соответствия. Частные области памяти с правами на выполнение, где обнаруживаются структуры формата PE, при этом образа на диске нет.
  • Попытки заглушить телеметрию. Выгрузка библиотек мониторинга, отключение трассировки, вмешательство в AMSI.
  • Нетипичная сеть у «тихих» процессов. Долгие зашифрованные сессии, редкие порты, неожиданные домены.
  • Подозрительные события в WMI, планировщике и реестре. Новые подписки на системные события, задачи с загрузкой сценария из интернета, однострочные команды в ветках автозагрузки.

Источники данных и инструменты

Журналы и трассировка событий Windows. Включите расширенный аудит, сбор блоков сценариев PowerShell, журналирование модулей, запись сетевых событий. Логи централизуйте в SIEM.

Sysmon. Настройте события на дерево процессов, сетевые соединения, изменение реестра, активности WMI, подпись образов. Базовые конфиги удобно взять за основу и доработать под особенности инфраструктуры. ссылка

Снимки памяти. При подозрении снимайте дамп оперативной памяти и разбирайте его через Volatility третьей версии . Ищите незамапленные секции, отражённые загрузки библиотек, скрытые потоки. ссылка

Охота по поведению. Ищите длинные строки в кодировке Base64, рефлексию .NET, нетипичные ключи запуска, сценарии в папках документов, загрузку скриптовых движков доверенными бинарями. Полезно держать список разрешённых связок «кто кого имеет право запускать» и реагировать на отклонения.

Практические меры защиты

  • Белые списки приложений. Перейдите от блокировок к разрешительной модели. Windows Defender Application Control или AppLocker закрывают целые классы обходов. Ограничьте доступ к системным утилитам, которые часто используют как оболочку для чужого кода.
  • Правила Attack Surface Reduction. Включите набор, который блокирует запуск сценариев из офисных документов, создание исполняемых из приложений пакета Office, обфусцированные команды и другие популярные трюки. ссылка
  • Жёсткая политика PowerShell. Отключите вторую версию, применяйте Constrained Language там, где не нужен полный доступ к .NET, включите журналы Script Block и модулей, а также транскрипцию сессий.
  • Неприкосновенность AMSI и телеметрии. Любая попытка вмешательства трактуется как серьёзный сигнал. Добавьте правила, повышающие приоритет такого события.
  • Контроль WMI, планировщика и автозагрузки. Введите регулярный аудит подписок, задач и веток Run. Реагируйте на однострочники, которые тянут код из интернета.
  • Макросы и метка происхождения. Запретите активный контент в документах, пришедших извне, следите за корректным применением метки MOTW. Обучайте сотрудников узнавать деловые приманки.
  • Сегментация и выход в интернет. Ограничьте исходящие соединения с рабочих мест, применяйте прокси и правила egress-контроля, ловите нетипичные туннели.
  • EDR с анализом памяти . Выбирайте платформы, которые видят страницы с правами на выполнение без файлового бэка, отражённые библиотеки и техники hollowing.

Идеи для охоты и проверки гипотез

Поиск странных связок процессов в журналах безопасности Windows

# Событие 4688 за сутки. Ищем пары "родитель → потомок", нетипичные для офисных и браузерных приложений
 Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4688; StartTime=(Get-Date).AddDays(-1)} |
   Where-Object {
     $_.Properties[9].Value -match '(WINWORD|EXCEL|POWERPNT|Acrobat|chrome|msedge).exe' -and
     $_.Properties[5].Value -match '(powershell|wscript|cscript|mshta|rundll32|regsvr32).exe'
   } |
   Select-Object TimeCreated,
                 @{n='Parent';e={$_.Properties[9].Value}},
                 @{n='Child'; e={$_.Properties[5].Value}},
                 @{n='Cmd';   e={$_.Properties[8].Value}} |
   Format-Table -Auto
 

Простейшая идея для YARA по снимку памяти

// Находим признаки формата PE в частной странице, где нет привязки к файлу. 
 // Применять только в рамках законного форензик-анализа памяти
 rule InMemory_PE_NoMapping {
   strings:
     $mz = { 4D 5A }
     $pe = { 50 45 00 00 }
   condition:
     $mz at 0 and $pe in (0x40..0x200)
 }
 

Юридическая и этическая часть

Проверки проводите только на собственном оборудовании или с письменным согласием владельца. Цель материала — помочь защитникам выстроить надёжную архитектуру и сформировать понятные детекты. Инструкций для нападения здесь нет.

Краткая памятка

  • Бесфайловая атака — это исполнение из памяти, а не исчезновение следов. Журналы и артефакты остаются.
  • Главные союзники защитника — AMSI, расширенное журналирование PowerShell, трассировка событий Windows, Sysmon и разрешительная модель запуска.
  • Штатные утилиты полезны админам, но без ограничений превращаются в удобный рантайм для чужого кода.
  • EDR с анализом адресного пространства ловит страницы с правами на выполнение без файлового соответствия и техники инъекции.
  • Правила ASR и белые списки уменьшают поверхность атаки кратно и убирают целые классы обходов.
бесфайловая атака вредонос из памяти PowerShell .NET LOLBins WMI AMSI ETW
Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
Антивирус для мозга!

Лечим цифровую неграмотность без побочных эффектов

Активируйте защиту — подпишитесь

Техно Леди

Технологии и наука для гуманитариев