Windoes-取证实践指南-全-

Windoes 取证实践指南(全)

原文:annas-archive.org/md5/77c0dddad1f07c736966d54fe69b6e05

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

无论你在信息安全领域的经验如何,实用的 Windows 取证都将全面介绍数字取证。它将提供你所需的知识,帮助你正确地组装各种类型的证据,并引导你通过分析过程的各个阶段。

我们首先讨论数字取证过程的原则,然后学习进行分析所使用的方法。接着,我们将研究各种工具以进行实时分析,并通过不同的技术分析易失性和非易失性数据。之后,我们将恢复硬盘中的数据,并学习如何使用多种工具执行注册表和系统日志分析。

接下来,你将学习如何分析浏览器和电子邮件,因为它们是调查中的关键方面。然后我们将继续提取计算机内存中的数据并调查网络流量,这是另一个重要的检查点。最后,你将学习几种数据展示的方法,因为每个调查员都需要一个工作站来分析法医数据。

本书内容概述

第一章,数字取证的基础与原则,解释了数字取证过程原则的重要性以及通常用于进行分析的方法。

第二章,事件响应与实时分析,讨论了响应者在执行事件响应时应具备的硬件和软件。事件响应是一个非常重要的过程,需要谨慎进行,以正确地收集所有可用的证据,这些证据将在分析阶段进行分析。

第三章,易失性数据采集,讨论了如何收集系统的易失性数据。易失性数据,如系统内存,非常重要,可以告诉我们在运行时系统中发生了什么。因此,要对这种证据进行事后分析,我们首先需要获取这些证据。此外,易失性数据变化非常快,以正确的方式收集它是一个非常重要的问题。

第四章,非易失性数据采集,讲述了如何采集非易失性数据,例如硬盘,并且如何以法医方式收集这些数据,以避免改变证据的完整性。

第五章,时间线,讨论了时间线,它按时间顺序显示系统和用户在系统上的所有活动。它有助于构建事件的完整画面。我们将向你展示如何使用 plaso 框架来实现这一点。

第六章,文件系统分析与数据恢复,让你对最著名的文件系统有一个很好的理解。为了完美理解这些工具如何工作,无论是用于分析还是恢复,读者需要理解文件在分区硬盘中的文件系统如何存储。

第七章,注册表分析,讨论了注册表的结构以及一些用于执行分析的工具。当 MS Windows 操作时,几乎所有操作都会记录在注册表中。注册表文件被视为 Windows 的数据库。注册表取证可以帮助解答许多问题,从系统中安装了什么类型的应用程序到用户活动等等。

第八章,事件日志分析,解释了 MS Windows 系统开箱即用的优秀功能,我们只需要知道如何使用它们。其中一个功能是日志记录。日志记录可以帮助我们弄清楚系统上发生了什么。它记录了系统上的所有事件,包括安全事件或与系统内应用程序相关的其他事件。

第九章,Windows 文件,告诉我们 MS Windows 有很多在当前运行的 Windows 中创建的遗留文件。在分析过程中,这些遗留文件可以用来证明或反驳假设,或者在某些情况下揭示具有证据价值的新有趣信息。

第十章,浏览器与电子邮件调查,讲述了互联网,当然也包括万维网,作为用户交换数据的主要信息渠道。浏览器是最常用的工具,因此,浏览器的调查在分析人员调查用户活动时非常重要。市面上有很多浏览器,我们将涵盖其中最流行的几款:IE、FF 和 Chrome。

电子邮件仍然是计算机世界中与人沟通的一种方式,特别是在企业环境中。本章将涵盖电子邮件格式,并解释如何从 PFF 文件中读取电子邮件,以进行分析并追踪发件人。

第十一章,内存取证,讨论了内存作为操作系统的工作空间。在过去,内存取证是可选的,但现在有一些非常强大的工具可以让我们从内存中提取大量证据信息,并将数字取证提升到一个新的水平。

第十二章,网络取证,讨论了网络取证如何为事件提供另一种视角。网络流量可以揭示许多有关恶意活动行为的信息。结合其他信息源,网络将加速调查过程。你将学习到不仅是传统工具,如 Wireshark,还将了解强大的 Bro 框架。

附录 A,构建取证分析环境,讨论了如何在企业规模的数字取证实验室中创建便捷的工作环境,以进行数字取证分析。在前几章中,我们应该已经认识到事件响应对数字取证流程的重要性,以及准确处理这两者的必要性。

附录 B,案例研究,使用感染的机器来说明如何对不同类型的证据进行初步分析,我们将进行实时分析以及事后分析。

阅读本书所需的条件

本书没有特别的要求。

本书适合谁阅读

如果你有信息安全方面的经验,或者之前进行过一些数字取证分析,并希望扩展数字取证技能,那么这本书是为你量身定做的指南。本书将为你提供必要的知识和核心技能,帮助你使用主要在 Linux 操作系统下的免费和开源工具,进行数字证据的取证分析。

约定

在本书中,你将会看到多种文本样式,用于区分不同类型的信息。以下是这些样式的一些示例及其含义解释。

文本中的代码词、数据库表名、文件夹名称、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 用户名如下所示:“在目标机器上,即处理机器上,你需要从同一个receiver.exe文件夹中运行网络监听器。”

任何命令行输入或输出均如下所示:

dd conv=sync, noerror bs=64K if=/dev/sda | pv | dd
    of=/media/Elements/HD_image/image.dd

新术语重要词汇以粗体显示。你在屏幕上看到的词语,例如在菜单或对话框中,文本中会像这样呈现:“现在从源机器运行 FTK Lite 程序,然后从文件中打开创建磁盘镜像。”

注意

警告或重要提示以框的形式出现。

提示

提示和技巧以这种方式显示。

读者反馈

我们始终欢迎读者反馈。让我们知道你对本书的看法——你喜欢或不喜欢哪些内容。读者的反馈对我们很重要,因为它帮助我们开发出你真正能够从中受益的书籍。

若要向我们提供一般反馈,请通过电子邮件发送至feedback@packtpub.com,并在邮件主题中提到书名。

如果你在某个领域有专长并且有兴趣撰写或贡献一本书,请查看我们的作者指南:www.packtpub.com/authors

客户支持

现在你已经成为一本 Packt 书籍的骄傲拥有者,我们为你提供了一些帮助你充分利用购买的资源。

下载本书的彩色图片

我们还为你提供了一个 PDF 文件,里面包含了本书中使用的截图/图表的彩色图片。彩色图片将帮助你更好地理解输出的变化。你可以从www.packtpub.com/sites/default/files/downloads/PracticalWindowsForensics_ColorImages.pdf下载此文件。

勘误

尽管我们已经尽力确保内容的准确性,但难免会有错误。如果你在我们的一本书中发现了错误——可能是文本或代码中的错误——我们将非常感激你能报告给我们。这样,你可以帮助其他读者避免困扰,并帮助我们改进该书的后续版本。如果你发现了任何勘误,请访问www.packtpub.com/submit-errata并提交,选择你的书籍,点击勘误提交表单链接,填写勘误的详细信息。一旦你的勘误被验证,你的提交将被接受,勘误将上传到我们的网站或添加到该书标题下的现有勘误列表中。

要查看先前提交的勘误,请访问www.packtpub.com/books/content/support并在搜索框中输入书名。所需信息将出现在勘误部分。

盗版

互联网上的版权材料盗版问题在所有媒体中都普遍存在。在 Packt,我们非常重视保护我们的版权和许可证。如果你在互联网上发现任何非法复制的我们的作品,请立即向我们提供该位置地址或网站名称,以便我们采取措施。

请通过copyright@packtpub.com与我们联系,并提供涉嫌盗版材料的链接。

我们感谢你在保护我们的作者和我们提供有价值内容的能力方面的帮助。

问题

如果你在本书的任何方面遇到问题,可以通过questions@packtpub.com与我们联系,我们将尽力解决问题。

第一章:数字取证的基础与原则

我们周围的一切都在变化,沟通方式、工作方式、存储或检索数据的方式,甚至生活节奏也在变化。技术正在改变一切。犯罪也随着这种变化而变化,因为有价值的目标资产的性质已经发生改变,现在它们是数字化的。普通用户现在可以在不离开座位的情况下进行货币交易,各种规模和类型的公司和企业通常使用本地网络交换敏感数据。因此,犯罪也变得数字化。如今,你的个人信息、银行账户详情和公司数据库是数字犯罪分子的目标之一。

那么,我们该如何调查这些犯罪呢?调查概念并没有改变。这是我们在本导论章节中要讨论的内容。

本章将涵盖以下主题:

  • 什么是数字犯罪?

  • 数字证据

  • 数字取证目标

  • 分析方法

什么是数字犯罪?

假设一个罪犯闯入银行盗取保险箱里的钱,而在另一起案件中,攻击者以某种方式黑入银行的私人网络并将钱转到自己的账户。这两者都针对公司的货币资产。

在第一个案例中,如果调查员需要追踪罪犯,他们会将调查技能应用于犯罪现场。他们会追踪攻击者的指纹和活动,最终弄清楚发生了什么并识别出罪犯。在第二个场景中,调查员需要追踪罪犯在本地系统、网络,甚至通过互联网的数字痕迹,以了解罪犯的活动,这可能揭示出他们的数字身份。

在普通犯罪中,调查员需要找到犯罪的动机和目标。在网络犯罪中,调查员需要了解攻击者在实施犯罪时使用的恶意代码——即武器,攻击者利用的漏洞以及造成的损害大小。同样地,我们可以将相同的调查机制应用于数字犯罪,只需考虑资产和攻击的不同性质。

数字犯罪的目标有很多种,从骚扰到在线盗取信用卡和金钱,再到国家间或大公司之间的间谍活动;正如我们最近所看到的,一些著名且具有攻击性的恶意软件和攻击被认为是由国家级支持开发的,目标是针对其他国家的基础设施或敏感信息。此外,这些攻击还针对一些著名公司,导致信息和数据泄露。

出于这些原因,在过去十年里,在政府和私人部门中,投资保护数字形式的资产变得越来越重要。信息安全过程的一个分支是数字取证

数字取证

识别和分析信息安全事件以及相关的数字证据被称为数字取证。通常,法医科学是通过科学的方法收集和检查关于过去的数据,以提取与正在调查的案件相关的有用信息。数字取证是对数字证据的分析,以回答与数字事件相关的问题,这种分析发生在实时分析的情况下,或者发生在过去;这种分析被称为事后分析

事后分析是在事件发生后进行的,通常所有案件都会进行此分析。然而,有些案件要求在事件发生过程中进行分析。通常,分析可以确认或反驳关于事件的假设,以重建攻击者和受害者在事件发生期间的活动全貌。

数字取证的定义之一是 Rodney McKemmish 提出的,他阐述了以下内容:

“数字取证是以合法可接受的方式识别、保存、分析和呈现数字证据的过程。”

基于此,我们可以将数字取证分析划分为四个子阶段,这也代表了成功过程的四个原则:

  • 识别:调查员或分析员必须了解事件的背景并收集对调查至关重要的数据。他们需要理解系统的常规行为和网络结构,并在必要时采访相关人员。这些都是完全理解环境和妥善处理可能证据的重要步骤,以避免丢失有价值的信息或遗漏相关证据的收集。

    在事件处理过程中,第一响应者可能需要获取实时系统。每一步在实时系统上的采集或分析都会留下痕迹,在某些情况下,这些操作可能会覆盖系统内存或硬盘上的先前数据或痕迹。响应者必须理解在系统上使用处理工具的后果,并尽量减少工具在系统上的痕迹,以便在事件处理中最大程度地减少数据丢失。

  • 采集与保存:数字证据的采集方法必须确保证据的完整性,并在需要时对此进行证明。

    获取事故现场的所有数据将有助于分析阶段构建事故的完整图像。在繁忙的工作环境中,检索事故现场的状态并不容易。记住这一点的一种方法是记录现场所有系统的信息,在某些情况下,拍摄快照有助于记住这些设备是如何连接的。

  • 分析:不同的平台和技术意味着不同类型的证据,这些证据需要被检查。因此,分析员或调查员需要具备必要的技术和调查技能,以便查找并提取与正在调查的案件相关的信息。

    分析员需要检查所有收集到的数据,即使案件已经解决。检查所有证据可能会提供新的线索或提出新的可能性。

  • 数字证据的报告与呈现:这应总结过程的前三个阶段。应包括识别、获取和检查数字证据的步骤。除了包括检查结果外,报告中还必须包括结果的结论和专家意见。

数字证据

作为一种正常反应,技术的变化导致了可能证据的变化,与以往的传统证据相比。计算机系统的所有组件都可能成为证据,例如以下内容:

  • 犯罪嫌疑人或受害人的硬盘

  • 操作系统伪迹和特殊文件

  • 网络流量

  • 计算机内存

  • 手机和平板电脑

  • 云存储

  • 共享存储

  • 网络设备

  • 系统日志

  • 设备日志

  • GPS 设备

  • 简单地说,任何可以存储或处理数据的设备

由于可能证据的范围广泛,事故处理人员或第一响应者必须具备足够的经验来处理他们可能在现场找到的任何类型的证据。

处理数字设备是一项非常重要的任务,整个调查过程依赖于它。这被认为是进行成功数字分析所必须满足的主要需求之一。

数字取证目标

数字取证分析中的主要对象是与正在调查的安全事件相关的数字设备。该设备可能被用于犯罪、攻击目标,或者是分析员获取信息的来源。数字取证过程中的分析阶段目标因案件而异。它可以用来支持或驳斥针对个人或实体的假设,或者可以用来调查系统或网络上的信息安全事件。

考虑分析一个被入侵的系统,数字取证的整体目标是回答这些问题:

  • 被分析的系统发生了什么?

  • 它是如何被入侵的?

在分析过程中,分析员还可以根据他们的发现回答其他一些问题,比如以下这些:

  • 攻击者是谁? 这个问题是在询问分析员是否能够找到攻击者的 IP 地址和/或命令与控制服务器的 IP,或者在某些情况下,攻击者的档案。

  • 它发生在什么时候? 这个问题是在询问分析员是否能确定感染或妥协的时间。

  • 它发生在哪里? 这个问题是在询问分析员是否能够识别出网络中被妥协的系统,以及是否存在其他受害者的可能性。

  • 为什么会发生? 这是基于攻击者在被攻陷系统中的活动,分析员可以从中推测攻击者的动机,可能是经济利益、间谍活动或其他原因。

分析方法

在事件处理过程中,每个案例都可以看作是一个不同的情境。因此,根据个别案例的具体情况,第一次响应时可能会采取不同的处理方法。处理安全事件时,有两种通用的处理方法:

  • 实时分析:通常在分析员手中有一个实时系统时执行。关闭系统是响应者“不应该做”的操作之一。对实时系统进行一些初步分析可以提供有价值的信息,为未来的调查提供指导。此外,在某些情况下,当没有时间按照正常的分析步骤进行操作时,快速分析事件是非常必要的。

  • 事后分析:这是正常的分析步骤,响应者从事件现场获取所有可用数据,然后对证据进行事后分析。

主要情况下,混合方法被认为是最佳的做法,其中响应者在开启并且可以访问的系统上进行实时分析,记录他们的发现,并获取所有数据,包括实时数据,以便事后分析。在这种情况下,先进行数据采集是最佳实践,因为证据将被采集到系统中任何分析痕迹产生之前。

总结

在本章介绍中,我们讨论了与数字取证科学相关的一些定义、目标和分析方法。

在下一章中,将详细解释实时分析和事后分析的方法,并推荐适合每种方法的工具。

第二章:事件响应与实时分析

准备应对事件的各个阶段是一个需要特别关注的问题。在某些情况下,事件发生时缺乏必要的工具,导致无法在合适的时机采取必要的行动。

考虑到事件的反应时间取决于事件处理过程的效率,可以明确的是,为了准备 IR 团队,必须非常小心地进行技术支持。

整个要求集可以分为几个类别来应用于 IR 团队:

  • 技能

  • 硬件

  • 软件

让我们更详细地考虑在准备事件响应团队过程中可能出现的主要问题。

如果我们想要建立一个计算机安全事件响应团队,我们需要具备一定技能和技术专长的人员,来执行技术任务并有效地与外部联系人沟通。现在,我们将考虑团队成员的技能。

团队成员所需的技能可以分为两类:

  • 个人技能

  • 技术技能

个人技能

个人技能对于一个成功的响应团队至关重要。这是因为与技术专家但社交能力较差的团队成员互动,可能导致误解和结果的误读,而这些后果可能影响团队的声誉。

一些关键的个人技能将在接下来的部分中讨论。

书面沟通

对于许多 IR 团队来说,沟通的一大部分是通过书面文件进行的。这些沟通可以采取多种形式,包括涉及事件的电子邮件、事件或事故报告的文档、漏洞以及其他技术信息通知。事件响应团队的成员必须能够清晰简洁地写作,准确描述活动,并提供易于读者理解的信息。

口头沟通

通过口头沟通有效传达信息的能力也是一项重要技能,确保事件响应团队成员能对正确的人说出合适的话语。

演讲技巧

并非所有技术专家都有良好的演讲技巧。他们可能不擅长在大规模观众面前发言。提升演讲技巧的信心将需要时间和努力,团队成员需要逐渐积累经验,在这种情况下感到更加自如。

外交手段

事件响应团队的成员需要与目标和需求可能各异的人互动。熟练的事件响应团队成员能够预见潜在的争议点,作出恰当回应,保持良好的关系,避免冒犯他人。他们还会理解自己代表着 IR 团队及其组织。

外交和机智非常重要。

遵循政策和程序的能力

团队成员需要的另一个重要技能是能够遵循并支持组织或团队已建立的政策和程序。

团队合作技能

IR 人员必须能够在团队环境中作为高效而友好的团队成员工作。他们需要意识到自己的责任,为团队目标作出贡献,并共同分享信息、工作量和经验。他们必须灵活,并愿意适应变化。他们还需要与其他方互动的技能。

诚信

IR 工作的性质意味着团队成员经常处理敏感信息,偶尔他们还可能接触到具有新闻价值的信息。团队成员必须值得信赖、谨慎,并能够根据指南、任何利益相关方协议或规定和/或任何组织政策和程序保密处理信息。

在提供技术解释或响应的过程中,IR 人员必须小心提供适当且准确的信息,同时避免传播任何可能对其他组织声誉造成负面影响、导致 IR 团队诚信受损或影响涉及其他方的活动的机密信息。

了解自己的局限

IR 团队成员必须具备的另一个重要能力是能够在某一领域遇到自己知识或专业的局限时,迅速承认这一点。无论承认局限有多困难,个人都必须认识到自己的局限,并积极寻求团队成员、其他专家或管理层的支持。

应对压力

IR 团队成员经常面临压力情况。他们需要能够识别自己何时感到压力,愿意让其他团队成员意识到这一情况,并采取(或寻求帮助)采取必要措施来控制和保持冷静。特别是,他们需要在紧张情况下保持冷静的能力——从超负荷的工作量到攻击性的来电,再到可能危及人类生命或关键基础设施的事件。团队的声誉和个人的声誉将取决于如何处理这些情况。

问题解决

IR 团队成员每天都面临大量数据,有时信息量非常庞大。如果没有良好的问题解决技能,团队成员可能会被与事件和其他任务相关的大量数据所压倒。问题解决技能还包括 IR 团队成员“跳出框框思考”的能力,或从多个角度看问题以识别相关信息或数据。

时间管理

除了解决问题的能力,IR 团队的成员还需要能够有效地管理时间。他们将面临许多任务,从分析、协调和响应事件,到执行诸如优先处理工作负载、参加和/或准备会议、填写时间表、收集统计数据、进行研究、提供简报和演示、参加会议以及可能提供现场技术支持等职责。

技术技能

另一个有效 IR 团队所需的重要技能组件是其员工的技术技能。这些技能定义了团队所使用的技术以及其服务的群体的理解深度和广度,以下各节将进行说明。

反过来,IR 团队成员应具备的技术技能可以分为两大类:安全基础事件处理技能

安全基础

让我们在以下小节中看看一些安全基础。

安全原则

IR 团队的成员需要对基本的安全原则有一般性了解,例如以下内容:

  • 保密性

  • 可用性

  • 身份认证

  • 完整性

  • 访问控制

  • 隐私

  • 不可否认性

安全漏洞和弱点

要理解任何特定攻击如何在给定的软件或硬件技术中表现出来,IR 团队的成员需要首先能够理解漏洞的根本原因,通过这些漏洞大多数攻击得以利用。他们需要能够识别和分类最常见的漏洞类型及相关攻击,例如那些可能涉及以下内容的攻击:

  • 物理安全问题

  • 协议设计缺陷(例如,中间人攻击或欺骗)

  • 恶意代码(例如,病毒、蠕虫或特洛伊木马)

  • 实现缺陷(例如,缓冲区溢出或时序窗口/竞争条件)

  • 配置弱点

  • 用户错误或漠不关心

互联网

重要的是,IR 团队的成员还需要了解互联网。没有这一基本的背景信息,他们将难以或无法理解其他技术问题,例如互联网底层协议和服务缺乏安全性,或者无法预见未来可能出现的威胁。

风险

IR 团队的成员需要具备计算机安全风险分析的基本知识。他们应当理解各种风险对其所服务群体的影响(例如,可能广泛传播的互联网攻击、与团队和服务对象相关的国家安全问题、物理威胁、财务威胁、业务损失、声誉或客户信任丧失,以及数据损坏或丢失)。

网络协议

IR 团队成员需要对团队和所服务的用户所使用的常见(或核心)网络协议有基本的理解。对于每个协议,他们应当了解协议的基本概念、规范以及如何使用。此外,他们还需了解该协议常见的威胁或攻击类型,并能采取策略来减轻或消除这些攻击。

例如,至少,工作人员应当熟悉一些常见的协议,如 IP、TCP、UDP、ICMP、ARP 和 RARP。他们需要了解这些协议的工作原理、用途、它们之间的差异、一些常见的弱点等。除此之外,工作人员还应当对类似 TFTP、FTP、HTTP、HTTPS、SNMP、SMTP 等协议有类似的理解。

专业技能包括对前述所有领域的安全概念和原则的更深入理解,并且具备对导致这些协议漏洞的机制和技术的专业知识,了解可以被利用的弱点(以及为何会被利用),可能使用的攻击方法类型,以及减轻或消除这些潜在问题的策略。他们还应当对其他协议或互联网技术(如 DNSSEC、IPv6、IPSEC 以及其他可能与用户网络兼容或交互的电信标准,如 ATM、BGP、宽带、IP 语音、无线技术、其他路由协议、或新兴技术等)有专家级理解。这样,他们可以为团队或用户的其他成员提供专家技术指导。

网络应用与服务

IR 团队的成员需要对团队和所服务的用户常用的网络应用与服务(如 DNS、NFS、SSH 等)有基本的了解。对于每一个应用或服务,他们应当了解其目的、工作原理、常见用途、安全配置以及该应用或服务常见的威胁或攻击类型,此外,还需了解相应的缓解策略。

网络安全问题

IR 团队的成员应当具备网络安全概念的基本理解,并能够识别网络配置中的弱点。他们应了解网络防火墙的基本外围安全概念(如设计、数据包过滤、代理系统、DMZ、堡垒主机等),路由器安全性,数据在网络中传输时可能遭遇的信息泄露风险(例如,数据包监控或“嗅探器”),以及与接受不可信信息相关的威胁。

主机或系统安全问题

除了了解网络级别的安全问题外,IR 团队的成员还需要了解各种操作系统(UNIX、Windows 或团队或管辖范围使用的任何其他操作系统)在主机级别的安全问题。在了解安全方面之前,IR 团队的成员必须首先具备以下内容:

  • 使用操作系统的经验(用户安全问题)

  • 对管理和维护操作系统(作为管理员)有一定的熟悉度

然后,对于每个操作系统,IR 团队成员需要知道如何执行以下操作:

  • 安全地配置(强化)系统

  • 审查配置文件中的安全弱点

  • 识别常见攻击方法

  • 确定是否发生了入侵尝试

  • 确定入侵尝试是否成功

  • 审查日志文件中的异常

  • 分析攻击结果

  • 管理系统权限

  • 安全的网络守护进程

  • 从入侵中恢复

恶意代码

IR 团队的成员必须了解发生的不同类型的恶意代码攻击及其如何影响他们的管辖范围(系统入侵、拒绝服务、数据完整性丧失等)。恶意代码可能具有不同类型的载荷,可能导致拒绝服务攻击或网页篡改,或者代码可能包含更多“动态”载荷,可以配置以产生多方面的攻击向量。工作人员不仅要理解恶意代码是如何通过一些显而易见的方法传播的(磁盘、电子邮件、程序等),还需要理解它如何通过其他方式传播,如 PostScript、Word 宏、MIME、对等文件共享或影响运行在 PC 和 Mac 平台上的操作系统的启动扇区病毒。IR 团队的成员必须了解此类攻击如何发生及其传播方式,相关的风险和损害,预防和缓解策略,检测和移除过程,以及恢复技术。

专业技能包括执行分析、黑盒测试、逆向工程与此类攻击相关的恶意代码的专业知识,并为团队提供有关有效响应最佳方法的建议。

编程技能

一些团队成员需要具备系统和网络编程经验。团队应确保在团队和管辖范围使用的操作系统中涵盖多种编程语言。例如,团队应具备以下经验:

  • C

  • Python

  • Awk

  • Java

  • Shell(所有变种)

  • 其他脚本工具

这些脚本或编程工具可用于帮助分析和处理事件信息(例如,编写不同的脚本来计数和排序各种日志、搜索数据库、查找信息、从日志或文件中提取信息,以及收集和合并数据)。

事件处理技能

  • 本地团队政策和协议

  • 理解和识别入侵者的技术

  • 与站点的通信

  • 事件分析

  • 事件记录的维护

IR 和 Jump Bag 的硬件

当然,可能在事件处理中需要的设备集应该提前准备,并且应给予充分重视。这个套件被称为 Jump Bag

这种套件的形成在很大程度上取决于组织能够承担的预算。然而,仍然有一个必要的最低配置,可以让团队处理小数量的事件。

如果预算允许,可以购买一个完整的解决方案,其中包含所有必要的设备和用于运输的箱子。作为此类解决方案的示例,可以推荐 FREDL + Ultra Kit。FREDLForensic Recovery of Evidence Device Laptop 的缩写。配合 Ultra Kit,这个解决方案大约需要 5000 美元。

Ultra Kit 包含一套写保护器和一套适配器与连接器,用于获取具有不同接口的硬盘镜像:

IR 和 Jump Bag 的硬件

注意

更多细节可以在制造商网站上找到,www.digitalintelligence.com/products/ultrakit/

当然,如果我们忽略这种解决方案的主要缺点,与成本相比,这个决策有很多优势。除此之外,你还可以获得一套完整的入门套件来处理事件。此外,Ultra Kit 允许你安全地运输设备,而不必担心损坏。

注意

FRED-L 笔记本基于现代硬件,规格不断更新,以满足现代要求。当前规格可以在制造商网站上找到,www.digitalintelligence.com/products/fredl/

IR 和 Jump Bag 的硬件

然而,如果你想替代昂贵的解决方案,可以构建一个更便宜的替代品,这样可以节省 20-30% 的预算。你可以单独购买决策评审中包含的组件。

作为工作站,你可以选择一台具有以下规格的笔记本电脑:

  • 英特尔 Core i7-6700K Skylake 四核处理器,4.0 GHz,8MB Intel Smart Cache

  • 16 GB PC4-17000 DDR4 2133 内存

  • 256 GB 固态内部 SATA 驱动器

  • 英特尔 Z170 Express 芯片组

  • NVIDIA GeForce GTX 970M,配备 6 GB GDDR5 显存

该规格将提供一个舒适的工作站,用于在路上工作。

注意

作为设备运输的案例研究,我们建议关注 Pelican(www.pelican.com)箱子。在这种情况下,制造商可以选择符合你需求的设备。

处理事件的典型任务之一是从硬盘获取镜像。对于这个任务,你可以使用复制器或一组写保护器和计算机。

复制器无疑是一种更便捷的解决方案;使用它们可以快速获取磁盘镜像,而无需额外的软件。它们的主要缺点是价格较高。然而,如果你经常需要提取硬盘镜像,并且预算有几千美元,那么购买复制器是一个不错的投资。

如果硬盘镜像是相对少见的问题,而且预算有限,你可以购买一个写保护器,价格大约在 300 到 500 美元之间。然而,使用该工具时需要电脑和软件,后续章节会进行详细讨论。

要购买所需的设备,你可以访问 www.insectraforensics.com,那里有来自不同制造商的设备。

同样,也不要忘记硬盘本身。值得购买一些大容量的硬盘,以确保良好的性能。

总结一下,响应人员需要在基本工具包中包括以下物品:

  • 几根网络电缆(直通电缆或环回电缆)

  • 一根带有串口 USB 适配器的串行电缆

  • 网络串口适配器

  • 硬盘(不同尺寸)

  • 闪存驱动器

  • 一张 Linux Live DVD

  • 带写保护器的便携式驱动器复制器

  • 各种驱动器接口适配器

  • 一台四端口集线器

  • 数码相机

  • 电缆扎带

  • 电缆剪刀

  • 各种螺丝和六角驱动工具

  • 笔记本和笔

  • 监控链表格

  • 事件处理程序

软件

在讨论硬件之后,我们没有忘记你应该始终随身携带的软件。可以用于事件处理的软件种类繁多,可以根据个人的偏好、技能和预算来选择。有些人喜欢使用命令行工具,而有些人则发现图形界面(GUI)更加方便使用。

有时候,某些工具的使用是由工作所需的具体情况决定的。

一些工具将在后续章节中讨论。然而,我们强烈建议你提前准备并彻底测试所有需要的软件。

活体与死亡(Live versus mortem)

对事件的初步反应是计算机事件管理过程中非常重要的一步。正确执行此步骤的方法直接影响调查的成功与否。

此外,及时且正确的响应对于减少事件造成的损害至关重要。

传统的磁盘分析方法并不总是实用的,在某些情况下,根本无法使用。

在今天的世界里,计算机技术的发展使得许多公司在多个城市、国家和大陆建立了分销网络。由于计算机与网络的物理隔离,传统的对每台计算机进行调查的方法已不再可行。

在这种情况下,事件响应者应能够远程进行先期评估,并尽快查看正在运行的进程列表、开放的网络连接、打开的文件,以及获取系统中注册的用户列表。然后,如有必要,进行全面调查。

在本章中,我们将探讨应答者在特定情况下可能采用的一些方法。然而,即使在我们可以物理访问机器的情况下,实时响应仍然是唯一的事件响应方式。

例如,当我们处理大容量磁盘阵列时。在这种情况下,一次性会遇到几个问题。第一个问题是,存储大量数据的空间也很难识别。除了这个问题外,分析大量数据所需的时间也过于高估。

通常,这类大量数据由一个高负载服务器提供服务,支持数十万用户,因此它们的访问,甚至重启,都是不可接受的商业行为。

另一种需要采用实时取证方法的情境是使用加密文件系统的情况。在没有解密密钥的情况下,实时取证是一种有效的替代方法,可以从使用加密文件系统的系统中获取数据。

这并不是实时分析可能适用的所有情况的详尽列表。

值得注意的是一个非常重要的点:在实时分析过程中,无法避免系统的变化。

连接外部 USB 设备或网络连接、用户登录或启动可执行文件等操作会在系统的各种日志文件、注册表项等中进行修改。因此,您需要了解应答者的操作所造成的变化,并记录下来。

易失性数据

根据“易失性顺序”原则,您必须首先收集被归类为易失性数据的信息(如网络连接列表、正在运行的进程列表、登录会话等),这些信息在计算机关机时会不可恢复地丢失。

然后,您可以开始收集非易失性数据,这些数据也可以通过传统的磁盘映像分析方法获得。此时的主要区别是,使用正常工作的机器时,获取实时取证数据更为简便。

获取内存转储和磁盘映像以及对其进行分析的过程将在其他章节中详细描述。本章将重点讨论易失性数据的收集。

通常,这个类别包括以下数据:

  • 系统运行时间和当前时间

  • 网络参数(NetBIOS 名称缓存、活动连接、路由表等)

  • 网络接口卡(NIC)配置设置

  • 登录用户和活动会话

  • 加载的驱动程序

  • 正在运行的服务

  • 正在运行的进程及其相关参数(加载的 DLL、打开的句柄和所有权)

  • 自启动模块

  • 共享驱动器和远程打开的文件

记录数据收集的时间和日期可以帮助定义一个时间间隔,调查人员将在该时间段内对系统进行分析:

(date / t) & (time / t)>%COMPUTER_NAME% \ systime.txt
systeminfo | find "Boot Time" >>% COMPUTERNAME% \ systime.txt

最后一条命令可以显示自上次重启以来机器的运行时间。

使用 %COMPUTERNAME% 环境变量,我们可以为每台计算机设置单独的目录,以防需要重复在网络中不同计算机上收集信息的过程。

在某些情况下,通过分析网络活动,可以清楚地看到妥协的迹象。下一组命令允许您获取这些信息:

nbtstat -c> %COMPUTERNAME%\NetNameCache.txt
netstat -a -n -o>%COMPUTERNAME%\NetStat.txt
netstat -rn>%COMPUTNAME%\NetRoute.txt
ipconfig / all>%COMPUTERNAME%\NIC.txt
promqry>%COMPUTERNAME%\NSniff.txt

第一条命令使用 nbtstat.exe 从 NetBIOS 缓存中获取信息。您可以显示与相应 IP 地址关联的 NetBIOS 名称。第二条和第三条命令使用 netstat.exe 记录所有活动连接、监听端口和路由表。

获取网络设置信息时,使用 ipconfig.exe 网络接口命令。

最后一条命令启动了 Microsoft promqry 工具,它允许您定义本地计算机上处于混杂模式的网络接口。此模式是网络嗅探工具所需的,因此检测到此模式表明计算机可能运行监听网络流量的软件。

要列出计算机上所有登录的用户,可以使用 Sysinternals 工具:

psloggedon -x>%COMPUTERNAME% \ LoggedUsers.tx:
logonsessions -p >> %COMPUTERNAME%\LoggedOnUsers.txt

PsLoggedOn.exe 命令列出了两类用户:一类是本地登录到计算机的用户,另一类是通过网络远程登录的用户。使用 -x 参数,您可以获得每个用户登录的时间。

使用 -p 键,logonsessions 将显示该用户在会话期间启动的所有进程。

应注意,logonsessions 必须以管理员权限运行。

要获取加载到系统中的所有驱动程序列表,可以使用 WDK drivers.exe 工具:

drivers.exe>%COMPUTERNAME%\drivers.txt

获取运行中的进程及其相关信息的下一组命令如下:

tasklist / svc>%COMPUTERNAME% \ taskdserv.txt
psservice>%COMPUTERNAME% \ trasklst.txt
tasklist / v>%COMPUTERNAME% \ taskuserinfo.txt
pslist / t>%COMPUTERNAME%\tasktree.txt
listdlls>%COMPUTERNAME%\lstdlls.txt
handle -a>%COMPUTERNAME%\lsthandles.txt

使用 /svc 参数的 tasklist.exe 工具枚举运行中的进程和服务及其上下文。尽管前一条命令显示了正在运行的服务列表,但 PsService 通过注册表和 SCM 数据库中的信息获取服务信息。

服务是攻击者访问之前已被妥协系统的传统方式。服务可以配置为在没有用户干预的情况下自动运行,并且可以作为另一个进程的一部分启动,如 svchost.exe

此外,远程访问可以通过完全合法的服务提供,如 telnet 或 ftp。要将用户与其运行的进程关联,可以使用 tasklist / v 命令。

要列出每个进程中加载的 DLL 及其完整路径,可以使用 SysInternals 的 listsdlls.exe

另一个 handle.exe 工具可以用来列出所有已打开的句柄,这些句柄是打开的进程。它处理注册表键、文件、端口、互斥体等。

其他工具需要以管理员权限运行。这些工具可以帮助识别被注入到进程中的恶意 DLL,以及这些进程未访问的文件。

下一组命令允许你获取配置为自动启动的程序列表:

autorunsc.exe -a>%COMPUTERNAME% \ autoruns.txt
at>%COMPUTERNAME% \ at.txt
schtasks / query>%COMPUTERNAME% \ schtask.txt

第一个命令启动 SysInternals 工具,autoruns,并显示在系统启动和用户登录时运行的可执行文件列表。这个工具可以帮助你检测使用流行且著名的持久安装方法将恶意软件安装到系统中的情况。

另外两个命令(atschtasks)会显示计划中运行的命令列表。启动 at 命令也需要管理员权限。

要安装后门机制,通常使用服务,但服务始终在系统中运行,因此可以在实时响应期间轻松被检测到。因此,创建一个按计划运行的后门以避免被发现。例如,攻击者可以创建一个任务,在工作时间外运行恶意软件。

要获取已删除的网络共享驱动器和磁盘文件列表,可以使用以下两个命令:

psfile>%COMPUTERNAME%\openfileremote.txt
net share>%COMPUTERNAME%\drives.txt

