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

0

Eu quero escrever um script que mate todos os processos cujos executáveis sejam 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-Process e Stop-Process , respectivamente). Mas não sei como obter com eficiência 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 dados da etapa 2 para filtrar por autoridade de assinatura.
  4. Enviar lista filtrada para o processo de parada.

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 obtenho informações de assinatura digital para os executáveis associados aos processos atualmente em execução, de uma maneira que possa ser usada para filtrar a lista?
  2. Existe uma maneira de fazer o número 1 sem invocar um cmdlet separado após o Get-Process? (Por exemplo, olhando apenas as propriedades dos 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.

    
por Iszi 17.12.2015 / 16:26

1 resposta

0

Isso eliminará tudo assinado por Valve para aumentar sua produtividade:

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

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

Is there a way to do #1 without invoking a separate cmdlet after Get-Process? (Such as by just looking at properties of the objects delivered by Get-Process.)

Acho que não, porque System.Diagnostics.ProcessModule não possui propriedades que apontam para assinaturas autenticadas.

    
por 03.02.2016 / 22:38