自动化分析 Windows 系统缺失的补丁及对应的漏洞情况(上)
2021-12-02 12:55:00 Author: www.4hou.com(查看原文) 阅读量:30 收藏

经常有很多人问我“我知道 Windows 系统上安装了哪些补丁 (KB),但我怎么知道它面临哪些风险?”。这是一个很好的问题,我相信还有更多的人有同样的疑问。挑战在于,通过简单地查看已安装 KB 的列表,并没有简单的方法来了解系统暴露的漏洞是什么。

我们会在本文介绍 Windows 版本控制的工作原理,然后完成从本地或远程系统获取 Windows 版本信息和已安装 KB 列表的步骤。有了这些信息,我们就能够快速识别他们正在攻击的系统的漏洞,并在可用时使用漏洞来扩展他们的立足点。这将帮助我们快速评估系统面临的风险。wes.py 和 missingkbs.vbs 将尽可能有效地支持识别过程。web.py 是一个Python 的web 框架,它简单而且功能强大。web.py 是公开的,无论用于什么用途都是没有限制的。而且相当的小巧,应当归属于轻量级的web 框架。但这并不影响web.py 的强大,而且使用起来很简单、很直接。在实际应用上,web.py 更多的是学术上的价值,因为你可以看到更多web 应用的底层。

在深入研究如何识别缺失的 KB 之前,让我们首先了解一些有关 Windows 版本如何工作的背景信息。

Windows操作系统

从其 Windows 操作系统中,Microsoft 提供了客户端和服务器版本。这些版本共享相同的内核,但针对不同的目的。服务器版本设计用于多种角色,如域控制器、Web 服务器和虚拟化主机,允许在非常强大的硬件上使用。客户端版本专为家庭、学校和企业用户的日常使用而设计,用于文本处理、网页浏览和玩游戏等用途。客户端和服务器操作系统的新版本都会定期发布,在撰写本文时,Windows 11 和 Windows Server 2022 分别是最新版本的操作系统。之前的版本为Windows 10 (build 1809)/Server 2019, Windows 10 (build 1607)/Server 2016, Windows 8.1/Server 2012 R2, Windows 8/Server 2012, Windows 7/Server 2008 R2, Windows Vista/Server 2008和Windows XP/Server 2003 [R2]。

除了这两种版本之外,Microsoft 还在客户端和服务器版本中区分了不同的版本。两种版本都有多个版本,具体取决于版本在功能、许可限制和更新周期以及支持方面有所不同。本文的重点将主要放在 Windows 10 及其服务器版本 Windows Server 2016 及更高版本上。

由于 Microsoft 不会永远支持操作系统,因此仍然支持的操作系统和版本以及生命周期结束的操作系统和版本存在变动时间窗口。一旦产品生命周期结束,Microsoft 将不再向操作系统提供安全更新,因此将来发现的任何漏洞都不会再修补,尽管在极少数情况下会例外。其中一个例外是Windows XP, 8和Windows Server 2003的安全更新,以缓解永恒之蓝漏洞。根据 Windows 版本的不同,有三个更新渠道,它们在添加新功能的速度方面有所不同,并且与支持的长度直接相关。该渠道的每一个发布都可以被视为一个里程碑,在这个里程碑上,新特性被添加到操作系统中。

首先要执行的检查是确定是否仍然支持该操作系统。这可以通过在 Lifecycle 文档网站上搜索遇到的 Windows 版本来检查。此网站的 URL 是:https://docs.microsoft.com/en-us/lifecycle/products/?products=windows。

1.png

搜索 Windows 10 的示例:https://docs.microsoft.com/en-us/lifecycle/products/?products=windows&terms=Windows%2010

发布渠道

Windows 10 的消费者版(家庭版和专业版)只有 18 个月的支持期,而 Windows 10 的商业版(企业版和教育版)在秋季发布时有 30 个月的支持期。这些 Windows 10 版本每 6 个月发布一次,是所谓的半年频道 (SAC) 的一部分。除了 Windows 10 的消费者和商业版本之外,还有一个特殊版本旨在用于 ATM 和医疗设备等专业环境。此版本提供 10 年支持,每 2-3 年发布一次,作为长期服务渠道 (LTSC) 的一部分。

