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.