Windows 11数字取证视角下的关键技术与取证变化
引言
Windows 11已于几年前发布,但企业采用率相对较低。根据我们全球应急响应团队(GERT)调查的统计数据,直到2025年初,我们发现已于2020年终止支持的Windows 7的出现频率仅略低于最新的操作系统。大多数系统仍在运行Windows 10。
最广泛使用的操作系统发布于十多年前,微软将于2025年10月14日终止对其支持。这意味着在我们提供事件响应服务的组织中,我们肯定会看到Windows 11系统数量的增加。这就是我们决定简要概述此操作系统中取证工件变化的原因。这些信息应该对我们现场的同事有所帮助。此处描述的工件适用于Windows 11 24H2,这是撰写本文时的最新操作系统版本。
Windows 11的新特性
Recall功能
Recall功能于2024年5月首次推出。它允许计算机记住用户在过去几个月内在设备上所做的一切。其工作原理是每隔几秒对整个显示屏进行截图。然后,本地AI引擎在后台分析这些截图,提取所有有用信息,随后保存到数据库。该数据库随后用于智能搜索。自2025年5月起,Recall已在配备NPU(用于AI计算的专用芯片,目前仅与ARM CPU兼容)的计算机上广泛可用。
Microsoft Recall无疑是Windows 11宣布的功能中宣传最广泛且最具争议的功能之一。自首次亮相以来,由于其对数据隐私构成的潜在威胁,它一直是网络安全社区批评的主题。微软在发布前对Recall进行了改进,但某些担忧仍然存在。由于其争议性,该选项在Windows 11的企业版本中默认禁用。但是,检查它创建的工件是值得的,以防攻击者或恶意软件激活它。理论上,组织的IT部门可以使用组策略启用Recall,但我们认为这种情况不太可能发生。
如前所述,Recall会截取屏幕截图,这自然需要在分析前进行临时存储。原始的JPEG图像可以在 %AppData%\Local\CoreAIPlatform.00\UKP\{GUID}\ImageStore\* 找到。文件名本身就是屏幕截图的标识符。
除了屏幕截图,它们的元数据存储在标准的Exif.Photo.MakerNote (0x927c)标签内。此标签包含大量有趣的数据,例如前景窗口的边界、捕获时间戳、窗口标题、窗口标识符以及启动窗口的进程的完整路径。此外,如果在捕获屏幕截图时正在使用浏览器,则可能会保留URI和域名等详细信息。
Recall是按用户启用的。用户注册表配置单元中的一个键,特别是 Software\Policies\Microsoft\Windows\WindowsAI\,负责启用和禁用这些屏幕截图的保存。微软还在最新的Windows 11版本中引入了几个与Recall管理相关的新的注册表键。
需要注意的是,经过公众争议后改进的功能版本包含一个特定的过滤器,旨在防止屏幕上出现潜在敏感信息时保存屏幕截图和文本。这包括,例如,隐身浏览器窗口、支付数据输入字段或密码管理器。然而,研究人员指出,此过滤器可能无法始终可靠地启动。
为了在所有从屏幕截图捕获的数据上实现快速搜索,系统使用两个DiskANN向量数据库(SemanticTextStore.sidb 和 SemanticImageStore.sidb)。然而,对于调查来说,最有趣的是标准的SQLite数据库:%AppData%\Local\CoreAIPlatform.00\UKP\{GUID}\ukg.db,它由20个表组成。在最新版本中,它无需管理员权限即可访问,但它是加密的。在撰写本文时,没有公开已知的方法可以直接解密该数据库。因此,我们将检查2024年带有Recall的Windows 11测试版中最相关的表。
- App表 保存有关启动应用程序图形用户界面窗口的进程的数据。
- AppDwellTime表 包含诸如启动应用程序GUI窗口的进程的完整路径(WindowsAppId列)、启动的日期和时间(HourOfDay, DayOfWeek, HourStartTimestamp)以及窗口显示的持续时间(DwellTime)等信息。
- WindowCapture表 记录事件类型(Name列):
WindowCreatedEvent表示应用程序窗口的第一个实例的创建。它可以与创建窗口的进程关联。WindowChangedEvent跟踪窗口实例的更改。它允许在WindowId列(包含窗口标识符)的帮助下监视窗口实例的移动或大小更改。WindowCaptureEvent表示创建包含应用程序窗口的屏幕快照。除了窗口标识符,它还包含一个图像标识符(ImageToken)。该令牌的值随后可用于从上述ImageStore目录中检索JPEG快照文件,因为文件名对应于图像标识符。WindowDestroyedEvent表示应用程序窗口的关闭。ForegroundChangedEvent不包含从取证角度有用的数据。
WindowCapture表还包括一个指示应用程序窗口是否处于前台(IsForeground列)的标志、作为屏幕坐标的窗口边界(WindowBounds)、窗口标题(WindowTitle)、一个用于属性的服务字段(Properties)以及事件时间戳(TimeStamp)。
- WindowCaptureTextIndex_content 包含通过光学字符识别(OCR)从快照中提取的文本(c2列)、窗口标题(WindowTitle)、应用程序路径(App.Path)、快照时间戳(TimeStamp)和名称(Name)。该表可以与WindowCapture表(c0和Id列保存相同的数据,可用于连接表)和App表(相同的数据位于AppId和Id列中)结合使用。
Recall工件(如果该功能在事件发生前在系统上启用)对于事件响应者来说是一个“金矿”。它们允许详细重建攻击者在受感染系统内的活动。相反,同样的功能可能被武器化:如前所述,Recall中的私人信息过滤器并不能完美工作。因此,攻击者和恶意软件可以利用它来定位凭据和其他敏感信息。
更新的标准应用程序
Windows 11中的标准应用程序也进行了更新,对于某些应用程序,这涉及界面和功能的更改。具体来说,此版本操作系统中的记事本、文件资源管理器命令提示符等应用程序现在支持多标签模式。值得注意的是,即使在进程终止后,记事本仍保留这些标签的状态。因此,Windows 11现在有了与此应用程序使用相关的新的工件。我们的同事AbdulRhman Alfaifi对此进行了详细研究;他的工作可在此处找到。
Windows 11中记事本工件的主要目录位于 %LOCALAPPDATA%\Packages\Microsoft.WindowsNotepad_8wekyb3d8bbwe\LocalState\。
此目录包含两个子目录:
- TabState 为每个记事本标签存储一个
{GUID}.bin状态文件。如果用户未将其内容保存到文件,此文件包含标签的内容。对于已保存的标签,该文件包含已保存内容的完整路径、内容的SHA-256哈希、内容本身、文件的最后写入时间以及其他详细信息。 - WindowsState 存储有关应用程序窗口状态的信息。这包括标签总数、它们的顺序、当前活动标签以及应用程序窗口在屏幕上的大小和位置。状态文件名为
*.0.bin或*.1.bin。
已保存标签的 {GUID}.bin 结构如下:
| 字段 | 类型 | 值和解释 |
|---|---|---|
| signature | [u8;2] | NP |
| ? | u8 | 00 |
| file_saved_to_path | bool | 00 = 文件未保存在指定路径;01 = 文件已保存 |
| path_length | uLEB128 | 写入标签内容的文件的完整路径长度(以字符计) |
| file_path | UTF-16LE | 写入标签内容的文件的完整路径 |
| file_size | uLEB128 | 写入标签内容的磁盘上的文件大小 |
| encoding | u8 | 文件编码:0x01 – ANSI;0x02 – UTF-16LE;0x03 – UTF-16BE;0x04 – UTF-8BOM;0x05 – UTF-8 |
| cr_type | u8 | 回车类型:0x01 — CRLF;0x02 — CR;0x03 — LF |
| last_write_time | uLEB128 | 最后写入(标签保存)到文件的时间,格式为FILETIME |
| sha256_hash | [u8;32] | 标签内容的SHA-256哈希 |
| ? | [u8;2] | 00 01 |
| selection_start | uLEB128 | 节选开始相对于文件开头的偏移量 |
| selection_end | uLEB128 | 节选结束相对于文件开头的偏移量 |
| config_block | ConfigBlock | ConfigBlock结构配置 |
| content_length | uLEB128 | 文件中文本的长度 |
| content | UTF-16LE | 在被新数据修改之前的文件内容。如果标签保存到磁盘后没有后续修改,则此字段不存在。 |
| contain_unsaved_data | bool | 00 = {GUID}.bin文件中的标签内容与磁盘上文件中的标签内容匹配;01 = 对标签的更改未保存到磁盘 |
| checksum | [u8;4] | {GUID}.bin文件内容的CRC32校验和,从文件开头偏移0x03 |
| unsaved_chunks | [UnsavedChunk] | UnsavedChunk结构列表。如果标签保存到磁盘后没有后续修改,则此项不存在 |
从未保存过的标签在TabState目录中的 {GUID}.bin 文件结构较短:
| 字段 | 类型 | 值和解释 |
|---|---|---|
| signature | [u8;2] | NP |
| ? | u8 | 00 |
| file_saved_to_path | bool | 00 = 文件未保存在指定路径(始终) |
| selection_start | uLEB128 | 节选开始相对于文件开头的偏移量 |
| selection_end | uLEB128 | 节选结束相对于文件开头的偏移量 |
| config_block | ConfigBlock | ConfigBlock结构配置 |
| content_length | uLEB128 | 文件中文本的长度 |
| content | UTF-16LE | 文件内容 |
| contain_unsaved_data | bool | 01 = 对标签的更改未保存到磁盘(始终) |
| checksum | [u8;4] | {GUID}.bin文件内容的CRC32校验和,从文件开头偏移0x03 |
| unsaved_chunks | [UnsavedChunk] | UnsavedChunk结构列表 |
请注意,可以在记事本设置中禁用标签保存。如果是这种情况,则TabState和WindowState工件将无法用于分析。
但是,如果这些工件可用,您可以使用我们的同事Abdulrhman Alfaifi开发的 notepad_parser 工具来自动处理它们。
此特定工件可能有助于恢复恶意脚本和批处理文件的内容。此外,它可能包含网络扫描器、凭据提取实用程序以及威胁行为者使用的其他可执行文件的结果和日志,假设对它们进行了任何未保存的修改。
Windows 11中熟悉工件的更改
除了新的工件,Windows 11还对现有的工件进行了一些值得注意的更改,调查人员在分析事件时应意识到这些更改。
NTFS属性行为更改
在Windows 10和Windows 11之间,两个 $MFT 结构中的NTFS属性行为发生了更改:$STANDARD_INFORMATION 和 $FILE_NAME。
$STANDARD_INFORMATION 属性行为的变化如下表所示:
| 事件 | 访问文件 | 重命名文件 | 复制文件到新文件夹 | 在同一卷内移动文件 | 在卷之间移动文件 |
|---|---|---|---|---|---|
| Win 10 1903 | 文件访问时间戳更新。但是,如果系统卷大于128 GB,则保持不变 | 文件访问时间戳保持不变 | 副本元数据更新 | 文件访问时间戳保持不变 | 元数据从原始文件继承 |
| Win 11 24H2 | 文件访问时间戳更新 | 文件访问时间戳更新以匹配修改时间 | 副本元数据从原始文件继承 | 文件访问时间戳更新以匹配移动时间 | 元数据更新 |
$FILENAME 属性的行为更改如下:
| 事件 | 重命名文件 | 通过资源管理器在同一卷内移动文件 | 移动到回收站 |
|---|---|---|---|
| Win 10 1903 | 时间戳和元数据保持不变 | 时间戳和元数据保持不变 | 时间戳和元数据保持不变 |
| Win 11 24H2 | 文件访问和文件修改时间戳以及元数据从先前版本的 $STANDARD_INFORMATION 继承 |
文件访问和文件修改时间戳以及元数据从先前版本的 $STANDARD_INFORMATION 继承 |
文件访问和文件修改时间戳以及元数据从先前版本的 $STANDARD_INFORMATION 继承 |
在检查NTFS文件系统的服务文件时,分析人员应考虑这些更改。
程序兼容性助手
程序兼容性助手(PCA)最早出现在2006年发布的Windows Vista中。其目的是运行为旧版操作系统设计的应用程序,因此是识别程序执行证据的相关工件。
Windows 11引入了与此功能相关的新的文件,这些文件与应用程序执行的取证分析相关。这些文件位于目录 C:\Windows\appcompat\pca\ 中:
-
PcaAppLaunchDic.txt:此文件中的每一行包含特定可执行文件最近启动的数据。此信息包括最后一次启动的时间(格式为 YYYY-MM-DD HH:MM:SS.f (UTC))和文件的完整路径。数据元素由竖线字符 (|) 分隔。当文件再次运行时,相应行中的信息会更新。该文件使用ANSI (CP-1252) 编码,因此运行名称中包含Unicode的文件会“破坏”它:新条目(包括运行带有Unicode的文件的条目)停止出现,只有旧的条目得到更新。
-
PcaGeneralDb0.txt 和 PcaGeneralDb1.txt 在数据记录期间交替:新记录保存到主文件,直到其大小达到两兆字节。一旦达到该限制,辅助文件将被清除并成为新的主文件,然后完整的主文件被指定为辅助文件。此循环无限重复。数据字段由竖线 (|) 分隔。该文件使用UTF-16LE编码并包含以下字段:
- 可执行文件启动时间 (YYYY-MM-DD HH:MM:SS.f (UTC))
- 记录类型 (0–4):
- 0 = 安装错误
- 1 = 驱动程序被阻止
- 2 = 异常进程退出
- 3 = PCA Resolve调用(负责在运行旧程序时修复兼容性问题的组件)
- 4 = 值未设置
- 可执行文件路径。此路径省略卷标号并经常使用环境变量(%USERPROFILE%, %systemroot%, %programfiles% 等)。
- 产品名称(来自PE头,小写)
- 公司名称(来自PE头,小写)
- 产品版本(来自PE头)
- Windows应用程序ID(格式与AmCache中使用的格式匹配)
- 消息
请注意,这些文本文件仅记录通过Windows文件资源管理器执行的程序启动相关的数据。它们不记录从控制台启动的可执行文件的启动。
Windows Search
Windows Search是Windows内置的索引和文件搜索机制。最初,它直接遍历文件,导致搜索缓慢且低效。后来,出现了一个单独的应用程序,用于创建快速文件索引。直到2006年的Windows Vista,搜索功能才完全集成到操作系统中,文件索引移动到后台进程。
从Windows Vista到Windows 10(包括),文件索引存储在可扩展存储引擎(ESE)数据库中:
%PROGRAMDATA%\Microsoft\Search\Data\Applications\Windows\Windows.edb。
Windows 11将其存储分解为三个SQLite数据库:
-
%PROGRAMDATA%\Microsoft\Search\Data\Applications\Windows\Windows-gather.db 包含有关索引文件和文件夹的一般信息。最有趣的元素是SystemIndex_Gthr表,它存储诸如索引文件或目录的名称(FileName列)、索引文件或目录的最后修改时间(LastModified)、用于链接到父对象的标识符(ScopeID)以及文件或目录本身的唯一标识符(DocumentID)等数据。使用ScopeID和SystemIndex_GthrPth表,调查人员可以重建系统上文件的完整路径。SystemIndex_GthrPth表包含文件夹名称(Name列)、目录标识符(Scope)和父目录标识符(Parent)。通过将文件的ScopeID与目录的Scope匹配,可以确定文件的父目录。
-
%PROGRAMDATA%\Microsoft\Search\Data\Applications\Windows\Windows.db 存储有关索引文件元数据的信息。SystemIndex_1_PropertyStore表对分析很有意义;它保存索引对象的唯一标识符(WorkId列)、元数据类型(ColumnId)和元数据本身。元数据类型在SystemIndex_1_PropertyStore_Metadata表中描述(其中Id列的内容对应于SystemIndex_1_PropertyStore中的ColumnId内容),并在UniqueKey列中指定。
-
%PROGRAMDATA%\Microsoft\Search\Data\Applications\Windows\Windows-usn.db 不包含用于取证分析的有用信息。
分析Windows-gather.db文件可以为我们提供某些文件(例如,恶意软件文件、配置文件、攻击者创建和留下的文件等)存在的证据。
值得注意的是,LastModified列以Windows FILETIME格式存储,该格式保存一个无符号的64位日期和时间值,表示自1601年1月1日以来100纳秒单位的数量。我们可以使用诸如DCode之类的实用程序在UTC中查看此值。
Windows 11中的其他微小更改
还值得提及Windows 11中一些微小但重要的更改,这些更改不需要详细分析:
- 完全停止NTLMv1 意味着传递哈希攻击正逐渐成为过去。
- 移除著名的Windows 10 Timeline活动工件。尽管它不再被积极维护,但其数据库目前仍保留在包含用户活动信息的文件中,位于:
%userprofile%\AppData\Local\ConnectedDevicesPlatform\ActivitiesCache.db。 - 同样,Windows 11移除了Cortana和Internet Explorer,但这些的工件仍然可以在操作系统中找到。这对于从Windows 10更新到新版本的机器进行的调查可能有用。
- 先前的研究还表明,记录Windows中成功登录尝试的事件ID 4624在版本之间基本保持一致,直到Windows 11 Pro (22H2)中出现一个显著的更新。此版本引入了一个名为Remote Credential Guard的新字段,标志着取证分析中一个微妙但潜在重要的变化。虽然其实际使用和取证意义仍有待观察,但其存在表明了微软在增强身份验证相关遥测方面的持续努力。
- 扩展对ReFS文件系统的支持。最新的Windows 11更新预览使得可以直接将操作系统安装到ReFS卷上,并且还引入了BitLocker支持。此文件系统与熟悉的NTFS有几个关键区别:
- ReFS没有取证专家依赖的
$MFT(主文件表),该表包含磁盘上所有当前文件记录。 - 它不生成短文件名,就像NTFS为DOS兼容性所做的那样。
- 它不支持硬链接或扩展对象属性。
- 它提供了增加的最大卷和单个文件大小(35 PB,而NTFS中为256 TB)。
- ReFS没有取证专家依赖的
结论
本文简要概述了与取证分析相关的Windows 11工件的关键变化——最显著的是PCA的更改和Windows Search机制的修改。这些工件在调查中的最终效用仍有待观察。尽管如此,我们建议您立即将上述文件纳入您的分类收集工具的范围。