对Windows Server来说,也有两个版本,附加一年的 Windows Server(Windows Server 2016、Windows Server 2019 等是 LTSC 的一部分,每 2-3 年发布一次,并提供 10 年的支持。另一个 Windows Server 版本附加了版本名称,是 SAC 的一部分,提供 18 个月的支持。此类 SAC 版本的一个示例是 Windows Server, build 2004。SAC 版本不包括桌面体验功能(Windows Server 的图形 UI)。

下表列出了各种渠道的支持时长。

2.png

这些版本过去被命名为YYMM,其中YY是一个两位数的年份,MM是一个两位数的月份,例如 1909 表示 2019 年 9 月的版本。从 2020 年的 Windows 10 秋季版本开始,这已更改为YYH1/YYH2 半年模式.这意味着 2021 年 5 月的 Windows 10 版本被称为 21H1。这些版本的名称用于各种工具的输出,这些工具在 Windows 中显示操作系统版本信息,我们将在后面的部分中介绍。

从发布的那一刻起,支持的月数(对于LTSC来说是年)就开始计算了。可以通过Windows Update、Microsoft Update Catalog10和Windows Server Update Services (WSUS)下载不同渠道的定期发布的更新。此外,还发布了 .iso 磁盘映像以进行干净部署。

安全更新

现在很清楚如何确定一个特定的操作系统版本是否被支持或支持周期是否结束,是时候看看安全更新了。尽管在出现紧急漏洞的情况下,安全更新可能会在每月常规计划之外部署,但 Microsoft 通常会在每个月的第二个星期二发布安全更新。这一天被称为周二更新,然而这一天也被称为周二补丁。

在 Microsoft 世界中,每个安全更新以及非安全更新都可以使用KB (KB) 文章 ID 进行识别。可以在 Microsoft 安全响应中心 (MSRC) 安全更新指南中使用此 KB 编号来获取有关某个漏洞的可利用性的更多信息。 Microsoft 帮助页面上有关于安全更新的更多信息,Microsoft 更新目录提供了下载安全更新安装文件和获取有关替代KB的信息的链接。除了 KB 之外,这些安全更新也称为修补程序和补丁。在本文中,这些名称可以互换使用。

下面是微软提供的关于安全更新的各种资源。

3.png

确定已安装的安全更新

作为黑客,我们想确定某个系统是否缺少安全更新,如果是,请记下它,甚至使用一个漏洞来滥用漏洞并获取访问权限或升级。在能够确定缺少哪些安全更新之前,首先需要操作系统版本和当前安装的补丁的详细信息。

有多种方法可以检索此信息,既可以从本地系统检索,也可以从远程系统检索,前提是运行该命令的帐户具有访问远程系统的足够权限。根据不同的获取方式,操作系统版本信息和安装的安全补丁信息可以通过相同的命令获取,也可以通过不同的命令获取。此外,诸如 winver.exe、msinfo32.exe 和 appwiz.cpl 中的“查看已安装更新”部分等 GUI 工具已内置于 Windows 中,但是这些工具中的信息无法轻松导出到文件中以供稍后处理,因此我们不会专注于这些工具。

systeminfo.exe

systeminfo.exe 是自最早版本的 Windows 以来内置于 Windows 的实用程序。此工具列出已安装的补丁程序以及 Windows 版本,并且还能够从远程系统收集此信息。要从远程系统获取信息,可以使用 /S 参数。当前进程所运行的身份应该对远程系统具有权限,或者需要使用 /U 和 /P 参数提供凭据。此命令严重依赖 Windows Management Instrumentation (WMI) 来收集本地和远程系统上的信息。

WMIC.exe

WMIC.exe 是 WMI 命令行实用程序,它允许在本地和远程查询 WMI 和调用 WMI 中的函数。正如 systeminfo.exe 实用程序段落中所讨论的,WMI 提供的类在查询时会列出操作系统的详细信息和已安装的安全更新。这些类分别是位于 root\CIMv2 命名空间中的 Win32_OperatingSystem 类和 Win32_QuickFixEngineering 类。 WMIC.exe 实用程序为这些类提供别名,即 OS 和 QFE,但也可以使用完整的类名。

PowerShell cmdlet

PowerShell 提供了 Get-ComputerInfo 和 Get-HotFix cmdlet 来分别获取本地计算机的信息,并列出本地和远程系统上已安装的修补程序。 Get-ComputerInfo cmdlet 是从 PowerShell 5.1 版添加的。这两个命令的底层再次使用 WMI 来获取相关信息。可以使用 Invoke-Command cmdlet 通过 WinRM 在远程系统上执行 Get-ComputerInfo 和 Get-HotFix cmdlet,但这不在本文的讨论范围。

通过 PowerShell 的 WMI

除了使用 WMIC.exe 实用程序,还可以使用 PowerShell 的内置 Get-WmiObject cmdlet(或另外使用 PowerShell 版本中的 Get-CimInstance cmdlet)。再次使用这些 cmdlet,可以在本地和远程查询 Win32_OperatingSystem 类和 Win32_QuickFixEngineering 类。如果您需要在红队演习期间秘密连接此信息,NoPowerShell .NET 二进制文件也支持这些 cmdlet。

非本地工具

除了内置的 Windows 实用程序和 PowerShell cmdlet 之外,还有一些工具也能够获取操作系统版本信息和已安装的安全更新。此类工具的两个示例是 srvinfo.exe,它是 Windows Server 2003 Resource Kit的一部分,psinfo.exe是 Sysinternals 套件的一部分,现在由 Microsoft 维护。最后,作为 Windows Exploit Suggester - Next Generation (WES-NG) 工具一部分的 missingkbs.vbs 实用程序不仅会列出已安装的补丁,而且还能准确确定缺少的补丁。此实用程序将在 Microsoft 更新部分进行广泛讨论。

下表总结了上面描述的所有命令,其中二进制实用程序具有.exe扩展名,而其他的则是 PowerShell cmdlet。

4.1.png

4.2.png

为了进一步处理,最好将上述实用程序和cmdlet输出的信息存储在一个文件中。这可以通过将工具的标准输出(STDOUT)重定向到一个文件来实现。当从命令提示符(cmd.exe)启动(.exe)实用程序时,这可以通过在命令末尾附加> myfile.txt来完成此操作。例如,对于systeminfo.exe,使用以下命令行。

5.png

对于PowerShell,可以使用重定向符号(>)(Get-HotFix > hotfixes.txt),或者输出可以通过管道传递到Out-File cmdlet,可以选择使用-Encoding参数提供需要使用的编码类型。此外,在只需要特定属性的数据的情况下,可以使用ForEach-Object cmdlet(或别名%)指定该属性,并随后通过管道传递到Out-File cmdlet,例如:

6.png

识别缺失的安全更新

一旦收集了Windows版本信息和安装的安全更新,下一步就是确定哪些安全更新丢失了。可以在本地复制上一节中创建的文件,以便进行进一步的调查,以确定漏洞和潜在的可用攻击。

正如在安全更新一节中所讨论的,Microsoft更新目录提供了关于替换KB的信息。可以查找每个KB,并确定哪些更新的KB替换了这个KB,并检查这些KB是否也以递归的方式安装。但是,如果这样,就需要对整个KB进行检查,确认是否被替换。这是研究人员开发的 Windows Exploit Suggester - Next Generation (WES-NG)实用程序。 WES-NG 使用 MSRC 数据集来识别各种 KB 之间的重叠链接,并通过通用漏洞和暴露 (CVE) ID 将这些与可能可用于漏洞的潜在漏洞联系起来。稍后我将在数据集部分详细了解这些数据源。

在默认情况下,WES-NG包含在BlackArch Linux渗透测试发行版和存储库中,但也可以在任何其他操作系统上使用Python的pip实用程序(pip install wesng)或简单地复制WES-NG存储库:git clone --depth 1 https://github.com/bitsadmin/wesng轻松获得。

本文翻译自:https://bitsadm.in/blog/windows-security-updates-for-hackers如若转载,请注明原文地址


文章来源: https://www.4hou.com/posts/Qg5Y
如有侵权请联系:admin#unsafe.sh