非易失性数据。

在收集了易失性数据之后,可以继续收集非易失性数据。这些数据可以在分析磁盘阶段获取,但正如我们之前提到的,在某些情况下,无法对磁盘进行分析。

这些数据包括以下内容:

  • 已安装的软件和更新列表。

  • 用户信息。

  • 文件系统时间戳的元数据。

注册表数据。

然而,在接收到这些数据并在系统实时运行时,会遇到困难,因为许多文件无法以通常的方式复制,因为它们被操作系统锁定。为此,使用其中的一种工具。一个这样的工具是由Joakim Schicht 编写的 RawCopy.exe 工具。

这是一个控制台应用程序,它通过低级磁盘读取方法从 NTFS 卷中复制文件。

该应用程序有两个必需的参数,目标文件和输出路径:

  • -param1:这是要提取的目标文件的完整路径;它也支持使用 IndexNumber 替代文件路径。

  • -param2:这是有效的输出目录路径。

这个工具可以让你复制通常无法访问的文件,因为系统已将它们锁定。例如,注册表配置单元,如 SYSTEMSAM,位于 SYSTEM VOLUME INFORMATION 中的文件,或者卷上的任何文件。

这支持通过完整文件路径或其 $MFT 记录号(索引号)指定输入文件。

这是从正在运行的系统中复制 SYSTEM 配置单元的示例:

RawCopy.exe C:\WINDOWS\system32\config\SYSTEM  %COMPUTERNAME%\SYSTEM

这是通过指定索引号提取 $MFT 的示例:

RawCopy.exe C:0  %COMPUTERNAME%\mft

这是提取 MFT 引用编号 30224 及所有属性(包括 $DATA)并将其转储到 C:\tmp 的示例:

RawCopy.exe C:30224 C:\tmp -AllAttr

要下载 RawCopy,请访问 github.com/jschicht/RawCopy

了解安装了哪些软件以及这些软件的更新信息有助于进一步调查,因为这显示了可能通过软件漏洞破坏系统的方式。攻击者进行的第一步通常是在系统扫描过程中进行攻击,以检测活动服务并利用其中的漏洞。

因此,未打补丁的服务可以被用来进行远程系统渗透。

安装一组软件和更新的方式之一是使用 systeminfo 工具:

systeminfo > %COMPUTERNAME%\sysinfo.txt.

此外,熟练的攻击者还可以自行执行相同的操作并安装必要的更新,以隐藏渗透系统的痕迹。

在识别出易受攻击的服务及其成功被利用后,攻击者会创建一个账户以便随后以合法方式进入系统。因此,对系统用户数据的分析揭示了以下被妥协的痕迹:

  • Recent 文件夹内容,包括 LNK 文件和跳转列表

  • Office Recent 文件夹中的 LNK 文件

  • Network Recent 文件夹内容

  • 整个 temp 文件夹

  • 整个 Temporary Internet Files 文件夹

  • PrivacyIE 文件夹

  • Cookies 文件夹

  • Java Cache 文件夹内容

现在,让我们考虑前述情况,如下所示:

  1. 收集 Recent 文件夹的操作如下所示:

    robocopy.exe  %RECENT% %COMPUTERNAME%\Recent /ZB
        /copy:DAT /r:0 /ts /FP /np /E log:%COMPUTERNAME%\Recent
        \log.txt
    
    

    这里 %RECENT% 取决于 Windows 版本。

    • 对于 Windows 5.x(Windows 2000、Windows XP 和 Windows 2003),如下所示:

      %RECENT% = %systemdrive%\Documents and
          Settings\%USERNAME%\Recent
      
      
    • 对于 Windows 6.x(Windows Vista 及更高版本):

      %RECENT% =%systemdrive%\Users\%USERNAME%\AppData\Roaming
          \Microsoft\Windows\Recent
      
      
  2. 收集 Office Recent 文件夹的操作如下所示:

    robocopy.exe  %RECENT_OFFICE%
        %COMPUTERNAME%\Recent_Office /ZB /copy:DAT /r:0 /ts /FP
        /np /E log:%COMPUTERNAME%\Recent_Office\log.txt
    
    
    • 这里 %RECENT_OFFICE% 取决于 Windows 版本。

    • 对于 Windows 5.x(Windows 2000、Windows XP 和 Windows 2003),如下所示:

      %RECENT_OFFICE% = %systemdrive%\Documents and
          Settings\%USERNAME%\Application Data\Microsoft\Office
          \Recent
      
      
    • 对于 Windows 6.x(Windows Vista 及更高版本),如下所示:

      %RECENT% =%systemdrive%\Users\%USERNAME%\AppData\Roaming
          \Microsoft\Windows\Office\Recent
      
      
  3. 收集 Network Shares Recent 文件夹的操作如下所示:

    robocopy.exe  %NetShares% %COMPUTERNAME%\NetShares /ZB
        /copy:DAT /r:0 /ts /FP /np /E 
        log:%COMPUTERNAME%\NetShares\log.txt
    
    
    • 这里 %NetShares% 取决于 Windows 版本。

    • 对于 Windows 5.x(Windows 2000、Windows XP 和 Windows 2003),如下所示:

      %NetShares% = %systemdrive%\Documents and
          Settings\%USERNAME%\Nethood
      
      
    • 对于 Windows 6.x(Windows Vista 及更高版本),如下所示:

      %NetShares % =''%systemdrive%\Users\%USERNAME%\AppData
          \Roaming\Microsoft\Windows\Network Shortcuts''
      
      
  4. 收集 Temporary 文件夹的操作如下所示:

    robocopy.exe  %TEMP% %COMPUTERNAME%\TEMP /ZB /copy:DAT
        /r:0 /ts /FP /np /E log:%COMPUTERNAME%\TEMP\log.txt
    
    
    • 这里 %TEMP% 取决于 Windows 版本。

    • 对于 Windows 5.x(Windows 2000、Windows XP 和 Windows 2003),如下所示:

      %TEMP% = %systemdrive%\Documents and Settings\%USERNAME%
          \Local Settings\Temp
      
      
    • 对于 Windows 6.x(Windows Vista 及更高版本),如下所示:

      %TEMP% =''%systemdrive%\Users\%USERNAME%\AppData
          \Local\Temp ''
      
      
  5. 收集 Temporary Internet Files 文件夹的操作如下所示:

    robocopy.exe  %TEMP_INTERNET_FILES%
        %COMPUTERNAME%\TEMP_INTERNET_FILES /ZB /copy:DAT /r:0
        /ts /FP /np /E log:%COMPUTERNAME%\TEMP\log.txt
    
    
    • 这里 %TEMP_INTERNET_FILE% 取决于 Windows 版本。

    • 对于 Windows 5.x(Windows 2000、Windows XP 和 Windows 2003),如下所示:

      %TEMP_INTERNET_FILE% = ''%systemdrive%\Documents and
          Settings\%USERNAME%\Local Settings\Temporary Internet
          Files''
      
      
    • 对于 Windows 6.x(Windows Vista 及更高版本),如下所示:

      %TEMP_INTERNET_FILE% =''%systemdrive%\Users\%USERNAME%\
          AppData\Local\Microsoft\Windows\Temporary Internet
          Files"
      
      
  6. 收集 PrivacIE 文件夹的操作如下所示:

    robocopy.exe  %PRIVACYIE % %COMPUTERNAME%\PrivacyIE /ZB
        /copy:DAT /r:0 /ts /FP /np /E
        log:%COMPUTERNAME%/PrivacyIE/log.txt
    
    
    • 这里 %PRIVACYIE% 取决于 Windows 版本。

    • 对于 Windows 5.x(Windows 2000、Windows XP 和 Windows 2003),如下所示:

      %PRIVACYIE% = ''%systemdrive%\Documents and
          Settings\%USERNAME%\ PrivacIE''
      
      
    • 对于 Windows 6.x(包括 Windows Vista 及更高版本),具体如下:

      %PRIVACYIE% =''%systemdrive%\Users\%USERNAME%\
          AppData\Roaming\Microsoft\Windows\PrivacIE "
      
      
  7. 收集Cookies文件夹的方法如下:

    robocopy.exe  %COOKIES% %COMPUTERNAME%\Cookies /ZB
        /copy:DAT /r:0 /ts /FP /np /E log:%COMPUTERNAME%\Cookies
        \.txt
    
    
    • 这里的%COOKIES%取决于 Windows 的版本。

    • 对于 Windows 5.x(包括 Windows 2000、Windows XP 和 Windows 2003),具体如下:

      %COOKIES% = ''%systemdrive%\Documents and
          Settings\%USERNAME%\Cookies''
      
      
    • 对于 Windows 6.x(包括 Windows Vista 及更高版本),具体如下:

      %COOKIES% =''%systemdrive%\Users\%USERNAME%\
          AppData\Roaming\Microsoft\Windows\Cookies"
      
      
  8. 收集Java Cache文件夹的方法如下:

    robocopy.exe  %JAVACACHE% %COMPUTERNAME%\JAVACACHE /ZB
        /copy:DAT /r:0 /ts /FP /np /E
        log:%COMPUTERNAME%\JAVACAHE\log.txt
    
    
    • 这里的%JAVACACHE%取决于 Windows 的版本。

    • 对于 Windows 5.x(包括 Windows 2000、Windows XP 和 Windows 2003),具体如下:

      %JAVACACHE% = ''%systemdrive%\Documents and
          Settings\%USERNAME%\Application Data\Sun\Java\Deployment
          \cache''
      
      
    • 对于 Windows 6.x(包括 Windows Vista 及更高版本),具体如下:

      %JAVACACHE% =''%systemdrive%\Users\%USERNAME%\AppData
          \LocalLow\Sun\Java\Deployment\cache"
      
      

远程现场响应

然而,如前所述,通常需要远程进行信息收集。在 Windows 系统上,通常使用 SysInternals PsExec 实用程序来执行此操作。PsExec 允许您在远程计算机上执行命令,而无需安装系统。

程序的工作原理是psexec.exe是另一个 PsExec 的资源可执行文件。此文件在特定目标机器上运行 Windows 服务。在执行命令之前,PsExec 会在远程计算机的管理员权限域中解压此隐藏资源到Admin$C:\Windows)文件Admin$\system32\psexecsvc.exe

复制后,PsExec 使用 Windows 管理服务的 API 函数安装并运行服务。然后,在启动 psexesvc 后,psexesvc 与 psexec 之间建立数据连接(输入命令和获取结果)。工作完成后,psexec 停止服务并从目标计算机中移除。

如果需要远程信息收集,则运行 UNIX 操作系统的工作机器可以使用 Winexe 实用程序。

Winexe 是一个基于 GNU/Linux 的应用程序,允许用户在 WindowsNT/2000/XP/2003/Vista/7/8 系统上远程执行命令。它在远程系统上安装一个服务,执行命令,然后卸载该服务。Winexe 允许执行大部分 Windows shell 命令:

 winexe -U [Domain/]User%Password //host command 

要在 Linux 系统内启动 Windows shell,请使用以下命令:

 winexe -U HOME/Administrator%Pass123 //192.168.0.1 "cmd.exe"

总结

在本章中,我们讨论了应急包中应该包含的内容以处理计算机事件,以及 IR 团队成员需要的技能。

我们还审视了现场响应并从现场系统收集了易失性和非易失性信息。我们还讨论了收集信息的不同工具。我们还讨论了何时应该使用现场响应方法作为传统取证的替代方法。

在接下来的章节中,我们将考虑与易失性数据收集相关的问题。

第三章。易失性数据收集

本章专注于与获取数据相关的一些问题,这些数据变化非常快。由于其特性,它反映了系统在某一特定时间点的状态,因为数据的收集是在一个活动系统上进行的。

请求评论 RFC 3227 文档提供了数字证据的列表及其收集顺序。应该指导这一过程的主要原则是首先收集变化最快的数据。

RFC 提供的证据清单包括以下内容:

  • 寄存器和缓存 CPU

  • 路由表,ARP 缓存,进程表,内核统计和内存

  • 临时文件系统

  • 硬盘

  • 与系统媒体相关的远程日志记录和监视数据

  • 物理配置和网络拓扑

  • 存档媒体

根据这个列表,应首先收集的易失性数据是与内存和网络相关的数据。

内存获取

多年来,进行数字取证的主要技术是分析硬盘镜像。当然,如果有硬盘镜像可用,我们有很大机会获取大量数据来解决事件。然而,这种方法也有一些缺点。

现代硬盘具有巨大的容量,有时我们不得不处理 RAID 阵列,因此分析如此大量的数据将需要很长时间。此外,全磁盘加密技术可能已实施,没有加密密钥将无法访问磁盘上的文件。此外,分析硬盘内容并不总是能够完整展现特定时间点发生的整个情况。而且,如今存在许多无身体的恶意软件;在这种情况下,恶意代码不会作为文件出现在文件系统中。

所有这些列出的事实都迫使法证专家寻求新的替代方法来解决法证任务。因此,研究人员将 RAM 作为替代信息源。

由于众所周知和现代的 PC 是建立在冯·诺伊曼体系结构上的,因此在计算机上执行的任何代码片段应该出现在内存的某处。内存可能是一个有用的证据来源。使用内存的另一个优势是其尺寸较小。尽管如今用户的工作站拥有越来越多的 RAM,但其尺寸仍远小于现代硬盘。然而,长时间以来,内存分析的过程并不广泛使用。内存分析的过程仅仅是扫描转储内存以搜索一些字符串。当诸如 Volatility Framework 之类的工具出现时,情况发生了变化。

因此,如今,内存取证不再是可选项,而是专业调查的强制步骤。但是,在进行内存分析之前,我们应该先获取内存转储,并且应该以正确的方式进行。否则,即使使用如 Volatility 之类的强大工具,内存分析也将不成功。

有很多工具可以为任何操作系统(MS Windows、Linux 或 Mac OS X)创建内存转储。其中一些工具非常简单,你只需按下按钮。然而,专业人员应了解其工作原理,并做好在出现问题时进行修复的准备。

与内存访问相关的问题

现在,让我们讨论一些与 MS Windows 上内存访问相关的问题。在 MS Windows 中,有一个 \Device\PhysicalMemory 内核对象,它提供对系统物理内存的直接访问。为了获取内存的内容,我们应该读取这个文件。在 Windows Server 2003 SP2 之前,给定的文件可以从用户空间访问。然而,从这个更新开始,并且在之后的所有 MS Windows 版本中,这个对象只能从内核空间访问。用户空间应用程序可以读取这个文件,但要打开和编辑它,则需要内核空间代码或驱动程序。此外,任何对这个对象的操作都是危险的。设备内存是物理内存的一部分,它映射到系统中的其他设备。操作系统通过将数据发送到这些设备来访问这一部分物理内存,这些设备如显卡等,它们的数据存储在特定的内存块中,这些内存块专门为这些设备保留。写入或请求访问这些为设备保留的内存区域的操作会被转换成一个请求,然后发送到实际的设备。

设备如何处理请求取决于设备本身。此外,这可能导致系统挂起或崩溃,并破坏证据。因此,用于内存转储的软件和硬件应排除这些内存区域。我们建议在使用之前测试所有工具。除了刚刚描述的问题外,还有恶意软件可能会改变工具的行为并更改内存转储的结果。

尽管我们在实际生活中从未遇到过这样的恶意软件,但有一些研究人员编写的 PoC 可以证明这种威胁。因此,如果内存获取过程失败,可能会导致系统崩溃并丢失数据。

选择工具

要选择工具,我们需要回答以下问题:

  • 支持的操作系统版本是什么?

  • 支持的硬件架构是什么(x32, x64)?

  • 所需的权限级别是什么?

  • 结果存储在哪里?

目前,市场上有许多免费和商业工具支持所有版本的 MS Windows,可以用于内存转储:

免费工具 商业工具
DumpIt F-Response
WinPMEM (rekall) Guidance Winen
FTKImager HBGary Fastdump PRO
BelkaSoft Live RAM Capturer

我们需要注意,商业工具并不总是更好。我们应该使用哪种工具取决于使用案例、响应者的经验和资质以及其他因素。

尽管有很多可能的选项,但我们建议您遵循的原则是相同的:

  1. 尽量减少对系统的影响。

  2. 从安全环境运行工具。

  3. 将结果存储在系统外部。

我们将所有用例分为三组,分为两种方法,即硬件和软件:

  • 本地

  • 远程

  • 死后

它们每个都有其优点和缺点。例如,让我们看看硬件方法。在这种情况下,不需要管理员权限,但您应该能够物理访问正在调查的 PC。所采用的方法基于直接内存访问DMA)和一些技术,如 Firewire、Thunderbolt、ExpressCard 或 PCI。这种方法的缺点是在使用之前需要将一些硬件和软件安装到系统中。此外,此操作需要重新启动系统。因此,这样做可能会破坏一些证据。另一个缺点是使用 FireWare 技术可以倾倒的 4 GB 内存大小的限制。但是,基于 PCI 的解决方案很少见且昂贵。

正如我们之前提到的,有很多用例变体。因此,在一个单独的章节中观察每一个是不可能的。

最简单和最常见的情况是本地软件方法。在这种方法中,我们可以使用多种实用程序,现在我们来看看其中一些。

DumpIt

在系统内存不超过 4 GB 的情况下,DumpIt 工具是一个不错的选择。DumpIt 具有非常简单的命令行界面,即使对于没有经验的人来说也很容易使用。要倾倒整个系统内存,你应该将其复制到某个可移动设备上,该设备有足够的空间来存储内存转储。然后,将此设备插入系统并从该驱动器运行。运行完成后,DumpIt 将在执行 DumpIt 的相同路径下创建一个包含系统内存转储的文件:

DumpIt

不幸的是,DumpIt 的免费版本在处理超过 4 GB 内存时无法正常工作。

如果您有 8 GB 或更多内存,我们建议使用 Belkasoft Live RAM Capturer。此软件也具有简单的图形界面。它适用于 x32 和 x64 位架构:

DumpIt

FTK Imager

另一个用于内存转储的流行工具是 FTK Imager。它也是免费的。有两个版本。我们建议使用 FTK Imager Lite 版本。它不需要安装,具有易于使用的界面,并且具有许多有用的功能:

FTK Imager

使用 iSCSI 从远程计算机获取内存

另一个常见的场景是从远程计算机获取内存。考虑一下这种情况,我们需要从远程 Windows 工作站中转储内存,且操作系统可能包括 MS Windows、Mac OS X 和 Linux。为此,我们可以使用iSCSI协议。互联网小型计算机系统接口协议(Internet Small Computer System Interface,iSCSI)是由 IBM 和 CISCO 于 1998 年开发的。该协议允许客户端(称为启动器)向远程服务器上的 SCSI 存储设备(称为目标)发送 SCSI 命令(CDB)。

启动器是一个 iSCSI 客户端,它的工作方式类似于 SCSI 适配器,只不过它使用的是 IP 网络而非物理总线。iSCSI 目标是一个提供存储设备网络接口的服务器。因此,我们应该在调查员的工作站上安装 iSCSI 目标,在那里我们将存储内存转储。有几个免费的 iSCSI 实现可供 Microsoft 和 StarWind 使用。此外,F-Response 提供通过 iSCSI 访问远程 PC 的功能。大多数操作系统都带有免费的内置启动器客户端软件,包括 MS Windows 2000 SP4 及更高版本。

所以,在我们的用例中,我们将使用我们自己编写的 iSCSI 目标软件,KFAKaspersky Forensics Agent),以及在 Linux 工作站上的iscsiadm工具作为启动器。

要使用 Kaspersky Forensics Agent 转储内存,在目标系统上运行该工具,并使用-mountphysmem选项:

使用 iSCSI 从远程计算机获取内存

为了提供授权访问,我们可以使用chaploginchapsecret选项:

使用 iSCSI 从远程计算机获取内存

现在,可以使用任何 iSCSI 启动器连接到选定的介质:

  1. 现在,我们测试连接:

    sudo iscsiadm -m discovery -t st -p TargetAddress
    
    
  2. 验证 iSCSI 连接正常后,我们建立完整的连接:

    sudo iscsiadm -m node --login
    
    
  3. 确保在 Ubuntu 环境中内存作为新设备可见。

  4. 现在,你可以像往常一样使用dd工具进行转储。

现在,你有了内存转储,可以开始分析它了!

使用 Sleuth Kit

我们还想讨论一个用例。可能调查人员只有硬盘镜像,无法从感兴趣的系统中转储内存。在这种情况下,我们仍然能够获得某些系统内存信息。MS Windows 在系统进入休眠状态时,会将内存内容保存在hiberfil.sys文件中。所以,如果我们有硬盘镜像,我们可以从磁盘中提取hiberfil.sys

为了实现这个,我们需要使用 Sleuth Kit。让我们来看看我们如何做到这一点:

  1. 要获取有关磁盘分区的信息,请使用以下命令:

    mmls image
    
    

    输出将如下所示:

    使用 Sleuth Kit

  2. 然后,使用fls列出 NTFS 分区根目录中的文件:

    fls -o 2048 image.dd | grep hiberfil.sys
    r/r 32342-128-1: hiberfil.sys
    
    
  3. 最后,提取hiberfil.sys

    icat -o 2048 image.dd 32342 > hiberfil.sys
    
    

现在,你可以使用分析工具,如 Volatility,分析hiberfil.sys

基于网络的数据收集

如今,找到没有任何网络连接的计算机已经相当困难。这在企业环境中几乎是不可能的。网络连接反映了计算机与外界的互动。此外,网络是主要的威胁来源。今天,互联网是一个非常具有攻击性的环境,各种层级的威胁,从垃圾邮件到 APT,经常通过网络渗透到计算机中。

因此,在几乎所有的事件中,计算机的网络活动都与该事件相关。有很多此类事件的例子,例如接收到带有恶意附件的电子邮件和访问恶意网址。然而,有时仅凭主机级别的证据无法完整了解事件的全貌。在这种情况下,基于网络的证据可以提供很大帮助。

网络取证是一个广泛的话题,我们不会涉及所有问题。在这一章中,我们只是希望将其视为一种额外的证据来源。网络证据有很多,但我们将重点关注网络流量的获取。

法医调查员可以从物理介质(如电缆或空气)和网络设备(如交换机或集线器)捕获网络流量。

现在,我们将简要介绍这一话题,以便理解如何收集网络流量。

集线器

这些是简单的网络设备,允许将所有设备连接到本地子网。集线器除了实现所有设备的物理连接外,并不具备其他功能。

当这样的设备接收到网络帧时,它会将数据包转发到其他端口。因此,连接到集线器的每个设备都会接收到所有专门为其他设备准备的流量。在基于集线器的网络中,捕获来自特定网络段的流量相对简单。我们需要注意的是,有时候一些制造商将一些实际上是交换机的设备标记为集线器。

了解你正在处理的设备类型的最可靠方法是将工作站连接到该设备,将网络接口设置为混杂模式,并使用tcpdump工具或类似工具捕获流量。如果你只收到广播且数据包只针对该工作站,这意味着你遇到的是交换机设备。如果流量包含其他工作站的数据包,则说明你遇到的是集线器

调查员在使用集线器捕获流量时应当小心。在这种情况下,调查员可以看到所有流量,但也可能是来自本地网络的所有设备。一台被攻陷的系统可以作为被动嗅探器,窃听所有传输的数据。网络中的任何调查活动和数据都可能被截获。因此,使用已安装的集线器是一个好主意,但安装新的集线器来捕获网络流量则会带来新的风险。

交换机

交换机是构建本地网络中最常见的网络设备。它们还作为集线器,用于将网络设备连接到网络中。然而,与集线器不同,交换机使用软件跟踪连接到交换机端口的站点。这些信息会保存在 CAM 表中。当交换机接收到新的数据包时,它只会根据 CAM 表将该数据包转发到特定端口。因此,每个站点只接收自己的流量。

调查人员通常可以在交换机设备上捕获网络流量,因为大多数交换机具备将一个或多个端口的流量复制到其他端口以进行聚合和分析的功能。不同厂商使用不同的术语,最常用的术语是SPAN交换端口分析仪)或RSPAN远程 SPAN)。有时,也会使用端口镜像这一术语。此外,交换机的硬件容量各不相同。端口镜像受到设备物理容量的限制。考虑以下示例:我们有一个 100 Mbps 的交换机,想要将四个端口的流量镜像到另一个端口。如果每个端口的平均负载为 50 Mbps,那么镜像端口的负载将达到 200 Mbps,远超每个端口的容量。因此,在此过程中会丢失一些数据包。

我们应当注意,使用 SPAN 端口的方法可能会改变所收集的流量。然而,还有一种方法可以捕获流量,那就是网络 Tap。

网络 Tap(网络分接器)被放置在站点和交换机之间,能够查看并捕获此主机的所有流量。网络 Tap 复制所有流量,包括损坏的流量和其他任何数据包。因此,这种方法更适合于取证。

在我们最终选择了捕获流量的方法后,我们需要一些软件。一个常见的解决方案是libpcap库及其基础上的软件,包括tcpdump、Wireshark 等。

使用此类软件捕获流量有两种主要方法:一种是捕获时进行过滤,另一种是先捕获所有数据,再进行过滤。

在某些情况下,如果你有有限的存储空间来存储流量,捕获时进行过滤是一个好主意。另一方面,libpcap 具有一个非常强大的过滤功能,叫做Berkley 数据包过滤器BPF)。通过使用 BPF 过滤器,我们可以控制要捕获的流量以及要丢弃的流量。如果你确切知道要捕获的内容,这种方法可以节省大量的时间和资源。BPF 可以根据第二、第三和第四层协议中的字段进行比较来过滤流量。此外,BPF 语言有一些内置的原语:host iddst host idsrc host idnet iddst net idsrc net idether iddst ether idsrc ether idport iddst port idsrc port idgateway idip proto idether proto idtcpudpicmparp。你可以在pcap-filter的手册文档中找到更多内容。

Tcpdump

tcpdump 是一款用于捕获、过滤和分析网络流量的工具。该工具的主要目的是捕获流量并打印出来或将其存储到文件中。tcpdump 捕获的流量按比特流传输,保持原始传输格式。我们可以使用 tcpdump 分析网络流量,帮助故障排除。在这种情况下,您将使用 BPF 进行预过滤。然而,通常这种方法更适用于初步的筛查:

Tcpdump

在取证实践中,其他方法更加普遍。Tcpdump 用于长时间捕获流量并将其存储到磁盘文件中,之后进行分析并与其他数据进行关联。

tcpdump 是一款高保真度工具,但捕获的流量质量取决于运行 tcpdump 的主机上可用的资源。例如,tcpdump 的性能将依赖于 CPU 的处理能力。数据包捕获是一项 CPU 密集型活动,如果 CPU 超负荷,tcpdump 将无法正常工作并丢失数据包。在取证案例中,我们希望捕获所有数据包,这个问题可能非常关键。在高负载的网络中,流量存储空间也是一个重要问题。如前所述,您可以通过过滤流量,只保留有用信息。

尽管过滤可以节省资源,如 CPU、磁盘空间和带宽,但需要谨慎实施,因为过度过滤可能会导致证据丢失。

Wireshark

另一个流行的捕获和流量分析工具是 Wireshark:

Wireshark

Wireshark 是一款拥有易于使用的图形用户界面的工具,因此它是网络取证初学者的好工具。它还具有许多过滤、解密和分析网络流量的功能。因此,这使得 Wireshark 成为任何网络调查员必备的工具。Wireshark 允许您在系统的任何接口上捕获流量,只要您拥有必要的权限,可以实时显示流量,并将其存储到磁盘文件中。

此外,还有一些有用的命令行工具,它们与 Wireshark 一起分发。

Tshark

Tshark 是 Wireshark 的命令行版本。它几乎具有相同的功能,并与相同的文件格式兼容:

Tshark

Dumpcap

Wireshark 工具包中的另一个有用工具是 Dumpcap。它专门用于捕获网络数据包。因此,它在捕获方面经过优化,可以更好地发挥性能,并且占用的系统资源更少。如果您计划捕获流量并使用 Wireshark 进行分析,那么 Dumpcap 工具将是捕获网络流量的好选择:

Dumpcap

总结

在本章中,我们讨论了与易失性数据收集相关的问题。我们讨论了不同的工具和方法来收集内存和网络流量。

在下一章,我们将讨论与非易失性数据收集相关的问题。我们将讨论如何复制硬盘,以及如何使用独立工具如 IR CD 来完成此操作。

第四章:非易失性数据获取

在本章中,我们将讨论硬盘驱动器HDD的数据获取。数据获取至关重要,因为对原始硬盘执行分析可能导致包含数据的唯一硬盘损坏,或者你可能会不小心写入该原始硬盘。

因此,从硬盘创建法医映像必须在分析之前进行。HDD 的获取可以在事件现场或分析实验室进行,无论是实时系统还是关机系统,且可以通过网络或本地进行,正如本章所述。

简而言之,我们将涵盖以下主题:

  • 法医映像

  • 事件响应 CD

  • 硬盘的实时映像

  • 使用 Linux 进行硬盘映像

  • 数据获取中的虚拟化

  • 证据完整性

  • Linux 中的磁盘擦除

法医映像

硬盘映像是创建受害者或嫌疑人硬盘的精确法医映像的过程,以便对映像硬盘进行分析,而不是对原始硬盘进行分析。要创建硬盘的精确副本,可以遵循两种选项:

  • 复制:这是指该过程的目标是整个硬盘。在某些参考资料中,当目标硬盘与源硬盘具有相同的品牌、型号和大小时,此步骤可以称为克隆。复制可以使用所谓的法医硬件复制器进行。这些是硬件设备,基本上具有两个接口,用于连接源硬盘和目标硬盘。一旦它们开始工作,它们将仅仅将数据块从源硬盘复制到目标硬盘,而不管源硬盘使用的文件系统结构。

    通常,硬件复制比其他软件工具更快,因为它以线速运行。一些复制器具有特殊的功能,例如在获取过程中执行某些搜索操作,或者它们可以在相同的时间内创建最多八个副本。复制也可以使用软件工具进行,例如dd,前提是工具的目标是一个完整的硬盘,而不是文件。本章稍后会讨论这一点。

  • 映像:这是指硬盘的目标是一个容器文件或映像文件。这个映像可能具有不同的格式,这将在本章稍后讨论。

在接下来的部分,将介绍一些技术和工具——这些包括软件复制和映像——并进行说明。

事件响应 CD

由于事件响应IR)过程中所需的速度,使用事件响应 CD 可以节省宝贵的时间。IR CD 通常是 Linux 发行版。这些发行版包含许多事件响应和数字取证工具,主要用于从目标系统启动,以获取不同类型的可能证据,而无需断开硬盘。

该工具的设计旨在对目标系统留下最少的痕迹,因此它默认启用对所有连接的硬盘的写保护。这样,用户仅能授予目标硬盘写入权限。最好在系统从事件响应 CD 启动之前不要连接目标硬盘。当然,从 IR CD 启动意味着所调查的系统已关闭,您将启动机器并从 CD 启动。在这种情况下,无法访问正在运行的系统内存。

IR CD 还具备采集实时系统内存和硬盘的功能。您需要插入 CD 并运行成像程序以获取内存和硬盘数据。

在接下来的章节中,我们将讨论一些可用的 IR CD 示例。

DEFT

数字证据与法医工具包 (DEFT) 包含许多采集与分析工具,可用于在调查员从其启动机器时进行现场分析:

DEFT

启动 DEFT CD

DEFT 还配备了 数字高级响应工具包 (DART)。DART 可以在 Windows 实时系统中运行,并在每个事件响应步骤中提供一套独特的工具。使用 DART,您可以执行以下操作:

  • 获取 Windows 内存和硬盘

  • 在需要时执行实时数据恢复

  • 对一些 Windows 伪影进行法医分析

  • 收集正在运行的系统信息

  • 监控系统网络

您可以在以下截图中查看 DART 界面:

DEFT

事件响应工具 DART

Helix

Helix 是一款 IR CD,提供免费版和商业版。它可以在三种操作系统上运行:WindowsLinuxMac,并支持实时数据采集。以下截图展示了这一功能:

Helix

图 A:Helix 在实时采集中的不同操作系统支持

和 DEFT 类似,您可以从 Helix CD 启动,以应对系统断电的情况。在这种情况下,您可以将硬盘克隆到另一块硬盘,并执行硬盘复制器的相同功能。请前往 应用程序 | 采集与分析 | Helix pro。在打开的窗口中,您可以将硬盘克隆或制作最多四个镜像,无论是从系统内存还是系统硬盘。Helix 还可以计算镜像的哈希函数:MD5、SHA1、SHA256 或 SHA512,甚至全部计算:

Helix

从 Helix IR CD 启动

硬盘的实时成像

在实时系统的情况下,您需要执行以下操作:

  • 如前所述,首先制作易失性数据的镜像,例如系统内存

  • 关闭系统电源

  • 断开硬盘连接

  • 单独成像硬盘

然而,在某些情况下,您还需要在不关闭系统的情况下成像硬盘。例如,如果系统是托管关键服务的服务器,无法停机,或者系统中存在加密,如果系统关闭将重新激活加密。这就是为什么实时采集始终是首选的原因。

FTK Imager 在实时硬盘采集中的应用

在本节中,我们将使用 FTK Imager 对实时目标机器的硬盘进行成像。我们将使用 FTK Imager Lite(accessdata.com/product-download/digital-forensics/ftk-imager-lite-version-3.1.1),它无需安装,以便在实时系统中留下最少的痕迹。导航到 文件 | 创建磁盘映像

在弹出的窗口中,选择以下源证据类型之一:

  • 物理磁盘:这是整个硬盘,从 MBR 开始,一直到硬盘的最后一个扇区

  • 逻辑磁盘:这是硬盘中的一个分区。

  • 图像文件:这是指如果您需要将图像从一种格式转换为另一种格式,也就是从 E01 格式转换为原始格式

在我们的案例中,我们将选择整个物理硬盘。现在,您需要选择源硬盘,并确保选择目标机器的正确硬盘。完成此操作后,您将有机会选择您希望使用的图像类型。以下是三种最重要的选项:

  • 原始图像格式:这只是硬盘的逐位拷贝,没有丢失或添加任何一个比特。此图像格式通常伴随一个单独的文件,包含图像文件的元数据信息。

  • E01:这是EnCase 证据文件。它包含与采集过程相关的信息,例如调查员姓名、时间戳和采集期间的键入笔记。它会为每 32 KB 的数据计算校验和,并在图像文件末尾添加整个比特流的 MD5 哈希值。

  • AFF:这是高级取证格式,用于存储磁盘映像和取证图像的元数据。这不是专有格式,而是开放格式,可以与任何分析工具一起使用,并且不会仅限于单一工具。

在原始成像过程后,您仍然可以将图像从一种格式转换为另一种格式。因此,我们可以始终选择原始格式,然后转换为在分析阶段需要的任何其他格式。现在,您需要添加目标信息,考虑到您正在操作一个实时系统,并且没有启用写保护。请小心并选择外部附加存储或网络共享文件夹中的目标文件夹。

有一个选项可以将映像划分为多个文件。你可以指定单个文件的大小。如果你在单个硬盘上没有足够的存储空间并需要将映像分割到不同的硬盘上,这个选项会非常有用。对于 FAT32 格式的卷,它无法处理超过 4 GB 大小的文件,这个选项也会很有帮助。

此外,你可以在同一过程中创建多个映像,如果有多个调查员在同一案件中工作,这将节省一些时间。

你可以选择在创建映像后验证该映像,方法是计算映像的哈希函数并将其结果与硬盘的哈希函数结果进行比较。如果匹配,则说明映像未被更改。哈希函数将在本章稍后讨论:

FTK Imager 在实时硬盘获取中的应用

FTK——选择映像目标位置

注意

FTK Imager 将硬盘逐位成像到一个单独的文件映像中。你不能像使用复制工具那样将硬盘成像到另一个硬盘。

使用 FTK Imager 进行网络映像

在某些情况下,你无法通过 USB 连接到目标系统以运行工具并连接存储设备。在这种情况下,你可以通过网络获取该系统的映像。

你需要做的是将你的机器与目标系统连接到同一个网络,并确保目标系统能够通过 ping 命令访问你的机器。从你的机器验证是否有足够的空间可用。现在,创建一个新文件夹,并以合适的读/写权限共享该文件夹。

在我们的示例中,共享文件夹的名称是Share,并且位于C:\。处理机的 IP 地址为 192.168.57.128,源/目标机器是 Windows 7 系统:

  1. 为了测试共享文件夹的可用性,请从源机器的运行窗口中运行\\192.168.57.128命令,如下所示:使用 FTK Imager 进行网络映像

    打开共享文件夹

  2. 必须弹出认证窗口。输入机器 IP、用户名和用户密码:使用 FTK Imager 进行网络映像

    共享文件夹认证

  3. 如果一切顺利,你将看到一个名为Share的文件夹。右键单击该文件夹并选择映射网络驱动器。你可以选择任何驱动器字母,在我们的案例中,我们选择了字母Z使用 FTK Imager 进行网络映像

    映射共享文件夹

  4. 现在,从源机器运行 FTK Lite 程序,然后从文件中打开创建磁盘映像。按照相同的步骤进行操作,并在选择映像位置时浏览到已映射的网络驱动器;它可能会要求你再次进行身份验证:使用 FTK Imager 进行网络映像

    将映像保存到共享文件夹

  5. 点击完成按钮后,你会看到一个进度条,表示已从整个硬盘大小中捕获的数据量。

