Как обнаружить и удалить скрытый fileless malware в памяти процесса

Скрытый fileless malware в памяти процесса ищут не как обычный вирус. Файла может не быть на диске, а вредоносный код уже работает внутри легитимного процесса: PowerShell, rundll32, mshta, svchost, explorer или даже Word. Поэтому задача не просто «найти подозрительный файл», а понять, какой процесс ведёт себя неправильно, где он запускается после перезагрузки и как убрать его из системы без повторного заражения.

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

Что такое fileless malware и почему он прячется в памяти

Fileless-атака использует уже установленные в системе инструменты: PowerShell, WMI, scheduled tasks, regsvr32, rundll32, mshta, certutil, bitsadmin. Сам вредоносный код может быть загружен из сети, внедрён в память процесса или сохранён в реестре/WMI без полноценного файла на диске.

Главная сложность в том, что процесс может выглядеть «нормально». Например, открыт обычный powershell.exe, но внутри него выполняется obfuscated-скрипт, который подключается к удалённому серверу, скачивает следующий модуль и внедряет его в другой процесс. На диске при этом может не быть ничего похожего на вирус.

Первые признаки, что проблема именно в памяти процесса

Не стоит сразу считать malware всё, что выглядит странно. Но сочетание нескольких признаков уже повод для проверки.

  • Подозрительная командная строка: PowerShell с параметрами -enc, -nop, -w hidden, DownloadString, Invoke-Expression, FromBase64String.
  • Необычный родительский процесс: например, winword.exe запускает powershell.exe, а тот запускает cmd.exe или rundll32.exe.
  • Процесс без понятного пути: имя вроде svchost.exe есть, но путь нестандартный или путь отсутствует.
  • Сетевое соединение из странного процесса: Office, PowerShell, wscript, mshta или rundll32 обращаются к неизвестным IP-адресам.
  • Процесс перезапускается после завершения: убили процесс, а через несколько секунд он появился снова.
  • Антивирус молчит, но система ведёт себя странно: тормозит, открываются окна, растут исходящие соединения, появляются новые задачи или службы.

С чего начать: не удалять сразу, а зафиксировать картину

Первое действие — изолировать компьютер от сети. Не выключать, не перезагружать, а именно отключить кабель или Wi-Fi. Перезагрузка может уничтожить часть следов в памяти, а выключение — закрыть активный процесс, который потом не получится исследовать.

Дальше нужно понять три вещи:

  1. какой процесс подозрителен;
  2. откуда он запустился;
  3. есть ли механизм автозапуска, который вернёт его после удаления.

Если компьютер домашний и данные не критичны, можно идти по шагам ниже. Если это корпоративная среда, лучше параллельно сохранить логи, дамп памяти и список подозрительных процессов для дальнейшего разбора.

Инструменты, которые реально помогают

Инструмент Что помогает найти Когда использовать Ограничение
Process Explorer Дерево процессов, путь к файлу, подписи, DLL, сетевые соединения процесса Для быстрой ручной проверки подозрительного процесса Не всегда покажет код, уже внедрённый в память
Autoruns Автозапуск, службы, WMI, задачи, драйверы, расширения Когда процесс возвращается после завершения Нужно аккуратно отличать системные записи от вредоносных
PowerShell и Event Viewer Команды запуска, события PowerShell, WMI, службы, задачи Для поиска следов запуска и persistence-механизмов Если логирование не было включено, часть истории будет недоступна
Defender Offline Scan Проверка системы до загрузки обычной Windows Когда подозрение есть, но обычный сканер ничего не находит Не заменяет ручной поиск persistence
Volatility Скрытые процессы, инъекции, подозрительные области памяти Если есть дамп памяти и нужен глубокий анализ Требует опыта и корректного дампа

Шаг 1. Найдите подозрительные процессы

Откройте Process Explorer от Microsoft Sysinternals. Включите отображение дерева процессов, подписей и нижнюю панель с DLL. Сразу обратите внимание не на одно имя процесса, а на связку: кто кого запустил, откуда запущен, какие DLL подгружены и куда есть сетевое соединение.

Полезные признаки в Process Explorer:

  • процесс с именем системного компонента, но без цифровой подписи;
  • путь запуска из временных папок, AppData, Public, Temp;
  • пустой или странный Command Line;
  • процесс, у которого нет файла на диске, но он активен;
  • дочерний процесс, который не логичен для родителя;
  • подозрительные DLL, загруженные из нестандартных каталогов.

Например, если explorer.exe запускает mshta.exe, а тот обращается к внешнему адресу, это уже не рядовая ситуация. Если svchost.exe запущен не из C:\Windows\System32, это повод проверить его в первую очередь.

Шаг 2. Проверьте командные строки процессов

В PowerShell от имени администратора можно быстро собрать список процессов с аргументами запуска:

Get-CimInstance Win32_Process |
  Select-Object ProcessId, ParentProcessId, Name, CommandLine, ExecutablePath |
  Sort-Object ProcessId |
  Format-Table -Wrap

Ищите не только очевидные слова вроде malware. Гораздо чаще встречаются конструкции вроде:

powershell.exe -nop -w hidden -enc ...
mshta.exe http://...
rundll32.exe javascript:...
regsvr32.exe /s /n /u /i:http://...
wscript.exe //b ...
cscript.exe ...

Особенно подозрительны длинные base64-строки после параметра -enc, команды с IEX, DownloadString, Invoke-Expression и попытки скрыть окно PowerShell параметром -w hidden.

Шаг 3. Проверьте сетевые соединения

Файл может не лежать на диске, но активный процесс всё равно куда-то обращается. Проверьте соединения и сопоставьте PID с процессом:

Get-NetTCPConnection |
  Select-Object OwningProcess, LocalAddress, LocalPort, RemoteAddress, RemotePort, State |
  Sort-Object OwningProcess

Если неясно, какой процесс владеет PID, можно сопоставить его с первым списком процессов. Подозрительны соединения от Office, PowerShell, WMI-процессов, rundll32, mshta, wscript, cscript, особенно если адрес не похож на обычный корпоративный или облачный сервис.

Не всегда неизвестный IP означает заражение. Но если из процесса, который не должен ходить в сеть, идёт постоянное соединение на странный порт, это хороший повод копать глубже.

Шаг 4. Посмотрите, где malware может запускаться снова

Удаление процесса из памяти не решает задачу. Fileless malware часто живёт в механизмах автозапуска. Если просто завершить процесс, он вернётся через задачу, WMI-событие, службу или запись в реестре.

Проверьте службы:

Get-CimInstance Win32_Service |
  Select-Object Name, State, StartMode, PathName |
  Format-Table -Wrap

Проверьте запланированные задачи:

Get-ScheduledTask |
  Select-Object TaskName, TaskPath, State, TaskPath |
  Format-Table -Wrap

Для задач с подозрительными действиями можно посмотреть детали:

Get-ScheduledTask |
  Where-Object {$_.Actions.Execute -match 'powershell|pwsh|wscript|cscript|mshta|rundll32|regsvr32|cmd'} |
  Select-Object TaskName, TaskPath, State, Actions |
  Format-List

Проверьте классические ветки автозапуска:

reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run /s
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run /s

Вручную разбирать реестр неудобно, поэтому для этого этапа я бы использовал Autoruns. В нём удобно отключить подозрительные записи, скрыть подписанные Microsoft-записи и проверить путь, издателя и команду запуска.

Шаг 5. Отдельно проверьте WMI persistence

WMI — один из любимых способов fileless malware оставаться в системе. Вредоносный код может быть спрятан в permanent event consumer: система получает триггер, например запуск процесса или вход пользователя, и выполняет команду без привычного файла в автозагрузке.

Проверьте WMI-фильтры, потребители и связи:

Get-CimInstance -Namespace root\subscription -ClassName __EventFilter |
  Select-Object Name, Query |
  Format-List

Get-CimInstance -Namespace root\subscription -ClassName CommandLineEventConsumer |
  Select-Object Name, CommandLineTemplate |
  Format-List

Get-CimInstance -Namespace root\subscription -ClassName __FilterToConsumerBinding |
  Select-Object Filter, Consumer |
  Format-List

Подозрительно, если в CommandLineTemplate есть PowerShell, base64, внешние URL, скрытый запуск или обращение к временным папкам.

Не удаляйте всё подряд. Сначала запишите имена подозрительных объектов, проверьте их в поиске по названию, а потом удаляйте только найденные вредоносные записи. Обычно удаляют сначала связи __FilterToConsumerBinding, затем consumers и filters.

Шаг 6. Проверьте память процесса

Если процесс подозрителен, но файла на диске нет, нужно смотреть не только список процессов, но и память. Признаки инъекции:

  • исполняемые области памяти без соответствующего файла;
  • регионы памяти с правами read-write-execute;
  • поток, стартующий из области памяти, которая не принадлежит модулю;
  • разница между образом процесса на диске и образом в памяти;
  • подозрительные строки в памяти: URL, base64, команды PowerShell, IP-адреса.

В Process Explorer можно создать дамп процесса через Properties → Create Dump File. Если используете ProcDump:

procdump64 -ma -accepteula <PID> C:\Incident\process.dmp

Дамп лучше хранить на внешнем носителе или в защищённой папке. В нём могут быть токены, пароли, фрагменты документов и другие чувствительные данные.

Для анализа дампа можно использовать Volatility. Из практичных команд для начала:

vol -f memory.raw windows.pslist
vol -f memory.raw windows.cmdline
vol -f memory.raw windows.malfind
vol -f memory.raw windows.hollowfind

