НейроАгент

Как отследить PowerShell процессы с высоким CPU

Узнайте, как определить источник PowerShell процессов, потребляющих 10-12% CPU. Методы анализа, инструменты для отслеживания и обнаружения вредоносного ПО.

Вопрос

Как отследить источник PowerShell процессов, потребляющих 10-12% CPU?

Я оставляю компьютер включенным на ночь, но по утрам обнаруживаю несколько процессов PowerShell, каждый из которых использует 10-12% процессорного времени. Подскажите, как определить, какие приложения или пользователи запускают эти процессы, и не является ли это признаком работы майнера или вредоносного ПО? Какие инструменты или программы вы рекомендуете для анализа и отслеживания источника этих процессов?

НейроАгент

PowerShell процессы, потребляющие 10-12% CPU, можно отследить с помощью встроенных инструментов Windows Task Manager и Process Explorer, а также специализированных скриптов PowerShell для анализа родительско-дочерних отношений процессов. Для определения источника этих процессов следует использовать командлеты Get-Process, Get-WmiObject и трассировку сетевых соединений, а также проверить систему на наличие вредоносного кода с помощью антивирусных сканеров и инструментов анализа безопасности.

Содержание

Основные методы отслеживания PowerShell процессов

Для начала анализа PowerShell процессов, потребляющих ресурсы процессора, следует использовать стандартные инструменты Windows. Диспетчер задач (Task Manager) предоставляет базовую информацию о запущенных процессах, но для более детального анализа требуются специализированные утилиты.

В Диспетчере задач можно:

  • Отсортировать процессы по использованию CPU
  • Найти все процессы PowerShell (powershell.exe)
  • Увидеть имя пользователя, запустившего процесс
  • Определить путь к исполняемому файлу

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

Для более глубокого анализа рекомендуется использовать Process Explorer от Sysinternals, который показывает:

  • Дерево процессов с родительско-дочерними связями
  • DLL-модули, загруженные в процесс
  • Открытые файлы и сетевые соединения
  • Подробную информацию о времени запуска и использовании ресурсов

Анализ родительско-дочерних отношений процессов

Ключевой аспект определения источника PowerShell процессов — анализ их происхождения. Как отмечено в исследованиях по безопасности, каждый процесс, включая PowerShell, оставляет следы своего происхождения (родительского процесса) и порождает дочерние процессы.

Для анализа родительских процессов в PowerShell можно использовать следующие команды:

powershell
# Получение информации о всех PowerShell процессах с указанием родителя
Get-Process powershell | Select-Object Id, ProcessName, CPU, Path, @{Name="ParentId";Expression={(Get-CimInstance -ClassName Win32_Process -Filter "ProcessId=$($_.Id)").ParentProcessId}}

# Получение полной информации о процессе с родительским процессом
Get-CimInstance -ClassName Win32_Process | Where-Object {$_.Name -eq "powershell.exe"} | Select-Object Name, ProcessId, ParentProcessId, CommandLine

Эти команды помогут определить:

  • Процесс-родитель, который запустил PowerShell
  • Командную строку с параметрами запуска
  • Идентификаторы процессов для дальнейшего анализа

Важно отметить, что вредоносное ПО часто маскируется под легитимные процессы, поэтому необходимо проверять:

  • Является ли родительский процесс известным системным компонентом
  • Соответствуют ли параметры запуска ожидаемым значениям
  • Нет ли подозрительных аргументов в командной строке

Инструменты для глубокого анализа процессов

Для эффективного анализа PowerShell процессов, потребляющих ресурсы CPU, рекомендуется использовать комплексный подход с несколькими инструментами:

1. Process Monitor (ProcMon)

Process Monitor от Sysinternals позволяет отслеживать в реальном времени:

  • Все операции с файлами и реестром
  • Запросы к сети
  • Создание процессов
  • Доступ к памяти

Для анализа PowerShell процессов следует фильтровать события по:

  • Имени процесса (powershell.exe)
  • Операциям Process Create
  • Сетевым активностям

2. Autoruns