在处理机上,你将找到一个名为image.raw的文件,它被创建在 Share 共享文件夹下,并且你可以看到文件大小的增加,直到它达到目标机器硬盘的最大大小。

事件响应光盘在实时采集中的使用

如前所述,事件响应光盘带有内置的、易于访问的工具来执行不同的任务。这个任务之一是对实时系统的硬盘进行镜像,正如 DART 工具集和 Helix 所做的那样。

使用 Helix 时,如果它在实时系统中没有自动启动,你可以从合适的操作系统文件夹中打开该程序(在Helix部分的图 A中)。该程序将以相同的界面工作,但如果在实时系统中工作,你将无法复制硬盘。由于硬盘处于不稳定状态,并且操作系统的操作会不断改变它,克隆选项将不会出现在列表中。在映像过程之后,会进行验证过程。它会计算结果映像的哈希值,并将其与映像过程中比特流的哈希值进行比较。如果哈希值匹配,意味着映像没有错误。

为了通过网络获取映像,Helix 内置了相应的功能,采用相同的服务器/客户端概念。在目标机器上,即处理机,你需要从相同的 receiver.exe 文件夹中运行网络监听器:

事件响应光盘在实时采集中的使用

Helix 网络监听器

在提供了完整的信息后,开始监听任何网络连接请求。

在源机器上,选择目标为 Helix 接收器。然后设置连接,输入监听器的 IP 地址、相同的端口,以及密码(如果有):

事件响应光盘在实时采集中的使用

启动采集过程后,监听器中将开始一个新连接,并且在目标机器上指定的位置可以找到一个新的映像文件。

用于硬盘镜像的 Linux

假设你已经有一个无法启动的系统,并且需要取出机器的硬盘以进行镜像。你需要做的第一件事是确保通过写保护器将硬盘连接到你首选的 Linux 机器,以防止任何意外写入硬盘,这可能会改变证据并使其无法作为证据使用。

dd工具

在 Linux 操作系统中,有一个内置工具叫做dddd工具被认为是一个法医学上可靠的工具,因为它复制数据块,不管其结构如何。关于dd的含义有很多建议,但我们可以说,dd代表重复磁盘重复数据,如果有人错误使用它,它也可能成为磁盘销毁器删除数据。这个工具可以转换并复制文件和硬盘。

假设可疑的硬盘是源硬盘,并且通过写入阻断器连接,挂载为/dev/sda,目标硬盘挂载为sdb。我们有以下两个选项:

  • 将硬盘映像到一个文件中,这在空间管理、在同一案件中不同调查员之间传输映像文件以及案件归档时非常有用,如前所述。在这种情况下,你将使用具有根权限的dd工具,命令如下:

    dd conv=sync,noerror bs=64K if=/dev/sda of=/media
        /Elements/HD_image/image.dd
    
    

    从这里,我们可以看到以下内容:

    • conv = sync, noerror:如果由于某种原因无法读取数据块,则会用空值填充该块的左侧;dd将继续执行,并且不会因错误而停止。

    • bs:这是每个传输数据块的大小。考虑到较大的块大小可能更快,但选择较小的块大小更高效。假设你选择bs为 4MB,那么如果发生错误在第一个 4MB 的扇区,后续的所有数据块都会被忽略,这可能会导致在成像过程中丢失一些重要数据。

    • if:这是输入文件,可以是整个硬盘或单个分区。

    • Of:这是输出文件。

    • /media/Elements:这是目标硬盘的挂载点。

    • 在这种情况下,光标将在成像结束之前保持静默。

  • 现在,有一种方法可以查看成像过程的进度,这有助于故障排除并检测在采集过程中发生的任何问题,可以通过将dd命令与pv结合使用,像下面这样进行管道传输:

    dd conv=sync, noerror bs=64K if=/dev/sda | pv | dd
        of=/media/Elements/HD_image/image.dd
    
    

    在这里,你将看到一个移动的进度条,这意味着进程仍在运行,显示成像大小和成像速度:

    The dd tool

    添加进度状态

通过网络使用 dd

你也可以通过网络使用dd,结合nc(netcat)。要执行此操作,在目标机器(IP 为192.168.57.128)上打开端口 3333 的监听器,并将接收到的数据通过管道传输给dd,指定所需的存储位置和输出文件名:

nc -l -p 3333 | dd of=/media/root/elements/HD_image
    /image.raw

否则,你可以直接将输出重定向到所需的文件:

nc -l -p 3333 >  /media/root/elements/HD_image/image.raw

你可以在下面的截图中看到这一点:

dd over the network

通过网络使用 netcat 的 dd(在目标机器上)

在目标机器上,启动dd并将输出通过管道传输到nc客户端,如下所示:

dd conv=sync,noerror bs=64K if=/dev/sda | pv | nc 
    192.168.57.128 3333

输出如下:

dd over the network

通过网络使用 netcat 的 dd(在源机器上)

将整个硬盘复制到另一块硬盘。在这种情况下,你可以使用之前的所有步骤,但需要在/dev下提到硬盘的驱动器分配位置,而不是指定目标文件路径。因此,在第一个示例中,/media/Elements/HD_image/image.dd将被替换为/dev/sdb

使用dd工具,你可以将一个镜像恢复到硬盘。你只需要将输入文件改为镜像,将输出文件改为硬盘,如/dev/sda

dd if=/media/Elements/HD_image/image.dd of=/dev/sda

数据采集中的虚拟化

虚拟化为数字取证科学提供了巨大的优势。在虚拟化中,一切都是文件,包括客户机内存和客户机硬盘。操作人员需要做的是识别需要获取的源文件,并将该文件复制到外部存储。

大多数虚拟化程序中的快照概念为调查人员提供了在不同时间点的更多机器图像。如果获取并分析这些图像,可以查看机器的时间轴行为,即恶意软件感染前后的状态:

数据采集中的虚拟化

虚拟机中的 Windows 内存文件

在上一张图像中,我们可以看到 VMware 程序的 vmem 文件。VMware 是一种虚拟化程序。此图像包含当前内存文件以及两张在两个不同日期拍摄的快照所对应的两个 vmem 文件。这些文件的大小都相同,因为这就像内存转储过程,它复制了整个机器的内存。

证据完整性(哈希函数)

我们如何证明证据没有被篡改或更改呢?如果需要在法庭上证明这一点,这是非常重要的,证明在成像或分析过程中你没有添加、删除或编辑证据。大多数成像工具都包含多种哈希函数实现,如 MD5、SHA1 和 SHA256。哈希函数是一种数学实现,它是不可逆的或单向的。这意味着如果你有输入数据 A 和哈希函数 F,你将得到 F(A) = H。然而,已经证明 F'(H) != A,其中 F 是哈希函数,F' 是任何数学函数。我们无法从 H(哈希摘要)得到 A(原始数据)。

例如,如果我们有不同的字符串应用于相同的哈希函数,则哈希函数必须将每个字符串映射到不同的哈希值:

证据完整性(哈希函数)

哈希函数

如前图所示,应用所有文本到相同哈希函数后,每个文本的结果哈希都不同。即使是单一字符的变化,如前图中的 HandlingHandlin,输出也会截然不同。如果输入的微小变化引起哈希值的轻微变化,则该哈希函数被认为不够完美。

哈希碰撞发生在两个不同的输入在应用相同的哈希函数时产生相同的哈希值。因此,最好使用多种哈希函数,如 MD5 和 SHA512。

哈希摘要的长度不依赖于输入的长度。无论输入的长度如何,哈希的长度始终相同。这是与时间、可用处理能力和资源有关的事项。下表列出了几个著名的哈希函数及其摘要长度:

哈希算法 摘要长度
MD5 128 位
SHA-1 160 位
SHA-256 256 位
SHA-512 512 位

不同哈希算法的哈希长度

使用 FTK Imager,你可以选择并创建图像进行验证。在图像创建后,这将使用不同的哈希函数来运行创建的图像,并将结果与在源文件成像过程中创建的摘要进行比较。此过程将生成一份小报告,显示摘要值以及是否匹配:

证据完整性(哈希函数)

FTK Imager 中的哈希验证

你可以通过在链条的证据记录中写下接收到的证据摘要来证明你没有篡改证据。

注意

在 Linux 操作系统中,内置了一个叫做md5sum的功能,你可以将图像应用到它,它将为你计算 MD5 哈希。

值得一提的是,文件的内容是唯一影响哈希函数的因素,元数据和文件名不会影响哈希摘要。

在现场磁盘获取过程中,成像在特定的时间点运行。由于操作系统会不断使用和修改原始磁盘,因此无法保持原始磁盘的完整性。然而,从第一个创建的系统磁盘图像开始,证据的完整性可以得到保持。

Linux 中的磁盘清除

如果调查员使用硬盘复制方法来成像硬盘,他们不能使用同一块硬盘处理两个不同的硬盘。这可能会导致来自不同案件的文件重叠,进而产生不可靠和不真实的结果。在完成复制硬盘的工作后,必须清除它并准备好用于另一个案件或硬盘。不要等到另一个案件分配给你后再清除,清除操作需要较长时间。

这个过程等同于成像过程,但源文件是一个充满零的文件。在 Linux 操作系统中,有一个/dev/zero文件。你需要将此文件作为输入文件提供给dd工具,输出文件则是需要清除的硬盘。另一个可以在此过程中使用的文件是/dev/null

dd if=/dev/zero of=/dev/sda bs=2K conv=noerror,sync

总结

在本章中,我们介绍了一些 IRCDs,讨论了如何使用 IRCDs 和 FTK Imager 进行现场获取,以及如何通过 IRCDs 和dd工具进行网络成像。我们还讨论了如何保持证据完整性,以及如何为取证用途清除磁盘。

在下一章中,我们将讨论如何创建系统活动的时间轴,以及从数字取证角度来看,这一点为什么如此重要。

第五章:时间线

在本章中,我们将探讨时间线分析。我们将学习几种使用侦探工具包(The Sleuth Kit)和 Plaso 框架进行时间线分析的不同方法。我们还将涵盖一些特定于某些文件系统的理论问题,以及它们如何处理与文件时间相关的属性。我们还将演示如何在实践中使用 Plaso。

简而言之,我们将涵盖以下主题:

  • 时间线

  • 侦探工具包 (TSK)

  • Plaso 架构

  • Plaso 的实际应用

时间线简介

在取证过程中,一个非常突出的疑问是,“什么时候?”

换句话说,时间是取证过程中分析的一个非常重要的因素。在调查中,我们使用的许多工件都有时间特征。这些特征帮助我们构建事件的完整图景。

此外,时间线分析有助于我们分析不同类型的证据。时间线分析可以建立在任何具有时间戳的来源上。这可以是文件系统的元数据、注册表、事件日志文件、应用程序的日志文件、内存、网络流量等等。

当然,时间线是数字取证中最有用的技术之一。然而,这基于对特定工件的分析,因此理解如何分析那些提供时间线事件的工件非常重要。

尽管时间线背后的概念看似简单,但实际上并不容易。一个困难是必须分析大量数据。对于一个正在运行的系统来说,问题在于有少量用户和大量系统服务,这些服务会产生许多事件。我们需要过滤掉正常用户的活动。

时间线的概念并不新鲜。自 2000 年以来,Rob Lee 和其他一些取证专家开始在数字取证中应用它。最初,文件系统是时间线数据的来源。我们将在本综述中将 NTFS 文件系统作为最常用的文件系统进行讨论。

NTFS 文件系统的时间线基于文件系统对象某些属性中的时间戳。

每个文件系统对象都有以下时间戳:

  • M:这是数据修改的日期

  • A:这是数据访问的日期

  • C:这是元数据更改的日期

  • B:这是元数据创建的日期

基于对这些数据的分析,我们可以确定文件何时被创建、复制、移动等等。NTFS 文件系统使用FILETIME作为其 UTC 时间格式。UTC协调世界时FILETIME包含一个 64 位的值,表示自 1601 年 1 月 1 日(UTC)以来的 100 纳秒间隔数。MS Windows 还使用其他时间格式,包括 UNIX 时间格式、DOS 日期格式和SYSTEMTIME格式。

此外,我们还需要强调一些文件在不同文件系统间移动的情况,例如文件被复制到 USB 驱动器。大多数情况下,USB 使用 FAT32 文件系统,因此 FAT32 系统中的文件属性和时间戳与 NTFS 和 FAT32 文件系统之间有所不同。

假设有一个文件在 NTFS 文件系统上创建,然后被复制到使用 FAT32 文件系统的 USB 上。在这种情况下,修改日期保持不变,但 USB 上的创建日期会变化,且会调整为文件在 USB 上创建的日期。微软对不同情况下属性变化的解释可以参考 support.microsoft.com/kb/299648。以下是与日期和时间戳相关的文件属性:

  • 如果一个文件从 C:\fatfolder 复制到 C:\fatfolder\subfolder,它保持相同的修改日期和时间,但创建日期和时间会更改为当前日期和时间。

  • 如果一个文件从 C:\fatfolder 移动到 C:\fatfolder\subfolder,它保持相同的修改日期和时间,并保持相同的创建日期和时间。

  • 如果一个文件从 C:\fatfolder 复制到 D:\NTFSfolder,它保持相同的修改日期和时间,但创建日期和时间会更改为当前日期和时间。

  • 如果一个文件从 C:\fatfolder 移动到 D:\NTFSfolder,它保持相同的修改日期和时间,并保持相同的创建日期和时间。

  • 如果一个文件从 D:\NTFSfolder 复制到 D:\NTFSfolder\SUBfolder,它保持相同的修改日期和时间,但创建日期和时间会更改为当前日期和时间。

  • 如果一个文件从 D:\NTFSfolder 移动到 D:\NTFSfolder\SUBfolder,它保持相同的修改日期和时间,并保持相同的创建日期和时间。

在所有情况下,除非文件的某个属性发生变化,否则文件的修改日期和时间不会改变。文件的创建日期和时间会根据文件是被复制还是移动而变化。

以下是与日期和时间戳相关的文件夹属性:

  • 如果在 NTFS 分区上创建了两个新文件夹,分别为 D:\NTFSfolder1D:\NTFSfolder2,则它们的创建日期和时间以及修改日期和时间相同。

    • 如果 D:\NTFSfolder2 文件夹被移动到 D:\NTFSfolder1 文件夹中,创建了 D:\NTFSfolder1\NTFSfolder2,则会发生以下情况:

      • D:\NTFSfolder1:这是当创建的文件夹保持不变,而修改的时间戳发生变化的情况。

      • D:\NTFSfolder1\NTFSfolder2:这是当创建的文件夹发生变化,而修改的文件夹保持不变的情况。

        这种行为发生的原因是,尽管你移动了文件夹,但主文件表(MFT)仍然认为在 D:\NTFSfolder1 文件夹下创建了一个新文件夹。

  • 如果将D:\NTFSfolder2文件夹复制到D:\NTFSfolder1文件夹中,创建D:\NTFSfolder1\NTFSfolder2文件夹,而D:\NTFSfolder2文件夹仍然存在(在复制后):

    • D:\NTFSfolder1:这是指当创建的文件夹相同,但修改的文件夹时间戳发生变化时。

    • D:\NTFSfolder2:这是指没有发生任何更改,因为它是原始文件夹。

    • D:\NTFSfolder1\NTFSfolder2:这是指当创建的文件夹和修改的文件夹都变成相同的时间戳,即移动时的时间。

    这种行为发生是因为即使你复制了文件夹,新的文件夹仍被 MFT 视为新创建的,并赋予新的创建和修改时间戳。

FAT 文件系统在修改时间戳方面表现不同。在 FAT 文件系统中,如果文件夹的内容发生变化,文件夹的修改日期不会改变。例如,如果D:\FATfolder2被复制或移动到D:\FATfolder1D:\FATfolder1的创建日期和修改日期将保持不变。以下表格反映了根据文件操作变化的属性:

操作 属性
重命名 ..C.
卷内位移 ..C.
卷之间的位移 .AC.
复制 .ACB
访问 .AC.
修改 M.C.
创建 MACB
删除 ....

提示

当我们谈论移动操作时,我们指的是使用 Windows 资源管理器进行的文件移动操作,和剪切粘贴过程,而不是命令行中的move命令。

另外需要提到的是,一些调查人员错误地认为禁用最后访问时间会阻止文件的最后访问时间更新(Vista+系统的默认设置)。这是不正确的。最后访问时间会在复制或移动命令执行时发生变化;只有在打开文件时,文件的最后访问时间才不会改变。

此外,通过 Windows 资源管理器剪切和粘贴的文件,在文件系统的边界内移动时不会更改创建时间。然而,如果使用命令行中的move命令移动文件,创建时间将发生变化。

Sleuth Kit

让我们考虑一下文件系统时间线创建的各个阶段。

创建时间线的第一步是构建正文文件。

有三种类型的数据需要收集:

  • 存在于文件系统中的文件,我们可以通过dirls命令列出它们。

  • 已删除的文件,它们被删除但其结构仍然存在。这允许恢复文件的完整路径及其他属性。然而,这取决于文件系统,并非所有文件系统都允许这样做。

  • 未分配的 inode($Orphan文件),这些是已不存在的文件结构。

要构建一个正文文件,我们将使用 TSK 中的fls工具。fls工具允许像操作文件系统一样与取证镜像进行交互,并从文件系统级别提取时间线数据。

这会获取 inode 目录的值,处理其内容,并显示目录中文件的名称(包括已删除的文件)。如果 inode 的值不存在,它将显示根目录的内容:

The Sleuth Kit

在我们的案例中,最重要的选项之一是 -m,它允许输出为 mactime 工具使用的格式:

The Sleuth Kit

所以,如果你有一个 image.dd 文件,并且想要创建一个时间轴,你应该输入以下三个命令:

mmls image.dd
fls -m  -o <offset of fs partition> -r images.dd >
    body.txt
mactime -b body.txt -z TZ >  timeline.txt

超级时间轴 – Plaso

文件系统并不是唯一包含系统中事件时间戳的数据源。当计算机工作时,即使用户什么都不做,系统中也会发生许多事件。例如,Windows XP 每 24 小时创建一个系统还原点,每三天运行磁盘碎片整理,以便删除的文件所在的扇区可以被重写。Windows 7 有一个卷影副本机制,它也会创建备份文件,等等。这些操作都会自动发生,且无需用户干预。所以,即使在空闲模式下,Windows 也会有许多事件。如果系统有活跃用户,我们会看到更多的事件。这些事件的信息会反映在不同的地方:注册表、事件日志文件、应用程序的日志文件、浏览器历史记录等等。

如果我们能在时间轴中使用所有这些来源,就能全面了解系统中发生了什么,并将不同事件链接成一个逻辑链条。这种方法被称为超级时间轴

从不同来源分别构建超级时间轴然后合并结果可能是一个复杂且耗时的过程。然而,得益于像 Plaso 框架这样的酷工具,这项任务变得更加简单。

Kristinn Gudjonsson 创建了 log2timeline 工具,允许自动创建超级时间轴。最初,它是用 Perl 编写的,但后来用 Python 重写。现在的 Python 版本被称为Plaso。它有很多功能和灵活的架构,允许添加新的解析器和插件来处理新的数据类型。

Plaso 架构

让我们来看看 Plaso 的架构。Plaso 有几个核心组件,它们执行独立的角色:

  • 预处理

  • 采集

  • 工作者

  • 存储

让我们更详细地了解它们。

预处理

在这个阶段,一些预处理任务应该在所有其他处理之前完成。例如,在挂载图像并确定磁盘上安装的操作系统之前,收集一些将在下一阶段使用的信息。

预处理过程应该收集以下内容:

  • 操作系统的版本

  • 主机名

  • 时区信息

  • 默认应用程序,例如默认浏览器等等

  • 枚举所有用户及其路径

采集

在采集阶段,该过程会遍历图像、目录或挂载点,并找到工具可以处理的所有文件。

收集过程可以分为三种不同的场景:

  • 在最简单的情况下,收集过程会递归地遍历一个挂载点或映像文件,收集每个发现的文件。

  • 在递归扫描过程中,如果需要解析 VSS,会基于每个文件的四个时间戳计算哈希值。在收集阶段,从 VSS 映像中,哈希值会与该文件已存在的哈希值进行比较。如果该文件之前没有被收集,则会被包括在内;否则,会跳过。

  • 在有针对性的收集情况下,会定义一组文件路径,只有符合该模式的文件才会被收集。

Worker

Worker 是 Plaso 的核心部分。Worker 应该监控处理队列,并处理每一个进入队列的文件。在处理文件的过程中,worker 会执行以下操作:

  • 确定文件类型

  • 确定应应用哪些解析器

  • 解析文件并从中提取所有事件

  • 对文件应用一些定义的过滤器

  • 将提取的事件发送到存储队列

  • 确定该文件是否包含可以处理/提取的其他文件,并对它们进行处理。

存储

在存储阶段,存储队列中的事件被写入磁盘。

现在,让我们考虑 Plaso 框架中的主要工具:

  • log2timeline:这是 Plaso 后端的主要命令行前端。此工具可用于从映像、挂载点或文件中提取事件,并将其保存到 Plaso 存储文件中,以供未来处理和分析。

  • Pinfo:此工具允许提取 Plaso 存储中包含的信息。它是一个简单的工具,会打印出存储文件中的信息。

  • pprof:这是一个小工具,对于开发者和那些有兴趣尝试优化某些解析器的人来说非常有用。

  • preg:此工具为注册表解析器提供了一个不同的前端。它解析映像或注册表文件并提供一个控制台或 shell 供用户与注册表交互。

  • pshell:这是 Plaso 后端的 iPython 控制台。此 shell 提供用户对 Plaso 所有库的访问,并提供对输出的更高级分析、调试和实验的访问。

  • psort:Plaso 的存储格式不是人类可读的格式,psort 允许将其转换为更便捷的形式。它作为后处理工具,用于过滤、排序和处理 Plaso 存储文件。

Plaso 在实践中

让我们来看一下如何在实践中使用 Plaso。

假设我们有一个来自感染的 PC 硬盘映像,现在我们需要调查此案例,找出感染是如何发生的。

首先,我们需要观察映像并确定需要分析的分区。为此,我们需要使用 TSK 中的 mmls 工具。

然后,我们可以使用 log2timeline 构建 bodyfile:

Plaso 在实践中

现在,我们将使用动态格式进行输出。动态输出格式允许像 SQL-SELECT 请求一样设置过滤规则。我们将基于事件的以下属性构建我们的规则:

属性 描述
日期 这是事件发生的日期
时间 这是事件发生的时间
时区 这是事件的时区
来源 这是事件的来源(FILE, REG, ...)
消息,描述 这是事件的描述
用户 这是与事件相关的用户
主机 这是与事件相关的计算机的 ID
inode 这是文件在文件系统中的 ID
文件名 这是与事件相关联的文件名
Macb 这是 MACB 时间戳表示法
时间戳描述 这是时间戳的描述(LastWritten, ...)
解析器 这是收集和处理数据的模块(WinRegistryParser, ...)

当我们浏览已执行文件列表时,发现一个可疑文件,名为ZkPECED.exe。我们现在可以将其作为时间轴调查的关键点。

因此,我们可以过滤出所有文件,文件名中包含ZkPECED字符串的文件。

下图显示了搜索与文件名中包含ZkPECED关键字的事件的结果,结果清楚表明在 2014 年 4 月 8 日 12:39:08 UTC(16:39:08 UTC+4)时,两个文件ZkPECED.tmpZkPECED.exe被创建在\Users\Alina\AppData\Local\Temp目录中:

Plaso 实践

使用--sliceDateTime--slice_sizeMinutes参数,以及psort.py工具,我们可以将文件存储(timeline.body)中的样本数据限制在发生在时间范围[DateTime-Minutes, DateTime + Minutes]内的事件。

由于我们不知道ZkPECED.exe文件的可执行文件来自哪里,因此我们对所有在 UTC 时间 12:39:08 前后 10 分钟内创建或修改的可执行文件进行搜索:

Plaso 实践

请注意,在ZkPECED.exe文件出现之前,位于systemhost目录中的一个名为24FC2AE3CB0.exe的文件(inode 46912)的元数据发生了变化(这意味着文件被重命名或在本地移动),尽管它的其他时间戳(创建最后修改最后访问)回溯至 2010 年:

Plaso 实践

使用 TSK 工具包中的istat工具,我们获得了24FC2AE3CB0.exe文件(inode 46912)属性的信息:

Plaso 实践

上面的截图显示,$STANDARD_INFORMATION$FILENAME属性中的时间戳不匹配,这可能表明24FC2AE3CB0.exe文件(inode 46912)的时间戳是手动更改的。

因此,可以推测,24FC2AE3CB0.exe文件(inode 46912)是在 4 月 8 日 12:31:44 UTC(16:31:44 UTC+4)创建的,其时间戳(创建时间、最后修改时间和最后访问时间)被“手动”更改,这也是恶意软件的一个迹象。

分析结果

对 WinRegistryParser 处理模块的结果分析表明,两个可疑可执行文件的链接被存储在负责系统启动时自动运行程序的 Windows 注册表项中:

分析结果

屏幕截图还显示了每个注册表项最后修改的时间。

由于24FC2AE3CB0.exe文件的来源也未知,我们执行了对 12:31:49 UTC 之前创建的文件进行搜索的操作,搜索结果中排除了具有safe扩展名的文件:

分析结果

此命令的结果如下:

分析结果

屏幕截图显示,在24FC2AE3CB0.exe文件出现之前的几秒钟,jp2launcher.exe文件进程已启动。它启动了 Java 虚拟机,用于 Java 小应用程序和.jnlp文件。因此,在此之后,创建了两个名为7d088b-2be562b3.idx(inode 48067)和57ebc62f-6dfa622f.idx(inode 48074)的 Java.idx文件。

JavaIDXParser处理模块的结果为我们提供了一些关于加载到 Java 虚拟机中的对象的信息:

分析结果

屏幕截图显示的信息表明,名为utisl.jar的 Java 归档文件是从 URL http://finansial.gov(IP 85.17.137.151)下载的,另一个名为2的未知对象是从 URL >http://w282d1wb.athleticsdrycleaner.pw/f/1389931620/4067114524/下载的。

utisl.jar Java 归档文件保存在/Users/Alina/AppData/LocalLow/Sun/Java/Deployment/cache/6.0/11/7d088b-2be562b3文件中(inode 48068),而名为2的未知对象保存在/Users/Alina/AppData/LocalLow/Sun/Java/Deployment/cache/6.0/47/57ebc62f-6dfa622f(inode 48075)中。

在 The Sleuth Kit 套件的icat工具帮助下,我们可以获取两个 Java IDX 文件的内容,从中提取由 Java 虚拟机下载的对象的大小:

分析结果

屏幕截图显示的输出表明,utisl.jar文件(7d088b-2be562b3)的大小为 14,052 字节:

分析结果

图中呈现的输出表明,名为257ebc62f-6dfa622f)的对象大小为 411,648 字节。

这是因为根据istaticat工具的输出,/systemhost/24FC2AE3CB0.exe(inode 46912)和/Users/Alina/AppData/LocalLow/Sun/Java/Deployment/cache/6.0/47/57ebc62f-6dfa622f(inode 48075)文件的大小和内容匹配:

分析结果

可以假设,2014 年 3 月 13 日,从 URL http://finansial.gov(IP 85.17.137.151)下载了一个 Java 小程序,当该小程序启动时,下载了一个大小为 411,648 字节的可执行文件。该文件的内容被保存到/systemhost/24FC2AE3CB0.exe文件中。一个指向该可执行文件的链接作为YI9B2F0F6EXG1Y1ZLMA参数被添加到HKCU\Software\Microsoft\CurrentVersion\Run注册表项中,该项负责在操作系统启动时自动运行程序。

MsiecfParser解析器的结果表明,在 2014 年 4 月 8 日 12:31:13 UTC,用户在使用 Internet Explorer 时,可能在不知情的情况下访问了资源http://finansial.gov,从中下载并执行了utisl.jar Java 小程序:

分析结果

接下来,在分析WinEvtxParser处理模块的结果时,我们从 Windows 安全日志(Security.evtx)中选择了 2014 年 4 月 8 日 12:31:13 UTC 之后,系统中成功的身份验证事件(EventId 4624),此时 Java .idx文件已经出现:

分析结果

为了以更方便的形式呈现结果,我们可以使用以下命令进行转换:

sed -r "s/^([^\[]+),.+Strings: \[(.+)\]$/\1\  \2/" |
sed -r "s/\s*u'([^']+)'\s*/\|\1\|/g" |
sed -r "s/\|+/\|/g" |
awk 'BEGIN {FS="\\|"; OFS=", "}; {print $1, $7, $8, $6,
    $10, $20, $21}'

你可以在下面的截图中看到这些内容:

分析结果

注意

请注意,身份验证类型(LogonType)中的10表示目标系统通过 RDP 协议建立了连接。

截图显示,2014 年 4 月 8 日,用户SYSTEMSERVICE通过 RDP 协议建立了几次连接。请注意两个特征:该连接是使用 IP 地址 127.0.0.1(回环)建立的,也就是说,实际上是从被调查的计算机连接到它自己;并且用户SYSTEMSERVICE安全标识符SIDs)是不同的,也就是说,用户在指定的时间间隔内被多次重建。

通过过滤WinEvtxParser模块的EventId 4720(用户创建)和用户名SYSTEMSERVICE的结果,我们得出结论,该用户首次创建于 2014 年 4 月 8 日 12:40:52 UTC,随后又进行了三次重建尝试:

分析结果

因此,我们可以推测该事件的可能场景:2014 年 4 月 8 日,用户 Alina 可能在不知情的情况下访问了资源http://finansial.gov,导致下载并执行了utisl.jar Java 小程序。

接着,一个大小为 411,648 字节的未知对象从 URL http://w282d1wb.athleticsdrycleaner.pw/f/1389931620/4067114524/ 被下载,内容被保存到/systemhost/24FC2AE3CB0.exe文件中。一个指向该可执行文件的链接作为YI9B2F0F6EXG1Y1ZLMA参数被添加到HKCU\Software\Microsoft\CurrentVersion\Run注册表项中,该项负责在系统启动时自动运行程序。

此后,系统反复创建了一个名为SYSTEMSERVICE的可疑用户,并通过 RDP 协议建立了本地连接。

摘要

本章我们探讨了不同文件系统上的时间相关属性,如何使用 TSK 和 Plaso 框架构建时间线。

在下一章,我们将讲解如何分析 NTFS 和 FAT 文件系统上的日期。我们将继续使用 TSK,并研究 TSK 中的其他工具。

第六章:文件系统分析与数据恢复

尽管现在有许多自动化和商业工具可供使用,理解这些工具的工作原理可以将它们区分开来,并在法庭上的专家证词中提供很大支持。文件系统分析和数据恢复被认为是数字取证过程中的主要类别。从存储设备中提取文件或恢复已删除的文件及其相关证据数据,能够解决案件。

在本章中,我们将介绍两种不同的文件系统:FAT 和 NTFS。我们将基本上解释每个文件系统中文件的结构,以及删除文件的恢复过程是如何工作的。我们将从著名的 TSK(The Sleuth Kit)开始,讲解其命令行工具如何分类,因为这些工具是基于硬盘或取证镜像中的每一层。之后,我们将讨论 TSK 的图形用户界面——Autopsy。最后,我们将向您展示 Foremost,它是一个基于 Linux 的文件雕刻工具,用于根据文件签名恢复文件。

硬盘结构

在我们开始解释不同的文件系统结构之前,我们需要说明 Windows 操作系统中分区硬盘的不同部分。下图简单地展示了整个分区硬盘的结构:

硬盘结构

简单的硬盘逻辑分区

主引导记录

主引导记录是硬盘的第一个扇区(512 字节)。它包含除了引导代码之外的所有硬盘信息。在 MBR 中可以找到的一项重要信息是分区表,它包含关于硬盘分区结构的信息,对于每个分区,它能告诉分区的起始位置、大小和类型。

调查员可以通过 MBR 中的信息以及硬盘的打印大小来检查现有的分区是否匹配。如果有部分空间丢失,处理程序可能会假设有意图的操作隐藏了一些包含通常相关重要信息的空间。

分区引导扇区

每个分区的第一个扇区(512 字节)包含诸如文件系统类型、引导代码位置、扇区大小和与扇区相关的簇大小等信息。

分区中的文件系统区域

如果用户将分区格式化为例如 NTFS 文件系统,分区开始的某些扇区将被保留给主文件表MFT)。MFT 是存储系统中文件元数据的位置。每个条目的大小为 1KB,当用户删除文件时,文件在 MFT 中的条目会被标记为未分配。然而,文件的信息仍然存在,直到另一个文件使用该 MFT 条目并覆盖之前文件的信息。

正常的备份通常只存储已分配的条目,忽略 MFT 中的未分配区域。这在分析步骤中无法帮助恢复已删除的文件。

数据区

在保留文件系统区域后,分区的其余空间将用于存储文件的数据,这些数据包含文件的实际内容。数据区的每个单元称为。同样,如果用户从硬盘中删除文件,包含与该文件相关的数据的簇将被标记为未分配,数据将一直存在,直到新的文件数据覆盖它。

这些簇被视为已分配或未分配:

  • 已分配簇:这是包含与现有文件相关的数据的簇,并且该文件在文件系统 MFT 区域中有一个条目。

  • 未分配簇:这是一个未连接到现有文件的簇,它可能是以下任何一种:

    • :这意味着没有已删除文件的数据,或者其内容已被擦除。

    • 非空:这包含与已删除文件相关的数据,并且仍未被新文件的数据覆盖。

在运行备份工具时,它只备份当前文件系统 MFT 区域中存在的文件,并将其相关的簇标记为数据区中的已分配。这不是一个取证上有效的影像,它需要获取所有硬盘区域,即使这些区域是用户删除的。这就是为什么当你使用无压缩方式备份系统时,备份的大小将是分区中已使用空间的大小。

然而,当使用取证影像技术时,生成的影像的大小将与源的大小完全相等;它将包括整个硬盘或单个分区。

在接下来的部分中,我们将快速概述 FAT 和 NTFS 的工作原理。

FAT 文件系统

FAT 或文件分配表随着 1980 年微软发布 DOS 操作系统而广为人知。此后,FAT 经历了许多改进,试图使其适应快速发展的技术。因此,我们可以看到 FAT12、FAT16、FAT32 和 exFAT。每个版本都克服了文件系统的一些限制,直到 NTFS 文件系统的发布。

FAT 组件

FAT 分区包含五个主要区域。它们包括以下内容:

  • 引导扇区:这是分区的第一个扇区,加载到内存中。如果这个分区是活动分区,它包含的信息包括但不限于以下内容:

    • 跳转代码:这是引导程序和操作系统初始化代码的位置。

    • 扇区大小:这是几乎固定的(512 字节)。

    • 簇大小:这是以扇区为单位(扇区/簇)。

    • 扇区数量:分区中的扇区总数。

    • 根目录项数量:此值仅在 FAT12 和 FAT16 中使用。

  • FAT 表:这是文件系统,其名称来源于该区域。从文件的第一个簇开始,可以在文件的根目录项中找到,FAT 区域跟踪文件在数据区域中的其余部分。例如,簇 X 是包含文件 Y 数据的第一个簇,它在 FAT 区域中有一个条目。该条目可以有四个值:

    • 0:这表示簇 X 是一个未分配的簇

    • Number:这表示簇 X 后续簇的编号,它包含文件 Y 的下一部分

    • EOF:这是文件结束符,它表示簇 X 是包含文件 Y 数据的最后一个簇,即文件 Y 的结束。

    • BAD:这表示簇 X 是一个坏簇,操作系统不能使用或访问它。此数据跟踪模式被称为 FAT 链,并且每个文件必须存在该链。

  • FAT 表的另一个副本:如果第一个 FAT 损坏,则使用此副本。

  • 根目录项:每个条目描述文件系统中的目录或文件,以及它从根目录的起始位置。每个条目包含以下信息:

    • 使用 8.3 命名规则的短文件名;文件名有 8 个字符,扩展名有 3 个字符

    • 长文件名:如果文件名超过 8.3 规则,则会保留另一个完整条目来存储文件名

    • 条目的状态,如目录、文件或已删除

    • 一些文件属性,如只读、隐藏和归档

    • 文件大小,在目录的情况下不重要

    • 文件的时间戳

    • 包含文件数据的第一个簇的地址

    正如我们所看到的,无法向文件添加现代属性,如压缩、权限和加密,这也是 FAT 文件系统的局限之一。

  • 数据区域:这是分区的其余部分。它包含分区中文件的实际内容,并且它被分为簇,簇的大小在引导扇区中定义。簇编号从簇 2 开始,因此簇 0 和簇 1 不存在。

