Verificação MS Meltdown / Specter PowerShell - alguma maneira de focar ou filtrar a saída?

2

Eu tenho cerca de 100 servidores que eu tenho que garantir que sejam atenuados para o Specter e o Meltdown. A boa notícia é que a Microsoft criou um commandlet PowerShell acessível que verificará o status de mitigação de qualquer computador com Windows. A má notícia é que eles não incluíram nenhum parâmetro personalizado para isso, ele só tem os parâmetros comuns.

A verdadeira má notícia é que a saída é muito detalhada e não pode ser filtrada de maneira real. Aqui está um exemplo da saída de get-speculationcontrolsettings de apenas um servidor:

Speculation control settings for CVE-2017-5715 [branch target injection]

Hardware support for branch target injection mitigation is present: False
Windows OS support for branch target injection mitigation is present: True
Windows OS support for branch target injection mitigation is enabled: False
Windows OS support for branch target injection mitigation is disabled by system policy: True
Windows OS support for branch target injection mitigation is disabled by absence of hardware support: True

Speculation control settings for CVE-2017-5754 [rogue data cache load]

Hardware requires kernel VA shadowing: True
Windows OS support for kernel VA shadow is present: True
Windows OS support for kernel VA shadow is enabled: False

Suggested actions

 * Install BIOS/firmware update provided by your device OEM that enables hardware support for the branch target injection mitigation.
 * Follow the guidance for enabling Windows Server support for speculation control mitigations described in https://support.microsoft.com/help/4072698

O que eu realmente gostaria de fazer é ter uma boa tabela que eu possa exportar para CSV que mostre apenas nomes de servidores em uma coluna e valores True / False em outras colunas.

O que faz ajudar um pouco é que eu posso canalizar a saída para select e ele criará uma única linha da tabela no final de todo o lixo acima, mas quando eu executar get-speculationcontrolsettings contra toda uma série de servidores, ele coloca uma cópia de todo esse lixo e, em seguida, a linha da tabela para um servidor, em seguida, gera o lixo novamente e a linha da tabela para o próximo servidor, etc. / p>

Eu poderia enviar tudo para um arquivo de texto e, em seguida, pesquisar & substituir para se livrar de todo o lixo e, em seguida, converter texto em tabela e, em seguida, copiar colar para o Excel.

Mas o que seria muito legal é se há alguma maneira no PowerShell de ... bem, eu não sei. Apenas dados da tabela de saída? Talvez preencher um array de alguma forma e, em seguida, ecoar o array?

Alguma idéia brilhante?

Editar - Nota para outras pessoas

A versão final do comando que estou usando (depois de comentar todas as instruções write-host no próprio módulo, como sugerido na resposta aceita) é assim:

Invoke-Command -ComputerName $servernamess ${function:Get-SpeculationControlSettings} -ErrorAction SilentlyContinue | select PSComputerName, BTIHardwarePresent, BTIWindowsSupportPresent, BTIDisabledBySystemPolicy, BTIDisabledByNoHardwareSupport, KVAShadowWindowsSupportPresent, KVAShadowWindowsSupportEnabled | ft

Se você preencher a variável $servernames com uma lista de nomes de computadores, mas quiser fazer isso, o que esse comando faz é executar remotamente o comando get-speculationcontrolsettings em todos os servidores assim chamados. Você não verá a saída detalhada se tiver editado o arquivo psm1. Além disso, se houver algum nome de computador na variável para computadores que não estejam acessíveis, você receberá erros, por isso o parâmetro -ErrorAction SilentlyContinue está lá. Por fim, o comando seleciona o nome do servidor e as descobertas importantes relacionadas às atenuações e as formata em uma tabela.

Alguns localizam e substituem rapidamente para transformar espaços em vírgulas e você tem um CSV que pode abrir no Excel e aplicar alguma formatação condicional para gerenciamento para ver onde você está em Specter e Meltdown em seu ambiente Windows, sem esperar por conformidade para fazer outra digitalização do Nessus.

    
por Todd Wilcox 20.01.2018 / 15:07

2 respostas

2

Se você conhece um pouco o PowerShell, também pode fazer uma cópia do arquivo:

C:\Program Files\WindowsPowerShell\Modules\SpeculationControl.0.x\SpeculationControl.psm1

altere a saída para algo que você gosta e, em seguida, execute o novo script.

    
por 20.01.2018 / 15:35
2

Eu decidi tentar fazer isso da maneira mais difícil e me deparei com a resposta.

Ao executar estes comandos:

$servers = Get-ADComputer -Filter *
$servernames = $servers.name
Start-Transcript -Path "C:\SpecControlStatus.txt"
Invoke-Command -ComputerName $servernames ${function:Get-SpeculationControlSettings} | select PSComputerName, KVAShadowWindowsSupportPresent
Stop-Transcript

A transcrição não tem toda a saída "lixo" de cada invocação de Get-SpeculationControlSettings , ela só tem a tabela criada pela instrução select .

Eu acho que a saída "lixo" é de alguma forma apenas console.

Observe que o Domínio do Windows no qual estou trabalhando tem apenas servidores de aplicativos, portanto, obter os nomes de todos os computadores no domínio também é o nome de todos os servidores que preciso atenuar.

    
por 20.01.2018 / 15:29