Этот инструмент показывает все автозагружаемые компоненты системы, включая:

  • Запланированные задачи
  • Службы
  • Запускаемые через реестр элементы
  • Драйверы

Как указано в исследованиях по мониторингу, многие майнеры и вредоносные программы используют скрытые запланированные задачи для автоматического запуска.

3. PowerShell скрипты для мониторинга

Ниже представлены полезные скрипты для анализа:

powershell
# Скрипт для отслеживания высоконагруженных PowerShell процессов
Get-Process | Where-Object {$_.ProcessName -eq "powershell" -and $_.CPU -gt 5} | 
    Select-Object Id, ProcessName, CPU, WorkingSet, @{Name="Parent";Expression={(Get-Process -Id $_.ParentId).ProcessName}}

# Скрипт для анализа сетевой активности PowerShell процессов
Get-NetTCPConnection | Where-Object {$_.OwningProcess -in (Get-Process powershell).Id} | 
    Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State

Эти скрипты помогут выявить процессы с аномальным потреблением ресурсов и их сетевую активность.


Обнаружение майнеров и вредоносного ПО

Потребление CPU в диапазоне 10-12% каждым процессом PowerShell может указывать на несколько сценариев:

Признаки работы криптоджекинговых майнеров

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

  • Используют PowerShell для скрытого запуска
  • Работают в памяти, не оставляя следов на диске
  • Создают несколько экземпляров для распределения нагрузки

Типичные признаки майнинга:

  • Множество процессов PowerShell с похожим CPU-использованием
  • Сетевая активность на портах майнинг пулов
  • Запуск из непривычных locations
  • Отсутствие видимых окон или интерфейсов

Методы обнаружения

Для проверки на наличие майнеров рекомендуется:

  1. Проверить сетевые соединения:
powershell
Get-NetTCPConnection | Where-Object {$_.OwningProcess -in (Get-Process powershell).Id} | 
    Select-Object RemoteAddress, RemotePort, State, OwningProcess
  1. Анализировать процессы с помощью VirusTotal:
  • Скачать suspicious.ps1 файлы и проверить их через VirusTotal API
  • Обратить внимание на процессы с неизвестными цифровыми подписями
  1. Использовать специализированные сканеры:
  • Windows Defender с глубоким сканированием
  • Malwarebytes AdwCleaner для обнаружения рекламного ПО
  • Autoruns для проверки автозагрузок

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


Практические PowerShell скрипты для мониторинга

Для систематического мониторинга и анализа PowerShell процессов можно использовать следующие готовые скрипты:

1. Скрипт для отслеживания высоконагруженных процессов

powershell
# HighCPU_PowerShell_Monitor.ps1
param([int]$Threshold = 10)

while($true) {
    $highCPUProcesses = Get-Process | Where-Object {
        $_.ProcessName -eq "powershell" -and $_.CPU -gt $Threshold
    }
    
    if ($highCPUProcesses) {
        Write-Host "Обнаружены процессы PowerShell с высоким CPU использованием:"
        $highCPUProcesses | ForEach-Object {
            $parent = Get-Process -Id $_.ParentId -ErrorAction SilentlyContinue
            Write-Host "PID: $($_.Id), CPU: $($_.CPU)% Родитель: $($parent.ProcessName), Команда: $($_.CommandLine)"
        }
        Write-Host "----------------------------------------"
    }
    
    Start-Sleep -Seconds 30
}

2. Скрипт для анализа происхождения процессов

powershell
# Process_Tracker.ps1
Get-Process powershell | ForEach-Object {
    $process = $_
    $parentProcess = Get-Process -Id $process.ParentId -ErrorAction SilentlyContinue
    $wmiProcess = Get-CimInstance -ClassName Win32_Process -Filter "ProcessId=$($process.Id)"
    
    [PSCustomObject]@{
        ProcessId = $process.Id
        ProcessName = $process.ProcessName
        CPU = $process.CPU
        Memory = $process.WorkingSet / 1MB
        ParentProcess = if($parentProcess) {$parentProcess.ProcessName} else {"Unknown"}
        ParentId = $process.ParentId
        Path = $process.Path
        CommandLine = $wmiProcess.CommandLine
        CreationDate = $wmiProcess.CreationDate
    }
} | Sort-Object CPU -Descending | Format-Table -AutoSize

