
Скрипты для выполнения и обнаружения подмены родительского PID
Спуфинг родительского PID — это техника, используемая злоумышленниками для маскировки вредоносных процессов под легитимные, путём подделки родительского процесса в структурах PEB (Process Environment Block) и атрибутах создания процесса. В этой статье рассматриваются методы обнаружения данной техники с использованием возможностей Windows ETW (Event Tracing for Windows) и анализа метаданных процессов.
При создании процесса в Windows атрибут PROC_THREAD_ATTRIBUTE_PARENT_PROCESS позволяет указать произвольный родительский PID, отличный от фактического создателя. Это приводит к расхождению между:
CreateProcess.Использование событий Microsoft-Windows-Kernel-Process позволяет отслеживать:
ProcessStart) — содержит реальный PID создателя.ProcessStop) — позволяет сопоставить временные метки.Сравнение реального родителя из ETW с отображаемым родителем из PEB выявляет расхождения.
Запросы к классу Win32_Process возвращают ParentProcessId, который может быть подделан. Однако комбинация с ETW-данными даёт надёжный результат.
Пример кода на C# для перехвата событий ETW:
using Microsoft.Diagnostics.Tracing.Parsers;
using Microsoft.Diagnostics.Tracing.Session;
using (var session = new TraceEventSession("KernelProcessMonitor"))
{
session.EnableKernelProvider(KernelTraceEventParser.Keywords.Process);
session.Source.Kernel.ProcessStart += data =>
{
Console.WriteLine($"PID: {data.ProcessID}, ParentPID: {data.ParentProcessID}");
};
session.Source.Process();
}
ParentProcessId из ETW и PEB.Event ID 1 (Process creation) содержит ParentProcessId, который можно сверять с ETW.Спуфинг родительского PID остаётся актуальной угрозой, но его обнаружение возможно при комплексном подходе, сочетающем ETW-трассировку, анализ метаданных и поведенческие индикаторы. Регулярный мониторинг и автоматизация процессов проверки значительно снижают риск успешной атаки.