您当前的位置:首页 >> 历史
【从电子数据取证角度看微软Windows 10时间线】
发布时间:2019-10-06
 

转自:盘石软件PANSAFE

作者:Graeme Horsman,1Ph.D.; Alex Caithness,2B.A.; and Costas Katsavounidis,3M.Sc.

译:Leon(liyi@pansafe.com)


Windows 10 2018年4月更新版最好用的功能就是时间线(Timeline),它会保存用户在最近30天内的活动记录,并创建快照,可以随时返回,包括文件、应用等。时间线功能可以帮助用户跨平台管理自己的活动记录。从取证角度来说这些记录可以协助取证调查人员更好的分析嫌疑人的活动轨迹。我们翻译了这篇关于Windows 10时间线的文章,以飨读者。

【摘要】

微软Windows操作系统继续主导桌面计算市场。由于这种高占有率,数字取证人员很大可能会在调查期间会遇到Windows平台。作为对数字设备进行取证检查的一部分,操作系统特性由于支持识别和理解用户在系统里的行为,提供了潜在的数据源。随着微软April 2018 build 1803版本和内置的“TimeLine”特性的发布,识别和跟踪用户活动的可能性大大增加。本文及时检查了Windows 10 TimeLine的特性,示范从它的数据库日志文件里恢复基于活动的内容的能力。提供了检查结果和固定实验方法,示范恢复与Windows TimeLine有关的活动片段和进程信息。此外,还提供了SQL查询以支持对存储在ActiveCache.db中的数据的解析。

【关键词】

forensic science, digital forensics, Timeline, Windows 10, Microsoft, SQLite


Microsoft Windows操作系统(OS)继续主导桌面计算市场份额,超过80%的人在全球范围内使用这一平台(1)。因此,该操作系统仍然是世界范围内许多数字取证检查中的一个突出的特征,了解操作系统特性是确定嫌疑人在这些平台上的行为的关键。 最近20年Microsoft Windows操作系统的取证分析产生大量的学术评论和文献,从内存分析到注册表和操作系统特性(2-6)。Garfinkel(7)将1997 - 2007年的时期称为为“黄金时代”,部分原因是“微软Windows的广泛使用,特别是Windows XP。”。自千禧年以来,微软已经发布了七款主要的典型的商业操作系统版本,也就是Windows 2000、ME、XP、Vista、7、8和10,数字取证人员经常遇到这些系统。在许多情况下,取证人员的任务是解读操作系统特定的特性,这些特性表示用户行为(例如,记录的最近目的地、系统注册表内容[8],跳转列表[9]和预读[10]内容)来确定用户的行为和责任归属。

微软通常被认为是一个易于取证的操作系统,后续的主要更新版本会带来新的操作系统特性,这些版本必须及时进行检查和逆向工程。这可确保以健壮、可靠的方式正确理解各种证据,用于任何后续检查。Windows 10引入新时间线功能就是这种情况。在2018年4月的Windows版本1803中发布(11)(4月之前可能通过Windows Insider程序提供),“时间线”功能旨在为用户提供使用操作系统时的行为的图形描述。时间线功能是“连接设备平台服务”(CDPSvc)的一部分,这是一项Windows服务,为PC和智能手机等设备提供了一种在彼此之间发现和发送消息的方法(12)。要启用跨设备体验,用户必须使用Microsoft帐户或Azure Active Directory帐户登录(13)。Microsoft将时间线描述如下:

“此功能位于任务栏中,增强了任务视图功能,可以显示你当前正运行的应用和过去的活动。默认情况下,时间线会显示你从今天早些时候或者过去某个特定日期起操作内容的快照。你可以通过带注释的滚动条找到自己在时间线中所处的位置,如果你不想通过滚动来实现,也可以搜索自己想要继续进行的项目或活动。”(14)

时间线被设计成记录最多30天的用户活动(15)。关于微软时间线记录的内容,在撰写本文时,没有确切的指导,但微软用户体验项目经理Tom Alphin通过YouTube(16)表示,在初始版本中,将为Edge浏览器(包括Bing.com搜索)、Phote,News、Sports、Weather Maps、基本Office套件信息和常规文件打开行为记录事件。 然而,其他应用程序可以通过修改其代码来使用此功能。

