介绍 KAPE!
(来自手册内容,建议阅读完整手册…)
什么是 KAPE?
Kroll Artifact Parser and Extractor(KAPE)主要是一个分类程序,能够针对设备或存储位置,根据需求找到最相关的取证工件,并在几分钟内完成解析。由于其高速特性,KAPE使调查人员能够找到并优先处理案件中更关键的系统。此外,KAPE可以在成像过程开始前收集最关键的工作。在成像完成期间,KAPE生成的数据可以用于审查线索、构建时间线等。
KAPE 的工作原理
KAPE有两个主要功能:1)收集文件,2)使用一个或多个程序处理收集的文件。KAPE本身并不直接执行这些功能;而是通过动态读取配置文件,并根据这些文件的内容来收集和处理文件。这使得KAPE在添加或扩展功能时非常灵活。
KAPE使用目标和模块的概念来工作。KAPE附带了一系列默认的目标和模块,适用于大多数取证检查中的常见操作。这些也可以作为示例来创建新的目标和模块。
在高层次上,KAPE通过将文件掩码添加到队列中来工作。然后使用该队列从源位置查找并复制文件。对于被操作系统锁定的文件,会进行第二次绕过锁定的传递。在过程结束时,KAPE将从源位置的所有可用文件复制并保留元数据到指定目录。
第二个(可选)处理阶段是针对收集的数据运行一个或多个程序。这通过针对特定文件名或目录来实现。各种程序对文件运行,程序的输出然后保存在以类别命名的目录中,例如EvidenceOfExecution、BrowserHistory、AccountUsage等。
通过按类别分组,所有级别的检查员都有手段发现相关信息,无论信息来自哪个单独的工作。换句话说,检查员不再需要知道如何处理prefetch、shimcache、amcache、userassist等与执行证据工作相关的信息。通过分类思考并以相同方式分组输出,可以针对任何给定需求利用更广泛的工作。
继续…
当然,手册中有更多细节(很好,请阅读!),但接下来让我们看一些使用场景以及如何使其工作。
KAPE可以在实时系统上使用,也可以针对死机系统(如写保护的硬盘或挂载的E01)使用。在所有情况下,用法相同。KAPE还处理使用中的文件和卷影副本,使其在查找和收集数据的方法上非常彻底。
这里的要点是,KAPE需要一个驱动器号、目录或UNC路径作为其数据源。如果您可以将KAPE指向一个路径,它就会工作。
因此,在实时系统的情况下,我们只需通过连接某种外部存储来使KAPE可用。从那里,我们可以针对任何驱动器号或目录进行收集。
对于死机系统,一旦Windows识别写保护设备或您已挂载E01(使用Arsenal Image Mounter,而不是FTK Imager)并分配了驱动器号,就可以开始。
此时,我们假设您有一个目标驱动器号可用。下面将显示几个示例,包括实时系统和挂载镜像(再次强调,使用Arsenal Image Mounter。FTK Imager不暴露卷影副本)。
目标
目标负责定义KAPE要复制的文件和目录。目标的完整规范及其属性在手册中,但非常简单。
目标(和模块)使用YAML编写。这是一种易于使用和理解的格式,KAPE中包含了许多示例。
文件系统工作的目标如下所示:
|
|
这是一个简单的示例,我们只是指定了每个感兴趣文件的完整路径。在某些情况下,如$MFT和$SDS,我们必须使用额外的属性AlwaysAddToQueue,因为Windows在运行系统上会撒谎并说该文件不存在(通过正常方式)。
让我们看另一个示例:
|
|
再次我们看到指定了工作的路径,但这里不同的是使用了通配符。我们无法预先知道计算机上的所有配置文件,因此通配符由KAPE自动扩展以查找所有存在的配置文件,然后获取所有存在的lnk文件(再次使用通配符,因为我们不知道名称是什么)。
另一个有趣的属性是IsDirectory和Recursive。这些允许您给出一个基本目录,并复制其下的所有文件/文件夹,例如第一个示例中的跳转列表。
定义了目标(KAPE附带了近二十个目标,范围从文件系统到注册表、事件日志、回收站、Outlook等)后,您感兴趣的目标被传递给KAPE,KAPE负责以下操作:
- 将目标文件扩展到所有匹配的文件
- 尝试使用“常规”方式复制文件
- 如果文件正在使用,延迟复制
- 在常规复制结束时,使用原始磁盘读取处理所有延迟文件以获取文件副本
- 重新创建任何目录结构并从原始目录应用完整分辨率时间戳
- 将文件复制到目标目的地文件夹,并从源文件重新应用完整分辨率时间戳
- 对文件进行SHA-1哈希
- 在日志文件中记录所有这些
这一切在几秒钟内完成,具体取决于您目标的内容。
目标中的目标(嵌套!)
目标也可以引用其他目标,但这意味着什么?
在深入之前,让我们谈谈您应该如何设计目标以及它们迄今为止是如何设计的。
目标应该是具体的,专注于某种类型的文件。例如,一个目标应该只查找事件日志。另一个目标只查找注册表配置单元。还有一个只查找Chrome配置文件,等等。
为什么要这样做?通过保持具体和特定,您可以选择只目标您想要的内容。如果您只想要Chrome和Firefox信息,您可以只运行那些目标。
但是,如果您不知道使用什么浏览器,或者您想要目标文件系统、注册表配置单元和跳转列表,该怎么办?
这就是复合目标的概念发挥作用的地方。让我们看一个:
|
|
那么这里发生了什么?注意,我们没有使用文件路径、通配符等,而是引用了其他目标文件!
当KAPE运行时,它将自动使用该目标文件中的内容扩展上述每个目标。在这种情况下,InternetExplorer.tkape、Chrome.tkape和Firefox.tkape中的细节将被扩展,每个文件将被定位和复制!如果特定浏览器未安装,该数据将不会被找到。
考虑到这一点,您可以看到这种方法的强大和灵活性,因为您可以决定收集什么以及何时收集。如果您只想要注册表配置单元和事件日志,在一个名为HivesAndEventLogs.tkape的新目标中使用这两个目标,然后使用该目标。
还有一个特殊目标!All,它简单地定位所有其他目标并运行它们全部。虽然这有效,但不会像使用更具体的目标集进行收集那样快。
模块
简单来说,模块运行程序。更具体地说,它们运行一个单一程序。理解这一点很重要,因为模块是为单一目的编写的。
让我们看一个示例。在这种情况下,PECmd的模块如下所示:
|
|
与目标一样,模块的完整规范在手册中概述,但非常简单。
Processors组包含PECmd的一个或多个条目。在这种情况下,有三个,因为PECmd知道如何以三种不同格式导出数据。查看标题,您可以看到ExportFormat设置为’csv’,这意味着将使用列表中的第一个处理器(带有–csv开关的那个)。
变量名
被%包围的值是KAPE在运行时替换的变量。所有可用变量在手册中以及所有包含的模块中指定以供参考和示例,但非常简单。
%sourceDirectory%将被替换为–msource的值。%destinationDirectory%将被替换为–mdest加上模块的类别(在PECmd的情况下为ProgramExecution)
这允许KAPE无论源或目标目录、驱动器号、UNC路径等如何都能工作。
处理重定向
这是模块的另一个示例。它有些类似,但注意在处理器下有一个额外的属性ExportFile。
|
|
命令行在这里非常具体,只处理单个文件。这里的重点不是命令行,而是ExportFile的存在。
ExportFile用于程序不知道如何直接将其输出保存到文件,并依赖命令行重定向(例如通过>)来保存结果。由于程序的这种限制,您必须使用ExportFile属性指定保存程序输出的位置。
注意:您不能在CommandLine上使用重定向!不要尝试在CommandLine属性中做这样的事情:
|
|
因为它不会工作。
这里的要点是,您在这两种情况下都得到覆盖:程序可以直接写入文件,如PECmd所做,或者对于使用重定向的程序,您只需使用ExportFile来捕获输出。您可以将ExportFile属性的值命名为任何您喜欢的文件名。
运行 KAPE
KAPE需要管理员权限,因此首先要做的是打开管理员级别的命令提示符或PowerShell窗口。从那里,单独运行KAPE显示所有可用选项。
在我们看到它使用之前,让我们花点时间看看选项:
|
|
虽然有相当多的选项,但事情通常分为两个主要类别:目标和模块。
目标选项以’t’开头,模块选项以’m’开头,并如上所示分组。
对于目标,–tsource、–tdest和–target都是必需的。
对于模块,–msource、–mdest和–module是必需的。然而,有一个例外,我们稍后会看到。当同时使用目标和模块选项时,您可以省略–msource,KAPE会自动将–tdest的值分配给–msource。
查看可用目标和模块
注意有两组开关列出目标和模块:
- –tlist 和 –tdetail
- –mlist 和 –mdetail
’list’命令将转储目标名称和每个目标或模块的其他信息。这里我们看到–tlist在行动:
|
|
如果我们添加–tdetail到命令,我们得到这个:
|
|
注意,当使用–tdetail时,每个目标内的所有路径信息也会显示。
–mlist和–mdetail以相同方式工作,除了它们显示可用模块及其细节。
目标源选项
–tsource开关告诉KAPE从哪里开始查找文件。这可以是硬盘、外部驱动器、网络共享、F-Response映射的远程磁盘、UNC路径、挂载的E01等。只要它可以使用Windows支持的路径表示法引用,它就会工作。
目标目的地选项
–tdest开关告诉KAPE在哪里创建它定位的目录和文件的副本。这是最简单的用例。
然而,KAPE也可以通过使用–vhd或–vhdx开关将找到的文件副本放置在VHD或VHDX(首选)容器中。在任何一种情况下,您还必须为容器提供一个基本名称。此基本名称将用于命名KAPE创建的容器。换句话说,这不是创建的容器的全名,而是其中的一部分。
使用此选项将如下所示:
|
|
这将导致所有找到的文件被复制到VHDX容器中(位于C:\temp\tout下,命名为:
|
|
这里有几点需要注意。一是前面的时间戳。二是目标名称包含在文件名中(evidenceofexecution)。最后,我们在扩展名之前看到基本名称。
因为我们使用了VHDX容器,这允许我们简单地双击容器以在Windows中挂载它。这样做会导致出现一个新的驱动器号,如下所示:
|
|
(为了更容易看到,我只显示VHDX中存在的一些Prefetch文件,以说明布局。实际VHDX中有几十个更多的prefetch文件。)
上图来自Directory Opus(Windows上最好的文件管理器!)。然而,图像显示的是VHDX中以分组格式存在的目录和文件,这比使用文件资源管理器更容易看到发生了什么。
首先,注意驱动器标签显示容器制作的日期。向右看,我们看到VHDX容器中的文件和目录列表。完整路径已从C开始重新创建,因为我们通过–tsource告诉KAPE处理C驱动器。
除了文件本身,注意还有两个CopyLog文件,一个是文本文件,一个是CSV文件。这些包含KAPE所做操作的完整细节:
CopyLog.txt:
|
|
CopyLog.csv:
|
|
注意两者都包括源路径、目标路径、源SHA-1和源文件的时间戳。CSV还添加了与复制文件所需时间以及文件是否被锁定(DeferredCopy列)相关的细节。
所有文件本身,如前所述,都有它们的完整时间戳应用于它们。查看容器内的prefetch文件,属性如下所示:
|
|
注意时间戳来自12月,而不是2月13日,即容器创建的时间。
VHD选项工作方式完全相同,除了您最终得到一个VHD容器。
注意:第一次在Windows中挂载容器时,必须在读写模式下完成!一旦最初挂载和卸载,您可以使用PowerShell将容器挂载为只读,但第一次必须使用读写模式,否则Windows将无法识别文件系统。这对容器内的数据没有任何影响,只是VHDX文件本身。
要卸载容器,右键单击新驱动器号并选择弹出。
在上面的图像中,注意容器根目录中的目录是C驱动器。如果我们使用处理卷影副本的选项,我们将得到一组不同的目录。如果我们运行这个命令(与之前相同的命令,我们只是添加了–vss到最后):
|
|
当我们挂载VHDX时,我们会看到以下内容:
|
|
注意我们有三个额外的顶级目录,每个对应KAPE处理并找到匹配文件的VSC。当KAPE运行时,它看起来像这样:
|
|
在这里我们可以看到几个整洁的事情。一是KAPE,仅仅通过添加–vss开关,定位并挂载了C驱动器上的所有影子副本。然后它遍历C驱动器和每个VSC,沿途定位文件。它总共找到了1,039个文件,但由于重复的SHA-1哈希值,只复制了829个。整个操作耗时7.4243秒。
从这里,我们可以看到VHDX文件被创建然后压缩(这使其在传输时显著变小)。
总共,KAPE找到、去重并取证复制了829个文件,将它们放入VHDX容器,然后在10.7241秒内压缩它。
上面输出中要注意的另一件事是有几个文件被锁定。然而,这不是问题,因为您可以看到延迟的文件在最后被复制,没有任何错误。
您可以使用–zv开关通过添加–zv false到命令行来禁用容器的压缩。
最后,KAPE生成的VHD(x)文件可以放入像X-Ways Forensics这样的工具中,以进行立即、有针对性的分析!
其他目标选项
–tflush选项告诉KAPE在写入任何内容之前删除由–tdest指定的目录(如果存在)。这确保在KAPE将文件放置在那里之前,–tdest中没有其他文件或目录(总是好事)。
模块源选项
–msource开关告诉KAPE从哪里开始查找要处理的文件。这可以是硬盘、外部驱动器、网络共享、F-Response映射的远程磁盘、UNC路径、挂载的E01等,就像我们使用–tsource看到的那样。
这不一定是来自目标选项的目录,这意味着如果您想,您可以使用KAPE在运行系统上运行实时响应或针对挂载的E01,而不使用目标选项。
模块目的地选项
–mdest开关告诉KAPE指示处理器将文件保存到哪里。回想一下,模块针对文件运行程序。结果输出(例如csv、json或html文件)将保存在由–mdest指定的目录下的目录中。
其他模块选项
–mflush选项告诉KAPE在写入任何内容之前删除由–mdest指定的目录(如果存在)。这确保在模块将文件放置在那里之前,–mdest中没有其他文件或目录。
–mef开关允许您覆盖模块配置中指定的默认处理器。例如,如果您想要来自PECmd模块的json输出,您可以使用–mef json,KAPE将从模块中定义的可用处理器中选择适当的处理器。
考虑以下命令:
|
|
这将看起来像:
|
|
这与我们在目标模块中看到的类似,但查看复制完成后。KAPE开始使用PECmd模块处理数据。这将导致在–mdest中创建以下数据:
|
|
由于Prefetch与执行证据相关,PECmd模块在模块文件中指定了ProgramExecution的类别。如果我们还运行了其他查看执行证据工作的模块,如ammcompatcache或amcache,那些结果将出现在同一目录中,因为这些模块也使用相同的类别。
上面显示的两个CSV可以在Timeline Explorer或您选择的任何其他程序中打开和分析。
注意,在这种情况下,找到、复制和处理所有prefetch文件并准备好分析花了巨大的2.6467秒。
如果我们添加–vss选项,它最终看起来像这样:
|
|
在这种情况下,KAPE从VSCs找到并处理了几百个更多的prefetch文件,复制它们,并针对它们运行PECmd,耗时5.8383秒。
其他有用选项
–debug和–trace开关可以在编写自己的目标和模块时使用,以及用于在较慢链接上的进度指示器等。
–debug添加关于文件被找到、复制等的信息。
|
|
–trace向输出添加更多细节,包括KAPE扩展目标和模块到什么等。
|
|
要查看KAPE做了多少工作,运行KAPE几次,同时启用–debug和–trace,然后与未使用任何开关时的ConsoleLog文件进行比较。
结合目标和模块
正如我们上面看到的,KAPE可以使用目标选项或模块选项。一个不依赖另一个。然而,两个选项可以同时使用。这基本上允许您构建自己的“收集和处理链”,可以做任何您想做的事情。
例如,假设您想要收集prefetch、注册表配置单元和跳转列表,然后运行PECmd、RECmd、JLECmd和Plaso来生成一个超级时间线。您可以通过构建一个目标来拉取必要的文件,然后构建一个模块来调用适当的模块来运行上述程序,非常容易地完成这一点。
命令行可能看起来像这样:
|
|
那么这里发生了什么?“QuickTimeline”目标和模块从哪里来的?很简单,您创建它!记住目标和模块配置文件只是YAML,因此使用您最喜欢的文本编辑器,制作一个现有目标(如WebBrowsers)的副本,然后更新新文件以指向您想要的其他目标,像这样:
|
|
从其中一个包含的模块文件开始,我们的新模块将以完全相同的方式处理:
|
|
随着目标和模块的到位,我们只需如上例所示运行KAPE,KAPE完成其余工作!
KAPE将首先根据目标文件查找和复制所有文件,将它们全部复制到L:\collect,然后针对L:\collect中的文件调用每个处理器。每个程序的输出将保存到L:\output,其中将包含每个类别的目录。这些目录中的CSV可以加载到Timeline Explorer中并在几秒钟内进行分析!
运行此命令可能看起来像这样:
|
|
我们之前看到了很多,但注意,在我的情况下,我没有将二进制文件放在正确的位置以使plaso模块正常工作。在这种情况下,KAPE告诉我们这一点,但它不会导致KAPE功能不正常。
这里要注意的另一件事是找到了几个其他处理器并执行了。
在这种情况下,–mdest将看起来像这样:
|
|
其他用例
KAPE有特殊选项,如%d,可以在命令行上用于目标和模块目的地路径,像这样:
|
|
首先,注意我们没有指定–msource。当–msource未在命令行上给出时,它从–tdest的值继承。您可以看到为什么在使用%d时这是必要的,因为您事先不知道用于–msource的文件夹名称。=)
那么这个在做什么?当KAPE运行时,它将%d替换为形式为YYYYMMddHHmmss的时间戳,因此我们真正最终得到的是:
|
|
和
|
|
注意每个文件夹上的时间戳也匹配。
使用这种方法,您可以使用计划任务自动复制和处理您想要的任何文件,在任何您想要的间隔(可能每小时将prefetch转储到根目录,KAPE将处理添加时间戳)。
如果您看过Dave Cowen的测试厨房,并看到他手动定位和提取文件到不同的名称,考虑使用KAPE和Syscache目标的能力,每15分钟自动收集相关的注册表配置单元和其他文件(或按需,通过重复命令),然后比较每个的内容以找到更新发生的触发器。
此过程也可用于通过写入只读Google驱动器或Dropbox共享等,随时间自动查找和打包证据的VHDX文件。换句话说,您可以创建注册表配置单元、prefetch、文件系统数据等的示例数据集到VHDX容器中,供人们测试他们的工具、验证工具等。
另一种情况是需要与某人共享注册表配置单元。您可以使用RegistryHives目标以及–vhdx,在几秒钟内,您有一个很好的包发送给需要它的人。
用例是无限的,这真的只是可能性的表面。
最后但同样重要的是,使其更易于使用。
KAPE本质上是一个命令行工具,一旦您看到基础知识,就不难使用。
话虽如此,KAPE有一个辅助帮助程序gkape,它包装了命令行版本,使其更易于使用和熟悉。
主界面看起来像这样:
|
|
当选项启用时,其他部分打开。这里我们看到当目标和模块选项被选中并且一些必需的属性(以红色轮廓)被填充时,事情如何变化:
|
|
随着选项被填充,命令行在底部构建。继续选择所需的选项,我们最终会得到这个:
|
|
当构建了有效的命令行时,Execute和Copy command按钮被启用。
单击Execute将在新窗口中运行KAPE:
|
|
KAPE的所有其他方面工作方式完全相同。转到–tdest和/或–mdest将显示KAPE收集和处理的所有文件。
KAPE现在对所有人免费可用!
最后,有一个公共GitHub存储库,位于https://github.com/EricZimmerman/KapeFiles,如果您编写了有用的目标和模块并希望与社区分享,您可以向其中提交拉取请求(请这样做!)
您可以在这里获取KAPE。我希望您发现它是您工具箱中有用的工具!