关于这个工作原理的示例,我们创建了表 1。每一列代表 FAT 区域之一,不包括引导扇区。现在,假设第一个文件 F1.txt 的大小为 1KB,并且从簇 2 开始:

  • 簇 2 包含 F1.txt 文件的第一部分

  • 在描述簇 2 的 FAT 条目中,我们将找到链中下一个簇,在我们的例子中是簇 3

  • 在簇 3 中,我们可以找到 F1.txt 文件的下一部分

  • 在描述簇 3 的 FAT 条目中,我们可以找到 EOF,因为 F1.txt 文件中不再需要存储其他数据。

同样适用于其他文件:

FAT 组件

FAT 文件系统

FAT 的局限性

FAT 存在一些严重的局限性,这引发了对更先进文件系统的需求:

  • 每个 FAT 后面的数字,如FAT12FAT16FAT32,代表在 FAT 表中分配给簇的位数:

    • FAT12:这是 2¹² = 4,096 个簇的最大值。

    • FAT16:这是 2¹⁶ = 65,536 个簇的最大值。

    • FAT32:这是 2³² = 4,294,967,296 个簇,但它有 4 个保留位,因此实际上是 28 位。所以,2²⁸ = 268,435,456 为最大值。

    • exFAT:使用全部 32 位进行寻址。

  • FAT32 中的最大分区大小 = 最大簇数,即 268,435,456,乘以最大簇大小,即 23 KB = 8,589,934,592 KB = 8 TB。

  • 以 FAT32 为例,FAT32 中的最大文件大小,存储文件大小的比特字段为 32 位。它能够存储的最大数字是 2³² = 4,294,967,296 字节 = 4 GB。所以,FAT32 能够处理的最大文件大小为 4 GB。这就是为什么我们无法在 FAT32 文件系统中存储大于 4 GB 的文件。

  • 诸如访问控制和加密等属性在 FAT 文件系统中不可用。

NTFS 文件系统

NTFS新技术文件系统是 Windows NT 中的默认文件系统,源于存储容量的增加,以及对更安全、可扩展和高级文件系统的需求。NTFS 克服了 FAT 的限制,更适合高存储容量。在 NTFS 中,一切都是文件,包括文件系统区域本身,正如我们将在下一节中看到的。

NTFS 组件

像 FAT 和其他任何文件系统一样,NTFS 也有以下组件:

引导扇区是分区中的第一个扇区,包含有关文件系统本身的一些信息,如启动代码、扇区大小、簇大小以及保留扇区数量。文件系统区域包含许多文件,包括 MFT(主文件表),它存储分区中文件和目录的元数据。稍后会详细讨论。

  • 数据区存储文件的实际内容,并且它被分成簇,簇的大小是在格式化时确定并在引导扇区中标明的。

主文件表(MFT)

由于 NTFS 中的一切都是文件,因此文件系统区域也是一个名为\(MFT 的单一文件。在这个文件中,每个分区中的文件都有一个条目。每个条目的大小为 1,024 字节。实际上,\)MFT 文件本身也有一个条目。每个条目开头都有一个 42 字节的头部,并且具有 0xEB52904E 的签名,这在 ASCII 中等同于 FILE。

签名也可以是 BAD,这表明此条目发生了错误。头部之后,会有剩余的 982 字节用于存储文件元数据。如果还有空间存储文件内容,通常是小文件,文件的数据会直接存储在条目中,而不会占用数据区的空间。

每个 MFT 条目都有另一个称为属性的子结构。MFT 使用属性来存储文件的元数据。在单个 MFT 条目中可以使用不同类型的属性。每个属性都被指定用于存储不同的信息。例如,标准信息属性包含文件的时间戳和大小,而数据属性则包含文件的实际内容。

属性可以是以下之一:

  • 驻留:此属性将其所有数据保存在 MFT 条目内。

  • 非驻留:由于 MFT 大小的限制,一些属性可能需要将其数据存储在数据区。这种属性的一个明显例子就是数据属性。

将文件元数据存储在属性中为 NTFS 提供了灵活性,使其能够在未来添加操作系统可以识别的更多属性类型。如果一个文件有多个属性并且需要多个 MFT 条目来存储其元数据,它可以使用另一个条目,并通过序列号将两个条目链接在一起。

The Sleuth Kit (TSK)

The Sleuth Kit(TSK)是由Brian CarrierWieste Venema 开发的一组开源数字取证工具。TSK 可以读取并解析不同类型的文件系统,如 FAT、NTFS 和 EXT。图中硬盘的每个区域在硬盘结构部分都有一组工具,这些工具会解析该区域并提取对调查人员重要的取证信息。通常,在分析时使用 TSK 的每一步都会引导到下一步。

在接下来的章节中,我们将详细介绍 The Sleuth Kit 的不同工具集。我们将使用一张安装了 Windows 7 的硬盘映像,展示硬盘各部分的结果。该映像是通过 FTK Imager lite 从一台 Windows 7 虚拟机获取的,大小仅为 15 GB,并且只有一个 NTFS 分区。

如我们将看到的,TSK 工具的名称易于理解,因为它们由两部分组成。第一部分代表正在调查的区域或层次,例如 mm 表示媒体管理,fs 表示文件系统,i 表示元数据,f 表示文件名层次。第二部分是正常的 Linux 命令,反映该工具的作用,例如 ls 列出和 cat 显示内容,例如 mmls 工具。

卷层(媒体管理)

在硬盘的这一部分,TSK 从MBR(主引导记录)中解析有关整个硬盘结构的信息,MBR 是硬盘的第一个扇区。我们可以使用 TSK 和不同的工具解析这一部分。

每个分区的信息都位于硬盘上,并且可以从 MBR 扇区末尾的分区表中确定。每个分区的偏移量将作为输入传递给即将使用的 TSK 工具,用以指定感兴趣的分区。mmls 工具用于列出信息,如下图所示:

卷层(媒体管理)

mmls 工具

从对图像运行 mmls 的结果中,我们可以看到只有一个 NTFS 分区,从扇区(2,048)开始。这个分区是我们关注的分区,因此在需要时,我们将使用起始扇区作为其他工具的偏移量。此结果还提供了分区表类型,在我们的例子中为正常的 DOS 类型。要仅显示已分配的卷,我们可以使用 -a 选项:

卷层(媒体管理)

仅列出已分配的卷

下一个命令是 mmcat,它显示分区内容,如下图所示:

卷层(媒体管理)

mmcat 工具

在前面的图中,我们使用 mmcat 和图像名 sampleimage.dd 以及目标分区编号 mmls 输出中的 02。然后,我们将输出管道传递给 hexdump 工具。你可以看到在分区的开头,卷引导记录以 NTFS 分区签名从偏移量 0x03 开始,值为 (NTFS) 或 0x(4E54465320202020)。

文件系统层

该层的 TSK 工具解析提供的分区中使用的文件系统,并向调查员显示一些相关信息。使用此工具时,我们必须提供从 mmls 工具输出中获得的目标分区的偏移量,在我们这里是(2,048):

文件系统层

fsstat 工具

我们可以在分区中找到 MFT 位置、簇大小以及有关 NTFS 属性的信息,这些信息可能在进一步分析中使用。

元数据层

元数据层(或称 inode)解析并描述文件系统中记录的文件信息或元数据。此工具的输出也可以与其他工具一起使用,以便在图像中针对特定文件缩小结果范围。

此层命令中的 i 字符代表 inode——EXT 文件系统中文件的唯一元数据编号。

ils 命令用于列出图像中已删除文件的 inode 编号,直到被告知列出图像中所有文件的 inode 信息。ils 的所有结果都包含关于文件的信息,包括文件的 inode、Unix 时间格式的时间戳(MACB)以及文件大小。如果需要为文件活动创建时间线,我们可以使用带有 -m 选项的 ils 生成与 mactime 工具兼容的输出。

此外,使用 --m 选项将允许我们读取文件名,如下图所示:

元数据层

使用 ils 列出已删除文件

结果仅显示已删除的文件,因为我们可以注意到所有文件在结果中的 'dead' 状态。

istat

该工具用于通过唯一的元数据编号解析 MFT 或 inode 记录,并查看提供的记录中的所有信息。结果信息仅包含元数据,因此我们可以找到时间戳、文件属性等,但不能看到数据本身,即使数据足够小,可以适应一个 MFT 记录的 1,024 KB 长度,这种情况称为“驻留”数据。

显示文件的数据内容可以通过 TSK 中的另一个工具来确定,接下来将讨论这个工具。NTFS 文件系统中的每个文件都有这种类型的条目,甚至包括 MFT 文件本身。在下面的图中,我们将列出关于第一个记录号 0 的信息,这就是 $MFT 文件本身:

istat

istat 工具用于查看文件的元数据

icat

这个工具用于查看特定数据单元的内容。它使用 inode 号作为参考,查看与该文件相关的数据块。在正在调查的取证镜像中,我们将查看 inode 0 的 $MFT 文件内容:

icat

$MFT 文件的内容

在某些情况下,恢复已删除的文件对正在调查的案件会有帮助。我们可以使用 icat 工具将任何已删除文件的内容复制到调查员机器上的另一个文件中以供进一步分析。对于 $MFT 文件,还有一些其他工具,可以单独解析 MFT 文件并以树状视图列出文件系统的内容:

icat

使用 icat 复制已删除文件的内容

ifind

在分析过程中,如果调查员例如进行了一次文字搜索,并且在某个分区的数据单元中找到匹配项,那么他们现在需要将这个数据单元与文件系统中的一个条目关联起来,ifind 正是他们需要的工具。与之前的工具不同,ifind 可以接受数据单元号或文件名作为输入,并将该输入映射到文件系统中相应的条目,以收集关于该文件的其他信息。在我们的例子中,我们将尝试找到 hiberfile.sys 文件。

若要通过文件名进行搜索,我们需要使用 --n 选项:

ifind

使用 ifind 按文件名搜索

结果显示,与名为 hiberfil.sys 的文件相关的 inode 号是 563。再次使用 istat 查看与该文件相关的信息,将揭示该文件的详细信息:

ifind

关于 inode 563 的文件的完整信息

hiberfil.sys 文件是在用户选择使用休眠选项时,将内存的副本存储到硬盘中,用于死机系统分析。该文件对调查员有很大帮助,因为它提供了系统在上次休眠时内存的快照,并且可以从该文件的时间戳中获取。这文件是一个已分配文件,像之前处理 $MFT 文件一样,它可以从镜像中提取出来,然后用于内存分析。

如果我们需要使用 ifind 工具与数据单元号一起使用,则需要使用-d 选项。我们将获得另一个唯一 ID,描述文件在镜像中的位置。这个唯一 ID 将在下一部分——文件名层中讨论。在此示例中,我们使用了数据单元 ID 3269280,这是hiberfil.sys文件的一个数据单元:

ifind

使用 ifind 进行数据块地址查找

文件名层

工具在此层中工作,用于列出硬盘镜像中的文件结构。每个文件都会分配一个唯一的 ID,可以与其他工具结合使用,特别地定位此文件。

要列出分区下的文件,我们只需提供分区偏移量给工具:

The filename layer

使用 fls 工具浏览分区内容

在前面的图中,我们可以看到已删除的hiberfil.sys,其元数据地址为 57745,已分配的则是元数据地址 563。

如果我们需要浏览另一个目录(例如,Users 目录),我们可以向工具提供 Users 目录的唯一 ID(457-144-5):

The filename layer

使用目录 ID 与 fls 工具进行内容列举

如我们所见,我们正在浏览镜像的内容,而无需将任何分区或文件系统挂载到运行中的操作系统。

ffind 工具仅用于将元数据地址映射到文件名,无论其相关文件是已删除还是已分配:

The filename layer

映射元数据地址到其文件名

数据单元层(块)

在这一层中,文件的实际内容被存储。文件的元数据必须指向文件内容在此区域中的位置,正如我们之前用ifind工具讨论的那样。

blkcat

这是用于显示镜像中特定数据单元内容的。假设我们需要显示 Windows 目录中ntdll.dll文件的第一个数据单元。首先,我们可以使用ils工具找到该文件的元数据地址,并用ntdll.dll文件名进行 grep 查找:

blkcat

ntdll.dll 文件的元数据地址

从结果来看,ntdll.dll文件中的一个文件有元数据地址25833。第二步是使用istat工具通过其元数据地址查找分配给该文件的数据单元:

blkcat

通过 istat 工具获取的 ntdll.dll 文件的完整信息

结果显示,该文件的第一个数据单元号为1118226。我们现在需要做的是使用blkcat工具查看该数据单元的内容。我们将使用--h选项以十六进制视图查看内容:

blkcat

使用 blkcat 显示一个数据单元的内容

blkls

该工具的默认设置是显示镜像文件中的未分配簇,以便进行进一步分析,如文件雕刻和恢复。如果我们使用带有 -e 选项的该工具,它会收集一个文件系统的所有块,如果我们需要从一个多分区的大镜像中提取一个分区,这将非常有用。在这里,我们只需收集镜像中的所有未分配空间,并将输出定向到一个名为unallocated.blkls的文件或屏幕上。

生成的文件将具有分区中空闲空间的相同大小。然后,可以对该文件进行进一步分析:

blkls

使用 blkls 收集所有未分配空间到一个文件中

Blkcalc

为了理解这个工具的目的,假设我们对未分配空间进行了某些分析,例如关键词搜索,并且找到了与正在调查的案件相关的匹配项。为了将找到的位置映射到完整镜像,我们需要使用blkcalc工具。

Autopsy

Autopsy 是一个基于 Web 的 TSK 界面,它使用 TSK 中相同的工具并以图形界面展示结果。为了使用 TSK 进行分析,调查员需要首先从命令行启动服务器。启动 Autopsy 后,它会给调查员提供一个 URL,通过该 URL 可以从互联网上访问它,在此案例中为http://localhost:9999/autopsy。在分析过程中不要关闭 Autopsy 进程,否则分析将无法进行:

Autopsy

启动 Autopsy

然后,从浏览器中打开该 URL 以开始创建案件:

Autopsy

Autopsy 界面

我们需要创建一个新案件,然后输入一些案件信息,以便调查员能够方便地跟踪案件以及每个案件的负责人:

Autopsy

创建新案件

创建案件后,默认会在/var/lib/autopsy下创建一个与案件同名的目录,其中包含案件的所有文件。我们所做的仅仅是创建案件;现在,我们需要添加与案件相关的所有主机,并添加我们之前从每个主机获取的镜像。这样做是为了跟进分析结果,并能够区分结果的来源。

如果调查中的案件发生在不同的时区,也就是说,涉及的硬盘运行在不同的时区,调整每个主机的时区是一个非常好的主意,以便获得标准化的结果:

Autopsy

将主机添加到案件中

添加主机后,我们需要将主机映射到一个镜像:

Autopsy

将主机映射到取证镜像

在此之后,您需要将每个主机映射到其对应的镜像。您需要输入镜像路径并指定它是磁盘镜像还是分区镜像。在我们的例子中,它是完整的磁盘镜像。我们可以选择使用同一个镜像并仅使用符号链接,或者直接复制或移动该镜像:

Autopsy

向主机添加图片

然后,系统会自动列出该镜像中所有已分配的分区,并显示每个分区的起始和结束扇区。这与我们在命令行中使用mmls工具时得到的结果相同,后者要求我们选择每个分区的挂载点。在我们的案例中,只有一个 NTFS 分区,我们将把它挂载为C:分区:

Autopsy

将已分配的分区挂载到案件中

一条确认消息将总结您所建立的配置:

Autopsy

确认消息

然后,将显示一个案件首页,调查员可以在其中选择对分区或整个磁盘镜像进行的操作:

Autopsy

开始案件分析

现在,我们将使用C:分区,它相当于在每个命令中使用-o选项指定偏移量,这样我们就为工作分区提供了偏移量。这里,接下来的分析将针对C:分区的内容。

在声明分析之后,调查员将找到一些选项卡,针对我们之前提到的所有调查层次,例如文件分析、元数据分析和数据集群分析。然而,命令行工具在定制结果方面仍然更为强大。例如,如果我们需要使用 Autopsy 重新做我们在ntdll.dll文件上的工作,我们需要首先从文件分析标签中搜索文件名:

Autopsy

按文件名搜索文件

我们现在有了元数据编号25833。您可以点击该编号或在Meta Data标签下搜索该编号。这将列出该文件的所有信息,包括所有包含该文件内容的集群。我们关注的是第一个集群编号 1118226,如下图所示:

Autopsy

按元数据 ID 列出元数据信息

然后,以相同的方式,您可以点击集群编号或在“DATA UNIT”标签下输入集群编号,它将以 ASCII、十六进制或 ASCII 字符串视图显示文件内容:

Autopsy

按集群编号列出集群内容

我们可以看到集群的状态为已分配,文件的签名(在其十六进制视图中)依然是0x4D5A(MZ)。

首先

使用 TSK,我们可以找到并恢复已删除的文件。这些已删除的文件仍然在元数据区域中保留其信息,这就是我们能够识别其信息并知道它们在数据区域位置的原因。如果没有已删除文件的条目,而我们只在数据区域中有文件的内容且没有该文件的元数据(根据这一假设,该文件将位于硬盘的未分配区域),在这种情况下,文件雕刻技术将有助于恢复此类文件。

每个文件有不同的类型,例如 Microsoft Office、Adobe、exe 和 AVI。文件名末尾的扩展名并不是区分文件类型的依据。每个文件的开头都有一个头部,且各类型文件的头部不同。有些文件类型在文件的结尾有一个尾部,但这并非强制要求。文件雕刻技术利用这些头部和尾部在图像或硬盘的未分配区域中切割并识别文件的位置,以恢复这些文件。

Foremost 是一款基于文件雕刻技术恢复数据的 Linux 工具。我们可以将 foremost 应用到所有图像上,但我们已经知道,雕刻操作将仅对未分配区域有效。那么,为什么不将 foremost 应用于未分配区域作为一个单独的文件呢?这个单独的文件是通过 tskblkls 工具从图像中生成的,命名为 unallocated.blkls。我们可以从硬盘中雕刻出这个生成的文件,以查找已删除的文件(如果有的话)。

foremost 的输出结果是在工作目录下的不同目录,使用 --o 选项时,每个文件类型都会有一个以文件类型命名的目录。如我们所知,每个文件会从簇的开始处开始,因此我们不需要搜索簇中其余的内容。我们可以使用 --q 选项,仅搜索簇的开始部分,以快速得到结果:

Foremost

使用 Foremost 在图像中雕刻未分配区域

然后,在运行该工具的结果中,我们会发现一个 audit.txt 文件和一个 PDF 目录被创建在 foremost-results 目录下。打开 audit.txt 文件,我们可以看到一些关于文件雕刻过程的信息,例如时间、大小和提取的文件。在我们的案例中,只有一个 PDF 文件是从图像的未分配区域中提取的:

Foremost

通过 foremost 提取的文件

由于如前所述,这个文件缺乏元数据,我们无法知道关于该文件的任何信息,除了文件的大小和内容。这个 PDF 文件是为了测试目的而创建的,我们假设它包含与正在调查的案件相关的证据数据:

Foremost

提取的 PDF 文件

总结

在这一章,我们了解了文件在文件系统中的组织方式,以及它如何从 FAT 到 NTFS 发生变化。接着,我们学习了如何使用 TSK 和它的图形界面工具 Autopsy 从取证镜像中读取文件。我们还讨论了文件切割技术以及如何根据文件的签名使用 Foremost 恢复文件。

在下一章,我们将学习关于 Windows 注册表的内容——这是 Windows 操作系统中一个复杂但非常重要的组成部分。我们将了解注册表结构及其在调查中的重要性,以及不同的工具来解析和分析注册表。

第七章:注册表分析

理解系统配置、设置和用户活动始终是取证分析过程中的重要步骤。过去,这些配置存储在 INI 文件中,这些文件是简单格式的文本文件。然而,从 Windows 3.1 开始,引入了注册表的概念,仅用于存储基于 COM 的组件。COM组件对象模型 是微软在 1993 年推出的,用于支持跨进程通信和在多种编程语言中动态创建对象。从那时起,它被广泛用于存储大多数 Windows 设置。

注册表可以看作是一个 Windows 结构化的数据库。它包含操作系统的配置和设置,也包含正在运行的服务和已安装应用程序的设置以及用户的偏好设置。安装的应用程序不必使用注册表来存储其配置和设置。有些程序使用 XML 或文本文件来存储它们的配置。

便携应用程序通常将其配置信息保存在应用程序可执行文件所在目录或文件夹中的文件里。注册表还会跟踪用户的活动,保存他们的设置,并支持多用户配置结构,每个用户都有自己的账户配置。每个用户的注册表存储在该用户目录下的一个独立文件中,文件名为 NTUSER.DAT,本章稍后将详细讨论。

数字取证过程中对注册表的分析是调查人员获取证据的重要来源。恶意程序与其他程序一样,在运行时会使用系统资源,因此它们可能在注册表中留下某些痕迹。这些痕迹将有助于了解正在调查的事件的具体情况。

在本章中,我们将讨论注册表的结构以及用于执行分析的一些工具。

注册表结构

注册表有一个特定的结构,分为键和值。像目录结构一样,根键表示根目录,子键表示子文件夹,值表示文件。图 1 展示了通过 Windows 原生工具 "注册表编辑器" 打开的注册表结构。通过在运行窗口中输入 regedit.exe 可以以可编辑模式打开该工具。

圆角矩形中的项目是根键,而下方矩形中的项目是子键。椭圆形中的项目是注册表的值。每个值都有以下三个条目:

  • 名称

  • 类型

  • 数据

要访问特定的值,用户需要知道该值的路径。路径可以在 regedit 窗口的末尾找到。在我们的例子中,路径是 Computer\HKEY_CURRENT_USER\Environment

注册表结构

图 1:注册表的主要组件

根键

Windows 系统,在本例中为 Windows 8.1,拥有五个根键。每个根键存储有关正在运行的系统和系统用户的不同信息和设置。在注册表编辑器中显示的每个根键实际上是文件系统中的一个名为注册表哈希的文件。这些根键如下所示:

  • HKEY_CLASSES_ROOT

  • HKEY_LOCAL_MACHINE

  • HKEY_USERS

  • HKEY_CURRENT_USER

  • HKEY_CURRENT_CONFIG

在接下来的章节中,我们将简要讨论每个根键及注册表哈希结构,然后讨论分析程序,解释它如何在分析过程中发挥作用。

HKEY_CLASSES_ROOT 或 HKCR

此键包含子键。每个子键以系统中可以找到的扩展名命名,例如 .exe.jpeg。此根键描述了必须使用的默认程序来打开系统中的该扩展名。此外,该键还存储了右键菜单的详细信息和程序的图标。

假设在分析过程中,我们(调查员)需要知道哪个程序用于打开特定的文件类型,例如带有 flv 扩展名的可执行文件。然后我们将使用以下过程:

  • 首先,我们需要在根键下搜索名为 .flv 的子键(不带引号),并定位该子键的关联值。

  • 然后,我们需要在相同的根键下搜索另一个名为 VLC.flv 的子键。此子键包含有关操作系统如何处理 .flv 媒体文件的一些值:HKEY_CLASSES_ROOT 或 HKCR

    图 2:注册表中与 flv 扩展名关联的值

  • 在同一注册表键下搜索 VLC.flv 值时,我们将定位到用于运行 .flv 文件类型的可执行文件。在这种情况下,它是 VLC 媒体播放器。它还提到文件系统中可执行文件的位置:HKEY_CLASSES_ROOT 或 HKCR

    图 3:VLC 播放器的所在位置,用于运行 .flv 文件类型

例如,在多用户 Windows 环境中,如果两个不同的用户安装了两个不同的程序来打开 PDF 文件,则当一个用户登录系统时,操作系统将加载该特定用户的配置文件,包括其选择的打开 PDF 文件的程序。

然而,HKCR 中的信息来自两个不同的位置:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Classes

  • HKEY_CURRENT_USER\SOFTWARE\Classes

通常,这是仅指向 HKEY_LOCAL_MACHINE\SOFTWARE\Classes 的别名。当用户为特定文件类型注册不同的关联时,它使用每个用户的类注册功能,仅将新关联注册到该用户。

在这种情况下,如果用户打开一个特定类型的文件,并且该文件类型在 HKEY_LOCAL_MACHINE\SOFTWARE\ClassesHKEY_CURRENT_USER\SOFTWARE\Classes 中有两个不同的关联,那么将使用与该特定用户相关的 HKEY_CURRENT_USER\SOFTWARE\Classes 中的关联。

HKEY_LOCAL_MACHINE

此键包含系统启动过程中使用的配置和设置。它与用户登录无关。该根键包含以下五个子键:

  • 系统:此项包含系统配置,例如计算机名称、系统时区和网络接口。

  • 软件:此项包含有关系统中已安装应用程序和操作系统服务的设置和配置。

  • SAM:这是安全帐户管理器,存储用户和组的安全信息。它总结了管理员在本地系统和域上授予用户的所有权限。它包含用户名、用户的唯一 SID 和用户密码的哈希消息。由于 Windows 安全性,从运行中的系统通过 regedit.exe 工具打开时此文件将为空。可以将其提取并在另一台分析机上打开,以显示所有内容。

  • 安全:此项包含系统中的安全策略(如果有的话)。它与 SAM 相同,其内容无法从运行中的系统查看。

  • 硬件:此项包含有关连接到系统的硬件设备的信息。这些信息在系统启动时存储。

HKEY_USERS 或 HKU

HKU 注册表根键包含多个子键。我们将使用 Windows 8.1 作为本示例:

HKEY_USERS 或 HKU

图 4:HKEY_USERS

其子键如下:

  • S-1-5-18:这是系统配置文件,位于 %systemroot%\system32\config\systemprofile

  • S-1-5-19:此项与 LocalService 相关,位于 %systemroot%\C:\Windows\ServiceProfiles\LocalService

  • S-1-5-20:此项与 NetworkService 相关,位于 %systemroot%\C:\Windows\ServiceProfiles\NetworkService

  • S-1-5-21-4123892437-111928464-3716307427-1002:这是当前登录的用户及其完整的 SID。我们的位置在用户目录 C:\Users\Forensics2

  • 默认用户:这是任何新用户的默认配置文件,位于 %SystemDrive%\Users\Default。当创建新用户时,该配置文件的副本会被复制到该用户下,用户在配置中所做的所有更改都会记录在该配置文件下。该过程直到该用户第一次登录时才会发生。系统开始构建该用户配置文件,如下图所示:HKEY_USERS 或 HKU

    图 5:在 Windows 中创建新用户配置文件

在 HKU 下只能找到当前登录的用户,而不是所有用户。然而,在运行中的系统中,我们可以通过注册表中的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList 键找到系统用户的位置及更多详细信息。

在这个键中,我们可以找到关于所有系统用户配置文件的基本信息,包括每个配置文件的位置,但不能找到每个用户的配置和设置。在以下截图中,我们可以找到另一个 SID 以 1002 结尾的用户配置文件,这在 HKU 下找不到:

HKEY_USERS 或 HKU

图 6:系统配置文件列表

HKEY_CURRENT_USER 或 HKCU

HKCU 只是当前用户在 HKU 下的一个指针,具有相同的配置和设置:

HKEY_CURRENT_USER 或 HKCU

图 7:HKCU 与 HKU 对比

将配置单元映射到文件系统

注册表中的每个根键实际上映射到文件系统中的一个文件,这在不同版本的 Windows 中有所不同。在下表中,我们针对 Windows NT 到 Windows 10。 这些文件具有特定的格式,操作系统根据格式解析数据以读取或写入注册表。

我们可以在下表中查看每个配置单元在文件系统中的位置:

配置单元名称 文件系统中的位置
HKEY_LOCAL_MACHINE\System %WINDIR%\system32\config\System
HKEY_LOCAL_MACHINE\SAM %WINDIR%\system32\config\Sam
HKEY_LOCAL_MACHINE\Security %WINDIR%\system32\config\Security
HKEY_LOCAL_MACHINE\Software %WINDIR%\system32\config\Software
HKEY_USERS\User SID 这是用户配置文件(NTUSER.DAT);Documents and Settings\User(在 Vista 中已更改为 Users\User)。每个 HKU 下的配置文件必须链接到用户配置文件目录下的一个 NTUSER.DAT 文件。该目录可以通过图 6 中的路径确定:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
HKEY_CURRENT_USER 作为指向当前登录用户的 HKU 的指针。
HKEY_USERS\.Default %WINDIR%\system32\config\default

表 1:配置单元与文件系统映射

备份注册表文件

Windows 操作系统默认每 10 天备份一次配置单元文件。备份文件位于 Windows XP 中的 %WINDIR%\repair,在 Windows Vista 及更高版本中位于 %WINDIR%\System32\config\RegBack。备份的配置单元文件对于确定自上次更新以来的配置变化非常有用。如果正常的配置单元文件损坏,它们也能发挥重要作用。

备份由本地系统在 Windows 任务下完成,路径为%WINDIR%\System32\Tasks\Microsoft\Windows\Registry

备份注册表文件

图 8:Windows 中的注册表备份任务

提取注册表配置单元

执行系统注册表的事后分析需要从文件系统中提取配置单元。在本节中,我们将介绍如何从实时系统和法医镜像中提取文件。

从实时系统中提取注册表文件

在实时系统中复制备份文件非常简单;只需复制并粘贴,或在管理员命令提示符下键入以下命令:

reg save HKLM\<hive name> <savename>

如前所述,这些文件可能是 10 天前的。这可能不包含任何与正在调查的事件相关的痕迹。因此,我们需要提取正在使用的蜂窝文件,而系统是不允许这么做的,因为这些文件在实时系统中正在使用:

从实时系统中提取注册表文件

图 9:在实时系统中复制注册表文件时出现的错误

为了从实时系统中复制注册表文件,我们需要使用一些程序,如 FTK Imager。在本次练习中,我们将使用精简版,这在实时分析时更加有效,因为与安装版相比,它不会在系统中留下大量痕迹:

  1. 在 Windows 实时系统中,打开 FTK Imager Lite 程序。

  2. 文件中选择添加证据项

  3. 这将要求你选择一个源。在这种情况下,我们可以选择物理驱动器或逻辑驱动器。在我们这里没有区别;我们可以选择逻辑驱动器:从实时系统中提取注册表文件

    图 10:FTK 源类型

  4. 之后,我们需要选择源驱动器,并选择 Windows 工作分区,在我们的例子中是分区 C:从实时系统中提取注册表文件

    图 11:源分区

    分区 C 的内容将在程序的左侧窗格中显示。

  5. 我们需要浏览到注册表文件所在的位置。选择注册表蜂窝文件,并将这些文件导出到外部连接的存储设备或网络共享文件夹中,而不是导出到本地计算机。这可以避免覆盖可能相关的证据数据,如下图所示:从实时系统中提取注册表文件

    图 12:通过 FTK Imager 导出注册表文件

之后,我们可以将提取的文件带到我们的 Linux 机器上进行分析。

值得一提的是,FTK Imager 具有一个内置功能,可以获取所有注册表文件和受保护的系统文件。可以通过导航到“文件” à 获取实时系统中的受保护系统文件,而无需添加任何设备或分区来访问此功能。

从取证镜像中提取注册表文件

要从取证镜像中提取文件到 Linux 中,我们需要首先将系统分区挂载到系统中作为只读,然后进行简单的复制和粘贴操作来提取注册表文件。

要在 Linux 中从取证镜像挂载一个分区,首先需要知道该分区在取证镜像中的偏移量。这个任务可以通过使用 TSK(The Sleuth Kit)中的 mmls 命令来完成。TSK 将在后续详细讨论:

从取证镜像中提取注册表文件

图 13:Windows 分区

结果显示,系统分区从扇区 2048 开始。利用这一信息,我们可以将该分区挂载为只读:

  1. 首先,我们需要在</mnt/mountpoint>创建一个目录作为挂载点,然后运行挂载命令,如下所示:从取证映像中提取注册表文件

    图 14:创建挂载点并挂载映像

    如我们所见,偏移量必须以字节为单位。因此,我们需要将其代入此公式(512*2048),其中 512 为扇区大小,2048 为扇区号。在此命令中,我们还选择将映像挂载为只读,显示系统文件,并忽略大小写,以便更容易浏览文件而不会出错。

  2. 因此,我们可以看到,所有的文件系统结构都可以从挂载点轻松访问:从取证映像中提取注册表文件

    图 15:挂载的系统分区

  3. 由于我们知道系统中注册表文件的位置,因此可以开始复制它们:从取证映像中提取注册表文件

    图 16:复制注册表文件

  4. 同样也可以对用户配置文件执行此操作。这里我们有两个用户:forensics 和 forensics2:从取证映像中提取注册表文件

    图 17:复制用户配置文件

解析注册表文件

假设你有一个损坏的注册表文件,或者你需要恢复一些数据,或者你想验证一个新分析工具的结果。除了你需要知道分析工具如何解析和恢复注册表文件外,这些原因使得理解注册表文件结构变得非常重要。

注册表文件由与文件系统中集群相同概念的块组成。块大小为 4KB。hive 会扩展到整个块,就像文件系统中的集群一样。第一个集群被称为基块

基块

基块是 hive 文件的前 4KB,它包含以下内容:

  • hive 签名,用于标识该文件为 hive 文件。

  • 此 hive 的最后写入操作时间戳。

  • 校验和。

  • hive 格式,不同操作系统版本之间有所不同。在不同版本中,数据的处理方式也有所不同。

  • hive 文件的真实名称及其在系统中的完整路径。

  • 根单元的偏移量,相对于 hbin 的起始位置。(这两者稍后将会解释。)

  • 这两个序列号。我们可以将序列号视为一种保护 hive 文件完整性的方法。

当需要在注册表 hive 中执行写入操作时,首先会在内存中进行。这时操作系统需要将这些更改写入非易失性磁盘文件,以保持其更新。操作系统会跟踪所有 hive 的扇区。

为了写入磁盘文件,操作系统会调度所谓的惰性写入操作或 hive 同步。惰性写入开始将内存中的 hive 更改同步到磁盘文件,并更新最后的写入时间。如果在同步过程中发生崩溃,文件将被损坏。

为了避免这种情况,延迟写入会在开始同步过程之前更新序列号的第一个数字。完成写入过程后,它会将第二个序列号更新为相同的值。如果操作系统发现序列号中有两个不同的值,它会知道在上次同步过程中发生了崩溃。接着,操作系统会启动恢复过程,按照注册表文件的日志文件进行恢复,以保持文件的一致性。

在本节中,我们将考虑一个 forensics2.dat 注册表文件的示例。为了以原始数据查看注册表文件,我们将使用 hexdump 工具或 hd,并开始解析注册表文件数据。

在法医机器上,运行以下命令以查看基块的前 200 个字节:

基块

图 18:基块的前 200 个字节

现在,让我们解释上一张图片中的值。请注意,当前这些值是小端格式的,因此我们需要从右到左逐字节读取它们:

偏移量 长度(字节) 描述
0x0000 4 Regf 这是注册表文件的签名。
0x0004 4 0x00000055 这是操作系统在编辑注册表之前写入的第一个序列号。
0x0008 4 0x00000055 这是第二个序列号。第一个和第二个序列号相同,这意味着上一次写操作成功。
0x000C 8 0x01D048BC17BA58E0 这是最后一次写操作的时间戳。这个值可以通过 dcode.exe 程序解码,程序来自 digitaldetective.com/基块 从这些结果中,我们可以看到最后一次写入时间是 2015 年 2 月 15 日星期天,协调世界时(UTC)01:09:48。
0x0014 4 0x00000001 这是文件的主要版本号。在这个例子中,它是 1。
0x0018 4 0x00000003 这是文件的次要版本号。在这个例子中,它是 3。所以,文件格式版本是 1.3。
0x0024 4 0x00000020 这是第一个单元格相对于第一个 hbin 的偏移量。
0x0030 64 最大值 C:\Users\Forensics2\ntuser.dat 这是文件的位置和名称。从这条信息中,我们可以知道该文件是 C:\Users\Forensics2 下的用户配置文件。尽管调查中的文件名为 ntuser.dat,但文件的名称为 ntuser.dat

表 2:解析基块

Hbin 和 CELL

单元格是注册表文件中的数据容器;它包含一个键、子键或值。每种类型在单元格内有不同的签名和数据结构。如果单元格签名是 kn 或键节点,那么以下信息将被解释为键。操作系统将在另一个容器中分配这些单元格,该容器称为 HBIN。HBIN 可以包含多个单元格,并且它在签名文件中有自己的头部。对于我们这里的示例,假设我们取第一个 hbin 内的第一个单元格。

第一个 hbin 可以直接在基本块之后找到,即从文件开头的 4,096 字节处开始。我们将显示第一个 4,096 字节后或 0x1000 十六进制后的前 200 字节:

Hbin 和 CELL

图 19:第一个 HBIN 的前 200 字节

我们可以解释头部信息如下:

