Como achar processo suspeito no Windows com Get-Process

O PC está lento, a ventoinha não para e o Gerenciador de Tarefas mostra uma lista de nomes que parecem todos legítimos: svchost.exe aparece quinze vezes, e um deles pode ser um impostor. O Gerenciador mostra o nome, mas não responde o que importa: de onde esse executável veio, quem assinou e quem o iniciou. O Get-Process do PowerShell, combinado com mais dois cmdlets, responde as três perguntas em poucos minutos.
O que o Get-Process entrega
Segundo a documentação da Microsoft, o Get-Process lista os processos do computador local e devolve objetos System.Diagnostics.Process, com dezenas de propriedades. Funciona no Windows PowerShell 5.1 e no PowerShell 7. As que interessam para triagem:
- Id: o PID do processo.
- ProcessName: o nome, sem a extensão.
- Path: o caminho completo do executável.
- StartTime: quando o processo começou.
- CPU: tempo total de processador usado, em segundos (acumulado, não é o percentual atual).
- WorkingSet: memória em uso, em bytes.
Abra o PowerShell como administrador. Sem elevação, o Path de processos protegidos pode vir vazio, e a documentação lembra que os parâmetros -Module e -FileVersionInfo exigem execução como administrador para processos que não são seus.
Como ver os processos que mais consomem CPU no PowerShell?
Rode Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 para listar os dez processos com mais tempo de CPU acumulado.
Get-Process |
Sort-Object CPU -Descending |
Select-Object -First 10 Name, Id, CPU, StartTime,
@{n='MB';e={[math]::Round($_.WorkingSet/1MB)}}, PathComo o CPU é acumulado, um serviço antigo de sistema sempre aparece no topo. Olhe com atenção para o que é recente: compare o StartTime com o momento em que a lentidão começou. Um processo desconhecido, iniciado de madrugada e já com muito tempo de CPU, merece investigação.
Passo 1: de onde o executável está rodando?
Programas legítimos moram em C:\Windows ou C:\Program Files. Malware costuma rodar de pastas onde o usuário comum consegue gravar: AppData, Temp, Downloads, ProgramData. Este filtro mostra tudo que está fora dos dois lugares esperados:
Get-Process |
Where-Object { $_.Path -and $_.Path -notmatch '^C:\\(Windows|Program Files)' } |
Select-Object Name, Id, StartTime, Path |
Sort-Object PathO regex cobre Program Files e Program Files (x86). Muito programa legítimo aparece aqui, como Chrome, Discord e Teams, que se instalam em AppData. Por isso a lista é um ponto de partida, não um veredito. O sinal de alerta é um nome que imita um processo do sistema (svchost.exe, explorer.exe, lsass.exe) rodando fora de C:\Windows\System32.
Passo 2: o executável tem assinatura digital válida?
O Get-AuthenticodeSignature lê a assinatura Authenticode de um arquivo. Ele só existe em Windows, conforme a documentação, e quando o arquivo tem assinatura embutida e de catálogo, usa a de catálogo. Cruze com os processos:
Get-Process | Where-Object Path | Select-Object -Unique Path |
ForEach-Object {
$s = Get-AuthenticodeSignature -LiteralPath $_.Path
[pscustomobject]@{
Status = $s.Status
Signer = $s.SignerCertificate.Subject
Path = $_.Path
}
} | Where-Object Status -ne 'Valid' | Format-Table -AutoSizeO resultado são os executáveis em memória sem assinatura válida (NotSigned, HashMismatch, NotTrusted). Software pequeno e ferramenta interna de empresa costumam ser sem assinatura, então nem tudo é malware. Mas um HashMismatch, que indica arquivo alterado depois de assinado, pede atenção imediata.
Um aviso importante: assinatura válida não significa arquivo seguro. Ela prova que o arquivo não foi alterado depois de assinado e que o certificado é confiável, nada além disso. Atacantes usam certificados roubados e abusam de binários legítimos da própria Microsoft. A assinatura serve para descartar o óbvio, não para dar o processo como inocente.
Passo 3: quem iniciou o processo?
O Get-Process não mostra o processo pai nem a linha de comando. Para isso, use a classe Win32_Process do WMI:
Get-CimInstance Win32_Process |
Select-Object ProcessId, ParentProcessId, Name, CommandLine |
Sort-Object ParentProcessIdCom o ParentProcessId você reconstrói a árvore. Algumas relações são normais e outras são suspeitas:
- Normal: o
svchost.exelegítimo é iniciado peloservices.exee roda deC:\Windows\System32. - Suspeito:
powershell.exeoucmd.execomo filho dewinword.exe,excel.exeou do navegador. É o padrão clássico de macro maliciosa ou de documento que dispara um comando. - Suspeito:
CommandLinecom-EncodedCommand,-WindowStyle Hiddenou download de URL.
Cuidado ao colar essa saída em chamado ou fórum: a linha de comando pode conter senhas e tokens passados como argumento.
Passo 4: o processo está falando com a internet?
Ligue o PID às conexões de rede com o Get-NetTCPConnection:
Get-NetTCPConnection -State Established |
Select-Object RemoteAddress, RemotePort, OwningProcess,
@{n='Processo';e={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName}} |
Sort-Object ProcessoUm processo que você não reconhece, com conexão estabelecida para um IP externo em porta incomum, fecha o quadro. O post sobre auditoria de portas abertas com Get-NetTCPConnection detalha esse cmdlet.
Achei algo estranho. E agora?
Antes de encerrar o processo, anote as evidências: o Path, o CommandLine e o hash do arquivo, que você gera com o Get-FileHash para consultar em um serviço de reputação como o VirusTotal. Depois, encerre:
Stop-Process -Id 1234 -ForceMatar o processo é só o primeiro passo. Se for malware, ele provavelmente tem como voltar: uma tarefa agendada, um serviço ou uma chave de inicialização. Se o processo reaparecer depois de encerrado, é sinal de persistência. Em máquina de trabalho, avise o time de segurança antes de mexer em mais coisa, e em PC pessoal considere desconectar da rede e rodar uma verificação completa com o Microsoft Defender.
Lição maior
Nome de processo não prova nada, porque qualquer um pode chamar um executável de svchost.exe. O que identifica de verdade é o conjunto: caminho, assinatura, pai e comportamento de rede. Para registrar esse tipo de atividade de forma permanente, configure os logs de auditoria do PowerShell e, se quiser aprofundar a rotina de triagem, siga para a revisão de tarefas agendadas e persistência.




Comentários