3. Скрипт для обнаружения подозрительной активности

powershell
# Suspicious_Activity_Detector.ps1
$suspiciousPatterns = @(
    "*bitcoin*",
    "*monero*",
    "*miner*",
    "*crypto*",
    "*xmrig*",
    "*cpuminer*"
)

Get-Process powershell | ForEach-Object {
    $process = $_
    $commandLine = (Get-CimInstance -ClassName Win32_Process -Filter "ProcessId=$($process.Id)").CommandLine
    
    foreach($pattern in $suspiciousPatterns) {
        if($commandLine -like $pattern) {
            Write-Warning "Обнаружен подозрительный процесс: $($process.Id) с командой: $commandLine"
        }
    }
}

Эти скрипты помогут автоматически отслеживать аномальную активность PowerShell процессов и предоставлять детальную информацию для анализа.


Рекомендации по безопасности и профилактике

Для предотвращения появления нежелательных PowerShell процессов и обеспечения безопасности системы рекомендуется выполнить следующие меры:

1. Конфигурация политик выполнения PowerShell

Включите следующие политики для ограничения выполнения скриптов:

powershell
# Установка политики выполнения для текущего пользователя
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

# Проверка текущих политик
Get-ExecutionPolicy -List

2. Мониторинг запланированных задач

Регулярно проверяйте запланированные задачи на наличие подозрительных записей:

powershell
# Получение всех PowerShell задач
Get-ScheduledTask | Where-Object {$_.TaskPath -notlike "\Microsoft*" -and $_.Actions.Execute -like "*powershell*"}

3. Фильтрация сетевого трафика

Используйте брандмауэр Windows для блокировки подозрительных соединений, часто используемых майнерами:

powershell
# Блокировка известных майнинг пулов
$miningPools = @("stratum+tcp://pool.example.com:3333", "stratum+tcp://another-pool.com:4444")
foreach($pool in $miningPools) {
    New-NetFirewallRule -DisplayName "Block Mining Pool" -Direction Outbound -RemoteAddress ([System.Net.Dns]::GetHostAddresses($pool.Split('/')[2])[0].IPAddressToString) -Action Block
}

4. Регулярное обновление системы

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

5. Использование антивирусного программного обеспечения

Установите и регулярно обновляйте надежный антивирус, например:

  • Windows Defender с расширенными защитными функциями
  • Kaspersky Total Security
  • ESET Internet Security
  • Bitdefender Total Security

Эти меры помогут минимизировать риски появления вредоносных PowerShell процессов и обеспечить безопасность вашей системы.

Источники

  1. Complete a System Performance Check with PowerShell | NinjaOne
  2. PowerShell for Hackers-Survival Edition, Part 3: Know Your Enemy - Hackers Arise
  3. Start a Windows Defender Scan with PowerShell | NinjaOne
  4. TikTok Videos Weaponized to Deliver Self-Compiling PowerShell Malware - GBHackers
  5. How to Create a Scheduled Task Alert with PowerShell | NinjaOne
  6. PostMessage Vulnerabilities: Cross-Window Security Risks | InstaTunnel Blog
  7. PowerShell for Hackers, Part 6: Evading Detection - Hackers Arise

Заключение

Для эффективного отслеживания PowerShell процессов, потребляющих 10-12% CPU, необходимо использовать комплексный подход, включающий анализ родительско-дочерних отношений, мониторинг сетевой активности и использование специализированных инструментов. Основные шаги включают:

  1. Использование Process Explorer и PowerShell для анализа происхождения процессов
  2. Применение скриптов для автоматического мониторинга высокой загрузки CPU
  3. Проверку системы на наличие майнеров и вредоносного ПО с помощью антивирусных сканеров
  4. Регулярный мониторинг запланированных задач и автозагрузки
  5. Внедрение политик безопасности для ограничения выполнения скриптов

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