偏移量 长度(字节) 描述
0x1000 4 hbin 这是 hbin 签名的开始。
0x1004 4 0x00000000 这是相对于第一个 hbin 结构的偏移量。此处的值为 0,表示这是文件中的第一个 hbin。
0x1008 2 0x1000 这是当前 hbin 的大小。它为 4096 字节。通常情况下,它要么等于 4096 字节,要么是这个数字的倍数。

表 3:hbin 的头部

从解析 0x0024 处的基本块开始,相对于第一个 hbin,第一个单元格的偏移量为 0x20。

因此,要找到第一个单元格的头部,我们需要转到当前 hbin 的偏移量 0x1020:

偏移量 长度(字节) 描述
0x1020 4 0xFFFFFF78 这是负实现中单元格的大小。负号表示此单元格正在使用。这里的值为(-136),表示此单元格被使用,其大小为 136。
0x1024 2 nk 这是 nk 签名,表示此单元格包含一个键节点值。
0x1026 2 0x002C 这是记录的属性标志;它具有不同的值。二进制表示或这里的值为 00101100,指示文件为:CompressedName: (00100000)[2]NoDelete: (00001000)[2]HiveEntryRootKey: (00000100)[2]正如我们之前预期的那样,此条目包含根键信息。
0x1028 8 0x01D048B03FC412EF 这是此条目的最后写入时间戳。根据Dcode.exe的解码值,该值是 UTC 时间 Sat, 14 February 2015 23:45:01。
0x1034 2 0x0600 此值是父键记录的偏移量。由于这是父 kn 记录,此值在这里可以忽略,只要这已经是 kn 根键记录。
0x1038 4 0x0000000B 这是此根键下子键列表的数量。在这里,该值为 11,因此该键下有 11 个子键。
0x1040 4 0x00011E28 这是指向此根键下子键列表的指针。
0x104C 4 0xFFFFFFFF 这是指向此根键下值列表的指针。这里的值为 0xFFFFFFFF,表示此根键下没有值。
0x106C 2 0x0034 键名的大小。在这种情况下,它是 52 字节。
0x1070 52 CMI-CreateHive 这是根键的名称。其长度为 52 字节或字符。

表 4:单元格分析

现在,我们可以得出结论,这是一个名为CMI-CreateHive{D43B12BB-09B5-40DB-B4F6-F6DFEB78DAEC}的根键,大小为 136 字节,包含 11 个子键,没有值。现在,我们需要找出这个根键下的子键名称。

根据之前的分析,从 hbin 开始,子键列表的偏移量为 0x11E28。因此,我们需要加上 0x1000,从 hive 文件的开头获取它。最终偏移量为 0x12E28:

Hbin 和 CELL

图 20:子键列表

我们可以看到这是一个新的单元格,需要解析,内容如下:

偏移量 长度(字节) 描述
0x12E28 4 0xFFFFFFA0 这是单元格的负值实现大小。负号表示该单元格正在使用。此处的值为(-96)。该单元格已被使用,大小为 96。
0x12E2C 2 lf lf 签名表示这包含一个子键列表。
0x12E2E 2 0x000B 这是列表中元素的数量。在这种情况下,数量为 11,与之前分析的值匹配。
0x12E30 --- ---- 从此点开始,每 8 个字节代表一个子键。前 4 个字节是子键相对于 hbin 开头位置的偏移量,后 4 个字节作为校验和。

表 5:lf 条目分析

根据之前的分析,我们可以确定每个子键的位置对应以下偏移量:

  • 0x00011DC8

  • 0x00003C30

  • 0x00000EB8

  • 0x00000318

  • 0x00018BF0

  • 0x000499F0

  • 0x0001E2F0

  • 0x00006820

  • 0x00006BD8

  • 0x00000160

  • 0x00000C60

要查看与 hive 文件开头相关的内容,我们需要在每个偏移量上加上 0x1000,表示基块的大小,然后查看前 100 个字节。我们将看到每个偏移量会指向另一个具有不同名称的条目,如下图所示:

Hbin 和 CELL

我们可以看到,在新的条目中,父单元格偏移量为 0x0020,这是名为CMI-CreateHive{D43B12BB-09B5-40DB-B4F6-F6DFEB78DAEC}的第一个条目的偏移量。

子键的完整列表如下:

  • 应用事件

  • 控制台

  • 控制面板

  • 环境

  • EUDC

  • 身份

  • 键盘布局

  • 网络

  • 打印机

  • 软件

  • 系统

为了通过实际案例验证这些结果,我们可以使用本地的 regedit 工具在我们的测试机上显示注册表。如果列表与结果匹配,则说明解析成功,如下图所示:

Hbin 和 CELL

图 21:来自实际测试机的子键

自动运行键

恶意程序通常会试图在系统中保留其存在,以防系统重启或不同的用户登录系统。以下列出了在系统启动时运行的两个重要自动运行键:

  • HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad

这些位置可能会托管针对机器本身的恶意软件,如 rootkit、僵尸网络或后门。其他恶意软件可执行文件则针对系统上的某些用户,在特定用户或任何用户登录系统时运行。

它们可以在以下位置找到:

  • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runonce

  • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce

  • HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit

这些键的一个例子是 Zeus 银行木马。它将其可执行文件添加到 Userinit 键中,以便在任何人登录系统时运行:

Auto-run keys

图 22:Zeus 自动运行技术

注册表分析

在我们从实时系统或取证镜像中提取注册表文件后,需要对它们进行分析。

我们将使用 RegistryRipper 和 sysinternals 进行注册表解析和分析。

RegistryRipper

Regripper 是由 Harlan Carvey 开发的一个 Perl 开源跨平台工具,可以从 code.google.com/p/regripper/ 下载。它解析注册表结构,搜索取证中重要的区域,并列出这些区域的内容。调查人员需要理解结果,并从输出中提取异常。

该工具是一个命令行工具,它也有一个简单的 GUI,可以分析不同类型的 hive。通过图形界面,调查人员可以选择一个 hive 文件进行分析,并通过从配置文件下拉框中选择 hive 文件的类型来选择要在该 hive 文件上运行的插件列表。报告将以 txt 格式创建,并且在分析过程中会创建一个日志文件,以便查看成功和失败的插件:

RegistryRipper

图 23:RegRipper 图形界面

RegRipper 还提供了一个命令行接口,可以与其他 Linux 工具(如 grep)一起使用,直接过滤分析结果。命令行非常简单,如下所示:

  • 对 hive 文件运行完整配置文件,其中配置文件将提供针对特定 hive 运行的插件列表:RegistryRipper

    图 24:对 hive 文件进行完整配置文件分析

  • 或者,你也可以只运行一个插件来分析 hive 文件,从中提取一条单独的信息。在以下图中,只有 appcompatcache 插件在系统 hive 上运行:RegistryRipper

    图 25:从 hive 文件中提取单个信息。

值得一提的是,appcompatcache 会解析注册表中的应用程序兼容性缓存,该缓存存储有关系统中可运行程序的信息。它存储有关路径、大小、最后修改时间戳、可执行文件的最近运行时间以及是否在系统中执行过的信息。

一个可能表明系统上安装了恶意软件的恶意结果是与以下图示的某银行恶意软件相关的可执行文件:

RegistryRipper

图 26:应用程序兼容性缓存中的恶意软件

在这里,我们可以在临时文件夹中找到一个可执行文件,这可能是指示在浏览过程中从互联网下载此可执行文件的迹象。它有一个恶意的名字,并在被调查的系统中执行。

Sysinternals

Sysinternals 是一个用于故障排除 Windows 系统的工具集。它由 Mark Russinovich 开发,可以在 technet.microsoft.com/en-us/sysinternals/bb545021.aspx 找到。它可以用于取证分析,以提供感染的指示。它通常运行并解析实时系统,但也可以在离线系统上工作。我们只需指向注册表位置;这些是离线系统中的 Windows 目录和用户名目录。

在 Linux 系统中,Wine 环境下无法进行权限提升,且该程序需要以管理员身份运行。因此,我们需要在任何 Windows 机器上运行此工具。如果提供的是只读挂载的镜像,程序将无法运行。从取证的角度来看,将镜像挂载为读写模式是不可接受的。

在这种情况下,我们只需要模拟注册表文件的位置:

  • Windows:这应该是一个包含以下子文件夹的文件夹:

    • System32:这应该是一个包含以下子文件夹和文件的文件夹:

      • Config:这应该是一个包含以下文件的文件夹:

        • SYSTEM:这是一个提取的注册表蜂巢

        • SOFTWARE:这是一个提取的注册表蜂巢

        • SAM:这是一个提取的注册表蜂巢

        • SECURITY:这是一个提取的注册表蜂巢

        • ntdll.dll:也要从挂载的镜像中复制此文件(或者只是一个同名的空文件)

  • <Username>:这应该是一个包含以下文件的文件夹:

    • NTUSER.DAT:这是一个提取的注册表蜂巢:Sysinternals

      图 27:模拟 Windows 注册表文件夹

  1. 然后,我们在 Wine 中运行 autoruns.exeautoruns.exe 工具将显示许多自动运行的注册表项和服务,以及更多有用的分析信息。

  2. 从文件中选择 分析离线系统...,并浏览到新创建的文件夹:Sysinternals

    图 28:打开模拟的目录

该程序具有不同的选项卡来过滤注册表。例如,登录选项卡会过滤整个注册表,在系统登录时运行。这些键通常由恶意软件可执行文件使用,以在重新启动后保持其在系统中的存在,正如前面讨论的那样:

Sysinternals

图 29:离线系统注册表分析示例

如图 29 所示,对于所有处于黄色并且在Image Path下的条目,我们将找到文件未找到。这是正常的,因为相关系统实际上未运行。

小贴士

计划任务列表很重要,需要进行检查。一个恶意可执行文件保持其存在的技术是将自身添加为定期运行的任务。

MiTeC Windows 注册表恢复

MiTeC WRR 是另一个值得一提的注册表分析程序。它一次只能打开一个注册表集合,并且可以同时打开所有注册表集合。除了以结构化格式查看注册表之外,它还可以根据任务过滤注册表,例如启动程序和用户数据。WRR 可以在 Linux 中在 Wine 环境下运行:

MiTeC Windows 注册表恢复

图 30:MiTeC WRR

总结

在本章中,我们介绍了注册表作为 Windows 操作系统中最重要的工件之一,它包含大部分操作系统和安装程序的配置和设置。我们解释了每个注册表集合的功能及其在文件系统中的位置。此外,我们分析了一个注册表文件的结构,这是在需要分析损坏的注册表文件或恢复的注册表文件片段时的重要过程。然后,我们解释了恶意软件如何利用注册表来保持其在系统中的存在,并介绍了如何发现它们的存在。我们使用不同的工具来查看和分析注册表文件。

在下一章中,我们将介绍 Windows 操作系统的另一个重要工件,即事件日志文件。我们将探讨如何使用事件文件来跟踪系统用户的活动,以及如何发现系统中的恶意活动。

第八章:事件日志分析

本章我们将学习微软操作系统中的事件日志。我们将讨论为何涉及事件日志的问题对于成功调查非常重要。我们还将考虑根据 MS Windows 版本,事件日志之间的差异。

事件日志 - 简介

当操作系统运行时,系统中会发生许多事件。这些事件的范围非常广泛,其中大部分可以在系统中注册。为了在系统中注册事件,存在一个强大的机制叫做事件日志。它提供了一种标准的集中式方式,操作系统和应用程序用它来记录来自软件和硬件的重要信息。一个事件可以是系统中或某个应用中发生的事情,并且需要通知用户。每个事件的信息都应该被记录。

事件由事件日志服务收集并存储。它将来自不同来源的事件保存在事件日志中。事件日志提供了按时间顺序排列的信息,使我们能够确定系统环境和安全中的问题,并跟踪用户的活动以及系统资源的使用情况。然而,实际记录在事件日志中的数据类型取决于系统配置和应用设置。例如,在旧版 Windows 操作系统中,安全事件日志默认是关闭的。

事件日志为调查人员提供了大量数据,能够帮助回答以下问题:

  • 发生了什么:事件日志记录中的某些项,如事件 ID 和事件类别,帮助我们获取某个特定事件的信息。

  • 何时:时间戳是事件日志的一个关键部分,它为事件提供了时间背景。在一个生成大量事件的系统中,时间戳可以非常有用,帮助缩小搜索的时间范围。

  • :哪些用户涉及其中。所有在 Windows 操作系统上执行的操作都在某个账户上下文中执行。有些操作不是由普通用户执行的,而是由操作系统执行,这将发生在系统的账户上下文中,例如 System 或 Network Service。我们可以识别在某个特定事件背后是哪个用户。

  • 涉及哪些系统:在网络环境中,事件日志通常包含来自远程系统的账户引用。最初,只有工作站的 NetBIOS 被记录在事件日志中。然而,这增加了追踪涉及系统的复杂性。在 Windows 2000 之后的系统中,事件日志中也会保存 IP 地址。

  • 哪些资源被访问:事件日志服务可以配置为存储关于系统上各种对象的非常详细的信息。几乎系统的任何资源都可以被视为一个对象,从而,我们可以检测到任何未经授权的资源访问请求。

事件日志系统

既然我们已经弄清楚了 Windows 事件日志包含大量有用信息,并且它们可以成为检测安全事件的宝贵资源,让我们看看在不同版本的 MS Windows 中,事件日志存储的位置。

在 MS Windows 的演变过程中,事件日志系统也发生了变化。它最初出现在 MS Windows 3.1 中。每个 Windows 版本都进行了些许改动,但事件日志文件的名称和路径在 Windows 2003 之前保持不变。最初的版本使用了.evt 二进制格式。该格式不适合进行字符串搜索或在没有特殊软件的情况下浏览信息。此外,这些日志有大小限制,因此新的事件可能会覆盖旧的数据。

在 Vista 之前,事件日志如下所示:

%System root%\System32\config

然而,从 Vista 和 Server 2008 开始,事件日志的结构、类型和文件系统中的位置进行了重大更改。事件日志系统的原始版本对系统性能造成了很大负担。为了解决与性能相关的一些问题,开发了新版本的事件日志系统,并引入了新的.evtx 格式。然而,最重要的变化是事件日志结构的调整。

在 Vista 中,增加了许多新的事件日志类型,总数超过 70 种。这些事件日志可以在以下位置找到:

 %System root%\System32\winevt\logs

此外,新的事件日志系统允许将事件发送到远程收集器,因此需要记住,额外的事件日志可能位于其他服务器上。请注意,所提供的事件日志存储路径是默认值,可以通过注册表键进行更改:

  • HKLM\SYSTEM\CurrentControlSet\Services\Eventlog\Application

  • HKLM\SYSTEM\CurrentControlSet\Services\Eventlog\System

  • HKLM\SYSTEM\CurrentControlSet\Services\Eventlog\Security

最初在 MS Windows 中,存在三种类型的事件日志:

  • 系统

  • 安全性

  • 应用程序

所有其他额外的事件日志可以统一归类到自定义组中。Vista、Win7、Server 2008、Win 8 和 Server 2008 现在有许多额外的事件日志,包括一些特定进程的专用事件日志,例如 PowerShell、任务计划程序和 Windows 防火墙。

让我们看看不同类型的事件日志记录了什么信息:

  • 安全日志:此项记录基于本地和组策略的事件。

  • 系统日志:此项记录来自操作系统及其组件的事件,例如启动系统时服务失败的情况。

  • 应用程序日志:此项记录来自应用程序的事件,例如访问文件失败或病毒防护通知。

  • 目录服务:此项记录来自活动目录及其基础上的一些服务的事件。它是域控制器上的标准事件日志。

  • 文件复制服务器:此项记录有关域控制器之间更新的事件。它是域控制器上的标准事件日志。

  • DNS 服务器:这是一个标准的事件日志服务器,DNS 服务器软件正在运行。它记录有关区域管理以及 DNS 服务器的启动和停止的事件。

专门为新事件日志分配一个单独的目录的主要原因是它们的数量庞大。正如我们前面提到的,它超过了 70 个。

新的事件日志可以分为以下几类:

  • 安装:这是一个新的事件日志,其中存储了有关 Windows 安全更新、补丁和热修复的信息。

  • 转发事件:这是一个新的事件日志,用于记录来自远程计算机的事件。

  • 应用程序和服务:这一组包括所有其他新事件日志,这些日志是在 Windows 2008 中引入的。

安全事件日志

旧的事件日志系统在性能方面存在一些问题。在该版本中,事件日志需要完全加载到内存中。有时,仅为了一个日志就需要分配 300 MB 的 RAM。这种行为严重影响了系统性能,迫使管理员关闭事件日志记录。在新的事件日志系统中,每个事件日志文件都有一个小的头部,后面是 64KB 的数据块。现在,只有当前使用的数据块会被加载到内存中。这无疑提高了性能并减少了资源的使用。同时,日志记录的可能性也增加了。几乎所有事件日志在调查过程中都可能证明有用,尽管如此,我们在取证过程中要找的绝大多数答案都可以在安全事件日志中找到。系统和应用程序事件日志对于系统管理员进行故障排除更为有用。

安全事件日志记录每当系统中发生审计事件或受本地或组审计策略覆盖的用户活动时。它们可以提供关于各种用户活动的详细信息,包括用户身份验证(登录、以其他身份运行命令和远程访问)以及登录后的用户活动。使用特权和对象审计可能成为触发事件,显示访问受保护文件的情况,包括哪个用户访问了文件,发生的日期和时间。审计允许将安全设置应用于自身,这样所有审计策略的修改都可以被追踪。

请记住,安全策略可能会注册具有成功和失败结果的事件。它允许调整策略,并且只记录感兴趣的数据。从调查者的角度来看,我们希望尽可能多地记录数据。这可能会增加系统性能负担,并需要大量的磁盘空间来存储信息。在许多环境中,这并不可行。对于一些非取证专业人员来说,为什么成功和失败的登录尝试应该被记录,以及它如何帮助检测暴力破解攻击,可能并不明显。此外,还可以为特定用户设置额外的审计策略,使用内置的gpedit.msc管理单元。因此,我们可以为关键用户设置更详细的审计。

由于其性质,安全日志比系统和应用程序事件日志有更多的保护。从 Windows XP SP2 开始,发送事件到安全事件日志的应用程序 API 被弃用,排除了 Windows 安全服务。现在,这个功能仅对本地安全授权系统服务(LSASS)可用,因为它负责在系统中应用安全策略。此外,只有具有管理员权限的用户才能查看、导出或清除安全事件日志。

让我们来看看安全事件日志中存储了什么样的信息:

  • 账户登录:这些是存储在系统上的事件,用于授权用户登录。因此,可能是工作站或域控制器的登录。

  • 账户管理:这是账户的维护和修改。

  • 登录事件:这是本地系统中的每次登录或注销事件。

  • 目录服务:这些是访问 Active Directory 对象的尝试。

  • 对象访问:这是对具有自己访问控制列表的对象的访问。

  • 策略更改:这些是用户权限和审计策略的修改。

  • 特权使用:这是账户行使用户权限的每个实例。

  • 进程跟踪:这记录了进程的启动、停止及对象访问。

  • 系统事件:这是系统的启动和关闭。

安全事件类别让我们了解哪些事件可能对我们有意义。对于每个类别,我们可以设置审计策略,其值可以是无审计、成功、失败或成功和失败两者。每当事件被记录在事件日志文件中时,它会被标记为所属的类别。当审计被关闭时,我们将无法在事件日志文件中看到此类事件的任何信息。

调查过程中最令人失望的事情之一就是走到死胡同。这种情况常常发生,因为我们缺少事件日志。有些调查,如入侵和事件日志分析,对于追踪入侵者的活动非常重要。而在其他一些调查中,如员工滥用,事件日志提供了额外的证据,这些证据包含了重要的信息,比如登录时间、安装的程序以及对特定文件的访问。不幸的是,审计策略没有规则,事件日志也不包含有用的信息。因此,配置审计策略非常重要,以确保 Windows 仅记录我们需要的信息。

此外,执行各种角色的系统设置可能有所不同。工作站、服务器和域控制器的审计策略以及默认启用的事件日志数量也会有所不同。Windows 7 或 Windows 8 上的事件日志系统记录较少,Windows XP 和 Vista 上默认始终关闭。由于 Windows 7 和 Windows 8 越来越普及,我们可以预期更多的系统将包含安全、系统和应用程序事件日志。需要注意的是,在企业网络中,有域策略。本地策略将被组策略重写,从而增加日志信息。

许多调查人员错误地认为,Windows 的服务器版本默认就有很好的事件日志设置。然而,类似的工作站服务器标准配置只会记录最少的数据。

从 Windows 2008 开始,每个事件类别都被划分为一个名为扩展审计策略的子类别。这些详细选项的引入是为了更好地控制管理员需要监视的事件。这项功能从 Windows 7 及之后的版本开始提供。

事件类型为我们提供了事件被记录到事件日志文件中的原因。此外,它们还可以提供有关事件严重性的关键信息,帮助管理员关注更为关键的事件。

我们有以下几种类型的事件:

  • 错误:这些是严重的问题,例如数据或功能丧失;例如,服务器无法加载。

  • 警告:这些并不是严重问题,但可能在未来成为问题;例如,磁盘空间不足。

  • 信息:这些是应用程序或服务的成功操作;例如,某个服务已启动。

  • 成功审计:这些是已审核事件成功完成的通知,例如,成功的用户登录。

  • 失败审计:这些是已审核事件未成功完成的通知,例如,访问设备失败。

提取事件日志

当分析事件日志时,最常见的方法是导出日志,然后在取证工作站上查看它们。采用这种方法有几个原因。通常,我们需要分析几个事件日志(例如,系统、安保和应用程序日志),来自多个工作站和域控制器。因此,将所有事件日志文件集中在一个地方非常方便。此外,许多取证工具在处理事件日志时效果不佳。

导出事件日志有两种主要方法:

  • 实时系统

  • 离线系统

它们各自有一套独特的功能;我们来看看它们的特点。

实时系统

在处理现场系统时,请记住事件日志文件始终在使用,这会带来一些额外的挑战。从现场系统导出数据的一种方法是使用事件查看器。如果右键单击事件日志文件,则将显示 保存所有事件为... 选项。日志可以保存为各种格式,包括 .evtx.csv.xml.txt。如果担心可能的日志损坏,这是最安全的方式。

对于现场系统的另一种选择是使用 FTK Imager,这样您可以将驱动器挂载为物理磁盘并导出事件日志文件。在实践中,可能会出现事件文件损坏的情况。但是,仍然可以进行分析。MS 事件查看器可能拒绝打开这些文件。新的 .evtx 格式的情况稍好一些,因为新文件日志损坏发生的频率要低得多,而 MS 事件查看器对这种格式更加宽容。

MS 资源工具包包括 elogdump 实用程序,允许从本地或远程计算机保持事件日志的内容。 PsLogList 实用程序是 elogdump 的模拟,有一个区别:PsLogList 允许登录到远程系统,并在尝试失败时接收来自远程系统的消息。它是对现场系统的最佳替代方案,并且是 SysInternals 的免费工具。这个命令行工具具有许多功能。它可以将实时事件日志转储到 .csv 文件中,读取并以本地 .evt/.evtx 格式输出导出的数据,过滤输出并转储远程系统的事件日志。默认情况下,它输出系统事件日志文件。

离线系统

事件日志是二进制数据库,因此要查看 .evt/.evtx 文件,我们需要能解析这些格式的工具。有几个很好的免费工具可以将事件日志的二进制格式转换为人类可读的文本格式。

TZWorks 发布了 evtwalkevtx_viewer。Harlan Carvey 编写了几个 Perl 脚本来解析事件日志文件,Andreas Schuster 发布了 evtx_parser

从离线系统提取事件日志通常是调查人员遇到损坏事件日志时的最后希望,但这种方法也有一些好处。例如,事件日志中存储了一些数据,使用标准日志查看器难以访问。其中最重要的一个是事件日志文件中的 记录数。记录数是按顺序分配给日志文件中的事件的。因此,错过的号码将成为事件日志中事件操纵的标记。获取访问这些数据的最佳方式是提取特定事件并使用数据库或电子表格进行排序。

注意

TZWorks 的 evtwalk 工具可用于现场和离线系统。对于现场系统,我们可以使用 -livesys 选项;它将检查主机上的所有事件日志。evtwalk 工具将确定操作系统的版本,并扫描适用于该版本 Windows 的相应事件日志目录。

对于离线分析,当事件日志作为调查的一部分被收集时,可以使用-pipe选项调用 evtwalk 工具。-pipe选项允许evtwalk每行接收一个单独的路径或文件名作为输入,并分别处理它们。

对于 Windows,可以使用内置的dir命令以及一些伴随的开关来获取所需的结果。以下是使用此选项的示例:

 dir c:\forensicscases\*.evtx /b /s | evtwalk -pipe
        > events.txt

evtwalk命令可以处理一个或多个通过-log 选项指定的事件文件,并通过|字符分隔。

evtwalk 工具的另一个独特功能是其将数据输出为时间线格式的能力,使用cvsl2t(log2timeline)和bodyfile(mactime)选项。由于这一点,我们能够将事件日志活动与文件系统和注册表活动结合起来,从而确定计算机上发生了什么。

可以通过过滤某一类事件数据,而不是显示事件日志中呈现的所有记录。

对于 evtwalk,以下报告类别是可用的:

  • 密码更改

  • 时钟变化或更新

  • 用户登录和注销事件

  • 系统启动和停止时间

  • 用户凭据或权限变化

  • USB 事件

分析员可能希望拥有自己的报告模板。在这种情况下,他们可以确定报告模板并使用 cmdfile 选项指定它。需要注意的是,如果您想在实时系统上运行 evtwalk,应该以管理员权限运行它。

Evtx_view 是 evtwalk 工具的图形界面版本。这是一个很好的工具,可以准确理解事件是如何记录的以及哪些数据是可用的。这两个工具都有独特的功能,使它们能够根据所代表的动作过滤特定类型的事件。调查人员可以请求仅报告特定的事件,例如登录、密码更改、修改时间、USB 使用等。TZWorks 工具很不错,但它们不是免费的。

事件查看器

一种可以免费使用的工具是事件查看器。事件查看器的一个最有趣的功能是,您可以查看来自企业网络中远程计算机的事件。这可能是远程桌面使用的一个很好的替代方案。在实时响应中,这在需要非常快速地检查特定内容时非常有用。例如,如果我们需要知道受损的用户账户是否被使用,或是否启动了某些恶意软件特定的服务。能够快速回答至关重要的问题对有效的事件响应具有很大的价值:

  1. 要查看来自其他计算机的事件日志,请右键单击事件查看器(本地),并选择连接到另一台计算机。

  2. 选择另一台计算机,输入 IP 地址或主机名,然后单击确定。

注意

从 Windows 7 开始,事件查看器允许为远程身份验证指定不同的账户(类似于“以其他身份运行”)。

请记住,当你在实时系统上查看事件日志时,所有与你的活动相关的事件都会被记录到事件日志中,包括执行日志审查时的远程登录。根据网络设置和审计策略,你可能还会在事件日志中看到新的 4624、4776、4769 和 4674 事件。

内置的 Windows 事件查看器存在显著的缺点。它在事件查看器界面中查看大量事件非常繁琐。无法加载来自不同系统的多个日志,也不能并行筛选和搜索。除此之外,事件查看器对事件日志文件格式有严格的要求。在实际操作中,你可能会遇到损坏的文件,而一些经验不足的分析员可能会放弃在无法通过事件查看器打开这些文件的情况下进行事件日志分析。

事件日志浏览器

另一个用于事件日志分析的工具是事件日志浏览器。这是一款基于内置 Microsoft 工具的事件日志管理软件,提供了分析员快速分析事件日志所需的所有功能。它支持所有当前版本的 MS Windows 及 .evt.evtx 格式。然而,更重要的是,它能够处理损坏的文件。它有两种选项:

  • 通过 API 打开事件日志

  • 以直接解析模式打开事件文件

事件日志浏览器允许同时打开多个事件日志文件并使用事件进行合并。此外,它具有强大的筛选功能,包括访问事件描述文本字段,那里包含重要的取证证据。另一个非常实用的功能是通过不同颜色标记不同的事件 ID。事件日志浏览器可供个人使用免费,商业用途的费用约为 100 美元。

有用资源

不可能在一章中描述所有事件,因此你可以通过一些互联网资源了解更多关于你感兴趣的事件的信息。

以下是与事件日志主题相关的一些有用资源:

分析事件日志 – 一个示例

让我们来看一个小示例,看看如何使用事件日志浏览器来分析事件日志。假设我们有来自分析系统的事件日志文件:

  1. 首先,加载安全日志。此操作将显示所有与登录、新账户创建等相关的事件。我们来尝试显示所有登录系统的用户。一个登录事件的标识符是 4,624。我们可以应用事件 ID = 4,624 的筛选器。请注意,我们应当调整时间。根据法医工作站与 GMT 的时差,在“查看”中选择时间修正...。例如,如果你在一个时区为 GMT + 3 的系统上工作,则需要输入-3,以便获得事件在 GMT 时区的时间:分析事件日志 – 一个示例

  2. 现在,我们可以整理用户账户。我们看到有一个不寻常的用户,SYSTEMSERVICE。我们来筛选出与该账户相关的所有事件。我们可以在描述字段中筛选SYSTEMSERVICE

分析事件日志 – 一个示例

应用此筛选器后,我们将得到以下结果:

我们可以看到该账户的以下事件,按时间顺序排列:

事件 ID 描述
4624 这是一次成功的登录到系统的事件
4634 这是一次从系统注销的事件
4647 这是一次从系统注销的事件
4648 这是一次登录失败的尝试
4672 这是一次新权限分配事件
4720 这是一个账户创建事件
4722 这是一个账户激活事件
4724 这是一次更改密码的尝试
4726 这是一个账户删除事件
4738 这是一个账户修改事件

我们可以看到该账户是在 2014 年 4 月 8 日 12:40:52 UTC 创建的。

我们来查看登录类型(使用 RDP 登录的类型是 10);为此,只需筛选登录类型等于 10:

分析事件日志 – 一个示例

应用筛选器后,我们将得到以下结果:

该用户于 2014 年 4 月 8 日 12:10:18 UTC 远程访问了系统。

所以现在,我们可以搞清楚这是一个恶意账户,它是在何时创建的,以及它何时、如何登录到系统中。

总结

在本章中,我们已经看到事件日志可以作为法医调查的有用证据来源。我们检查了事件日志的结构,并了解了不同 Windows 操作系统中事件日志系统的特点。我们还介绍了一些工具,你可以用来分析事件日志。

在下一章,我们将查看一些与 Windows 操作系统相关的文件。这些文件是 Windows 活动的产物,它们反映了系统中发生的事情。我们将学习如何分析预取、链接和作业文件。

第九章。Windows 文件

在上一章中,我们讨论了 Windows 日志文件,并讨论了它们在分析中的重要性。然而,Windows 日志并不是 Windows 中唯一重要的证据文件。本章将讨论更多重要的 Windows 文件,这些文件通常是在正常的 Windows 操作过程中创建的,但从我们调查案件的角度来看,可能具有证据价值。

Windows 预取文件

Windows 操作系统使用所谓的预取文件来加速程序启动过程。它会存储程序启动时使用的所有文件和 DLL 的列表,以便在程序启动时预先将这些文件加载到内存中,从而加快启动速度。每个可执行文件都有一个预取文件,其中包含以下内容:

  • 可执行文件的名称

  • 可执行文件的路径

  • 程序在系统中运行的次数

  • 最后一次运行时间

  • 程序使用的 DLL 列表

预取文件位于%SystemRoot%\Prefetch目录中,每个文件都有“pf”扩展名。这些文件的命名规则是:将可执行文件名大写后,加上“-”,然后是应用程序启动位置的八字符哈希值,如图 1 所示,calc.exe是 Windows 自带工具:

Windows 预取文件

图 1:预取文件示例

如果您发现同一个可执行文件有两个不同的 pf 文件,这意味着要么是两个具有相同名称的可执行文件,要么是同一个可执行文件从两个不同的路径运行。此外,运行此程序的用户不会在预取信息中存储该信息。然而,可以通过将最后一次运行时间和文件系统中 pf 文件的修改时间戳与安全日志信息相关联,查看哪个用户最后运行了该可执行文件,从而弥补这一点。

从 Windows 8 开始,预取文件的最大数量为 1,024 个。从 Windows XP 到 Windows 7,最大数量为 128 个。当达到文件的最大数量时,Windows 会删除最旧的文件,以便创建一个新的文件。这意味着,如果您在预取文件夹中找到了最大数量的预取文件,您可以假设可能存在另一个 pf 文件用于任何现有的可执行文件,并且它之前被覆盖并重新创建,因此程序的首次运行时间和最后一次运行时间可能不准确。

Windows 预取可以加速应用程序启动时间或两者兼有的启动过程。这些信息将写入以下注册表键值:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters

EnablerPrefetcher注册表值下,您可以找到四个数据值中的一个:

  • 0: 这意味着预取功能已禁用。

  • 1: 这意味着仅启用应用程序预取。

  • 2: 这意味着仅启用引导预取。

  • 3: 这意味着启用引导和应用程序的预取功能:Windows 预取文件

    图 2:注册表中的预取

恶意软件也是一种程序。因此,如果预取功能配置为启用应用程序的预取,则会在prefetch文件夹中为该恶意软件创建一个预取文件。找到恶意软件的预取文件将具有极大的证据价值,因为它将显示恶意软件使用的所有文件和 DLL,这将提供关于其操作的线索,并为后续分析提供起点。

此外,在某些攻击中,攻击链需要在本地系统上运行不同的工具,以便攻击者远程控制该系统。按时间顺序排列预取文件,并按事件时间过滤文件,将帮助我们及时排序在系统中运行并导致感染的工具。这些事实将帮助我们对攻击场景做出更好的假设,并有助于事件响应周期中的根除和恢复阶段。

另一个名为layout.ini的文件也位于相同的prefetch文件夹中。在此文件中,有一些路径指向频繁使用和加载的文件,这些文件被预取过程加载。Windows 磁盘碎片整理过程使用此文件,将所有频繁打开的文件物理上移动到系统磁盘中的连续位置,以便快速加载并减少顺序访问这些磁盘位置所需的时间。这个过程的效果在 HDD 中比在 SSD 中更为明显,因为在 HDD 中访问任何物理位置都需要机械运动。

预取文件分析

值得一提的是,预取文件的结构在不同版本的 Windows 之间有所变化。为了分析预取文件,调查员可以手动使用十六进制编辑器打开它,了解其结构,并开始解析文件内容,甚至创建自动化工具以更快地执行此功能。幸运的是,已经有一个现成的工具,并且支持 Windows 10 及以前版本的预取文件。WinPrefetchView 工具可以从nirsoft.com/下载。

WinPrefetchView 自动解析活动系统中预取文件的位置,并对其进行查看以供进一步分析。为了在我们的 Linux 分析机器上进行事后分析并解析预取文件,我们可以在 Wine 环境中运行 WinPrefetch 程序,并从挂载的镜像中复制prefetch文件夹。

程序界面由两个小窗口组成,一个用于显示与每个预取文件相关的应用程序,另一个则列出从上方窗口选择的程序所使用的所有文件。在图 3 中,我们可以看到 ntosboot 文件,它指的是系统的引导过程,并列出了在此过程中打开的所有文件。在图 3 中,程序在 Wine 环境下的 Linux 机器上运行:

预取文件分析

图 3:WinPrefetchView

Windows 任务

一些程序需要在 Windows 环境中在特定时间执行特定事件。为此,Windows 允许程序创建所谓的计划任务。任务存储在C:\Windows\System32\Tasks中。每个任务以 XML 文件格式存储,其中包含创建任务的用户、任务发生的时间或触发条件,以及将要执行的命令或程序的路径,这就是任务本身。从 Task Scheduler 2.0 开始,它首次出现在 Windows Vista 中,触发条件可以是基于日历的,也可以是事件,例如当特定事件被记录到事件日志系统时启动任务。操作还可以是:运行程序、发送电子邮件或向用户显示消息。

在实时系统中,调查员可以使用常规的任务计划程序来打开任务。从取证镜像中,调查员可以从C:\Windows\System32\Tasks提取任务,其中每个文件都是以 XML 格式存储的单个任务。在图 4 中,我们可以看到 Google 在 Windows 操作系统中用于更新 Google 产品的任务:

Windows tasks

图 4:Google 更新任务

一些恶意软件可以创建一个任务,在特定触发条件下启动自身,比如每天早晨运行恶意软件可执行文件,或在特定时间段后运行。这是恶意软件作者确保恶意软件在感染机器上存在的另一种方式,除了将其可执行文件添加到启动注册表键或作为系统服务。

Windows Thumbs DB

当用户使用Windows文件夹查看选项中的缩略图胶片条视图时,系统会创建一个小的图片缩略图版本并将其存储在一个文件中。这个文件在 Windows XP 中与图片位于同一目录,并命名为Thumbs.dbThumbs.db文件包含了现有图片以及已删除图片的缩略图版本。Thumbs.db是一个隐藏文件,通常用户不会注意到它:

Windows Thumbs DB

图 5:文件查看选项

如果用户删除了图片,但没有删除Thumbs.db文件,那么就有可能恢复该目录中已删除图片的缩略图版本,这为图片内容提供了很好的线索。除了图片的缩略图版本,Thumbs.db还包含文件名以及最后修改的日期和时间。

这个Thumbs.db文件在与图片相关的案件中非常重要,例如儿童色情案件。

从 Windows 7 开始,处理缩略图文件的过程发生了变化。所有 Thumbs.db 文件都分配在一个文件夹中,即 C:\Users\<UserName>\AppData\Local\Microsoft\Windows\Explorer。从取证角度来看,这更为便捷,因为所有文件都在同一位置,无需在整个分区或磁盘中搜索任何 Thumbs.db 文件,并且如果用户删除了整个照片文件夹,文件也不会被删除。此外,文件名已更改为 Thumbcache.db

在现代 Windows 版本中,文件的视图有不同的大小:小、中、大和超大。每种视图布局大小都需要分配不同的 Thumbcache 文件。每种大小都有一个单独的 Thumbcache 数据库,Thumbcache 文件的名称带有一个数字,表示视图布局的大小,例如 thumbcache_32.dbthumbcache_256.db

Windows Thumbs DB

图 6:现代 Windows 操作系统中的文件视图选项

Thumbcache 分析

Thumbcache Viewer 是一个免费工具,可从 thumbcacheviewer.github.io/ 下载。它从 Thumbcache 文件中提取缩略图图像,如下截图所示:

Thumbcache 分析

图 7:Thumbcache Viewer

请注意,还有另一种版本用于解析 Thumbs.db 文件。

原始文件路径未存储在 Thumbcache 文件中。要将文件映射到其原始位置,我们可以在目标 Windows 系统中运行程序,并从活动系统开始映射。或者,我们可以提取并使用来自目标系统(正在调查的系统)的 Windows 搜索数据库 Windows.edb 文件,这是位于 C:\ProgramData\Microsoft\Search\Data\Applications\Windows\ 下的 ESE 数据库:

Thumbcache 分析

图 8:映射 Thumbcache 文件到位置

这是由 Windows 索引服务创建的,用于加速 Windows 操作系统中的搜索过程。Thumbcache Viewer 使用此文件将条目映射到其在目标系统中的原始位置。Thumbcache Viewer 可以在另一个 Windows 系统上运行,并且仅使用目标 Windows 系统中的此数据库文件。但是,在此情况下,主机 Windows 操作系统必须是目标 Windows 系统的相同或更高版本。基于 Windows.edb 文件中的数据,不会映射所有条目,但成功映射的条目将以绿色显示:

Thumbcache 分析

图 9:使用 Windows.edb 文件映射条目。

损坏的 Windows.edb 文件

提取的 Windows.edb 文件在某些情况下可能会损坏。如果 Windows.edb 文件损坏,该工具将警告您,并要求首先恢复此文件以在映射中使用。幸运的是,可以使用 esentutl.exe Windows 原生工具并带有 /p 开关来恢复这样的文件:

损坏的 Windows.edb 文件

图 10:修复损坏的 Windows.edb 文件

Windows 回收站

当用户使用正常的删除过程删除文件时,文件实际上并没有从硬盘中消失。它只会在文件系统中标记为已删除,所有文件的元数据和内容会继续存在于硬盘上,直到被其他文件的元数据和内容覆盖。这使得用户可以在误删文件的情况下进行恢复。已删除的文件将位于 Windows 操作系统中的回收站中。

通常,先进的取证工具能够找到并查看已删除的文件,如果系统仍然保存其元数据,并且能够在不进行数据雕刻的情况下读取这些文件。然而,如果调查员只有回收站文件,并且需要了解哪些文件被删除了,可以通过分析 回收站 文件夹来实现。

回收站的名称在不同版本的 Windows 中有所不同。在 Windows 95 和 98 版本中,回收站位于系统分区下的一个名为 RECYCLED 的文件夹中。从 Windows XP 到 Vista 之前,位置相同,但文件夹名称更改为 RECYCLER。从 Windows Vista 开始,名称更改为 $Recycle.Bin

实时系统中的普通用户可以浏览回收站,但他们需要在资源管理器的查看菜单中显示隐藏文件和受保护的系统文件。从回收站中,用户可以通过右键单击文件来将其恢复到原来的位置。只要文件仍然存在于回收站中,它就可以被恢复。

在事后分析中,文件不会像在实时系统中那样显示,且需要更多了解其结构,而这种结构在不同的 Windows 版本之间有所不同。

RECYCLER

RECYCLER 文件夹中,还有其他以用户 ID 命名的子文件夹。在这些文件夹中,已删除的文件没有正常名称,而是按顺序命名:DC1、DC2 等等。还有一个名为 INFO2 的二进制文件,它将回收站文件映射到实际的文件名、日期和时间,以及文件的回收站名称。在以下截图中,我们可以看到使用 FTK Imager 打开 Windows XP 实时系统时 RECYCLER 的结构:

RECYCLER

图 11:使用 FTK Imager 查看 Windows XP 中的回收站

如我们所见,文件没有名称,只有按顺序编号的 DC# 名称。INFO2 文件包含所有实际文件的名称和路径,并将它们映射到相应的 DC 名称。通过使用任意十六进制编辑器或 FTK Imager 本身打开 INFO2 文件,可以看到这一点:

RECYCLER

图 12:十六进制格式的 INFO2 文件

这些值可以解析,具体如下:

  • 回收站中的文件序列号:Dc1

  • 删除日期:2014 年 12 月 24 日,星期三 12:20:03 UTC。可以使用 Dcode 程序解码删除时间,具体如下:RECYCLER

  • 实际文件大小(字节):929792 = 908 KB

  • 文件位置和名称:C:\Documents and Settings\Administrator\Desktop\<FileName>

$Recycle.bin

从 Windows Vista 开始使用此功能。与 RECYCLER 中的 DC 命名方案和 INFO2 文件不同,对于每个删除的文件,将有一个类似 INFO2 的文件和另一个包含文件内容的文件,而不是 DC 文件。每个删除的文件的内容将位于一个以 $R 开头的文件中,其类似 INFO2 的文件将以 $I 开头,并且名字相同,如下图所示:

$Recycle.bin

图 13:Windows 8.1 中的 Recycle.bin

如果我们尝试解析类似 INFO2 的文件和 $I 文件,我们可以像以前一样从不同的偏移量提取以下信息:

$Recycle.bin

图 14:以十六进制打开的 $I 文件

  • $I 文件头:0x0000000000000001

  • 实际文件大小(字节):14942208 = 14592 KB

  • 删除日期:2015 年 2 月 16 日,星期一 00:20:37 UTC

  • 文件位置和名称:C:\Users\AymanT\Desktop\SYSTEM

Windows 快捷方式文件

Windows 系统的普通用户可以创建指向系统中任何文件的快捷方式。快捷方式就像是从文件系统中另一个位置指向特定文件的指针。用户创建这个文件以便于访问文件系统中的某些位置或文件。

Windows 操作系统默认在以下位置为最近打开的文件创建快捷方式文件:

  • C:\users\<username>\AppData\Roaming\Microsoft\Windows\Recent

  • C:\users\<username>\AppData\Roaming\Microsoft\Office\Recent

Windows XP 将快捷方式文件保存在以下位置:

  • C:\Documents and Settings\<username>\Recent\

Windows 会存储这些快捷方式文件,如果用户在系统中打开了数据或媒体文件。它会存储时间戳、原始文件的名称和位置,以及卷标名称。

这些链接文件的重要性在于,即使原始文件已经从系统中删除,它们也不会被删除,特别是在 Windows 操作系统中“最近使用”文件夹中自动创建的快捷方式文件。在这种情况下,你可以证明一个特定的文件(可能是一个被感染的 pdf 文件)在被调查的系统中已被打开,即使该文件是从一个现在已被移除的外部存储中打开的。此外,在这种情况下,你将会在链接文件中找到指向该外部存储中文件的路径。

快捷方式分析

快捷方式文件的文件系统时间戳可以揭示一些关于文件本身的信息。我们可以将快捷方式文件的创建时间视为文件第一次被打开的时间,而修改时间则是文件最后一次被打开的时间。如果两个时间戳相同,这表明该文件仅从快捷方式文件中提到的位置打开过一次:

快捷方式分析

图 15:快捷方式文件的文件系统时间戳

为了在事后分析中显示快捷方式文件的内容,我们可以在运行中的系统中展示它。然而,内容可能会发生变化,以匹配正在运行的 Windows 机器中的某些路径,或者我们可以使用一个工具,如 Exiftool 工具,网址为 www.sno.phy.queensu.ca/~phil/exiftool/。Exiftool 是一个平台独立的 Perl 库,旨在读取和编辑多种文件的元信息,包括具有不同格式的照片和 .lnk 文件。所有支持的文件可以在 www.sno.phy.queensu.ca/~phil/exiftool/#supported 上找到。

我们可以使用此工具的命令行版本打开任何快捷方式文件,它将显示不同的信息,包括原始文件位置和快捷方式文件的时间戳:

快捷方式分析

图 16:Exiftool 打开 .lnk 文件

总结

因此,在本章节中,我们讨论了对数字取证分析重要的不同 Windows 系统额外工件。我们讨论了预取文件,以及它们如何用于追踪在系统中运行的恶意可执行文件。我们还展示了可以用于保留恶意软件在感染的 Windows 系统中存在的 Windows 任务。然后,我们向您展示了如何通过 Thumbcache 文件调查即使在删除后仍存在于系统中的照片。通过提到删除,我们讨论了回收站及其在不同 Windows 操作系统版本中的结构。最后,我们讨论了快捷方式或 .lnk 文件,并说明了如何读取它们的数据及其取证重要性。

由于打开恶意 URL 或恶意附件是感染计算机最常见的方式,在接下来的章节中,我们将讨论浏览器取证,并向您展示如何使用不同的工具和浏览器跟踪用户活动,调查访问过的网站。同时,我们将解释如何进行电子邮件取证,调查收到的电子邮件及其附件或嵌入的链接。

第十章:浏览器和电子邮件调查

互联网和万维网如今是搜索和查看数据与信息的主要方式。浏览器是最常用的工具。因此,当分析师试图调查用户活动并为该用户建立画像时,调查浏览器非常重要。这项任务并不简单,因为如今市场上有大量浏览器,且每种浏览器的遗留文件结构各不相同。本章将重点介绍三款最常用的浏览器:Internet Explorer、Firefox 和 Chrome。

电子邮件仍然是数字世界中许多人之间沟通的主要方式,尤其是在企业环境中。本章将介绍不同格式的电子邮件客户端存档,并解释如何从这些存档中读取电子邮件,以便进行分析或追踪发送者。

浏览器调查

诱使用户访问恶意链接并下载恶意可执行文件是犯罪分子最常用的感染用户计算机的技术之一。通过分析受害者的浏览活动,可以识别出第一次感染的途径及其工作原理。此外,在分析犯罪计算机时,通过浏览历史记录可以帮助分析用户资料,并通过识别他们通常访问的网站类型以及下载文件的内容来明确他们的意图。

分析浏览器活动需要调查员了解浏览器的不同遗留文件及其位置,并了解每个文件的数据结构。从这一点可以看出,进行深入的浏览器取证是多么棘手。市场上目前有许多浏览器,且一个用户可能同时使用多个浏览器。

在本节中,我们将解释不同浏览器的遗留文件,并探讨如何从本地浏览器文件中提取所有这些遗留文件。

微软 Internet Explorer

微软的 Internet Explorer(也称为 IE 或 MSIE)是市场上最早的互联网浏览器之一。它默认随 Windows 操作系统一起提供。版本 1 于 1995 年发布,而在撰写本书时的最新版本是版本 11。在版本 1 与版本 11 之间,以及不同版本的 Windows 之间,MSIE 的遗留文件已经有所变化。

此外,从 Windows Vista 开始,目录结构和遗留文件的位置已在文件系统中发生变化。因此,有两个因素控制着 Internet Explorer 的分析过程:

  • 安装的 Internet Explorer 版本

  • 正在运行的 Windows 操作系统的版本

历史记录文件

通过浏览历史记录,调查员可以对系统用户进行画像,并跟踪他们的活动,从而缩小调查范围。Windows 默认保留浏览历史记录 20 天,可以从程序本身或注册表中进行编辑。

调查员可以使用这些信息查看用户是否最近清除了浏览历史,或者调查员发现的历史记录是否是系统中能找到的最大历史记录。MSIE 保留历史记录的天数可以在软件配置文件中的 \Microsoft\Windows\CurrentVersion\Internet Settings\Url 下找到名为 DaysToKeep 的值。

不同版本的 Windows 中,历史记录文件的位置有所不同,如下所示:

  • 在 Windows Vista 之前,历史记录文件称为 History.IE5,位于 C:\Documents and Settings\<Username>\Local Settings\History.IE5

  • 在 Windows Vista 和 Windows 7 中,位置发生了变化,但仍使用相同的文件结构 History.IE5

    • <SystemPartition>\Users\<Username>\AppData\Local\Microsoft\Windows\History\History.IE5

    • <SystemPartition>\Users\<Username>\AppData\Local\Microsoft\Windows\History\Low\History.IE5

  • 在 Windows 8、Windows 8.1 和 Windows 10 中,位置和结构发生了变化:<SystemPartition>\Users\<Username>\AppData\Local\Microsoft\Windows\WebCache\WebCacheV#.dat

注意

从 Windows Vista 开始,MSIE 版本 7 及之后的版本,在 Windows 7 中运行时,MSIE 以受保护模式运行以提高安全性。此受保护模式默认开启,用户可以关闭它。该模式以低权限运行 MSIE,这意味着任何在浏览过程中由 MSIE 安装的恶意软件也会以相同的低权限运行,从而无法访问和操作操作系统中的敏感区域,如系统文件或注册表键。Windows Vista 或 Windows 7 中受保护模式下 MSIE 的所有活动都位于 Low 文件夹下:<SystemPartition>\Users\<Username>\AppData\Local\Microsoft\Windows\History\Low\History.IE5

History.IE5

这个方法曾在 MSIE 版本 5 到版本 9 中用于存储浏览历史。在活系统中,访问此位置将显示不同的文件夹,表示不同的浏览时期。每个文件夹都包含访问过的网站的链接。用户可以从此位置重新打开这些网站:

History.IE5

活系统上的历史记录

现在,让我们尝试通过命令行打开相同的位置。我们将使用 dir 命令列出 content.IE5 目录下的文件:

History.IE5

使用 dir 命令列出历史记录内容

我们可以看到,文件夹结构不同,只有一个名为 index.dat 的文件。但是,如果我们尝试通过 dir 命令并使用 /a 参数列出所有目录结构,我们会得到不同的结果,如下图所示:

History.IE5

dir 命令与 /a 参数

我们可以看到两个新目录,目录名以MSHist01开头。这两个文件夹代表了前面截图中的两个文件夹。名称的其余部分表示每个文件夹包含的浏览历史的时间段,结构如下:

常量MSHist01,开始年份的四位数字,开始月份的两位数字,开始日期的两位数字,结束年份的四位数字,结束月份的两位数字,以及结束日期的两位数字

因此,这两个文件代表了以下浏览历史:

  • 第一个文件显示了从 2015 年 2 月 16 日到 2015 年 2 月 23 日的日期,这表明这是一个每周的历史记录。

  • 第二个文件表示 2015 年 2 月 28 日的日常历史记录。

在 Linux 中,如果我们尝试打开相同的History目录,我们可以使用ls命令看到所有的详细信息:

History.IE5

使用ls命令在 Linux 中列出历史记录内容

所以,从这个简短的列表中,我们可以看到有三种不同类型的index.dat文件,可以总结如下:

  • index.dat,位于History.IE5

  • 每周的index.dat文件,位于weekly文件夹下。

  • 每日index.dat文件,位于daily文件夹下

每个索引文件包含有关访问过的网站的条目。每个条目以 URL 作为签名开始。每个条目包含网站标题、URL、用户名、点击次数,以及两个时间戳——第一个时间戳位于每个条目的偏移量 8 处,第二个时间戳位于偏移量 16 处。每个时间戳是 32 位或 8 字节长:

History.IE5

每周index.dat文件的十六进制转储

了解机器的时区是分析过程中的一个非常关键的信息,但你还必须知道 Windows 中的每个文件如何存储其时间戳——是以 UTC 还是本地时间存储。在History.IE5中,有三个不同的index.dat文件,每个文件以不同的方式存储时间戳:

index.dat文件类型 偏移量 8 处的第一个时间戳 偏移量 16 处的第二个时间戳
主文件 上次访问时间(UTC) 上次访问时间(UTC)
每日 上次访问时间(本地时间) 上次访问时间(UTC)
每周 上次访问时间(本地时间) index.dat文件的创建时间(UTC)

不同的index.dat文件对应不同的时间戳

使用DCode.exe工具可以将时间戳转换为人类可读的格式(www.digital-detective.net/digital-forensic-software/free-tools/):

History.IE5

使用 DCode.exe 工具解码每周index.dat中的第一个时间戳

每周index.dat条目的第一个时间戳显示了其最后一次访问的日期,按本地时间计算。所以,这个页面的最后访问时间是2015 年 2 月 19 日星期四 13:47:22 UTC,考虑到机器时区为 UTC+2。

同样,第二个时间戳是2015 年 2 月 28 日星期六 20:39:24,这是每周index.dat文件本身的创建日期(UTC 时间)。

如果我们不知道计算机的时区,那么在同一条目中,第一个和第二个时间戳之间的时间差就是 UTC 时间与本地时间之间的差异,位于每日的index.dat文件中。

IEHistoryView

IEHistoryView (www.nirsoft.net/utils/iehv.html) 可以打开history文件并解析它,可以在实时系统或 Linux 中的 Wine 环境下通过 History 文件夹进行解析。它可以解析到 MSIE 版本 9:

IEHistoryView

IEHistoryView 工具(index.dat 解析器)

BrowsingHistoryView

BrowsingHistoryView (nirsoft.net/utils/browsing_history_view.html) 是另一个可以解析所有版本 MSIE 的程序,它有 32 位和 64 位系统的两个版本。它也可以在实时系统中运行,或者通过提供 webcache 目录的位置进行事后分析。它还可以解析其他不同浏览器的历史记录:

BrowsingHistoryView

BrowsingHistoryView 自定义分析

MiTeC Internet History 浏览器

MiTeC Internet History 浏览器是 MiTeC 公司提供的免费软件 (www.mitec.cz/ihb.html)。它适用于所有 MSIE 版本,也适用于其他浏览器。它解析计算机并在同一输出中显示不同浏览器的结果:

MiTeC Internet History 浏览器

MiTeC IHB 输出(Windows 8.1 上的三种不同浏览器)

缓存

当用户访问网页时,这些页面会被缓存到系统中,以加速浏览。例如,如果用户点击浏览器的后退按钮,浏览器会从本地系统中获取该页面,而不是再次从远程服务器请求它。从取证的角度来看,这对于找出恢复用户访问页面内容的方式非常有用。缓存数据使我们能够做到这一点。

缓存数据的位置因 Windows 版本不同而有所不同,如下所示:

  • 在 Windows Vista 之前,缓存文件被命名为Content.IE5,并位于<SystemPartition>\Documents and Settings\<Username>\Local Settings\Temporary Internet Files\Content.IE5

  • 在 Windows Vista、Windows 7 和 Windows 8 中:

    • <SystemPartition>\Users\<Username>\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5

    • <SystemPartition>\Users\<Username>\AppData\Local\Microsoft\Windows\Temporary Internet Files\Low\Content.IE5

  • 在 Windows 8 或从 MSIE V10.0 开始,缓存与WebCacheV#.dat文件结合在一起,但旧位置仍然存在,只是有一个名为container.dat的文件,大小为 0 字节:Cache

    在 Windows 7 上运行的 MSIE 11 的 Content.IE5

  • 在 Windows 8.1 中,WebCacheV#.dat 文件仍被操作系统用来保存缓存,但自 MSIE V11.0 起,旧位置已更改为 INetCache 目录:

    • <SystemPartition>\Users\<Username>\AppData\Local\Microsoft\Windows\INetCache\IE

    • <SystemPartition>\Users\<Username>\AppData\Local\Microsoft\Windows\INetCache\Low\IE

以下截图显示了 Windows 8.1 中的新缓存位置:

Cache

Windows 8.1 缓存位置

Content.IE5

Content.IE5 文件夹从 MSIE5 开始使用,它包含随机命名的文件夹,这些文件夹包含访问页面的实际数据。位于 Content.IE5 文件夹中的 index.dat 文件包含每个缓存文件的元数据。该文件跟踪缓存内容并标识位于子目录中的文件。

它包含以下内容:

  • 从请求中返回的带有 HTTP 头的原始地址

  • 为此 URL 缓存的文件位置

  • 缓存记录的类型,即 URL 和 LEAK 用于普通记录,REDR 用于重定向页面,HASH 用于索引文件内容:Content.IE5

    index.dat 文件中的一个 URL 示例条目

除此信息外,index.dat 文件中还存储了一些时间戳。

IECacheView

来自 www.nirsoft.com 的 IECacheView 程序可以解析实时 Windows 系统上的缓存信息。在实时分析的情况下,它将检测缓存信息的正确位置。然而,在事后分析中,应该提供缓存数据的位置:

IECacheView

IECacheView 解析 Windows 7 上 MSIE V8 的缓存数据

该程序可以对上下文菜单中的每个条目执行许多操作,例如查看页面的实际代码,这对于识别页面中带有 iframe 的恶意重定向非常有用。

Msiecf 解析器(Plaso 框架)

我们将在 第五章 时间轴 中突出显示来自 Plaso 框架的 Msiecf 解析器或 MSIE 缓存文件解析器,该解析器用于解析来自法证镜像或备份的系统分区缓存文件,并将所有结果包含在由 log2timeline 工具创建的存储文件中。

我们可以为此解析器创建存储文件,与创建完整存储文件(例如,Win7 解析器)相比,这将花费较少的时间。在这种情况下,我们需要挂载镜像并指向挂载镜像中的用户配置文件位置:

Msiecf parser (Plaso framework)

来自 Plaso 框架的 Msiecf 解析器

然后,我们可以像之前一样使用 psort.py 工具来过滤创建的存储文件。

Cookies

Cookies 被远程网站用来跟踪用户在网站上的活动。远程网站将一些信息添加到一个名为 cookie 的单一文件中。这些信息在不同网站之间有所不同。

例如,用户使用一个在线购物网站,开始将商品添加到购物车,并在不同的页面之间浏览,而不会丢失之前添加的商品,也无需登录该网站。实现这一点的方式之一就是将 Cookies 添加到用户的机器上。

有两种不同类型的 Cookies:

  • 会话 Cookies:这些仅存储在运行机器的内存中。此类型的 Cookies 可以在内存取证中进行调查。

  • 持久性 Cookies:这些 Cookies 将存储到本地文件系统中,本节我们关注的就是这种类型的 Cookies。

与历史记录和缓存一样,Cookies 在不同版本的机器中的位置也有所不同,具体如下:

  • 在 Windows Vista 之前:<SystemPartition>\Documents and Settings\<Username>\Cookies

  • 在 Windows Vista、Windows 7 和 Windows 8 中:

    • <SystemPartition>\Users\<Username>\AppData\Roaming\Microsoft\Windows\Cookies

    • <SystemPartition>\Users\<Username>\AppData\Roaming\Microsoft\Windows\Cookies\Low

    注意

    从 Windows Vista 开始,微软对操作系统中的用户配置文件文件夹结构和操作进行了某些更改,以提高安全性。一个改进是更广泛地使用漫游配置文件,允许用户在同一域中的机器上访问其配置文件数据。在此远程访问过程中,一些数据,包括用户浏览时的 Cookies,会存储在漫游目录中,而不是远程机器上。

  • 在 Windows 8.1 中:

    • <SystemPartition>\Users\<Username>\AppData\Local\Microsoft\Windows\INetCookies

    • <SystemPartition>\Users\<Username>\AppData\Local\Microsoft\Windows\INetCookies\Low

IECookiesView

IECookiesView 是一个程序(www.nirsoft.net/utils/internet_explorer_cookies_view.html),可以直接检测活动系统中 Cookies 的位置,它还可以提供来自法医镜像中提取的 Cookies 位置进行事后分析:

IECookiesView

在运行 MSIE V8 的 Windows 7 上使用 IECookiesView

IECookiesView 的输出包含以下内容:

  • 创建此 Cookie 的网站

  • 访问此网站的次数(点击次数)

  • 存储的 Cookies 时间戳使用 UTC 时间

  • 访问 URL 的用户,可以通过以下模式中提到的文件名的一部分看到:<UserName>@<SiteURL>

收藏夹

收藏夹是用户为将来使用而存储的一些网站。这些收藏夹有助于识别和描绘用户活动。Windows Vista 之后,收藏夹的位置发生了变化,具体如下:

  • 在 Windows Vista 之前:<SystemPartition>\Documents and Settings\<Username>\Favorites

  • 在 Windows Vista 之后:<SystemPartition>\Users\<Username>\Favorites

FavoritesView

FavoritesView 是 Nirsoft 的另一个程序 (www.nirsoft.net/utils/faview.html),它可以在同一个窗口中解析 Mozilla Firefox 和 Netscape 的书签。在某些情况下,如果程序在实时系统下运行,它可能无法打开书签的正确位置,因此调查员需要打开正确的路径:

FavoritesView

Windows 8.1 上的 FavoritesView

会话恢复

从 MSIE V8.0 开始,微软实现了一种恢复模式,以便在 MSIE 崩溃时恢复打开的标签页:

Session restore

MSIE 崩溃恢复消息

每个打开的标签页都有一个文件,描述了在此标签页中打开的页面。包含数据的路径在不同版本的 Windows 中有所不同,如下所示:

  • 在 Windows Vista 之前和 MSIE V8 版本:<SystemPartition>\Documents and Settings\<Username>\ Local Settings\Internet Explorer\Recovery

  • Windows Vista、Windows 7、Windows 8 和 Windows 8.1: <SystemPartition>\Users\<Username>\AppData\Local\Microsoft\Internet Explorer\Recovery

这将为调查员提供很大的帮助,特别是当历史记录被关闭时。每个文件都是一个 OLE 结构的存储文件,签名为 0xD0CF11E0A1B11AE1。这种类型的文件需要特殊的解析器。

MiTeC SSV

MiTeC 结构化存储查看器,来自 www.mitec.cz/ssv.html,可以读取结构化存储格式并进行解析。

通过打开 SSV 中恢复目录下的最后一个活动文件,我们可以找到该文件本身的一些时间戳:

MiTeC SSV

SSV 中的时间戳

创建时间表示会话结束的时间,只要该文件位于最后活动文件夹中。如果我们调查活动文件夹,时间将表示标签页打开的时间:

MiTeC SSV

MSIE 最后活动会话的示例

在之前的图示中,这个标签页打开了两个页面。我们现在关注两个文件:

  • |KjjaqfajN2c0uzgv1l4qy5nfWe:这包含了在该标签页中最后打开的 URL

  • TL#:这是标签页中打开的页面。# 符号将被一个数字替代,表示该标签页在会话中的顺序

每个 TL# 页面都有页面标题、页面 URL 以及如果有的话,引用的站点。

Inprivate 模式

InprivateIncognito 模式现在几乎在所有浏览器中都有。在 Inprivate 模式下,硬盘上不会保存任何痕迹。所有的痕迹都保存在内存中,包括会话 cookie。内存取证在这种情况下能提供很好的结果。这也是我们需要捕获运行中系统内存而不是关闭系统的另一个原因。

在 Inprivate 模式下的会话恢复文件被创建在相同的位置,但在关闭会话后会被删除。使用 MSIE 的 Inprivate 模式,恢复这些文件可以提供有关在 Inprivate 会话期间访问的网站的信息。通过刻录 OLE 文件头的未分配空间,可能足以恢复这些文件。

WebCacheV#.dat

MSIE 版本 10 随 Windows 8 一起发布。从此版本开始,推出了一个相对较新的数据文件,即 WebcacheV#.dat 文件。WebcacheV#.dat 是一个包含多个浏览器数据的单一文件,包括历史记录、缓存和 cookies。文件名中的 # 位置为一个两位数的数字,该数字可能因系统不同而有所不同,但在 <SystemPartition>\Users\<Username>\AppData\Local\Microsoft\Windows\WebCache\ 目录下,只会有一个这样的文件:

WebCacheV#.dat

Windows 8.1 中的 WebCacheV#.dat

该文件是一个 可扩展存储引擎 (ESE) 数据库文件或 EDB 文件。这种类型的数据库广泛应用于许多微软应用程序中,例如 Windows 搜索、Active Directory 和 Windows Mail。

尽管该文件包含许多浏览器的混合数据,但浏览器旧位置的文件仍然存在,但它们未被使用(稍后我们会解释)。

注意

大多数数据不会从正在运行的系统中提取,因为它们已经被操作系统使用。它们可以从取证镜像中提取。否则,如果我们有适当的权限,可以使用如 FTK imager 等程序,从正在运行的系统中转储这些文件,如前所述。

由于它是一个 ESE 数据库,可以使用 Windows 工具 Esentutl 来测试 WebcacheV#.dat 文件是否损坏:

WebCacheV#.dat

用于测试 WebCacheV01.dat 文件的 Esentutl 工具

ESEDatabaseView

Nirsoft 的 ESEDatabaseView 可用于打开 .dat 文件。打开后,我们可以在数据库中找到多个容器(表)。我们可以列出容器表中的所有容器:

ESEDatabaseView

WebCacheV01.dat 文件中的容器列表

我们可以看到位于 WebCacheV#.dat 文件中的所有数据,例如以下截图中突出显示的历史记录数据:

ESEDatabaseView

WebCacheV01.dat 文件中的历史记录容器(裁剪图像)

然后,使用容器 ID,我们可以列出包含实际数据的表或容器。例如,容器 1 包含 History.IE5 数据:

ESEDatabaseView

WebCacheV01.dat 文件中的 History.IE5 容器(裁剪图像)

Firefox

Firefox 是一款广泛使用的浏览器,自 2004 年发布以来一直在不断发展。从版本 3 开始,它采用 SQLite 格式存储除缓存外的使用数据,自该版本以来,这些数据的存储位置保持不变。

缓存的位置如下:

  • 在 Windows Vista 之前:<SystemPartition>\Documents and Settings\<Username>\Local Settings\Application Data\Mozilla\Firefox\Profiles\<profile folder>

  • 从 Windows Vista 开始:<SystemPartition>\Users\<Username>\AppData\Local\Mozilla\Firefox\Profiles\<profile folder>

其余的文件位于以下位置:

  • 在 Windows Vista 之前:<SystemPartition>\Documents and Settings\<Username>\Application Data\Mozilla\Firefox\Profiles\<profile folder>

  • 自 Windows Vista 起:<SystemPartition>\Users\<Username>\AppData\Roaming\Mozilla\Firefox\Profiles\<profile folder>

注意

<profile folder> 文件夹包含 <RandomText>.default,例如 918159wp.default

Places.sqlite

Places.sqlite 包含 Firefox 浏览器的浏览历史。它包含许多信息,包括以下内容:

  • URL

  • 首次访问的日期/时间

  • 上次访问日期/时间

  • 访问次数

  • 引荐来源

  • 访问页面的标题

  • 访问类型,包括以下内容:

    • 点击的链接

    • 输入的 URL

    • 重定向

    • 从书签中打开

MozillaHistoryView

要解析 Firefox 历史记录,可以使用 MozillaHistoryView(www.nirsoft.net/utils/mozilla_history_view.html)。这个工具通常在实时系统中运行,自动检测运行系统中的配置文件位置,或提供 SQLite 数据库的位置:

MozillaHistoryView

MozillaHistoryView 选项

Cookies.sqlite

Cookies.sqlite 包含 Firefox 的浏览 Cookie。它存储以下信息:

  • 远程网站

  • Cookie 名称

  • 创建时间

  • 上次访问时间

  • 连接类型——安全或非安全

  • 存储的来自网站的数据

MozillaCookiesView

要解析 Firefox 的 Cookie,可以使用 MozillaCookiesView,访问 www.nirsoft.net/utils/mzcv.html。它会解析并列出运行系统中的 Cookie 或指向的配置文件目录中的 Cookie:

MozillaCookiesView

MozillaCookiesView

缓存

Firefox 缓存格式在所有版本中都是相同的。其位置在各版本之间没有变化。它包含关于系统中缓存文件的以下信息:

  • 名称

  • 类型

  • 下载的源 URL

  • 大小

  • 时间戳(最后修改时间、最后请求时间和过期时间)

  • 计数(此文件从缓存数据中被使用的次数)

MozillaCacheView

MozillaCacheView(www.nirsoft.net/utils/mozilla_cache_viewer.html)可以解析并查看 Firefox 的缓存数据。它还可以导出缓存数据中的任何文件以供检查:

MozillaCacheView

MozillaCacheView

其他浏览器

从前述对 MSIE 和 Firefox 的分析中,我们可以理解,由于市场上浏览器数量庞大且各自存储浏览数据的方式不同,数字取证调查员在进行浏览器取证时面临巨大的挑战。Nirsoft.net 包含了许多其他工具,可以解析不同浏览器的数据,网址为www.nirsoft.net/web_browser_tools.html,涵盖了 Google Chrome、Opera 和 Safari。

电子邮件调查

电子邮件是当今最常用的通信方式之一,特别是在企业环境中。发送、接收或阅读电子邮件会在电子设备中留下痕迹。这些痕迹有助于分析针对性攻击、勒索、间谍活动、信息泄露和骚扰案件。电子邮件的痕迹会根据使用电子邮件账户的方式(通过 Web 邮件或已安装的电子邮件客户端)有所不同。

在 Web 邮件中,浏览器调查和内存取证有助于恢复一些电子邮件数据,甚至在某些情况下恢复电子邮件账户的访问凭据。在本节中,我们将讨论 Outlook 电子邮件客户端在计算机上的遗留数据。

Outlook PST 文件

市场上有许多电子邮件客户端。微软的 Outlook 是最常用的客户端之一。Outlook 将所有邮件、联系人和日历存储在一个个人文件夹PFF)文件中。PFF 文件之一是个人存储表PST)文件,默认保存在以下位置:

  • My Documents\Outlook Files(在 Windows XP 中)

  • Documents\Outlook Files(从 Windows Vista 开始)

用户可以将电子邮件存档到本地计算机,从而释放邮件服务器上的空间。已存档的电子邮件也会存储在 PST 文件中。已存档的 PST 文件不会连接到服务器,也不会与用户账户相关联。它仅在用户的本地计算机上可用,且不会出现在任何其他与用户关联并与其账户同步的设备上,除非用户将存档的 PST 文件复制到另一台设备。

存档文件的位置如下:

  • <SystemPartition>\Documents and Settings\<username>\Local Settings\Application Data\Microsoft\Outlook(在 Windows XP 中)

  • <SystemPartition>\Users\<username>\AppData\Local\Microsoft\Outlook(从 Windows Vista 开始)

PST 文件可以导入到 Outlook 中,但它不会被上传到服务器。它仅在本地运行的客户端上可用。

Outlook OST 文件

另一个 PFF 文件是离线存储表OST)文件。它主要用于微软 Exchange 服务器账户。它允许用户在本地计算机上创建、编辑或删除邮件,而无需连接到服务器;一旦建立连接,客户端会与服务器同步,并更新用户所做的所有新更改,使服务器和客户端上的两个副本保持一致。

OST 文件可以位于以下位置:

  • 在 Windows XP 中,文件存储路径为 <SystemPartition>\Documents and Settings\<username>\Local Settings\Application Data\Microsoft\Outlook

  • 从 Windows Vista 开始,文件存储路径为 <SystemPartition>\Users\<username>\AppData\Local\Microsoft\Outlook

与 PST 文件不同,OST 文件不能导入到 Outlook 中;它需要先转换为 PST 文件格式。不同的商业工具可以完成这个转换。

EML 和 MSG 文件

EML 文件包含用户保存的单一邮件。EML 文件是一个纯文本文件,包含邮件的详细信息,包括标题、正文和附件。EML 文件可以通过 Outlook 或任何兼容的电子邮件客户端打开。此外,还有一些 EML 查看器。

另一种保存邮件的格式是 MSG 格式。MSG 是一种二进制格式,可以作为复合文件进行分析,使用复合文件解析器,如 Joachim Metz 的 Libolecf

EML 和 MSG 文件

使用 Libolecf 解析 MSG 文件

DBX(Outlook Express)

