Filtrar processos em execução pela autoridade de assinatura digital


0

Eu quero escrever um script que irá matar todos os processos cujos executáveis ​​são assinados por uma determinada autoridade. Eu sei como obter a lista de processos em execução e como enviar uma lista filtrada para ser eliminada. ( Get-Processe Stop-Process, respectivamente.) Mas não sei como obter de maneira eficiente as informações da assinatura digital para cada processo ou filtrar de acordo com essa assinatura.

Eu estou supondo que os passos serão algo como:

  1. Obtenha uma lista de todos os processos.
  2. Use outro cmdlet para obter a assinatura digital de cada processo.
  3. Use os dados da etapa 2 para filtrar por autoridade de assinatura.
  4. Enviar lista filtrada para Stop-Process.

No entanto, isso parece um pouco ineficiente em que eu gostaria de evitar a execução de comandos em todos os processos mais do que eu preciso. (Por exemplo: Fazer os passos 2 e / ou 3 do passo 1 seria bom.) Além disso, eu simplesmente não sei como fazer o passo 2.

Então, basicamente eu tenho duas perguntas aqui:

  1. Como faço para obter informações de assinatura digital para os executáveis ​​associados aos processos em execução no momento, de uma maneira que possa ser usada para filtrar a lista?
  2. Existe uma maneira de fazer o número 1 sem chamar um cmdlet separado após o Get-Process? (Por apenas olhando propriedades das objetos entregues pelo Get-Process.)

O ambiente atual está usando o PowerShell 4.0 no Windows 7 SP1. Observações sobre compatibilidade com versões anteriores / futuras de determinadas soluções são bem-vindas.

Respostas:


0

Isso vai matar tudo assinado por Valveaumentar sua produtividade:

Get-Process | Where-Object {
    (
         Get-AuthenticodeSignature -FilePath $_.MainModule.FileName
    ).SignerCertificate.Subject -like 'CN=Valve*'
} | Stop-Process

O Get-AuthenticodeSignature está disponível no PS 3.0 e superior. Como alternativa, você poderia tentar analisar a saída de Sigcheck : Comando para obter o nome do signatário de um .exe

Existe uma maneira de fazer o número 1 sem chamar um cmdlet separado após o Get-Process? (Por apenas olhando propriedades das objetos entregues pelo Get-Process.)

Eu não penso assim, porque System.Diagnostics.ProcessModule não tem propriedades que apontam para assinaturas de authenticode.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.