我如何检查 MS15-011/15-014 (JASBUG)?

How can I check for MS15-011/15-014 (JASBUG)?

我正在尝试构建一个 PowerShell 脚本来检查机器是否存在此漏洞。但我想在注册表级别进行检查。我不信任 KB3000483 的 Add/Remove 程序列表。我需要确定 SMB 和 GPO 设置是否正确。我需要这个,因为我正在对 100 多台机器进行检查,谁有时间手动检查?

您可以查询 WMI 以查看 Class Win32_QuickFixEngineering 以查看所有已安装补丁的列表。查找此特定补丁的代码如下:

Get-CimInstance -ClassName Win32_QuickFixEngineering | Where HotFixID -eq KB3000483

现在,如果您想查询一大群计算机,我会使用这样的代码:

'localhost','offline' | ForEach {

    try {$a=Get-CimInstance -ClassName Win32_QuickFixEngineering  -ErrorAction Stop -ComputerName $_ | Where HotFixID -eq KB3000483 | Select HotFixID,InstalledOn,@{Name='Status';Exp={'Installed'}},@{Name='SystemName';Exp={$_.CSName}} }
   catch{$a= [pscustomobject]@{HotFixID="NA";InstalledOn='NA';Status='Not Installed';SystemName=$_}}
 finally{[pscustomobject]@{HotFixID=$a.HotFixID;InstalledOn=$a.InstalledOn;Status=$a.Status;SystemName=$a.SystemName} }

   }

结果?

HotFixID                         InstalledOn                      Status                           SystemName                      
--------                         -----------                      ------                           ----------                      
KB3000483                        2/14/2015 12:00:00 AM            Installed                        BEHEMOTH                        
NA                               NA                               Not Installed                                                    

因此,对于您整个环境中的 运行,只需将我的 'localhost'、'offline' 等替换为 Get-AdComputer -LdapFilter... 之类的查询或从 CSV 中读取或文本文件。

现在,如果您对 Try $a/ Catch $a 行感到好奇,我们在这里做的是使用 Try/Catch/Finally 来尝试一些代码,如果遇到错误我们使用 catch阻止。我们将两者的示例存储在 $a 中,以便我们可以在 finally{} 块中将它们拉出以获得一些不错的标准化输出。如果我们 运行 进入没有补丁或离线的系统,则会执行 Catch{} 块。

希望这能让你入门!

您可以使用 Systeminfo 查看所有已安装的修补程序 例如,当我使用命令 systeminfo 时,我得到

Hotfix(s):                 255 Hotfix(s) Installed.

还有很多关于 windows 的信息,比如 'last boot !' 对于域中所有客户端中的 运行 此命令,您可以在启动时为所有客户端使用 gpo 和设置组策略 运行 脚本, 运行 在你想要的所有机器上执行命令的另一种方法,你可以使用 "Invoke-Command" 语法非常简单,如:

$command = { Get-EventLog -log "Windows PowerShell" | where {$_.Message -like "*certificate*"} }
Invoke-Command -ComputerName S1, S2 -ScriptBlock $command

您可以添加[-Credential] 用于所有电脑的身份验证 另一种方法是在你用系统中心控制的所有机器上使用系统中心执行 运行 命令 问候