Outlook Express 在 Windows Vista 之前被使用,之后被 Microsoft Outlook 替代。Outlook Express 使用 DBX 文件作为邮件存储。一个 DBX 文件存储在 <SystemPartition>\Documents and Settings\<username>\Local Settings\Application Data\Identities\<Identity number>\Microsoft\Outlook Express 中。Outlook Express 文件夹包含以下文件:

  • Folder.DBX:这是 Outlook Express 中的主文件。它包含邮件中文件夹的树状结构。每个邮件结构中的文件夹都有一个不同的 DBX 文件,包括 Inbox.DBXSentItems.DBXDrafts.DBX

  • Cleanup.log:此日志文件用于记录已删除文件的清理操作。Outlook Express 为最后一次归档创建日志。在归档过程中,Outlook Express 实际上会清理已删除的项目。在正常情况下,它只是将项目标记为已删除,并保留在 DBX 文件中。

PFF 分析 (libpff)

库 libpff (github.com/libyal/libpff/) 是一个跨平台库,用于打开和解析 PFF 文件。此库包含两个工具:pffinfopffexport

让我们尝试分析从 Windows 7 的取证镜像中提取的 OST 文件。首先,让我们使用 pffinfo 查找 OST 文件的信息:

PFF 分析 (libpff)

获取 OST 文件的信息

现在,我们知道 OST 文件没有加密,那么让我们从文件中导出数据:

PFF 分析 (libpff)

从 OST 文件中导出数据

在工作目录下将创建一个新文件夹 <OSTfilename>.export。在我们的案例中,它将是 test.ost.export。由于 OST 文件中包含许多项目,我们创建了 log.txt 文件来记录所有这些导出的项目,然后我们可以过滤日志文件并定位感兴趣的项目。在我们的案例中,如果我们只对电子邮件感兴趣,我们可以通过 grep 来筛选 log.txt 文件中的电子邮件:

PFF 分析 (libpff)

OST 文件中的电子邮件

所以,电子邮件存储在不同的文件夹中,比如“已删除邮件”和“收件箱”。如果我们对收到的电子邮件感兴趣,这些邮件可能包含欺骗用户感染计算机的恶意链接或附件,那么我们可以检查“收件箱”文件夹中的邮件。

在创建的导出文件夹中,我们将找到与 OST 相同的文件夹结构。我们可以导航到某个消息的位置,并查看该消息文件夹的内容,如下图所示:

PFF 分析(libpff)

每个消息的内容

我们将为每个消息找到不同的文件,包括消息头和消息正文。通过消息头,我们可以追踪发件人。消息正文将帮助我们检查是否有恶意或钓鱼链接。如果消息包含附件,附件文件会在消息目录下的另一个目录中找到。附件可能是恶意的。

其他工具

有许多工具可以用于读取和解析不同的电子邮件文件。其中一些工具可以在实时系统上运行,进行实时分析。