时间线功能可以补充数字取证人员更清晰地识别可疑用户在其设备上的操作的能力。在可操作时(时间线可以关闭),其被动收集用户交互来提高可用性和用户体验,提供了记录的操作的来源,包括Edge互联网访问历史、文档(例如,Word和Excel)以及图片交互。这些信息在诸如涉及儿童色情图像的犯罪中可能是至关重要的,其中存储的与非法图片文件交互的记录可以帮助推断谁拥有这些文件。当时间线记录与时间线后台数据库中存储的用于记录和存储时间线信息相关的元数据一起解释时,可以显示有关用户如何使用其设备的详细信息。由于时间线活动记录通常存储多天,尽管潜在的证据时间段已经确定,时间线记录可以通过识别用户的非法行为来进行问责。时间线是设计用于与用户交互的功能,并且随着参与度的增加,取证人员在调查中存储和获取的潜在的丰富的相关数据资源的机会也大大增加。尽管Windows系统(Windows 10或者更早的版本)的用户活动记录可以通过现有的操作系统特性类型(如本文前面提到的那些),时间线功能提供了用户交互信息的集中数据库,取证人员可以进行查询,作为现有信息的补充和交叉参考。因此,时间线功能扩充了现有的操作系统特性组合,数字取证人员可以用来识别用户在其设备上的行为,作为取证调查的一部分。

目前,没有关于时间线检查的正式学术评论,只有三篇博客文章提供了指导(17-19),本文从法律角度检查了时间线服务,讨论了这个功能和底层日志数据库。

时间线功能