Если в памяти находят подозрительные регионы, это не всегда автоматическое доказательство заражения. Но если рядом есть странные сетевые соединения, WMI persistence или obfuscated PowerShell, картина становится гораздо убедительнее.

Как удалять: порядок действий, чтобы не вернуть заражение

  1. Изолируйте компьютер от сети. Отключите кабель, Wi-Fi, VPN. Если это сервер, отключите сетевые интерфейсы или ограничьте доступ через фаервол.
  2. Сохраните минимальные данные. Список процессов, сетевые соединения, подозрительные задачи, службы, WMI-объекты и дамп процесса, если нужен анализ.
  3. Отключите автозапуск. Удалите или отключите подозрительные scheduled tasks, службы, WMI consumers, записи в реестре и элементы Autoruns.
  4. Остановите процесс. Только после того, как убрали механизм возврата, завершайте процесс. В Process Explorer это можно сделать через Kill Process или Kill Process Tree.
  5. Проверьте систему офлайн-сканером. Для Windows удобно использовать Defender Offline Scan. Он перезагрузит систему и проверит её до обычного запуска Windows.
  6. Перезагрузите и проверьте снова. Если процесс не вернулся, нет странных соединений и автозапуск чистый, можно переходить к усилению защиты.
  7. Смените пароли. Особенно если были признаки кражи учётных данных, запуск от администратора или доступ к домену.

Что выбрать в зависимости от ситуации

Ситуация Что делать Чего не делать
Домашний компьютер, подозрение на один процесс Изолировать, проверить Process Explorer, Autoruns, запустить офлайн-скан Не удалять случайные системные записи без проверки
Рабочий ноутбук в домене Изолировать, сохранить логи, сообщить ИБ/администратору, проверить учётные данные Не чистить систему «на глаз» и не стирать следы до разбора
Сервер или база данных Ограничить сеть, сделать снимок/резервную копию, привлекать специалиста Не перезагружать и не удалять службы без понимания их назначения
Процесс возвращается после завершения Искать scheduled task, WMI, службу, запись в реестре или драйвер Не пытаться решить проблему только кнопкой Kill Process
Есть дамп памяти и нужны доказательства Сохранить дамп, цепочку процессов, события и сетевые соединения Не передавать дамп в случайные облака или чаты без защиты

Частые ошибки при удалении fileless malware

  • Убивают процесс и считают, что всё готово. Если остался WMI consumer или задача, заражение вернётся.
  • Перезагружают компьютер до проверки. Это может помочь системе очиститься, но также уничтожит следы в памяти.
  • Смотрят только на файлы. При fileless-атаке главный объект — процесс, память и механизм запуска.
  • Доверяют имени процесса. svchost.exe, powershell.exe и rundll32.exe могут быть легитимными, но могут быть и замаскированными.
  • Удаляют всё, что кажется странным. Так можно сломать автозапуск системных компонентов или бизнес-приложений.
  • Игнорируют PowerShell-события. Если включено логирование, там часто видно, что именно выполнялось.
  • Не проверяют сеть после удаления. Остаточное соединение может указывать на второй процесс или другой механизм заражения.

Практические рекомендации после удаления

После того как процесс убран и система проверена, стоит сделать несколько вещей, чтобы атака не повторилась.

  • Включите PowerShell Script Block Logging и событийное логирование PowerShell.
  • Оставьте включённым Defender Cloud Protection и регулярные обновления сигнатур.
  • Ограничьте запуск PowerShell там, где он не нужен обычным пользователям.
  • Используйте AppLocker или WDAC, если речь о корпоративной среде.
  • Проверьте обновления Windows и установленного ПО.
  • Смените пароли пользователей, которые работали на заражённой машине.
  • Если компьютер был в домене, проверьте групповые политики, запланированные задачи и учётные записи с повышенными правами.

Если вы часто сталкиваетесь с такими случаями, стоит держать на флешке набор инструментов: Process Explorer, Autoruns, ProcDump, EDR/антивирусный сканер и инструкцию по первым действиям. В инциденте важно не импровизировать, а быстро собрать одинаковый набор данных.

Когда лучше не чистить вручную

Ручная чистка подходит для понятного домашнего случая: один подозрительный процесс, нет домена, нет шифровальщика, нет признаков кражи паролей. В остальных ситуациях лучше действовать осторожнее.

Обращайтесь к специалисту, если:

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

Короткий итог

Чтобы обнаружить и удалить скрытый fileless malware в памяти процесса, действуйте не от имени файла, а от поведения процесса. Сначала изолируйте систему, затем найдите подозрительный процесс, проверьте его командную строку, сетевые соединения, родителя, память и механизмы автозапуска. Удаляйте не только процесс, но и persistence: WMI, задачи, службы, реестр, драйверы. После этого запускайте офлайн-скан, перезагружайтесь, проверяйте систему заново и меняйте пароли, если были признаки компрометации.

Оцените статью
PEFile — Безопасность и технологии простым языком