使用Osquery进行远程取证 - Trail of Bits博客
系统管理员使用osquery进行端点遥测和日常监控,安全威胁猎人用它发现系统上的入侵指标。现在另一个群体正在发现osquery的价值:取证分析师。虽然osquery核心功能擅长远程查询各种系统级数据,但取证扩展使其能够检查本地系统用户甚至无法访问的深层数据结构和元数据。我们继续与安全咨询公司Crypsis合作,展示osquery为取证分析师提供即时帮助的实际场景。
识别"时间戳篡改"攻击
每次与文件系统的交互都会留下痕迹。希望尽可能长时间保持隐蔽的攻击者需要清理这些痕迹。文件时间戳如果未被修改,能提供大量关于攻击者时间线和行为的信息。它们是攻击者和取证分析师共同关注的重点。"时间戳篡改"是破坏攻击者文件修改的文件系统时间戳证据的反取证策略的通用名称。
在掩盖时间戳证据方面,NTFS比其他文件系统稍微复杂一些。为此,我们需要探索NTFS的一些结构。
NTFS的核心元素是主文件表(MFT),它存储系统中每个文件的条目。MFT中的每个条目包含许多存储文件描述元数据的属性。一个属性——$STANDARD_INFORMATION($SI)——存储一组时间戳。标准文件还有一个$FILE_NAME($FN)属性,包含自己的一组时间戳。$SI属性中的时间戳大致与文件内容的交互相关。$FN属性中的时间戳大致与文件位置和名称的交互相关。最后,MFT中的目录条目有一个索引属性,存储该目录中所有文件的$FN属性(包括时间戳)的副本。
示例1:时间戳不一致
时间戳攻击的最简单示例是将文件创建日期更改为入侵前的时间。如果操作不当,$FN创建时间戳和$SI创建时间戳将不匹配。这种差异非常明显。
要使用osquery查找目录中时间戳不匹配的文件,例如,我会运行以下查询:
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条目修改时间早于创建时间的文件吗?我也不会:
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:目录的未使用文件名条目
让我们从上一个示例中删除所有文件,并清空回收站。然后,通过运行以下查询查看该文件夹目录索引中的未使用条目:
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用户和开发者社区的其他人会面。带来您的扩展想法,并参与研讨会。我们期待在那里见到您!
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码