Osquery是一个SQL驱动操作系统检测和分析工具,它由Facebook创建,支持像SQL语句一样查询系统的各项指标,可以用于OSX和Linux操作系统。另外,osquery是一个多平台软件,可以安装在Linux,Windows,MacOS和FreeBSD上。它允许我们使用基于SQL的查询来处理操作系统的配置文件、性能和安全检查等。
另外,系统管理员使用osquery可以对端口进行远程控制和日常监控,安全管理员也可以使用它来寻找系统上潜藏的攻击指标。现在,取证人员也开始注意到osquery了。虽然osquery 的核心服务非常适合远程查询各种系统级数据,但通过取证的方法将使其能够检查更深层的数据结构和元数据,而一般情况下,这些数据在本地系统中是无法被使用的。在本文中,我们会与Crypsis(一家安全咨询公司)合作,展示osquery在取证分析时的一些具体案例。
识别“Timestomping”攻击
与文件系统的每次交互都会留下痕迹,对于攻击者来说,要想让自己的攻击显得悄无痕迹,就应清除这些交互痕迹。如果不修改文件时间戳,则会提供大量关于攻击者的攻击时间轴和攻击行为的详细信息。而这些信息正是攻击者和分析人员都非常关注的内容。“Timestomping ” 策略是一种逃避取证的常用方法,攻击者可以利用该方法销毁攻击时所用文件的时间戳证据。具体来说,Timestomping是一种修改文件时间戳(修改、访问、创建和更改时间)的技术,通常用于模拟同一文件夹中的文件。例如,通过修改文件,取证人员就不会发现攻击痕迹了。Timestomping技术通常会与Masquerading技术一起使用,来隐藏恶意软件和工具。
在时间戳中掩盖证据时,NTFS会比其他文件系统稍微复杂一些。为了解答这个问题,我们必须深入探索NTFS的一些结构。
NTFS (New Technology File System),是 WindowsNT 环境的文件系统。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分,但它的纳秒部分全是0,因此这个时间戳是伪造的。
osquery以整数形式输出的NTFS时间戳看起来有些奇怪,这是有经验的分析人员很容易发现伪造的证据。
如何查找已删除文件的痕迹
对于钓鱼攻击的攻击者来说,当用户点击一个钓鱼链接或打开一个钓鱼电子邮件附件时,恶意软件就会开始工作。一般来说,恶意软件会下载几个有效载荷,部署它们,再将系统上的一些数据收集到一个文件中,向后台发送数据,最后从文件系统中删除自身以及所有下载的文件。此时,一切都干干净净,毫无攻击的痕迹,对吧?
虽然这些文件的内容不再可用,但NTFS是不会清理文件元数据的,特别是在目录索引的上下文中,NTFS更不会发挥作用了。对NTFS和目录索引管理的完整解释超出了本文的范围,感兴趣的读者可以阅读NTFS.com或Linux-NTFS项目的介绍文档。
与NTFS上的任何文件一样,每个目录在MFT中都有一个目录。这些目录具有不同的属性,这里的相关属性是index属性,该属性又包含以树型结构排列的目录子文件的$FN属性的副本。在目录中添加和删除文件时,index属性的内容将被更新。不过,索引中的目录不会被删除,它们只是被标记为非活动的状态,并且可能会在添加新目录时被覆盖。即使该文件被删除了,它的$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中留下了工件。当查看未使用的数据结构时,我们通常只看到过去存在的部分记录。
总结
帮助事件响应者进行远程取证是osquery新近被开发出的一个能力,除了本文所讲的NTFS取证之外,osquery还支持File Carving、系统活动查询和基于审计的监控。以此类推,osquery还能进行更多范围中进行取证,比如远程memory carving、USB设备历史检索或其他文件系统的取证元数据。
译者注:File Carving是数字取证研究中频繁使用的一种文件恢复技术,它从表面上无差别的二进制数据集即原始磁盘映象中提取(或者说恢复)文件,而不利用磁盘映象的文件系统类型。这个过程就如同在一块光滑的石头上雕刻出许多图案一样,故称之为“Carving”(雕刻)。
领取专属 10元无门槛券
私享最新 技术干货