Windows Exploit Suggester
WES-NG 的 wes.py 脚本是一个 Python 2/3 工具,它使用漏洞利用定义文件并根据操作系统版本和已安装的补丁列表检查缺少的补丁。 WES-NG 随后自动迭代被替换的补丁链。要开始使用 wes.py,首先需要使用 --update(简写:-u)参数下载最新的定义文件,该参数会将最新的 definition.zip 文件下载到当前目录。接下来,可以使用先前提取的 systeminfo.txt 文件和可选的 qfe.txt 文件执行 wes.py,并将已安装的 KB 列表作为参数。有关所有受支持参数的完整列表,包括各种示例,请执行 wes.py --help(简写:-h)。
执行时,wes.py 将首先从 systeminfo.txt 确定操作系统版本,并从 definition.zip 文件中收集为该操作系统版本发布的所有KB。从此列表中删除了系统上安装的所有 KB,包括已被安装的替换 KB 替换的 KB。此步骤以递归方式执行,因此被安装的 KB 替换的完整 KB 链将被删除。验证适用于操作系统版本的所有 KB 后,只有未安装的 KB 会列为缺失 KB。最后,对于每个 KB,都会确定 CVE,如果安装了 KB,这些 CVE 将得到缓解。然后列出这些 CVE,包括以下信息。
过滤
此外,还可以过滤 WES-NG 输出中的漏洞。例如,如果攻击者对可能导致远程代码执行的漏洞或仅具有可用漏洞利用代码的漏洞感兴趣,这将非常有用。 --impact“远程代码执行”(简写:-i)和--exploits-only(简写:-e)参数可用于此目的。此外,还可以使用 --hide 参数隐藏某些产品的结果,或者使用 --severity(简写:-s)参数仅列出具有特定严重性的结果。要获得包括示例在内的参数的完整概述,请检查 --help 命令的输出,该命令也在 CMDLINE.md 中列出。
WES-NG 默认将结果输出到控制台。然而,为了进一步分析,WES-NG 还支持使用 --output(简写:-o)参数将结果以 CSV 格式存储到磁盘,例如:
请参考下面的演示动画,从收集操作系统版本和缺失的补丁到使用 WES-NG 识别缺失的补丁,包括使用描述的一些过滤器和 csv 输出选项。
消除误报
当查看 WES-NG 的结果时,不幸的是,它也发生了误报。例如,即使在完全打被修复的系统上,WES-NG 可能仍会显示一些 KB 缺失。这是因为WES-NG用来编译其定义的 MSRC 提要经常包含有关 KB 替换的不完整信息。
要考虑的另一点是 WES-NG 假设所有功能都已安装。例如,如果检查没有安装任何角色和功能的普通 Windows 服务器的 systeminfo.exe 输出文件,它可能会报告操作系统上没有安装 KB 的 IIS 漏洞。这是因为除了操作系统版本和安装的 KB 之外,WES-NG 没有关于安装了哪些角色和功能的信息。因此,可以安全地忽略未安装的组件中报告的漏洞。
为了消除误报,有多种方法可用。
如上所述,安全更新是每月发布的。在检查系统中是否有丢失的补丁时,一种实用的方法是简单地检查系统上安装的最新KB的发布日期,然后假设在那之后没有安装新的更新。如果由于 MSRC 替换的问题仍然将旧的 KB 列为缺失,可以很安全地假设这些可能是误报,因为已经安装了较新的 KB。 wes.py 的 --usekbdate(简写:-d)标志将执行这些步骤,并在输出中省略可能确实的旧kb。例如:
手动验证
另一个选项是执行WES-NG,然后在Microsoft Update Catalog网站的输出末尾手动验证缺失的KB列表。这可以通过查找缺失的 KB 并确定哪些 KB 已替换此 KB 以及该 KB 是否实际安装在系统中来完成。如果是这样,WES-NG 报告为缺失的 KB 可以明确指定为已安装,因此 WESN-NG 不会列出系统在未安装 KB 时暴露的漏洞。这样就避免了 MSRC 数据集中缺少的替换。在 WES-NG 中,可以使用 -p 参数将KB提供给 wes.py,例如 wes.py systeminfo.txt -p KB4487029。对每个假定缺失的KB重复此过程,其中-p参数允许使用空格分隔多个KB,例如-p KB4487029 KB4345421。有关手动验证WES-NG输出的更详细描述,请参阅WES-NG wiki中的消除误报页面。
自动验证
因为手动验证仍然是一个繁琐的过程,@DominicBreuker 贡献了一个有用的功能,通过解析网站和自动遍历链来自动化在 Microsoft 更新目录中查找替换的过程。可以通过向 wes.py 脚本提供 --muc-lookup 参数来使用此功能。在根据 MSRC 数据集确定缺失的补丁后,它将获取生成的缺失补丁并在 Microsoft 更新目录中自动验证每个补丁。
验证过程请点此观看。
除了使用 Microsoft 更新目录手动和自动验证替换之外,还有一种完全不同的方法来识别缺失的补丁,下一节将对此进行介绍。
微软更新
识别缺失 KB 的一种完全不同的方法是使用 Microsoft 更新。无需通过 systeminfo.exe 或确定已安装的安全更新部分中描述的其他方式获取操作系统版本和当前安装的版本,而是可以使用Windows自己的功能来确定当前时刻系统中仍然缺少哪些KB。
missingkbs.vbs
Windows Update 控制面板applet 或 Windows Update 现代控制面板页面能够列出缺失的 KB,但重新输入结果可能很乏味,并且它需要一个可能不可用的 GUI。出于这个原因,WES-NG 的存储库中添加了一个脚本,以允许从命令行获取所需的信息:missingkbs.vbs。
可以使用 --missing(简写:-m)参数将列出缺失 KB 的结果文件提供给 wes.py,以准确识别系统易受攻击的 CVE,从而利用MSRC提供的不完整的替代信息来规避所有问题。此外,与使用 systeminfo.exe 中的已安装补丁列表相比,missingkbs.vbs 实用程序也仅列出已安装功能的缺失 KB。
为了识别缺失的 KB,missingkbs.vbs 实用程序使用了在 wuapi.dll 库中实现的 Microsoft.Update.Session COM 对象。为了能够使用此 COM 对象的功能,在执行 missingkbs.vbs 实用程序时需要提升命令提示符。有关所有受支持参数的完整列表,包括各种示例,请执行 cscript missingkbs.vbs /Help(简写:/?)。
在不带参数的情况下执行 missingkbs.vbs 时,它将使用在线 Windows 更新服务器,或者如果配置了在企业环境中经常使用的 WSUS 服务器。因为 WSUS 服务器能够阻止其客户端的更新,所以 WSUS 服务器可能会报告系统没有缺失任何补丁,而实际上却缺少补丁。此外,如果系统没有(直接)连接到 Internet,能够检查任何缺失的 KB 仍然很有用。
因此,missingkbs.vbs 实用程序可以选择使用 Windows 更新脱机扫描文件,以便能够根据此文件确定缺失的 KB,而不是使用 Microsoft 更新/WSUS 服务器。这个大约 1 GB 的扫描文件可以从以下 URL 在连接 Internet 的系统上下载:http://download.windowsupdate.com/microsoftupdate/v6/wsusscan/wsusscn2.cab。
或者,也可以使用 missingkbs.vbs 实用程序通过 /D 参数下载此文件。接下来,可以将 wsusscn2.cab 文件与缺少的 kbs.vbs 实用程序一起复制到无法访问 Internet 的系统中。高级命令提示符可以使用 cscript.exe 启动 missingkbs.vbs 实用程序,提供 /Offline(简写:/F)参数,使其使用之前下载的扫描文件:cscript missingkbs.vbs /F。如果需要,可以使用 /I 参数提供扫描文件的完整路径,例如:
前面提到的 COM 对象将被初始化并指示使用扫描文件来识别本地系统上任何缺失的 KB。执行后,缺失的 KB 列表将打印在控制台中,并存储在当前目录中的 missing.txt 文件中。
wes.py -m
根据缺失的 KB 列表,确定系统面临的安全漏洞仍然具有挑战性。这就是为什么现在可以将 missing.txt 结果文件提供给 wes.py 以获得此洞察力的原因。从 1.00 版开始,已将 --missing(简写:-m)和 --os 参数添加到 wes.py 以促进此操作。
由于missing.txt 只包含系统中缺失的KB 列表,因此还需要指定操作系统。最简单的方法是首先仅使用 -m 参数执行 wes.py:wes.py -m missing.txt。随后,从输出中可能的操作系统列表中,可以选择相关操作系统的 ID 并再次执行 wes.py,现在还提供操作系统 ID:wes.py -m missing.txt --os 2 .
具体过程,请点此观看。
在某些情况下,WES-NG 没有关于缺失 KB 的信息。在这种情况下,可以使用安全更新部分表格中列出的 Microsoft 帮助页面获取有关 KB 的信息。
这样我们就可以从 systeminfo.exe 输出中获取已安装 KB 的列表以及更可靠的 missingkbs.vbs 实用程序以获取缺失的 KB。在这两种情况下,我们观察到两个输出都可以提供给 WES-NG,然后 WES-NG 列出 CVE,如果可用,包括漏洞,系统容易受到攻击。
下一节我们将更深入地了解 WES-NG 用于收集所有这些信息的数据源。
数据集
wsi .py脚本使用了位于GitHub上的wsi项目页面上的definition .zip文件。这些定义大约每周更新一次,包括最新的KB、CVE 和漏洞利用链接。因此,还建议通过运行 wes.py -u 定期更新定义的本地副本,如识别缺失的安全更新部分所述。定义文件中存储的信息由 wesng 存储库的收集器文件夹中的三个 collect_*.ps1 PowerShell 脚本收集并随后合并。本节将讨论三个数据源。
安全公告
Microsoft 一直在 Microsoft 网站上以公告的形式发布所谓的安全公告,在 Microsoft 下载中心发布 BulletinSearch.xlsx Excel 文件。这些一直发布到 2017 年初,当时 Microsoft 继续使用 Microsoft 安全响应中心 (MSRC) 的安全更新指南来发布有关漏洞的信息。那些在 2017 年之前完成过 OSCP 培训或其他与评估 Windows 操作系统补丁级别相关的工作的人,可能还记得 GDSSecurity 的 Sam Bertram 的 Windows Exploit Suggester21,它使用 BulletinSearch.xlsx 文件。由于 MSRC 的安全更新指南中未包含较旧的漏洞,因此 WES-NG 的收集器包含 collect_bulletin.ps1 脚本以收集此信息并将其存储在 Bulletin.csv 输出文件中。
MSRC
MSRC 的安全更新指南是安全公告的升级版,它提供了 Web 前端 和 API来提供有关漏洞的信息。 WES-NG 的收集器在其 collect_msrc.ps1 收集器脚本中使用此 API,其中相关属性被收集并存储在 MSRC.csv 输出文件中。这些属性包括 KB ID、CVE ID、受影响的产品、风险信息和被替换的 KB ID。
NVD
由美国国家标准与技术研究院 (NIST) 提供的国家漏洞数据库 (NVD) 包含常见漏洞和暴露 (CVE) 记录列表。这些记录提供了一个唯一的 ID,其中包含一些关于已知安全漏洞的详细信息。详细信息包括供应商,名称和CVE应用的版本,通用漏洞评分系统(CVSS)评分,详细说明了漏洞是如何容易利用和利用的影响是什么。最后,它提供了有关漏洞和任何可用的漏洞利用概念证明 (PoC) 代码的更多详细信息的参考。
由于 CVE 标准被软件和安全供应商广泛采用,Microsoft 还添加了对由 KB(以及以前的安全公告)解析的 CVE ID 的引用。因此,WES-NG 的 collect_nvd.ps1 收集器脚本使用这些 CVE 作为来自 NVD 数据集的信息与 Microsoft 数据集的信息之间的链接,并通过指向 PoC 漏洞利用代码的链接(如果可用)来丰富KB信息。
Custom
如前所述,MSRC 数据集经常包含不完整的替换信息。因此,可以通过向 Custom.csv 文件添加行来手动补充它。例如,为 MS17-010(永恒之蓝)KB添加了自定义替换信息,因为 MSRC 不完整,而且人们经常想验证某个系统是否存在风险。此外,可以在那里添加额外的漏洞利用链接和漏洞。然而,更好的选择是向 MITRE提交更新请求,以便丰富许多公司和个人使用的数据集,而不仅仅是 WES-NG 工具的数据集。
在收集器过程结束时,丰富的数据集与定义 wes.py 脚本和 Custom.csv 文件所需最低版本的文本文件一起存储在 definition.zip 文件中。然后将此定义文件上传到 WES-NG GitHub,在使用 -u 标志更新 WES-NG 时将获得该文件。
总结
本文首先解释了 Windows 操作系统 (OS) 的生命周期。接下来,讨论了在本地或远程系统上收集有关 Windows 操作系统和已安装或缺少的 KB 的信息的各种方法。此信息随后被用于确定系统暴露于哪些安全漏洞以及这些漏洞可能已经存在的任何公共漏洞。已经引入了工具(WES-NG 的 wes.py 和 missingkbs.vbs)来提高这个过程的效率。最后,解释了 WES-NG 工具的内部工作原理和局限性。
本文翻译自:https://bitsadm.in/blog/windows-security-updates-for-hackers如若转载,请注明原文地址