随着时间线在Windows版本1803中发布,所有测试都在此平台上进行。 为了测试时间线的功能,在我们的测试系统上创建了独特的测试文件(可识别的文件名)并进行了交互,记录了任何交互的时间和日期。 因此,可以识别在随后的时间线调查中包含了这些数据。可以提取和查询或实时访问时间线的数据库,我们使用“DB Browser for SQLite”v3.10(可在https://sqlitebrowser.org/下载)立即查看系统更改。 测试是迭代的,每次检查时间线的各个功能以区分用户行为的原因和结果(例如,打开单个文件),结果同时在另外的运行Windows版本1803的系统上确认为可重复的。

首先必须区分时间线记录的“Tile类型”的差异。 通常,它们可以被分类为两种类型之一,“进程区块”(PT)或“活动区块”(AT)。虽然时间线定位为跟踪您在系统上的操作的工具,但实际上它是混合系统,还能够执行基本的任务管理器类型的行为,可以在进程间切换以及需要的时候终止进程。PT是活动区块,显示用户系统上当前正在运行的进程。 相比之下,AT可以被认为与“快捷方式”类似,允许用户定位感兴趣的特定活动类型。 与快捷方式一样,AT不是动态的; 因此,如果AT在创建AT时指向位于用户桌面上的文档或文件,该文件随后被移动,则AT将无法再加载此文件。

用户可以选择将时间线活动上传到Microsoft云,这允许时间线中的项目可以在登录到同一Microsoft帐户的多个系统之间同步; 例如,在一台Windows 10 PC上访问Office365上的文档可以在另一台PC上看到并继续(假设两个设备都可以访问该文件)。尽管目前,时间线主要是Windows 10的一项功能,但微软打算将时间线作为一种跨平台服务,可以将各种设备和服务的活动整合在一起。 目前,Android上的“Microsoft Launcher”和iOS上的Edge浏览器应用程序都可以为时间线提供活动以及访问其他适当的条目(20)。

时间线功能的配置由用户用来定制操作功能的操作系统设置来控制。默认情况下,可以通过“开始”按钮>“设置”>“隐私”>“活动历史记录”找到启动时间线使用的时间线设置。时间线可以收集和显示来自本地PC的操作以及连接到该设备的帐户中的活动(图1)。也可以通过组策略“计算机配置”>“管理模板”>“系统”>“OS策略”来配置相同的设置。

1时间线设置和启动 开始按钮->设置->隐私->活动历史记录

一旦激活,时间线会在SQLite数据库ActivitiesCache.db及其相关的ActivitiesCache.wal里保存信息(关于.wal的技术讨论参见[21,22]),这两个文件的位置是\Users\%USERNAME%\AppData\Local\ConnectedDevicesPlatform\。应该注意的是,图1中提到的设置有效地控制了时间线活动是否存储在ActivitiesCache.db数据库中。 对那些通过云共享的时间线活动,用户必须使用微软账号登录,并启用了同步设置。 ActivitiesCache.db数据库由八个表和一个名为SmartLookup的数据库视图组成,该视图聚合了其他表中的一些数据(如图2所示)。

2ActivitiesCache.db数据库

在调查时,可以分别在%LOCALAPPDATA%\ConnectedDevicesPlatform文件夹中查看这些设置。 根据连接到时间线的帐户设置,子文件夹结构可能会有所不同。为了提供一个示例,其中时间线附加到本地用户,时间线文件夹的结构为L.(图3下部)。如果帐户与Microsoft帐户同步,则数据库文件夹会维护一个帐户标识符(称为CID)字母数字字符串(图3上部),该字符串可以通过对系统注册表的分析(NTUSER.DAT\Software\Microsoft\IdentityCRL\UserExtendedProperties)与帐户相关联。

3微软账号和本地用户文件结构的对比的示例

最后,如果用户维护学校或商业帐户(例如,Office 365,Azure Active Directory),则数据库文件夹名称以AAD为前缀。[<securityidentifier(SID)>]。 (通过检查NTUSER.DAT\Software\Microsoft\OneDrive\Accounts可以将SID与帐户相关联。)当用户从本地帐户切换到Microsoft帐户时,L.<ACCOUNTNAME>将被删除并且在相应的Microsoft帐户文件夹下创建一个新的目录(如果它之前不存在)。L. <ACCOUNTNAME>的ActivitiesCache.db中的任何先前条目现在都出现在链接到Microsoft帐户的新ActivitiesCache.db中并同步到云。从微软账户切换到本地账户,Microsoft帐户相关数据库仍然可用并保存时间线数据。即使用户使用本地帐户登录,如果以前使用Microsoft帐户进行登录,该帐户的ActivitiesCache.db条目也会显示在用户的时间线中。应该注意的是,应该检查嫌疑系统上与时间线功能相关的所有文件夹和数据库。

无论与Timeline关联的帐户类型如何,Timeline文件夹都包含文件CDPGlobalSettings.cdp,它是一个JSON文件,其中根对象的AfcPrivacySettings键是一个可用于标识这些设置的对象(如图4 所示)。

4CDPGlobalSettings.cdp示例 分别为不同步到云端(左边)所有设置打开(中间)收集数据和云同步关闭(右边)

当用户选择删除与电子邮件地址相关联的帐户活动时(图1中的开/关切换),时间线功能将不在其界面中显示AT信息。 此外,此信息不会记录在ActivitiesCache.db数据库中。 相比之下,基本PT信息会被记录。 举例来说,如果用户启动Firefox浏览器,则会存储此信息的记录。 (PT信息在主表的说明部分中详细讨论)即使用户与时间线以AT形式记录的文件类型交互,尽管时间线界面中未显示此信息,但ActivitiesCache.db数据库记录此事件。 如果用户恢复此设置以允许显示活动,则AT信息将重新出现给用户。

提取和解析ActivitiesCache.db中存储的内容

在ActivitiesCache.db数据库中,有两个补充表,表示链接到时间线使用的元数据((Metadata和ManualSequence - 参见图5)和取证人员感兴趣的三个主要表,用于记录时间线中记录的活动(Activity, ActivityOperation和Activity_PackageId- 图6)。 下面将都依次讨论。

5Metadata(上边)和ManualSequence(下边)示例

6三个主要感兴趣的表: Activity, ActivityOperationActivity_PackageId


Metadata表包括创建数据库的最后日期和时间(使用UTC或Z [23]的典型时区设置),ManualSequence表包括记录的最后一个ETag(请参阅后面有关Activity,ActivityOperation和Activity_PackageId表的讨论)。作为此元数据的结果,可以推断基本时间线使用,并且由于ETag值是递增的,它提供了自时间线第一次实现以来发生的事件数量的指示。

关于主时间线活动的记录,表Activity, ActivityOperation和Activity_PackageId 在下面的章节中将单独讨论。

主表说明

为了解释三个主要表(Activity,ActivityOperation和Activity_PackageId)的内容,首先必须从高层次来考虑典型的时间线交互发生时发生了说明。时间线活动(创建AT/PT)通常记录在Activity表,并且在删除这些内容时(用户删除过期的tile)信息记录到ActivityOperation表。整个过程中,Activity_PackageId表搜集与该事件有关的进程/包/应用程序信息(图7)

7当时间线活动发生时,三个主要的表(ActivityActivityOperationActivity_PackageId)如何交互

Activity_PackageId

Activity_PackageId表由四个字段组成,ActivityId,Platform,PackageName和ExpirationTime。 Activity_PackageId表包含“事务”,它发生在时间线中,并通过ActivityID字段链接到其他两个表,该字段包含可与Activity和ActivityOperations表条目相关联的唯一GUID。 “Platform”字段指示与事件关联的活动/应用程序类型(表1)。 对于每个Timeline事件,唯一的ActivityId与多个Activity_PackageId表条目相关联。

1platform字段条目类型--参考24查看额外来自微软的技术信息

platform值

描述

x_exe_path

独立程序(不是安装的)的路径

afs_crossplatform

一个同步到云的条目

host

未知。测试显示该值常常为空。但是为相应的应用程序记录了对Edge和Office 365的引用。但是这个值在Activity表里也显示了同样多的条目

packageid

未知

似乎常常是某一个程序的记录后就紧跟一条为packageid的记录,其他字段都跟前一条一样

windows_win32

安装的软件(非UWP程序)

windows_universal

UWP程序

android

Android程序

ios

iOS应用程序

msa

微软应用程序

web

Web应用程序

ExpirationTime字段使用UNIX时间戳,显示从最初触发事件的时间起30天(恰好2,592,000秒)。此值似乎由功能决定,该功能旨在存储最多30天的活动。 按日期顺序排序ExpirationTime字段可提供系统上已执行应用程序的时间表。 鉴于ExpirationTime是在触发事件时创建的,还可以通过将时间戳回溯30天来确定某些用户操作的时间。

Activity

Activity表包含有关AT和PT的活动。当在系统上发生新的“本地”或“云同步”事件时,该事件属于时间线的范围,该事件被记录在活动表中并被分配ID值和初始ETag。连续条目保留ID,修改ETag。 该值看起来类似于活动顺序,当事件按ETag排序时,可以确定系统事件发生的顺序。 虽然ETag以数字顺序出现,但它们通常不是连续的(例如,1,2,5,7而不是1,2,3,4)。 AT和PT事件都记录在Activity表中。 为了解释典型的Activitytable条目,表2提供了关键字段的示例。

2 activity表的关键字段

id

关联Activity_PackageId表的GUID值

AppId

AppId字段是一个JSON格式的记录,下面提供的是执行蓝信程序的例子
  [{"application":"12932068880859273246","platform":"afs_crossplatform"},{"application":"D:\\Program   Files   (x86)\\LanxinSoftCustom\\main\\LxMainNew.exe","platform":"windows_win32"},{"application":"D:\\Program   Files (x86)\\LanxinSoftCustom\\main\\LxMainNew.exe","platform":"packageId"},{"application":"","platform":"alternateId"},{"application":"","platform":"windows_universal"}]
  有时候,上面显示的路径是是GUID的格式,这是Windows使用的表示那些标准的文件夹比如'Program Files'的文件夹ID,例如'{6D809377-6AF0-444B-8957-A3773F02200E}\\WinRAR\\WinRAR.exe'

PackageIdHash

对包含字母和数字的独一无二的描述特定事件类型的字符串。比如所有与WinRAR.exe相关的项都是同样的值。好像是可执行程序的'QuickXorHash'25

PlatformDeviceId

Activity和ActivityOperation中的PlatformDeviceId可以在用户的NTUser.dat的SOFTWARE\Microsoft\Windows\CurrentVersion\TaskFlow\DeviceCache找到,它用来显示时间线视图的一个Tile的原始设备*(PC、Laptop、tablet、phone等),时间线看到的设备名称来自特定的DeviceID的DeviceModel的值,这个值是从HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\SystemInformation的SystemProductName的值,这个值一般是制造商填写,如果是组装机的话,一般为空

AppActivityId

格式看起来是GUID\<文件hash>,但是我们不能确认在不同的机器上GUID是否相同。所有具有相同<文件hash>的项目都与同样的文件相关。当创建了一个文件,它的AT会在Payload字段完整描述(参见后面的Payload字段)。这个字段提供了原始文档的名字。后面任何关于这个文件的操作都不会指向这个名字。因此要确定后面的关于这个文件的操作,必须参考AppActivityId记录来找到第一条记录。
  对于Edge浏览器,AppActivityId值可能仅仅是一个网站访问或者搜索的URL

ActivityTypeStatus/OperationType

Activity表的ActivityStatus字段和ActivityOperation表的OperationType字段只有从1-3共3个值,描述了相关Tile的状态,如下:
  1 - Active(意思是说它还是一个应用程序)
  2 - Updated (意思是这个记录是从之前的Active记录的更新)
  3 - Deleted(意思是这个Tile已经被删除)

ActivityType

如果值是5,是说文件/应用程序被打开。如果值是6,是说文件/应用程序是在当前屏幕的焦点

LastModifiedTime

测试表明这个字段是关于与特定应用程序相关的事件(比如进程称为焦点)最后一次发生的时间

ExpirationTime

设置为从LastModifiedTime开始的30天后

Payload

Payload的值是JSON格式记录,包含创建的应用程序/文件的细节。有两个典型的类型。当事件的ActivityType(上面讨论过)的值是5,Payload记录将维护“displayText”,显示进程/文件的名称信息。下面是一个例子:
  {"displayText":"蓝信Beta","activationUri":"ms-shellactivity:","appDisplayName":"蓝信Beta","backgroundColor":"black"}
  当事件的ActivityType的值是6(上面讨论过,这是个焦点事件),Payload记录将不再维护“displayText”,取而代之是“activeDurationSeconds”显示用户与这个事件一起的秒数。下面是一个例子:
  {"type":"UserEngaged","reportingApp":"ShellActivityMonitor","activeDurationSeconds":37,"shellContentDescription":{"MergedGap":600},"userTimezone":"Asia/Shanghai"}
  一些应用程序比如MS Edge同时包含shellContentDescription字段,这是另外一个JSON字段,还有FileShellLink字段,这是使用QuickXorHash算法编码的字段。

StartTime

StartTime记录(UNIX   Epoch格式)表示可执行程序按下的时间

EndTime

如果不为空,测试表明要么这个值是0,要么就是LastModifiedTime。只有ActivityType值为6的项目具有EndTime,表明这个程序不再处于焦点

ETag

每个事件都有一个ETag索引值,以数字表示可以显示时间线活动的先后顺序

ActivityOperation

经过测试,我们的观察结果表明,AT和PT的创建信息存储在Activity表中,被用户从时间线中删除的AT和PT(右键单击“删除” - 图8)可以在ActivityOperation表中找到。

8删除一个AT事件

ActivityOperation表维护与Activity表相同的主键字段。 同样重要的是要注意,删除AT不会以任何方式影响原始文件(例如,不更改其文件系统元数据)。删除AT后,将从Activity表中复制其记录,然后将这些记录添加到ActivityOperation表中,并为其分配新的ETag值和新的ActivityStatus/Operation-Type值(图9)。

9删除AT的例子,可以看到生成了新的OperationType

是否保留这些记录取决于计算机上活动的帐户类型。时间线被配置为与本地账号关联,删除区块的ActivityOperation表记录会一直保存到Expiration Time,然后会被删掉,时间线被配置同步到微软账户,那么这些记录只会早ActivityOperation表里临时排队,直到下次同步(可能在Expiration Time到达之前),然后会被删掉。

在Windows时间线设置中,本地用户帐户还可以选择将时间线相关活动“全部清除”。在执行此操作后,时间线图形用户界面将从中删除所有区块信息,但此信息仍保留在ActivitiesCache.db中。

从AT中重新访问文件

考虑这个场景,为一个Word处理文件创建了一个AT,然后为了某个时间,用户点击时间线上的AT重新访问这个文件。这个事件在Activity表里检查AppAcitivityId字段来识别AT。使用表2中提到的过程,可以识别特定活动的时间线记录(本例中是WordPad),但是某个AT在未来被执行时,文档的名字没有嵌入到Payload字段里。相反,APPActivityId字段维护带有文件唯一标识的GUID(比如ECB32AF3-1440-4086-94E3-5311F97F89C4\c951d1424a770a2e1e8233a11e7da17ea1d8209d)。这个标识符在AT第一次被创建时生成(活动区块生成事件(FAT)的ActivityType的值为5)。关联这两个值可以映射和识别这个AT未来的执行。

超过30天

由于时间线功能被设计为在30天的周期内运行,因此有必要检查在此之后ActivityCache.db数据库中发生的情况。 由于时间线功能基于设备本地时间运行,因此手动将系统时钟延长至未来30天会产生以下影响:

  • Activity表中的过期条目会被清除;

  • ActivityOperation表中的过期条目会被清除;

  • Activity_PackageId表中的过期条目会被清除。

Windows资源管理器事件

当用户访问设备上的特定文件夹时,此信息不会在时间线上记录显示为PT。没有存储文件夹名称信息; 因此,无法通过时间线确定Windows资源管理器访问了某个文件夹,Shellbag分析仍将是此背景下的主要证据来源。这在访问回收站功能时也适用,也不存储特定的回收站记录。

数据提取

为了提取和处理存储在ActivitiesCache.db中的信息,本文提供了一个SQL查询,可用于提取存储在Activity,ActivityOperation和Activity_PackageId表中的数据,以提供通过时间线发生并已在ActivitiesCache.db中捕获的“系列事件” 。 完整的SQL查询可以通过GitHub在https//<ANONYMOUS FOR REVIEW SUB-MISSION>.github.io/@@@@@@/和附录S1中获得。图9-11演示了我们的SQL查询的输出(图12)。

10解析ActivityCache.db的例子

11AT被从时间线删除的例子

12打开的文件和相关应用程序的例子

所有这些意味着什么

测试表明,时间线ActivitiesCache.db及其相关文件包含用户信息,可以使用SQL解析和查询工具提取和解释这些信息。 这项工作演示了用来区分时间线捕捉的用户事件所需的程序,包括以下内容:

  • 区分时间线捕获的AT和PT的信息以及如何解释此信息,将其链接到用户活动的能力;

  • 如何区分与时间线关联的本地帐户和云同步帐户;

  • 对ActivitiesCache.db中的表结构的分析,可以查询以提取信息;

  • 从时间线中删除内容的影响以及此类操作对ActivitiesCache.db的影响;以及

  • 当设备上处于“焦点”的应用程序。

分析结果证明了时间线分析作为在Windows 10取证调查环境中表示用户-系统交互的证据来源的潜在价值。 如果在Windows 10系统上发生对关键证据文件的访问(需要安装1803更新),如果处于活动状态,时间线可以捕获并记录此信息,从而提供可能的罪责记录。 此外,还确定了时间线调查的局限性,注意何时数据会从ActivitiesCache.db中删除,特别是在AT/PT删除和云同步帐户的情况。 因此,时间线ActivitiesCache.db可以作为数字取证人员的额外信息来源,以识别用户如何使用他们的系统,并且此内容应成为任何取证调查的一部分。

结论

这个技术贴首次从取证角度研究了2018年5月发布的Windows版本1803提供的时间线功能。由于该特性被设计为增强用户体验和提供任务重新执行的效率,这种行为记录在调查中必然对取证人员非常有用。我们的工作检查了时间线功能,提供了对下面的用来维护使用记录的ActivityCache.DB数据库的文档化检查。我们演示了用来解析记录内容和识别删除的AT/PT记录的能力,并且在附录S1提供了一个SQL查询以帮助取证人员解析这个系统功能。虽然这项工作提供了理解时间线功能的基础,但应该进行更多的研究,因为微软设想未来的开发者将在他们的产品代码里引入时间线交互和活动可移植性。因此,随着越来越多的应用程序涉及时间线功能,因此时间线数据的取证价值会越来越大。