利用osquery进行远程取证:NTFS取证扩展实战

本文详细介绍了如何利用osquery的NTFS取证扩展进行远程数字取证,包括检测时间戳篡改攻击、定位已删除文件证据等实战场景,为安全分析师提供高效取证方案。

利用osquery进行远程取证

系统管理员使用osquery进行端点遥测和日常监控,安全威胁猎手用它来发现系统中的入侵指标。现在,另一个群体正在发现osquery的价值:取证分析师。虽然osquery核心功能非常适合远程查询各种系统级数据,但取证扩展使其能够检查更深层次的数据结构和元数据,这些甚至本地系统用户都无法访问。

我们继续与安全咨询公司Crypsis合作,展示osquery在取证分析师工作中的即时应用场景。

识别"时间戳篡改"攻击

与文件系统的每次交互都会留下痕迹。希望尽可能长时间不被发现的攻击者需要清理这些痕迹。文件时间戳如果未被修改,可以提供大量关于攻击者时间线和行为的信息。它们是攻击者和取证分析师共同关注的焦点。“时间戳篡改"是破坏攻击者文件修改的文件系统时间戳证据的反取证策略的通用名称。

在掩盖时间戳证据方面,NTFS比其他文件系统稍微复杂一些。为了解释这一点,我们需要探索NTFS的一些结构。

NTFS的核心元素是主文件表(MFT),它存储系统中每个文件的条目。MFT中的每个条目包含许多存储描述文件元数据的属性。一个属性——$STANDARD_INFORMATION($SI)——存储一组时间戳。标准文件还有一个$FILE_NAME($FN)属性,包含自己的一组时间戳。$SI属性中的时间戳大致与文件内容的交互相关。$FN属性中的时间戳大致与文件位置和名称的交互相关。最后,MFT中的目录条目有一个索引属性,存储该目录中所有文件的$FN属性(包括时间戳)的副本。

示例1:时间戳不一致

时间戳攻击的最简单示例是将文件创建日期更改为入侵前的时间。如果操作不当,$FN创建时间戳和$SI创建时间戳将不匹配。这种差异非常明显。

要使用osquery查找目录中时间戳不匹配的文件,例如,我会运行以下查询:

1
2
3
4
5
SELECT path,fn_btime,btime from ntfs_file_data 
where device="\\.\PhysicalDrive0" 
and partition=3 
and directory="/Users/mmyers/Desktop/test_dir" 
and fn_btime != btime;

我们还可以寻找其他形式的时间戳不一致。也许文件创建时间未被触动,因此匹配,但最后修改时间设置为更早的时间以避免检测。你会信任一个MFT条目修改时间早于创建时间的文件吗?我也不会:

1
2
3
4
5
SELECT filename, path from ntfs_file_data 
where device="\\.\PhysicalDrive0" 
and partition=2 
and path="/Users/Garret/Downloads" 
and fn_btime > ctime OR btime > ctime;

示例2:时间戳缺少完整精度

攻击者有时可能很懒,使用内置系统工具进行时间戳篡改。这些工具的时间值精度低于操作系统自然使用的精度。分析师可以通过检查时间戳的纳秒部分来发现这种伪造——除非被篡改,否则不太可能全部为零。

我们在上面看到NTFS时间戳是64位值。例如,考虑NTFS时间戳131683876627452045。如果你手边有Windows命令提示符,那是2018年4月16日星期一晚上9:27:43——具体来说,是晚上9:27:42和0.7452045分钟,但被四舍五入了。非常具体!这是一个自然文件时间戳的样子。

然而,由系统实用程序设置的文件时间戳只有秒级精度,这就是大多数用户界面显示的详细程度。131683876620000000也是2018年4月16日星期一晚上9:27:42,但在整数表示中非常显眼。这个时间戳是伪造的。

初次使用时,osquery以整数形式输出NTFS时间戳可能看起来很奇怪,但它有助于使这种伪造容易被有经验的取证分析师发现。

定位已删除文件的证据

用户点击了一个坏链接或打开了一个坏电子邮件附件。恶意软件开始工作。它下载几个有效负载,部署它们,将系统上的一些数据收集到文件中,将这些数据发送到上游,然后从文件系统中删除自身和所有下载的文件。一切都很整洁,对吧?

嗯,也许不是。这些文件的内容可能不再可用,但NTFS在清理文件元数据方面很懒,特别是在目录索引的上下文中。对NTFS和目录索引管理的完整解释超出了本文的范围,但我们可以提供一个高级概述(倾向于了解更多信息的读者可能希望阅读NTFS.com或Linux-NTFS项目的Russon和Fledel的文档)。

与NTFS上的任何文件一样,每个目录在MFT中都有一个条目。这些条目有各种属性。这里相关的属性是索引属性,它又包含目录子文件的$FN属性的副本,排列成树状结构。随着文件在目录中的添加和删除,索引属性的内容会更新。不过,索引中的条目不会被删除——它们只是被标记为非活动,并可能在以后添加新条目时被覆盖。即使文件被删除,其$FN属性的副本可能仍在其父目录的索引中保留一段时间。

NTFS取证扩展使查找这些条目相对简单。

示例3:目录的未使用文件名条目

让我们从上一个示例中删除所有文件,并清空回收站。然后,通过运行以下查询查看该文件夹目录索引中的未使用条目:

1
2
3
SELECT parent_path,filename,slack from ntfs_indx_data 
WHERE parent_path="/Users/mmyers/Desktop/test_dir" 
and slack!=0;

可用的信息不仅仅是文件名。由于存储了整个$FN属性,因此也有时间戳可用。我们可以仅从索引条目重建目录中文件活动的部分时间线。不过,需要做一些额外的工作:由于目录索引是基于文件名的,重命名文件实际上会导致旧条目被标记为非活动,并在索引中创建一个新条目。区分重命名的文件和删除的文件需要额外的分析。

还要注意,有三个文件被删除,但只有两个文件在slack中留下了痕迹。在查看未使用的数据结构时,我们通常只能看到曾经存在的内容的部分记录。

开始使用

此扩展提供了一种快速方便的方法,作为事件响应的一部分,在Windows端点上执行文件系统取证。从我们的存储库获取它——以及我们的其他osquery扩展。我们致力于维护和扩展我们的扩展集合。看一看,看看我们还有什么可用的。如果你需要帮助,请在Slack上访问osquery社区。

帮助事件响应者进行远程取证是osquery能力不断增强的一个领域。除了我们的NTFS取证扩展,osquery已经支持文件雕刻、系统活动查询和基于审计的监控。毫无疑问,osquery还可以添加更多功能:远程内存雕刻、USB设备历史检索或其他文件系统的文件系统取证元数据。

加入我们参加6月20日-21日的QueryCon!

Trail of Bits将于2019年6月20日和21日在纽约市举办QueryCon osquery会议。正如我们在本文中通过NTFS取证扩展所展示的,osquery扩展有许多潜在用例,QueryCon 2019的一些演讲将专门探讨其中一些。Victor Vrantchan将讲授如何使用扩展和记录器插件将osquery与现有日志记录基础设施集成;Atul Kabra将谈论通过"事件驱动"扩展丰富osquery。

在撰写本文时,QueryCon的门票仍然可用!今天购买你的门票,与osquery用户和开发者社区的其他人见面。带上你的扩展想法,并参与研讨会。我们期待在那里见到你!

如果你喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计