以下是其中的一些工具:

  • MiTeC 邮件查看器支持 Microsoft Outlook Express 4、5、6 消息数据库 [*.idx/*.mbx/*.dbx],Windows Vista 邮件/Windows Live Mail 和 Mozilla Thunderbird 消息数据库,以及独立的 EML 文件。你可以从 www.mitec.cz/mailview.html下载该工具。

  • 用于查看 PST、OST、EML 和 DBX 文件的不同工具来自 www.freeviewer.org

    • PST 文件查看器

    • OST 文件查看器

    • EML 文件查看器

    • Outlook DBX 查看器

  • 用于查看 PST、OST 和 EML 文件的不同工具来自 www.nucleustechnologies.com

    • 内核 PST 查看器

    • 内核 OST 查看器

    • 内核 EML 查看器

总结

在本章中,我们讨论了浏览器分析的重要性、浏览器伪迹,以及如何在不同浏览器中查找和解析这些伪迹。然后,我们学习了如何解析 Microsoft Outlook 的 PFF 文件以及不同的电子邮件文件,如 MSG 和 EML。

在下一章中,我们将介绍 Windows 内存分析,并展示为什么执行内存取证不再是可选的。

第十一章:内存取证

系统内存是操作系统的工作空间。操作系统使用内存来存放执行程序所需的数据和程序本身。这就是为什么在数字取证中,获取系统内存是必须执行的步骤之一。分析内存可能揭示恶意进程或程序的存在,而这些程序在机器硬盘中没有任何痕迹。内存还包含了打开的网络连接,其中可能包括攻击者控制机器或窃取用户数据和信息的连接。

本章我们将简要讨论 Windows 内存结构、攻击者用来隐藏恶意活动和存在的一些技术,以及用于调查内存转储的工具。

内存结构

每个运行中的进程都会在内存中分配空间来存储其代码和数据。这个空间由内存页组成。在 x86 系统中,每个内存页的大小为 4 KB。所有进程都通过虚拟地址来寻址其内存空间,系统会将虚拟地址转换为物理地址,且无需任何进程的干预。

在现代操作系统中,运行中的进程分为两类:一类是运行在用户模式下的进程,另一类是运行在内核模式下的进程。这两种模式的区别在于操作系统授予的访问权限级别。在用户模式下,进程不能修改分页或访问其他进程的内存位置,除非通过一些进程间通信使用 Windows API。除 SYSTEM 进程外,所有进程都从用户模式开始运行。

内核模式由 Windows 内核在系统启动时用于设置内存空间和分页。在某些情况下,例如执行 Windows API 时,处理器会接收到中断,这要求它切换到内核模式以执行该中断,然后再返回到用户模式。

内存获取

我们在第三章《易失性数据收集》中曾讨论过内存获取。然而,现在我们需要在现代 Windows 操作系统中重点介绍这一点,包括禁止进程访问整个内存的不同安全控制措施,以及任何获取工具获取系统内存所需的步骤。这可能会导致系统崩溃和系统内存丢失,或者在活动硬盘加密的情况下丢失整个硬盘。

因此,现代数字取证获取工具通常会首先在操作系统中安装一个驱动程序,然后使用这个驱动程序来访问系统内存,这需要更高的系统权限。

内存转储的来源

我们可以将事件响应过程中的内存转储视为内存取证的主要来源。然而,如果我们有一台关闭的机器,或者因某些原因无法获取该机器的内存呢?这里的问题是,我们是否有其他方法进行内存取证?幸运的是,在许多情况下我们对这个问题有肯定的答案。让我们看看有哪些方法。

休眠文件

休眠是大多数操作系统中的一种电源选项,包括 Windows 操作系统。在此模式下,系统会将易失性的内存复制到一个名为hiberfil.sys的单一文件中,该文件位于硬盘的系统根目录下(硬盘是非易失性的),然后完全关闭计算机。当用户从休眠状态重新启动计算机时,系统会将该文件的内容再次复制到内存中,并恢复先前进程的执行。

如果调查人员拥有受害人或嫌疑人的硬盘取证镜像,他们可以提取休眠文件,并使用本章稍后讨论的内存分析工具对该文件进行内存取证。休眠文件将为调查人员或分析员提供一个特定时间点的内存镜像,可能包含与恶意活动或与调查案件相关的重要证据。

休眠文件的文件系统最后修改时间将指示系统使用休眠时的时间。幸运的是,休眠文件的结构虽然不同,但已知,这使得它可以转换为原始内存镜像,以便使用内存取证工具进行分析。尽管它包含大部分内存数据,但休眠文件不会包含一些数据,例如通过 DHCP 动态获取的网络信息。在分析时,我们需要考虑这一点。

崩溃转储

如果 Windows 系统崩溃,它会设计为存储崩溃时的系统状态信息,以便在系统恢复后进行故障排除。系统崩溃曾是通过崩溃转储文件来转储内存的一种旧方法,用户可以使用 Sysinternals 的 NotMyFault 工具来完成这一操作(download.sysinternals.com/files/NotMyFault.zip)。然而,现在已有更好的方法和工具可用。崩溃转储文件默认命名为 MEMPRY.DMP,并直接位于系统根目录下。崩溃转储文件可以根据崩溃转储的设置包含不同的数据,如下所示:

  • 完整内存转储:这包含崩溃时的物理内存以及一个 1MB 的头部信息。此类型不常见,因为它的大小较大,尤其是在内存较大的系统上。

  • 内核内存转储:这是系统仅在内核模式下转储内存页面,并忽略用户模式下的页面。

  • 小型转储文件:这些是小文件,在 32 位系统中大小为 64 KB,在 64 位系统中为 128 KB。它包含有关系统中正在运行的进程和已加载的驱动程序的信息。

为了让调查人员了解案件中存在的转储文件类型,他们可以通过文件的大小来判断。他们还可以打开注册表位置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl,在名为CrashDumpEnable的值下,它将是以下四个值之一:

  • 0: 这是调试信息未写入文件时的情况

  • 1: 这是将完整的崩溃转储写入文件时的情况

  • 2: 这是将内核内存转储写入文件时的情况

  • 3: 这是将小型内存转储写入文件时的情况

提取崩溃转储文件后,调查人员可以使用 Moonsols 的dmp2bin.exe工具转换转储文件。

页面文件

分页是一种内存管理技术,作为 Windows 内存的二级存储。它通过将最少使用的内存页面移动到硬盘上的名为pagefile的文件中,从而加速系统。当用户再次使用这些保存的页面时,系统会将这些页面恢复到内存中。这可以在访问一些长时间未使用的已打开应用程序时察觉到小的延迟。

硬盘上的页面文件最多可以有 16 个文件,且不仅仅位于根目录下。要从注册表中查找页面文件的位置,请检查HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Memory Management\ExistingPageFilesPagingFiles。一些内存采集工具,如 FTK imager,可以在实时采集期间将页面文件添加到内存镜像中:

页面文件

图 1: FTK imager;在内存采集过程中添加页面文件

页面文件存储无序的数据,这使得深入分析更加困难。这意味着在页面文件中进行字符串搜索可能会提供一些有关页面文件内容和正在调查案件的线索,例如 IP 地址、路径或注册表项。还可以在页面文件中进行文件雕刻,以恢复一些相关文件。扫描页面文件以查找恶意软件特征可能会发现内存中运行的恶意软件。

内存中的进程

进程是系统中已执行程序的一个实例。内存中的每个进程都有一个私有的隔离内存空间。一个进程包含执行代码和完成代码执行所需的数据,如文件、DLL 和用户输入。所有这些数据和代码都位于为该进程分配的内存空间中。

许多进程可以同时存在于内存中。所有进程都在运行的 Windows 操作系统内存中列出一个名为_EPROCESS的结构。

_PROCESS结构的每个条目都包含一个进程及其元数据;包括进程名称、可执行路径、父进程、启动时间,某些情况下,还包括退出时间。如果一个知名进程的父进程不同,则元数据可以作为恶意活动存在的指示。例如,lsass.exe进程的父进程是Explorer.exe,而它的父进程应该是Wininit.exe。在这里我们可以假设该lsass.exe进程并不是合法的lsass.exe进程,而是在通过假冒合法进程的名称来欺骗用户。

_EPROCESS结构类似于双向链表,每个进程指向前一个和下一个进程,形成链状结构。它用于在不同进程之间循环处理时间。用于列出系统进程的常规 Windows 命令使用EPROCESS结构按顺序读取所有进程。因此,如果恶意进程能够修改前后两个进程的地址,使其指向对方,那么它将不会出现在进程列表中。这是一些恶意软件样本用来隐藏自己存在的方式。这个技术叫做直接内核对象操作DKOM)。

为了克服这种技术,并且由于_EPROCESS条目具有特定的结构,除了依赖被篡改的EPROCESS结构外,我们可以通过它们的签名对所有的_EPROCESS条目进行内存文件的切割。在这种情况下,切割工具不会按顺序遍历EPROCESS,也不会漏掉任何隐藏的进程。这也可以显示一些已被从_EPROCESS中移除的进程,尽管它们的条目仍然存在于内存中。

内存中的网络连接

通常,攻击者利用网络来远程控制机器,发送捕获的用户信息,或接收新的命令。检查在获取时系统中打开的网络连接,可以提供关于攻击的线索。

网络活动通常会在内存中留下痕迹。调查网络连接可能会发现由 rootkit 创建的隐藏连接。这些连接可以像隐藏进程一样,通过与正常的列出工具的方式进行隐藏。对内存中的网络连接结构进行切割可以揭示这些连接。

另一种隐藏连接的技术是将代码注入到一个合法进程中,以打开一个恶意连接,因此我们需要检查内存文件中的所有连接。

DLL 注入

DLL动态链接库 是在系统内运行的不同进程之间共享的资源和功能。一些进程和程序需要特殊的外部 DLL,这些 DLL 可以与程序一起包含,以便程序能够正常运行。由于 DLL 通常在进程内存中运行,它们通常成为恶意软件的目标,成为访问和控制其他进程内存的方式。DLL 通过不同的方式加载到进程中:

  • 动态链接:这是指可执行文件具有导入地址表IAT),该表描述了此可执行文件在加载时所需的资源及其地址,这些资源会被加载到进程的内存空间中。

  • 运行时动态链接:有些 DLL 可能没有在 IAT 中提到,但在程序执行期间通过调用 Windows 函数之一,如 LoadLibrary,由程序自身调用。

  • 注入:DLL 可以通过不同的技术注入到进程中。我们来看一下它们是什么。

远程 DLL 注入

恶意进程在合法进程中分配了具有读/写保护的内存空间,并将恶意 DLL 的路径写入合法进程的内存空间中。然后,恶意进程打开一个远程线程,强制在合法进程中打开 DLL,并随后移除 DLL 路径。通过这种方式,恶意进程通过 DLL 中的代码控制合法进程。

检测这种类型的注入并不容易。我们需要列出合法进程加载的所有 DLL,并检查所有 DLL 的名称、路径以及加载时间。

远程代码注入

我们遵循与远程 DLL 注入相同的步骤,但不同的是,恶意进程将代码直接注入到分配的内存空间中,而不是将 DLL 的路径写入硬盘。这里,分配的内存空间的保护将是读/写和执行。这种保护方案虽然不常见,但在用于检测这种注入的内存中却经常出现。

反射 DLL 注入

混合技术结合了前两种方法。恶意进程将 DLL 直接加载到合法进程的分配内存空间中。通过这种方式,DLL 永远不会写入硬盘,也不会经过正常的加载过程,因此在列出进程加载的 DLL 时,它不会被发现。

API 钩子

Hooking 通常由 Rootkit 使用,强制内核隐藏所有与恶意软件相关的活动,并拦截用户输入,以窃取用户的敏感信息。这通常是通过操控系统内核的 API 调用输出实现的。这在事件处理过程中的实时分析中可能会造成欺骗。在感染系统的证据获取过程中对内存镜像的深入分析,可以更容易地检测到这种行为。Hooking 通过将一个进程执行的正常流程重定向到内存中的另一个位置执行恶意代码,然后再返回以完成正常的进程代码来完成。

内存分析

在成功的内存获取过程之后,调查人员将获得一个包含完整内存的单一转储文件。幸运的是,内存的结构可以被许多分析程序解析,包括 Volatility,当前最著名的内存分析框架。

Volatility 框架

一个免费的内存取证框架可以从 www.volatilityfoundation.org 下载。这个框架支持多个版本的 Windows、Mac 和 Linux 操作系统。与 Volatility 2.4 一同发布了一本独立的书籍《内存取证艺术》。它详细解释了不同操作系统在内存中的遗留物,并说明了如何使用 Volatility 框架提取和分析这些遗留物。在本节中,我们将讨论 Volatility 框架的使用以及它如何检测内存转储中的恶意活动。

每个操作系统的内存结构都不同。Volatility 具有理解不同结构的能力。使用这个配置文件,Volatility 可以理解正在分析的镜像的正确数据结构,并应用正确的分析和解析工具。

Volatility 与插件配合工作,每个插件执行内存转储文件的特定任务。你可以添加或编写自己的插件,并将其添加到你的版本中。在接下来的章节中,我们将讨论一些 Volatility 插件。

Volatility 插件

Volatility 插件的完整列表可以在工具的文档中找到。在这里,我们将讨论一些通常用于发现所讨论的恶意软件技术的插件。

imagecopy

如果可用的内存文件是休眠文件或崩溃转储文件,Volatility 可以使用 imagecopy 插件将该文件转换为原始格式。

使用方法:vol.py -f <Hiber|DumpFile> --profile=<ImageProfile> imagecopy -O <OutputFile>

raw2dmp

在某些情况下,你需要将转储的原始内存文件转换为崩溃转储格式,以便与其他工具一起使用,例如 WinDBG,Windows 调试器。在这种情况下,raw2dmp 插件可以完成此任务。

使用方法:vol.py -f <ImageFile> --profile=<ImageProfile> raw2dmp -O <OutputFile>

imageprofile

在开始分析之前,如果你不知道正确的映像配置文件或者不知道如何在 volatility 命令中写出它,你可以运行 imageinfo 插件来检查映像文件,volatility 会建议正确的配置文件。Imageinfo 实际上使用了另一个插件kdbgscan,该插件扫描 NT 内核模块的一部分,查找特定的唯一字符串,以识别映像配置文件。一个字符串(如 Win7SP0X86)提供的配置文件,而 Volatility 默认使用的配置文件是 WinXPSP2x86。

用法:vol.py -f <ImageFile> imageinfo

pslist

该插件列出内存映像文件中的进程。它遍历_EPROCESS结构中的双向链表并打印列表中的所有进程。它显示进程名称、ID、偏移量、父进程 ID、线程和句柄的数量以及进程开始和结束的时间戳。该插件的输出包括每个进程在_EPROCESS结构中的逻辑偏移量。如果需要查看物理偏移量,可以使用-P选项。如果有从列表中取消链接的隐藏进程,该插件无法检测到它们。

用法:vol.py -f <ImageFile> --profile=<ImageProfile> pslist -P <OptionalPhysicalOffset>

以下是前面命令的输出:

pslist

图 2:运行 pslist 插件的示例

psscan

该插件通过扫描内存转储文件中的任何进程结构,列出内存转储中的进程,它不考虑EPROCESS结构。它可以获取内存中的所有进程,包括活动的、已终止的和隐藏的进程。

用法:vol.py -f <ImageFile> --profile=<ImageProfile> psscan

pstree

pstree 插件以树状视图列出进程,识别父进程和子进程。它使用与 pslist 插件相同的方法列出进程,因此无法检测隐藏或未链接的进程。输出按层次结构显示不同级别的父子关系。

用法:vol.py -f <ImageFile> --profile=<ImageProfile> pstree

psxview

插件 psxview 比较不同的进程查看技术的结果,例如,使用 pslist 和 psscan。这有助于从一个输出窗口中检测隐藏和未链接的进程。

用法:vol.py -f <ImageFile> --profile=<ImageProfile> psxview

以下是前面命令的输出:

psxview

图 3:运行 psscan 的示例

getsids

每个进程都有启动它的用户的权限。用户的安全标识符 SID 描述了该用户在系统中的权限。进程有一个为用户登录时创建的访问令牌副本。

使用 getsids 插件和进程 ID,提供启动该进程的用户的 SID。

SID 可以通过系统注册表轻松映射,路径如下:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

也可以从内存中打开的注册表中提取这些信息,稍后会讨论这一点。

使用方法:vol.py -f <ImageFile> --profile=<ImageProfile> getsids -p <optionalPID>

dlllist

这个插件列出了所有通过操作系统中的常规方式调用并添加到进程中的 DLL。它显示了内存中所有进程的所有 DLL。如果调查人员使用了-p选项并指定了特定的 PID,那么此时只会列出该特定进程的 DLL。

在处理隐藏或未链接的进程时,我们需要使用其在内存中结构的物理地址。因此,如果我们需要列出未链接或隐藏进程的 DLL,我们需要提供插件该进程在 psscan 插件输出中的物理偏移量,并使用--offset= option

使用方法:vol.py -f <ImageFile> --profile=<ImageProfile> dlllist -p <OptionalPID> --offset= <PhysicalOffsetOfTheProcessFromPsscan>

handles

一个进程可以有许多指向操作系统中多个对象的句柄。由于每个进程的句柄数量巨大,分析这些句柄可能会很困难。然而,这在证明关于事件的理论时可能起到重要作用。它可以为调查人员提供证据,证明某个进程请求了一个句柄来访问文件系统中的特定文件,或创建一个特定的突变体,作为特定恶意软件的标识。

使用 Volatility 中的 handles 插件,我们可以通过进程 ID 显示一个进程的所有插件,并选择在结果中显示哪种类型的句柄。

使用方法:vol.py -f <ImageFile> --profile=<ImageProfile> handles -p <optionalPID> -t <OptionalHandleType>

filescan

任何进程要创建或读取文件,首先需要在内存中打开该文件。Volatility 插件 filescan 解析内存中的文件对象标签,列出所有打开的文件或被 rootkit 隐藏的文件,这些文件是普通文件扫描工具无法检测到的。

该插件将显示检测到的文件对象的物理偏移量和文件名,并显示文件的权限。像 handles 插件一样,filescan 插件对于通过扫描内存中打开的特定文件来确认特定恶意软件的存在非常有用。我们可以将此插件的输出与 Linux 中的grep命令管道结合使用,以过滤特定的文件名。

使用方法:vol.py -f <ImageFile> --profile=<ImageProfile> filescan | grep "<FileName>"

procexedump

当一个可执行文件在系统中运行时,该可执行文件的一个版本会被复制到内存中。在分析过程中,我们可以从内存中转储该可执行文件,以便检查可执行代码,或者修复代码并在受控环境中运行,比如沙盒。Volatility 具有 procexedump 插件,可以从内存中转储任何进程的可执行文件。必须提供该进程的 ID。

另一个执行相同功能的插件是 procmemdump,它还会将空闲空间与可执行文件一起转储出来,使用方法相同。如果恶意软件操纵 PE 头部以欺骗转储工具,这将非常有帮助。

用法:vol.py -f <ImageFile> --profile=<ImageProfile> procexedump -p <PID> -D <OptionalOutputDir>

memdump

当进程开始执行时,它会使用一些内存空间来存储在执行过程中所需的代码和数据。该区域可能包含关于恶意软件的重要信息,如字符串、代码、文件路径、文件内容等。

Volatility 可以将整个区域转储到单个文件以供进一步分析。我们可以针对 Linux 原生命令-Strings 运行此文件,以提取文件中的所有字符串。

用法:vol.py -f <ImageFile> --profile=<ImageProfile> procexedump -p <PID> -D <OutputDir>

以下是前述命令的输出:

memdump

图 4:转储恶意进程以进行进一步分析

svcscan

Windows 服务通常以比其他程序更高的权限在后台运行,由系统用户运行。一些恶意软件样本以服务的形式运行,以便在系统重新启动后继续在后台工作,并确保恶意软件在系统中的存在。Rootkit 可以操纵 Windows 本地服务监控工具,以隐藏某些服务。Volatility 有一个名为 svcscan 的插件,除了通过正常手段列出服务外,还解析由 services.exe 进程拥有的内存空间,搜索服务的唯一标签。此方法将揭示内存中的任何隐藏进程。

输出显示每个服务的进程 ID、服务名称、服务显示名称、服务类型和当前状态。它还显示注册服务的二进制路径,这对于用户模式服务来说将是一个EXE,对于从内核模式运行的服务则是驱动程序名称。

用法:vol.py -f <ImageFile> --profile=<ImageProfile> svcscan

connections

如前所述,在分析内存样本时,网络跟踪非常重要。Volatility 具有插件以不同方法扫描内存中打开的 TCP 连接。第一个插件是 connections,显示的是 Windows 工具所做的 TCP 连接,将所有连接列在链表结构中。

此插件仅适用于 Windows XP 和 Windows 2003 服务器,仅支持 x68 或 x64。

用法:vol.py -f <ImageFile> --profile=<ImageProfile> connections -P <OptionalPhysicalOffset>

connscan

与 psscan 插件类似,connscan 不仅搜索连接对象结构,而不是仅列出链表中的所有连接。它还将列出已终止的连接。

一些连接可能已被完全或部分覆盖。因此,在分析过程中,我们需要注意并将结果与正常连接插件进行比较。

用法:vol.py -f <ImageFile> --profile=<ImageProfile> connscan

sockets

volatility 还有一个网络插件,叫做 sockets,它会列出系统中所有已打开的套接字,不论协议如何。它以 Windows API 会使用的方式列出连接,通过遍历套接字链表来获取信息。这个插件无法找到已关闭的套接字或旧套接字的残留。

该插件仅适用于 Windows XP 和 Windows 2003 服务器,支持 x86 或 x64。

使用方法: vol.py -f <ImageFile> --profile=<ImageProfile> sockets

sockscan

类似于 connscan 插件,sockscan 会在内存中搜索套接字结构,从而使恢复先前打开过的残留套接字成为可能。

使用方法: vol.py -f <ImageFile> --profile=<ImageProfile> sockscan

Netscan

对于从 Windows Vista 及更高版本内存中提取的数据,无论是 x86 还是 x64 系统,netscan 插件会检查网络数据流。这个插件会查找 TCP 端点、TCP 监听器、UDP 端点和 UDP 监听器。它能够区分 IPv4 和 IPv6,显示本地和远程 IP 地址,本地和远程端口,以及套接字绑定或连接建立的时间。

由于 netscan 插件会在内存中解析网络数据结构的标记,并将所有结果视作同一输出,因此可能会遗漏某些字段。

使用方法: vol.py -f <ImageFile> --profile=<ImageProfile> netscan

hivelist 和 printkey

注册表的配置单元已在内存中打开。为了在内存中定位配置单元文件,我们可以使用 hivelist volatility 插件,它会列出内存中配置单元文件的地址,包括虚拟地址和物理地址,以及硬盘上配置单元文件的完整路径。

我们可以使用 printkey 插件来显示某个特定注册表项下的子键、值和数据。该插件会解析所有配置单元,以定位所需的键,且该键可能位于多个配置单元中。

如果你想将搜索限制在某个配置单元内,可以使用 -o 选项向插件提供虚拟地址。

使用方法: vol.py -f <ImageFile> --profile=<ImageProfile> hivelist

使用方法: vol.py -f <ImageFile> --profile=<ImageProfile> printkey -o <OptionalVirtualOffsetOfTheHiveFile> -K "PathWithinTheregisty"

malfind

malfind volatility 插件可以发现隐藏的注入代码或 DLL,基于特定内存页所授予的权限。它能够检测以可疑方式注入的 DLL 或代码,例如,使用 CreateRemoteThreadLoadLibrary 函数。

malfind 插件的输出会将检测到区域的代码反汇编。该输出可能包含恶意代码或以 MZ 开头的可执行文件。

识别的内存段副本可以使用 -D-dump-dir=<Dir> 提取进行进一步分析,提取的内存段将存储在 <Dir> 下。

使用方法: vol.py -f <ImageFile> --profile=<ImageProfile> malfind -p <PID> -D <OptionalOutputDir>

以下是前面命令的输出:

malfind

图 5: malfind 示例

在前面的截图中,内存区域的基地址是0x00210000,在wininit.exe进程(ID 392)中,具有PAGE_EXECUTE_READWRITE权限。

vaddump

VAD虚拟地址描述符)用于 Windows 内存中,描述由内存中运行的进程分配的内存位置。每当进程分配新的内存时,就会在所谓的 VAD 树中创建一个新的 VAD 条目。每个 VAD 条目都有一个开始和结束,它覆盖进程内存空间中的特定区域。

volatility 框架有一个插件 vaddump,它可以单独转储每个 VAD 区域,如果我们只对一个 VAD 条目感兴趣,这通常很有帮助。如果发生了代码或 DLL 注入,我们可以提取包含恶意代码的 VAD。

每个 VAD 都有元数据,包括开始和结束。vadinfo volatility 插件可以提供有关单个进程中 VAD 的更多信息。

用法:vol.py -f <ImageFile> --profile=<ImageProfile> vaddump -p <PID> -b <VADStartAddressInHex> -D <OutputDir>

apihooks

apihooks volatility 插件检测钩子。它检测调用(CALL)和跳转(JMP)到内存中的其他位置。被导入或导出的函数以以下指令开始:

  • CALL addr

  • JMP addr

  • PUSH addr; RET

  • MOV reg, addr; CALL reg

  • MOV reg, addr; JMP reg,

如果插件检测到一个地址超出了进程的内存空间,它会报告一个钩子。

用法:vol.py -f <ImageFile> --profile=<ImageProfile> apihooks

mftparser

maftparser volatility 插件使用 FILE 或 BAAD 条目签名扫描内存文件中的主文件表(MFT)条目。它可以列出来自$FILE_NAME$STANDARD_INFORMATION$DATA NTFS属性的信息。

此插件的输出可以通过--output=text选项以文本格式呈现。也可以通过--output=body选项将其格式化为兼容 The Sleuth Kit 3 的主体格式。

如果是一个主体文件,我们可以使用 mactime 工具创建一个时间轴,列出内存中所有 MFT 活动,这将有助于按时间跟踪活动。

用法:vol.py -f <ImageFile> --profile=<ImageProfile> mftparser --output=<body|text> --output-file=<OutputFile>

总结

在本章中,我们讨论了内存取证在发现恶意活动中的重要性,简要解释了内存结构,并介绍了 volatility 作为最著名和有效的内存取证工具之一。

在下一章中,我们将讨论网络取证工具和技术,以便从任何网络转储中提取证据数据。

第十二章:网络取证

网络取证是计算机取证中的一个独立大领域,也包括多个领域。在网络取证中,我们应当理解取证方法,其中主要证据是研究网络设备、网络应用(如代理、防火墙、服务器等)的数字网络流量日志。

与常规的主机网络取证结合使用时,它可以更有效地解决事件。来自网络层的信息提供了发生事件的完整图景。此外,在某些情况下,分析师无法访问这些被攻陷的机器,因为攻击者使用加密、删除文件或使用其他技术来隐藏信息。

在复杂的定向攻击中,初始的网络入侵只是攻击的第一阶段。接下来的步骤包括网络推广、攻击发展、信息收集和数据外泄,这些都需要通过网络进行。

网络流量数据与易变性有关,因此,为了收集网络流量,有必要进行一系列准备措施来收集数据。

网络数据收集

从网络流量中可以提取的所有数据可以分为几个层级:

  • 完整数据包捕获 100%

  • 数据包字符串数据 4%

  • 会话 0.1%

  • 统计数据

  • 日志

很明显,从取证分析师的角度来看,最优先的方法是收集完整的流量,因为在这种情况下,我们可以获得最完整的数据集。

然而,尽管这种方法有明显的优势,但也存在一些缺点。大量的数据存储和后续分析需要大量的时间和资源。

与此同时,其他形式的数据,如 NetFlow,在许多情况下是一个合理的替代方案,它需要更少的资源来收集、存储和处理。

与其他形式的完整流量相比,这些数据总共只占几个百分点。它需要更少的存储空间,因此可以存储更长时间。

为了更清楚地说明,考虑以下例子。假设一个组织的日常网络流量量在工作日为 1 TB/天,周末为 100 GB,而每周的存储数据量需要 5.2 TB。

其他格式的数据每周需要 5200 * 0.041 = 213.2 MB。因此,数据存储所需的总量为每周 5.4 TB,或平均每天大约 770 MB。

如果我们谈到确保至少存储三个月的数据,它将需要 69 TB 的磁盘空间。除了处理如此大量的数据外,还需要大量的时间和电力设备。

然而,这个问题可以通过结合收集和分析网络数据的方法来解决。具体来说,可以只存储一周的完整流量,而将其余的数据存储一年。

因此,存储网络数据一年 5200 将需要0.041 + 5200 * / 7 * 365 = 16.32 TB

如前所述,Full Packet Capture 数据收集和 NetFlow 前提条件要求在事件发生之前收集数据。不幸的是,在事件发生时,往往会发现组织没有 Full Packet Capture,也没有 NetFlow 数据。在这种情况下,我们唯一的希望是服务器和网络设备上的日志记录过程已经启用。

接下来,考虑与不同数据类型的工作,因为法医分析师通常处理的是在事件发生时可用的数据。

探索日志

企业网络连接到互联网最普遍的方式是使用代理服务器。此外,除 HTTP 和 HTTPS 外,所有协议都被防火墙阻止。因此,我们考虑这个特定方案。代理服务器是客户端和服务器之间的中介。代理可以用于几乎所有网络协议,但最常用于 Web 流量的 HTTP 和 HTTPS。

在这种情况下,法医分析师通常会有一个数据代理服务器。代理日志在分析访问企业网络机器的 URL 时非常宝贵。分析代理服务器的日志可以快速识别哪些工作站暴露于恶意资源。比起分析每台客户端机器,这个过程要快得多。

通常,代理日志不仅包括客户端的时间和 IP 地址以及 URL,还包括 HTTP 响应状态和用户名:

  • Unix 时间戳(sec.ms

  • 响应时间(ms

  • 请求者 IP/名称

  • 缓存状态和 HTTP 状态码

  • 回复大小(字节)

  • 请求方法(GET、POST 等)

  • 请求的 URL

  • 用户名(如果可用)

  • Squid 层次状态和服务器 IP/对等名称

  • MIME 类型

此外,缓存代理服务器使你能够存储所有请求对象的额外副本。在某些情况下,这是获取所需文件并执行分析的唯一方法。

目前有许多不同的代理服务器,既有商业的也有免费的。然而,可能目前最受欢迎的是 Squid。在免费的服务器中,NGINX 也可以被提及。

也有许多商业解决方案,既有硬件形式,也有软件形式。在商业代理中,最受欢迎的之一是 BlueCoat 代理。它的优点之一是能够代理 SSL 流量。

其他在企业环境中流行的解决方案包括 ForeFront Threat Management Gateway(前身为 Microsoft ISA Server)和 Barracuda Network 的解决方案。

它们都有自己日志文件的格式,我们不会考虑所有这些方案。我们将专注于详细检查 Squid。

如前所述,Squid 是围绕着一个庞大的用户社区形成的最流行且免费的解决方案之一。这个决策可以在小型网络和大型企业中找到。Squid 具有巨大的潜力,并且相对容易安装。

一个经验丰富的管理员可以将 Squid 配置为一个缓存服务器,针对不同文件类型设定不同的过滤规则,并提供大量额外选项。所有这些设置都在 Squid 配置文件中,并且必须与日志文件一起复制进行分析。默认的配置文件位于 /etc/squid/squid.conf。该文件有详细的文档,解释了配置文件中的许多设置,包括日志文件和缓存的存放位置。

日志文件包含了通过 HTTP 协议发出的所有客户端请求的信息。缓存目录则包含了来自 web 服务器的响应。在调查过程中,分析师可以获取所有文件并对其进行分析。

默认情况下,Squid 会提供关于每个请求的大量信息,这些请求来自客户。因此,在调查过程中,分析师可以获取所有通过代理的 HTTP 流量对象。攻击者通常利用 HTTP 协议传输恶意软件,并作为与 C&C 服务器进行通信的手段,因此代理是收集此类活动信息的一个好地方。

通常,代理服务器 Squid 的日志文件(access.log)中的条目如下:

|12345678910.134|534|129.134.21.51|TCP MISS/200|1345|GET|http://www.123.cc|-|DIRECT/134.41.65.13|text/htm|

值得注意的是,查询字符串会被记录并且不会默认启用。为了解决这种情况,必须在配置文件中做相应的更改,即这一行:

strip_query_terms off

除此之外,记录以下信息也是非常有用的:

User_Agent
 Referer

这些选项在调查中尤其有用。此外,从 Squid 2.6 版本开始,你现在可以通过配置文件中的 logformat 选项来指定你自己的日志格式。

因此,管理员可以指定备用日志文件和格式字符串。

让我们看以下示例:

logformat customlogformat %tl %a> "%rm %ru HTTP/%rv"
    %>Hs %<st "%{Referer}>h""%{User-Agent}>h" %Ss:%Sh
access_log /var/log/squid/access.log customlogformat

由于 Squid 的日志文件仅仅是一个文本文件,因此可以很容易地通过脚本语言和命令行工具来进行自动化处理。此外,Squid 中还有大量不同的日志文件分析器。以下是其中的一些:

每种方式都有其优缺点,因此需要选择最合适的:

Full Packet Capture

考虑以下情况,当分析师有网络流量的完整转储时。在某些情况下,记录网络流量是事件发生后调查和检测的一部分。即便是在这种情况下,网络流量分析也能大大提高调查的有效性。

捕获网络流量时,最常用的格式是 PCAP 格式。大多数数据收集、分析和检测工具都支持这种格式。

大多数流行的工具都建立在libpcap库之上,包括tcpdumpwireshark,它们具有类似的功能。

使用tcpdump

tcpdump工具用于收集和分析网络数据包。它非常适合分析单个包及其一致性。在自动处理的情况下,tcpdump具有多个优点。

要读取之前记录的pcap文件,你可以使用以下命令:

tcpdump -nnr dump.pcap

默认情况下,tcpdump显示每个数据包的信息,输出格式取决于协议:

TCP: 
[Timestamp] [Layer 3 Protocol] [Source IP].
    [Source Port]> [Destination IP]. [Destination Port]:
    [TCP Flags], [TCP Sequence Number],
    [TCP Acknowledgement Number], [TCP Windows Size] ,
    [Data Length] 
UDP: 
[Timestamp] [Layer 3 Protocol] [Source IP].
    [Source Port]> [Destination IP]. [Destination Port]:
    [Layer 4 Protocol], [Data Length]

除了使输出更加详细外,还可以使用-v -vvv,如以下示例所示:

tcpdump -nnvvvr dump.pcap

使用-x选项,你可以让tcpdumpheh格式输出数据包,或者使用-A-X输出为 ASCII 格式,并且tcpdump允许你同时输出两种格式。

在许多情况下,尤其是处理大型pcap文件时,使用过滤器丢弃不必要数据的能力特别有用。tcpdump工具支持 BPF 过滤器。例如,要只过滤 TCP 数据包到端口80,你可以使用以下命令:

tcpdump -nnr dump.pcap tcp dst port 80

要将过滤后的数据写入文件,必须使用-w选项,如下所示:

tcpdump - nnr dump.pcap 'tcp dst port 80' -w 80_tcp_dump.pcap

有时,需要使用一组过滤器,在这种情况下,将过滤器集写入文件更为方便,从而使用带有-F选项的过滤器文件:

tcpdump -nnr dump.pcap -F filter.bpf

要获取有关tcpdump各种键的更多信息,使用man tcpdump命令。

使用tshark

另一个用于分析pcap文件的有用工具是tshark

tshark工具是 WireShark 的控制台版本。tshark几乎具有与tcpdump相同的功能,但它增加了 WireShark 协议分析器的可能性,并使用语法进行过滤。

要读取之前记录的pcap文件,也可以使用-r选项。输出格式取决于协议。因此,tshark会显示应用层信息。

要获取更多信息,使用-V选项。要以十六进制和 ASCII 格式显示数据包,使用-x选项。

Tshark 允许使用类似于 tcpdump 的 BPF 语法来捕获过滤器,并且在使用内置协议分析器时,可以使用显示过滤器。

对于过滤器的使用,应结合-f选项和-R录制及读取选项一起使用。因此,要读取 DNS 流量的pcap文件,可以使用以下命令:

tshark -r dump.pcap -R 'udp && dst.port == 53'

另一个有用的功能是能够从分析的流量中生成tshark统计信息。为此,使用-z选项。可以通过tshark的 man 页面查看完整的统计信息列表。

例如,要查看 http 流量的统计信息,可以使用以下命令:

tshark -r dump.pcap -z http, tree

  • IOphs:这会显示pcap文件协议的结果。

  • HTTPtree:这会显示 HTTP 请求和响应的统计信息。

  • SMBsrt:这会显示与 SMB 命令相关的统计数据。

然而,即便如此,尽管在某些情况下命令行工具非常适合在基础层面分析数据包,但在某些任务中,最好使用如 WireShark 这样的 GUI 工具。

使用 WireShark

WireShark 被网络管理员用来解决与网络运行相关的各种问题,但它在网络流量分析和事件调查中也发挥着不可替代的作用。

WireShark 界面可以分为三个主要部分。

上部显示的是数据包列表。每个数据包的信息都可以查看。默认情况下,显示数据包号、时间戳、源地址、目标地址、协议、数据包长度以及不同信息的特定协议。

中间部分显示所选数据包的详细信息,该数据包位于上部分。

底部窗口以十六进制和 ASCII 格式显示单个数据包的字节,如 tcpdump 的 -X 选项。

所有窗口中的数据是相互关联的;因此,当我们在一个窗口中选择数据时,相关数据会在其他窗口中高亮显示。

Wireshark 提供了大量分析网络数据包的功能。因此,要在一章中描述这些功能几乎是不可能的。有几本优秀的书籍详细阐述了这些功能,分别是 实用数据包分析Wireshark 网络分析

在某些情况下,时间戳是调查中唯一的关键元素。例如,有时分析员只知道事件的大致时间,并且他们必须在特定的时间段内筛选流量。默认情况下,WireShark 会显示数据包的时间戳,该时间戳是从 pcap 文件记录流量开始的秒数。可以通过以下菜单更改显示格式:查看 | 时间显示格式 | 日期和时间

为了避免每次都执行此操作,你可以在 Wireshark 中更改这些设置,操作如下:编辑 | 首选项

在某些情况下,了解分析的流量的总体情况非常重要。

你可以使用 统计 菜单项。这将显示关于收集的流量的丰富信息和统计数据。

例如,协议层级提供了流量报告中所有已识别的协议列表及其统计信息。通常,这有助于识别流量中的异常情况,例如通过 DNS 或 ICMP 隧道的情况。

除此之外,WireShark 允许你根据不同主机之间的流量进行分组。因此,可以确定不同机器之间传输的数据量。可以通过统计 | 端点查看机器的统计信息,并通过统计 | 会话查看各种会话。

在某些情况下,可能需要分析两个特定主机之间交换的数据。你可以使用 Following TCPStream 选项。WireShark 允许你对 UDP、HTTP 和 SSL 执行此类操作。

另一个有用的 WireShark 选项是从网络流量中提取响应。WireShark 允许你从 HTTP、SMB 和 DICOM 流中提取对象。为此,请导航至 文件 | 导出 | 对象 | HTTP

然后,从显示的文件列表中选择一个文件,使用 另存为 保存文件。需要注意的是,在提取文件时,如果网络流量中的数据包中至少有一个 otsutviya 包与传输文件有关,则提取文件将失败。

请注意,你可以使用其他一些工具(如 NetworkMiner 或 Bro)从流量中提取文件。我们将在本章后面详细讨论 Bro。

默认设置会在 WireShark 中显示关于数据包的特定列列表,如下所示:

  • 批号

  • 时间戳

  • 源地址

  • 接收方位置

  • 协议

  • 数据包的长度

带有更多信息的字段

在某些情况下,这可能需要额外的信息,例如接收方的端口号和源或 HTTP 请求的方法。

考虑以下步骤,这些步骤必须完成,以便添加一个新列,显示 HTTP 使用的方法数据:

  1. 从 WireShark pcap 流量测试开始。

  2. 查找包含 HTTP 请求方法的 HTTP 数据包,例如 GET 或 POST。这可以手动完成,也可以通过输入http.request过滤器来完成。

  3. 在包含数据包的窗口中选择 HTTP 数据包,然后展开 HTTP 头部,找到包含 Method Request 字段的网站。

  4. 选择字段,然后右键单击它,选择 “应用为列”

执行这些操作后,应该会出现一个新列。之后,你可以更改该列的名称和其他属性。

通常,WireShark 在分析网络流量中发挥着无价的作用,尤其是在处理大量数据和丰富过滤需求时。要使用 Wireshark BPF 过滤器过滤数据。BPF 过滤器是过滤网络工具(包括 Wireshark、tcpdump、tshark 等)最常见的方法。

BPF 过滤器可用于流量数据收集和分析数据时。考虑 BPF 过滤器的结构,以及由 BPF 创建的一个文件夹,这个文件夹被称为表达式语法。该表达式包括一个或多个原语,这些原语可以通过运算符组合。原语本身由限定符和以下值组成。

有三种类型的限定符,如下所示:

  • 类型:hostnetport

  • 方向:srcdst

  • 协议:etherfddiiparprarpdecnetlatscamoprcmopdltcpudp

这是一个包含多个原语的示例:

  • dst host host

  • src host host

  • host host

  • ether src ehost

  • gateway host

所有原始命令的完整列表可以在 tcpdump 工具的主页中找到。

原始命令被分组,并可以使用以下运算符进行组合:

  • 否定(!not

  • 拼接(&&and

  • 交替(||or

有关 BPF 语法的更多信息,请参见主页。

了解 Bro

另一个用于分析网络流量的工具是 Bro。Bro 是一个非常强大的工具,通常被视为 IDS,但 Bro 的功能远不止于此。要在单一章节中讨论所有功能几乎是不可能的,因此我们将只讨论其中的一部分。Bro 的众多优势之一是可以使用现成的协议解析器。

例如,以下是其中的一些:

  • DHCP

  • DNS

  • FTP

  • HTTP

  • POP3

  • SMTP

  • SSH

这些协议的列表在不断扩展。

默认情况下,Bro 会将协议分析器应用于流量,并将结果记录在对应不同协议的日志文件中。

Bro 还允许你使用一种名为 Bro 的语言编写自己的处理器。每个事件发生时,事件的处理器可能会导致该事件的发生。

例如,考虑以下简单的事件处理器发现文件:

event file_new (f: fa_file) { 
local fname = fmt ("% s", f $ id) 
Files :: add_analyzer (f, Files :: ANALYZER_EXTRACT, [$ extract_filename = fname]) 
} 

接下来,移除所有流量中的文件,将此代码保存在文件中,并运行 getfiles.bro 命令:

bro -C -r traffic.pcap getfiles.bro

以下是前述命令的输出:

了解 Bro

运行此命令后,将创建目录文件,如下所示:

  • conn.log

  • files.log

  • http.log

  • ssl.log

  • ftp.log

  • dns.log

  • weird.log

这些文件包含关于特定协议的网络流量信息。例如,http.log 包含以下字段。

除了 Bro 在启动目录中创建的日志文件外,extract_files 列出了从流量中提取的文件。对于该目录中的每个文件,你可以在 files.log 文件中找到相应的条目。此条目包含一些有用的属性。

要分析这些日志文件的内容,可以使用分发工具 Bro 中的 bro-cut。该工具的输入通过管道传递日志文件的内容,并指定要过滤的字段列表。

例如,要列出从流量中提取的文件类型,可以使用以下命令:

cat files.log | bro-cut mime_type | sort | uniq

以下是前述命令的输出:

了解 Bro

假设我们正在调查一个病毒感染事件,那么最感兴趣的文件类型如下:

application / jar
application / x-dosexec

这些是 MS Windows 文件和 Java 虚拟机上的可执行文件。

然后,我们进一步了解以下感兴趣的文件:

cat files.log | bro-cut -u ts, rx_hosts, tx_hosts,
    source, mime_type, total_bytes, fuid | grep -iE "{jar |
    x-dosexec}"

以下是前述命令的输出:

了解 Bro

这些结果使团队能够设置时间,下载资源文件,并下载传输这些文件的协议。然后你可以在 extract_files 目录中找到这些文件并进行分析。

有关资源文件的更多信息,请访问 IP 地址85.17.137.151 92,123,155,154,并可以使用来自dns.log文件的数据。

dns.log文件是 Bro 的结果,它描述了事件、许可,并将域名转换为 IP 地址,反之亦然。请求 DNS 服务器由查询属性表示。服务器的响应属性是answerts是时间戳请求:

cat dns.log | bro-cut -u ts, query, answer | grep -iE
    "85.17.137.151 | 92.123.155.154 "

以下是前述命令的输出:

认识 Bro

结果是,IP 地址85.17.137.151解析为域名finansial.govw282d1wb.athleticsdrycleaner.pw

IP 地址92.123.155.154属于microsoft.com,这大大减少了下载文件是恶意的可能性。

根据http.log文件中分配的域名,可以获得以下信息:

cat http.log | bro-cut -u ts, id.orig_h, method, uri,
    response_body_len, resp_fuid, host | grep -iE
    "finansial.gov $"

以下是前述命令的输出:

认识 Bro

这表明用户从资源finansial.gov utisl.jar下载了一个 HTTP 协议的文件(之前提到的FUJlhk2BEJTsb8tozk.jar.jar文件)。然后,从同一资源中,下载了'2' (Fy9phB2NNXKNHKuyHb.exe)文件:

认识 Bro

此外,您必须关注可疑的 HTTP-POST gate.php请求。

resp_fuids属性标识 Web 服务器的响应,并指示files.log文件中的相关条目。因此,FI ... Ug标识符可以获取finansial.gov服务器在 GET 请求中的响应:

认识 Bro

从回复中可以清楚地看出,utisl.jar是一个 Java applet。客户端在合法网站www.efinancialnews.com的框架中打开了一个页面。

这个小示例清晰地展示了如何仅通过文件流量使用 Bro 进行调查。

然而,示例仅展示了 Bro 所有可能功能的一小部分。要了解 Bro 的其他功能,您可以访问www.bro.org/,在那里您可以找到许多额外的资料。

总结

在本章中,我们讨论了一些关于网络取证的话题。我们了解了可以从网络中收集哪些数据,以及如何分析代理服务器的日志。此外,我们还学习了如何收集pcap文件,并如何使用 WireShark 和 Bro 进行分析。

在接下来的章节中,您将学习如何构建取证环境。我们将描述两种方法;其中一种是虚拟化,另一种则使用分布式系统。我们将以 GRR 作为分布式系统的示例进行说明。

附录 appA. 建立取证分析环境

在前几章中,我们应该已经意识到,事件响应对于数字取证过程的重要性,以及准确处理两者的必要性。在本书的附录中,我们将讨论如何创建一个适合进行数字取证分析的工作环境,即企业规模的数字取证实验室。

在我们开始建立实验室之前,先回答以下问题:

  • 实验室的目的是什么,我们将分析哪种类型的设备(电脑、手机等)?这将帮助我们确定实验室所需的合适工具。

  • 我们预计会接收到多少案件,实验室和工作范围的预期扩展是多少?

  • 我们是否已经有经过培训的人员?如果没有,我们将如何选择他们,他们需要哪些培训?他们需要熟悉哪些操作系统,既用于工作,也用于分析?

回答这些问题将使决策更加容易。此外,还有一些可以遵循的指南和标准,如 ISO/IEC 17025:2005,以帮助创建认证的数字取证实验室。

需要考虑的因素

除了必要的工具,包括硬件和软件(稍后将讨论),在建设实验室时,还需要考虑一些其他因素。调查人员通常会在实验室工作区待很长时间。因此,它应该足够舒适,并且调查人员必须能够完全控制环境。在接下来的部分中,我们将重点讨论在规划阶段需要考虑的一些因素。

大小

在规划实验室时,始终是个好主意为未来的扩展做准备。如果你预期会有扩展,例如,当前团队成员的数量将在两年内增加 50%,你将需要在规划阶段考虑一个更大的实验室,以便你可以让所有成员在同一个地方工作,而不是分布在两个不同的地点。

适当的实验室大小可能受到以下因素的影响:

  • 同时工作的调查人员数量,以及不同工作班次之间是否有重叠。

  • 除了硬件工具的大小可能占据实验室大量空间外,证据的大小也可能足够大,以至于在没有计划设置单独的锁定证据存储室的情况下,还会占用实验室额外空间。

  • 在采集和分析阶段,实验室可能需要进行一些拆解工作;因此,为此类任务设置一个独立的工作台,将有利于实验室的组织。

在申请实验室大小时,必须考虑所有这些因素。

环境控制

实验室中许多运行的设备将产生大量热量。控制室内温度并保持在可接受的水平将防止设备因过热而故障,并使实验室对团队成员更加舒适。

除了数字证据采集过程(因为某些证据的影像可能需要几个小时),分析过程本身在某些任务中,如索引处理,可能需要更长的时间。在实验室规划过程中,考虑一个备用电源和一个可靠的主电源是至关重要的,以确保这些过程能够不中断地持续进行,从而节省时间并保持操作顺畅。

在一些案件数量较多的环境中,若没有自动化管理软件,将很难跟进这些案件及其进展情况。为了控制工作流程并防止未授权访问,实验室必须安装一个案件管理系统,该系统可以对案件进行行政控制,并为调查人员分配工作权限,以便处理特定案件。该管理系统能够衡量工作进度,并生成有关工作流程的统计数据,从而发现潜在的弱点,以便未来改进。

安全

实验室中的案件通常与犯罪行为相关。因此,确保工作场所免受任何物理或虚拟的未授权访问非常重要,以防止任何可能对证据或分析结果进行篡改。实验室的物理位置需要谨慎选择。以下是维持物理安全所需的一些参数:

  • 建筑物的底层更容易被外人访问。将实验室设在较高楼层、没有窗户的房间,有助于控制访问,并防止窃听、录音或闯入实验室。

  • 房间的墙壁必须加固。如果有非常先进的房间访问控制系统,但墙壁却是石膏板墙,那可不是一个好主意。

  • 基本的安全解决方案,如保留带时间戳的访问日志、摄像头和安保人员,必须提供,尤其是当实验室尚未设置在安全设施内时。

大多数数字取证阶段不需要互联网连接。断开实验室与互联网的连接有利于保密,并防止犯罪分子进行感染或远程控制,从而改变案件结果或破坏证据。然而,某些任务,如软件更新,仍然需要互联网连接。实验室应提供两个独立的网络,一个用于连接分析工作站,另一个用于连接其他计算机到互联网以进行日常研究和更新,并配备安全解决方案,帮助防止互联网未授权访问实验室网络。

软件

本书中的章节选择了所有非常有效的工具,都是野外可用的免费或开源工具。然而,也有许多可以购买的商业工具,可以添加到数字取证实验室中,以验证结果或并行执行某些任务。

在使用任何工具之前,必须先进行验证过程。我们将通过将该工具应用于已分析的证据,验证其功能是否正常,确保它能产生相同的结果。经过此测试后,我们可以在未来依赖其结果。此类测试的一个例子是获取过程,我们会计算新工具生成的图像的哈希值,并将其与之前从已验证工具获得的哈希值进行比较。如果哈希值不同,意味着该工具未能正确生成法医图像,我们必须停止使用该工具。

此外,通过不同工具验证结果是确保报告结果准确性的一个好方法,特别是对于那些需要多个分析步骤相互依赖的敏感案例。

数字取证实验室所需的工具通常会进行分类,但不限于以下几类:

  • 事件响应,包括不同平台的实时分析和证据获取

  • 数据恢复

  • 媒体恢复

  • 密码恢复

  • 电子邮件调查

  • 内存分析

  • 网络取证

  • 浏览器调查

  • 移动取证

  • 网络调查

请注意,一些工具不支持所有已知的文件系统,因此你需要拥有不同的工具来理解和解析不同的文件系统(FATNTFSEXTUFSHFS)。

硬件

由于数字取证中需要获取和处理大量数据,分析过程需要非常强大的工作站。有些人喜欢使用服务器,因为它们能提供足够的资源,包括内存、处理器和存储。

今天,构建一台强大机器的预算就是限制。你建造的机器越强大,分析过程中节省的时间就越多。而且,机器的可靠性也非常重要。如果在长时间工作后机器出现故障,导致你丢失所有工作,那将非常令人沮丧。因此,通常法医工作站会配备更可靠的 Xeon 处理器,以适应此类任务。

虚拟化

在数字取证中,拥有多种操作系统是必须的,如不同版本的 Windows 和不同的 Linux 及 UNIX 发行版。与其为每个操作系统配置单独的机器,不如通过虚拟化在主操作系统上构建多个操作系统。在本节中,我们将简要讨论虚拟化的概念:

虚拟化

图 1:虚拟化模块

在虚拟化中,实际上被虚拟化的是计算机硬件。通常在同一硬件上,我们无法同时运行多个操作系统。然而,通过在正在运行的操作系统上添加一层额外的软件——虚拟化解决方案,就会出现一个虚拟硬件,准备安装新的操作系统。新的硬件当然是主计算机硬件的一部分,但虚拟地分配给新的操作系统。每一个新的虚拟机都会消耗原始机器的一部分资源。

主操作系统称为 HOST 机,任何创建的操作系统称为 GUEST 虚拟机。宿主机与所有虚拟机共享计算机资源,甚至包括网络连接。正如在图 1中所示,虚拟网络连接可以将所有机器与宿主机以及彼此连接。此外,连接也可以仅在两个虚拟机之间共享,而没有宿主机,或者宿主操作系统与一个虚拟机连接,而不与其他虚拟机连接。通过这种方式,可以发生多种可能性。宿主机与虚拟机之间共享文件夹和文件也是适用的。

注意

使用虚拟化技术备份虚拟机非常简单。要备份系统,我们需要拍摄一个称为快照的操作。快照是特定时间点机器状态的副本,包括硬盘变化和内存内容。如果用户决定恢复之前拍摄的快照,而没有拍摄新的快照,所有自上次快照以来发生的变化将会丢失。

这就是虚拟化提供受控环境的原因,因为在分析过程中需要进行测试或运行恶意代码,并监控其行为,这就是所谓的动态或行为恶意软件分析。调查人员需要在执行恶意软件之前拍摄一个快照,执行并测试恶意软件,然后从快照恢复系统。

虚拟化对取证的好处

在虚拟化中,一切都被视作文件,由宿主操作系统解析,包括硬盘和内存。这使得获取过程变得更加容易。如果调查的案例涉及虚拟系统,例如获取内存,只需复制内存文件即可。

如果机器有之前的快照,这将为调查人员提供机器从不同时间点的不同状态,调查人员可以通过跟踪机器的行为,找出机器何时被感染或遭到破坏。

每个虚拟机都有不同的文件,每个文件代表前面提到的一个资源。我们以 VMware 软件为例,讨论该程序为每个虚拟机创建的文件:

  • 配置文件:这是一个 VMX 文件,存储了机器本身的配置,包括用户为该虚拟机选择的硬件和网络设置。

  • 内存文件:这是一个 VMEM 文件,包含了来宾虚拟机的运行内存。

  • 硬盘文件:这是一个 VMDK 文件,表示来宾虚拟机的虚拟硬盘。根据用户在创建虚拟机时的选择,它可以由单个或多个文件组成。在某些情况下,一个来宾虚拟机可以有多个硬盘,每个硬盘会有不同的文件。

  • 快照文件:这是一个 VMSN 文件。当用户对来宾虚拟机进行快照时,机器的状态将被存储在此文件中。

  • 暂停状态文件:这是一个 VMSS 文件,用户可以在不关闭机器的情况下暂停机器。在这种情况下,机器的内存存储在此单一文件中。当用户重新启动机器时,该文件用于重新加载机器的内存。

注意

还有其他不同类型的文件。所有文件类型可以在 VMware 网站上找到,www.vmware.com/support/ws55/doc/ws_learning_files_in_a_vm.html

分布式取证系统

在企业环境中,或者当需要快速和远程分析时,分布式取证系统可以提供帮助。在事件响应过程中,调查员会关注收集一些数据,例如运行中的进程、注册表项和用户账户,以识别可能的感染或测试一些 IOC。然而,如果此时无法物理访问怀疑的环境,该怎么办?

许多公司现在正在投资开发实时监控和分析系统,能够通过在网络中的每台机器上安装客户端,并将所有这些客户端连接到服务器来进行部署。授权的调查员可以通过服务器访问这些机器,利用已安装的客户端获取一些数据,或构建一些统计信息,并进行实时和远程取证分析。

GRR

在这一部分,我们将讨论 GRR 快速响应框架,github.com/google/grr。GRR 是一个专注于远程实时取证的事件响应框架。它通过一些著名的数字取证框架(如 TSK 和 Rekall)提供远程分析。它由一个服务器组成,能够同时控制大量客户端。

我们将进行一个演示,使用虚拟化环境讨论 GRR,虚拟化环境中有两台虚拟机。这些虚拟机包括一台 IP 为192.168.153.142的 Linux Ubuntu 机器和一台 IP 为192.168.153.146的 Windows 7 企业版 64 位机器。服务器将安装在 Linux 机器上,客户端将安装在 Windows 机器上。对于服务器-客户端架构,两台机器必须连接到同一网络。我们可以使用任何虚拟化软件配置 NAT 网络并测试两台机器之间的连接。

服务器安装

要安装服务器,您可以参考文档 github.com/google/grr-doc/blob/master/quickstart.adoc。完成服务器安装后,它将要求您启动服务器配置,并用于为此特定服务器构建客户端,除了管理员的用户名和密码。在本练习中,管理 URL 为 http://192.168.153.142:8000,客户端前端 URL 为 http://192.168.153.142:8080/control

客户端安装

确保服务器和客户端能够互相访问后,我们可以继续在 Windows 机器上安装客户端。在本练习中,我们建议禁用 Windows 虚拟机防火墙。从客户端机器打开以下 URL http://192.168.153.142:8000/#main=BinaryConfigurationView&t=_executables-windows-installers,并输入管理员的用户名和密码:

客户端安装

图 2:下载 GRR 客户端

该链接将直接打开 Windows 客户端。我们的 Windows 机器是 64 位的,所以我们需要下载 GRR_3.0.0.7_amd64.exe 文件。此客户端已配置为通过服务器 IP 直接连接到 Linux 机器的服务器,因此请确保测试环境中没有 IP 冲突。下载客户端后,我们需要以管理员权限在客户端机器上运行它。稍等片刻,然后去服务器上再次打开管理 URL。

请注意以下事项:

  • 客户端可以通过任何方式传输,并不一定需要通过打开管理员门户来实现。

  • 在实际情况中,如果客户端真的位于远程位置,服务器必须使用真实 IP 在互联网上发布。在这种情况下,可以使用云服务。

浏览新连接的客户端

打开管理 URL 后,客户端不会直接出现。因此,我们需要有任何关于客户端的信息来进行搜索。根据 GRR 文档,任何信息,如主机名、MAC 地址、用户名、IP 等,都会足够用于定位客户端,只要它已连接。在本练习中,我们将使用客户端 IP 192.168.153.142

浏览新连接的客户端

图 3:通过 IP 搜索客户端

在机器上双击将打开所有关于该机器的信息,如下图所示:

浏览新连接的客户端

图 4:一个新连接的客户端

开始新的流程

要在客户端机器上执行命令,我们需要启动所谓的流程。在 GRR 中有不同类型的流程,如下所示:

开始新的流程

图 5:机器中的不同流程

我们将通过列出远程 Windows 客户端中的进程作为示例来创建一个流程。选择 Memory 下的流程,然后选择 AnalyzeClientMemory。正如我们在内存取证章节中讨论的那样,列出系统运行进程的插件在 Volatility 和 Rekall 中都是 pslist 插件。

我们将在请求的插件中添加此插件,如下图所示:

开始一个新流程

图 6:请求在远程客户端上运行 pslist 插件。

执行此命令将需要一些时间。执行完毕后,服务器将通知管理员:

开始一个新流程

图 7:管理员的结果通知

点击通知将打开分析结果。结果将与 Rekall 输出中显示的内容相同,如下图所示:

开始一个新流程

图 8:服务器接收到的 pslist 插件结果

GRR 有许多不同的用途,例如列出机器文件系统中由正常操作系统和 TSK 框架看到的文件,调查人员可以注意到任何差异或恢复已删除的文件。

该工具功能的完整文档可以在 github.com/google/grr-doc/blob/master/user_manual.adoc 查找。

附录 appB. 案例研究

介绍

在本附录中,我们将使用一台感染的机器来演示如何对不同类型的证据进行初步分析,并且我们将同时进行实时分析和事后分析。

场景

为了进行这次分析,我们创建了一个小型虚拟网络,结构如下:

场景

所有场景部分均使用虚拟化技术创建,包括需要的互联网主机来下载恶意软件。该机器感染了 ZeusVM 恶意软件。恶意软件可从 Zoo 下载,仅供教育用途,下载地址:github.com/ytisf/theZoo/blob/master/malwares/Binaries/ZeusVM/ZeusVM.zip。解压后的恶意软件样本 SHA256 如下:

b04637c11c63dd5a4a599d7104f0c5880717b5d5b32e0104de5a416963f06118

theZoo 是一个旨在让恶意软件分析的可能性对公众开放的项目。theZoo 由 Yuval tisf Nativ 创建,现在由 Shahak Shalev 维护。

你可以下载恶意软件样本,重新创建或感染一台虚拟机,并按照本附录中的分析步骤进行操作。

本场景中使用的机器是 Windows 7 企业版 64 位。

采集

正如我们之前讨论的,最佳实践是在对待分析的机器做任何修改之前,首先进行证据采集。采集到的证据必须保存在 USB 存储设备或网络共享中。在我们的案例中,USB 存储设备可以在感染机器和分析机器之间使用,但分析后必须彻底擦除。通过虚拟网络使用另一台分析 Linux 虚拟机进行网络采集在我们的情况下也很有效。网络采集将按照我们之前在第四章中讨论的内容进行,非易失性数据采集。我们需要采集感染机器的内存和硬盘。

练习:你需要执行这个步骤,正如我们之前在第三章,易失性数据采集,和第四章,非易失性数据采集中讨论的那样。

实时分析

接下来,让我们对手头的感染机器进行一些实时分析。这次实时分析将为我们提供快速的结果。它可能会覆盖系统中的一些痕迹,但在我们的情况下,我们已经采集了证据。

正在运行的进程

列出正在运行的进程将帮助我们发现任何恶意命名的进程,这些进程可能与恶意软件行为有关。我们可以使用 native tasklist 命令列出正在运行的进程:

正在运行的进程

我们还可以使用 Sysinternals 的processexplorer。我们将注意到没有恶意的名称,但我们可以看到系统中有两个名为explorer.exe的进程。其中一个的 ID 是2256,它是为了兼容 32 位映像而运行,但它的当前目录是C:\Users\<<UserName>>\AppData\Roaming\,如下面的进程资源管理器截图所示。此外,请注意,如果你在自己的机器上运行恶意软件,这个进程很可能会持有另一个 ID:

运行中的进程

为了更深入地调查这个过程,我们可以使用 DART 工具中的ProcessActivityView来查看该进程实时访问了哪些文件。我们会发现这个进程访问了一个位于并命名为C:\Users\<<UserName>>\AppData\Roaming\Tyull\yquna.tmp的文件。

文件夹名称和文件名似乎是随机创建的,这是一种典型的恶意软件行为。

然后,如果我们尝试使用 GMER 工具扫描正在运行的系统,它将检测到在运行的进程2256 explorer.exe中注入了一些代码,如下所示:

运行中的进程

网络活动

大多数恶意软件样本需要网络连接来完成其目标并与攻击者连接。通过检查可疑连接上的网络活动,我们会注意到它正在监听连接和端口37337。在这里,我们必须注意,我们已经将机器从互联网和内部网络隔离,这样的连接无法完成:

网络活动

端口37337因其在恶意软件相关活动中的广泛使用而闻名。

自动启动键

我们还可以检查系统中的自动启动键,这些键被恶意软件用来保持它们在系统中的存在,即使在系统重启后。我们可以使用 Sysinternals 工具autorunsc.exe或其 GUI 版本autoruns.exe来执行此操作。我们可以使用带有以下选项的命令行版本:

  • -l:这些是登录时自动启动的元素(默认选项)

  • -t:这些是已分配的任务

  • -m:这些不会显示由微软数字签名的元素

  • -v:这些验证数字签名

自动启动键

HKCU\Software\Microsoft\Windows\CurrentVersion\Run注册表键下,这个未知可执行文件的位置是C:\users\<<UserName>>\appdata\roaming\imyrug\epqe.exe。请注意该键的最后访问日期,它已经很旧了。

我们可以提取这个可执行文件进行进一步分析,例如逆向工程和恶意软件分析,以确认它是否具有恶意,并理解其功能。使用该工具的 GUI 版本也可以获得相同的结果:

自动启动键

所以,现在的问题是是什么将这个可执行文件添加到注册表键中?

预取文件

为了尝试回答前面的问题,我们可以开始分析预取文件。从 DART 中打开 WinPrefetchView 工具。该工具会自动解析实时系统的预取文件,并以人类可读的格式查看其结果。

在花了一些时间查看文件并搜索名为epqe的可执行文件后,我们发现eqpe.exe在名为latest_report.pdf.exe的文件运行后两秒钟启动,并且在同一秒钟Explorer.exe也启动了:

预取文件

如我们所见,第一个文件名非常可疑。它位于C:\Users\<<UserName>>\Downloads\latest_report.pdf.exe下。如果我们尝试在这个位置查找该文件,我们是找不到的。在WinPrefetchView提供的latest_report.pdf.exe文件所使用的文件列表中,我们会发现由此文件使用或创建的epqe.exe文件:

预取文件

然而,是什么促使受害者下载这个恶意可执行文件呢?

浏览器分析

last_report.pdf.exe文件可能是从其他存储设备或网络复制到机器上的,但由于它位于Downloads文件夹中,因此开始调查浏览器历史记录可能更为合理。

系统中安装的浏览器是 Internet Explorer 和 Mozilla Firefox。通过使用 DART 工具分析这两者,我们可以从MozillaHistoryView中找到一些有趣的结果:

浏览器分析

我们可以看到该文件是从http://www.maldomain.com/public/latest_report.pdf.exe下载的。然而,我们注意到下载时间恰好是在用户访问mail.yahoo.com之后,这增加了恶意链接通过电子邮件发送给受害者的可能性。

如果我们有能力打开受害者的邮箱以证明或反驳这一假设,那么在我们的案例中,我们将会找到以下信息:

浏览器分析

我们可以在这封电子邮件中找到语言不准确的地方,并且为了显示其他文本而添加了链接this link,而不是实际的链接:

浏览器分析

注意

注意:如果在自己的机器上运行恶意软件,电子邮件和浏览器历史分析结果将不会出现在您的分析中。

事后分析

在进行实时分析之前,我们已经获得了证据。这些证据是内存和硬盘。让我们看看我们能从这些证据中获取什么。

内存分析

内存是操作系统的工作空间,通过内存分析,我们可以获得系统中运行的任何恶意软件的痕迹。在本节中,我们将使用 Volatility 框架分析转储的内存文件,并尝试获取与实时分析中相同的信息。

为了获取内存文件的配置信息,我们可以使用 imageinfo 插件:

从输出中,我们将使用的镜像配置文件是Win7SP0x64。接着,让我们列出正在运行的进程和网络连接,就像我们在内存分析章节中讨论的那样:

内存分析

我们会注意到两个explorer.exe进程,但我们看不到任何隐藏的进程。只有两个名为dllhost.exe的进程,它们只能在 psscan 插件的输出中找到。然而,这两个进程已经退出,它们的结构仍然保存在内存中,psscan 插件能够找到它们,正如我们从 psscan 插件的输出中看到的:

内存分析

然后,我们可以使用 netscan 插件,根据系统中发现的恶意连接进行筛选:

内存分析

我们会发现explorer.exe进程在端口37337上有监听连接。所以,让我们重点关注这个进程。

让我们转储这个进程,并搜索任何可能标识其功能的有趣字符串:

内存分析

如果我们运行strings 2256.dmp | more命令,它将显示进程转储文件中的许多字符串。其中一些字符串,如Run and Runonce,应该让我们联想到注册表键。要列出内存中的注册表键,我们可以使用 hivelist 插件:

内存分析

现在,我们已经得到了内存中已打开注册表项的位置。我们可以通过使用 printkey 插件,并结合注册表项的虚拟偏移量,浏览这些内存中的注册表项。

我们可以尝试不同的注册表项,但我们先试试系统用户的ntuser.dat注册表项。检查Software\Microsoft\Windows\CurrentVersion\Run

内存分析

我们还可以在内存中找到未知的可执行文件。现在,让我们尝试扫描内存中所有已打开的文件,并筛选出这个文件名:

内存分析

然后,使用以下命令将主体文件转换为时间线文件:

mactime -b mft.body > mft.tmline

输出将是系统中所有活动的时间线。如果我们尝试基于可疑的可执行文件名进行筛选,我们可以得到与我们在实时分析过程中检查预取文件时获得的相同顺序:

内存分析

接下来,我们可以尝试从硬盘镜像中恢复latest_report.pdf.exe。事实上,恶意软件删除了该文件,并创建了epqe.exe。但是,如果我们想要获取该文件并且无法从硬盘中恢复该文件怎么办?

网络分析

网络流量是最不稳定的证据。在我们这里的场景中,我们在攻击模拟过程中将网络流量转储到了一个pcap文件中。

为了分析网络流量,我们将使用安装在 Linux 分析虚拟机的 Wine 环境中的 Networkminer 工具。

Networkminer 将解析pcap文件,并查看有关maldomain.com域的详细信息:

网络分析

它还将导出下载的文件,包含详细信息:

网络分析

从网络流量中,我们可以导出并分析第一个 latest_report.pdf.exe 可执行文件。

时间轴分析

在本节中,我们将使用 log2timeline 和 Plaso 框架,通过获取的磁盘镜像创建硬盘中所有活动的完整时间轴。

我们将运行所有 Windows 7 解析器来分析获取的镜像。但是首先,我们需要使用 TSK 中的 mmls 工具获取 C: 分区的偏移量:

时间轴分析

然后,我们将使用这个偏移量与 log2timeline。生成主体文件的过程将需要很长时间,因为它会解析整个卷,以查找 Win7 解析器中提到的任何事件:

时间轴分析

一旦完成,我们可以使用 psort.py 工具通过命令行查看我们选择的主体文件的部分内容,就像在第五章 时间轴 分析中做的一样。

或者,我们可以将时间轴主体文件转换为 CSV 格式的文件,以便通过任何电子表格程序查看。转换过程需要一些时间才能完成:

时间轴分析

转换完成后,您可以在例如 Excel 中打开新文件:

时间轴分析

然后,我们可以使用 Excel 过滤工具根据我们的需求过滤输出结果,例如显示恶意文件的预取分析:

时间轴分析

摘要

在完成了主要章节后,在本附录中,我们进行了初步分析并发现了感染机器中的恶意软件。我们使用了不同的分析技术,包括实时分析和事后分析,并解释了如何通过这两种方式获得相同的结果。尽管实时分析更容易,但并非每次都适用。因此,我们必须了解这两种技术,以应对现实生活中的调查。

posted @ 2025-07-07 14:34  绝不原创的飞龙  阅读(117)  评论(0)    收藏  举报