Windoes 取证实践指南(一)
原文:
annas-archive.org/md5/77c0dddad1f07c736966d54fe69b6e05译者:飞龙
前言
无论你在信息安全领域的经验如何,实用的 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。FREDL 是 Forensic Recovery of Evidence Device Laptop 的缩写。配合 Ultra Kit,这个解决方案大约需要 5000 美元。
Ultra Kit 包含一套写保护器和一套适配器与连接器,用于获取具有不同接口的硬盘镜像:
注意
更多细节可以在制造商网站上找到,www.digitalintelligence.com/products/ultrakit/。
当然,如果我们忽略这种解决方案的主要缺点,与成本相比,这个决策有很多优势。除此之外,你还可以获得一套完整的入门套件来处理事件。此外,Ultra Kit 允许你安全地运输设备,而不必担心损坏。
注意
FRED-L 笔记本基于现代硬件,规格不断更新,以满足现代要求。当前规格可以在制造商网站上找到,www.digitalintelligence.com/products/fredl/。
然而,如果你想替代昂贵的解决方案,可以构建一个更便宜的替代品,这样可以节省 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,并显示在系统启动和用户登录时运行的可执行文件列表。这个工具可以帮助你检测使用流行且著名的持久安装方法将恶意软件安装到系统中的情况。
另外两个命令(at 和 schtasks)会显示计划中运行的命令列表。启动 at 命令也需要管理员权限。
要安装后门机制,通常使用服务,但服务始终在系统中运行,因此可以在实时响应期间轻松被检测到。因此,创建一个按计划运行的后门以避免被发现。例如,攻击者可以创建一个任务,在工作时间外运行恶意软件。
要获取已删除的网络共享驱动器和磁盘文件列表,可以使用以下两个命令:
psfile>%COMPUTERNAME%\openfileremote.txt
net share>%COMPUTERNAME%\drives.txt
非易失性数据。
在收集了易失性数据之后,可以继续收集非易失性数据。这些数据可以在分析磁盘阶段获取,但正如我们之前提到的,在某些情况下,无法对磁盘进行分析。
这些数据包括以下内容:
-
已安装的软件和更新列表。
-
用户信息。
-
文件系统时间戳的元数据。
注册表数据。
然而,在接收到这些数据并在系统实时运行时,会遇到困难,因为许多文件无法以通常的方式复制,因为它们被操作系统锁定。为此,使用其中的一种工具。一个这样的工具是由Joakim Schicht 编写的 RawCopy.exe 工具。
这是一个控制台应用程序,它通过低级磁盘读取方法从 NTFS 卷中复制文件。
该应用程序有两个必需的参数,目标文件和输出路径:
-
-param1:这是要提取的目标文件的完整路径;它也支持使用IndexNumber替代文件路径。 -
-param2:这是有效的输出目录路径。
这个工具可以让你复制通常无法访问的文件,因为系统已将它们锁定。例如,注册表配置单元,如 SYSTEM 和 SAM,位于 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文件夹内容
现在,让我们考虑前述情况,如下所示:
-
收集
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
-
-
收集
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
-
-
收集
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''
-
-
收集
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 ''
-
-
收集
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"
-
-
收集
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 "
-
-
收集
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"
-
-
收集
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 |
我们需要注意,商业工具并不总是更好。我们应该使用哪种工具取决于使用案例、响应者的经验和资质以及其他因素。
尽管有很多可能的选项,但我们建议您遵循的原则是相同的:
-
尽量减少对系统的影响。
-
从安全环境运行工具。
-
将结果存储在系统外部。
我们将所有用例分为三组,分为两种方法,即硬件和软件:
-
本地
-
远程
-
死后
它们每个都有其优点和缺点。例如,让我们看看硬件方法。在这种情况下,不需要管理员权限,但您应该能够物理访问正在调查的 PC。所采用的方法基于直接内存访问(DMA)和一些技术,如 Firewire、Thunderbolt、ExpressCard 或 PCI。这种方法的缺点是在使用之前需要将一些硬件和软件安装到系统中。此外,此操作需要重新启动系统。因此,这样做可能会破坏一些证据。另一个缺点是使用 FireWare 技术可以倾倒的 4 GB 内存大小的限制。但是,基于 PCI 的解决方案很少见且昂贵。
正如我们之前提到的,有很多用例变体。因此,在一个单独的章节中观察每一个是不可能的。
最简单和最常见的情况是本地软件方法。在这种方法中,我们可以使用多种实用程序,现在我们来看看其中一些。
DumpIt
在系统内存不超过 4 GB 的情况下,DumpIt 工具是一个不错的选择。DumpIt 具有非常简单的命令行界面,即使对于没有经验的人来说也很容易使用。要倾倒整个系统内存,你应该将其复制到某个可移动设备上,该设备有足够的空间来存储内存转储。然后,将此设备插入系统并从该驱动器运行。运行完成后,DumpIt 将在执行 DumpIt 的相同路径下创建一个包含系统内存转储的文件:
不幸的是,DumpIt 的免费版本在处理超过 4 GB 内存时无法正常工作。
如果您有 8 GB 或更多内存,我们建议使用 Belkasoft Live RAM Capturer。此软件也具有简单的图形界面。它适用于 x32 和 x64 位架构:
FTK Imager
另一个用于内存转储的流行工具是 FTK Imager。它也是免费的。有两个版本。我们建议使用 FTK Imager Lite 版本。它不需要安装,具有易于使用的界面,并且具有许多有用的功能:
使用 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 目标软件,KFA(Kaspersky Forensics Agent),以及在 Linux 工作站上的iscsiadm工具作为启动器。
要使用 Kaspersky Forensics Agent 转储内存,在目标系统上运行该工具,并使用-mountphysmem选项:
为了提供授权访问,我们可以使用chaplogin和chapsecret选项:
现在,可以使用任何 iSCSI 启动器连接到选定的介质:
-
现在,我们测试连接:
sudo iscsiadm -m discovery -t st -p TargetAddress -
验证 iSCSI 连接正常后,我们建立完整的连接:
sudo iscsiadm -m node --login -
确保在 Ubuntu 环境中内存作为新设备可见。
-
现在,你可以像往常一样使用
dd工具进行转储。
现在,你有了内存转储,可以开始分析它了!
使用 Sleuth Kit
我们还想讨论一个用例。可能调查人员只有硬盘镜像,无法从感兴趣的系统中转储内存。在这种情况下,我们仍然能够获得某些系统内存信息。MS Windows 在系统进入休眠状态时,会将内存内容保存在hiberfil.sys文件中。所以,如果我们有硬盘镜像,我们可以从磁盘中提取hiberfil.sys。
为了实现这个,我们需要使用 Sleuth Kit。让我们来看看我们如何做到这一点:
-
要获取有关磁盘分区的信息,请使用以下命令:
mmls image输出将如下所示:
-
然后,使用
fls列出 NTFS 分区根目录中的文件:fls -o 2048 image.dd | grep hiberfil.sys r/r 32342-128-1: hiberfil.sys -
最后,提取
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 id、dst host id、src host id、net id、dst net id、src net id、ether id、dst ether id、src ether id、port id、dst port id、src port id、gateway id、ip proto id、ether proto id、tcp、udp、icmp 和 arp。你可以在pcap-filter的手册文档中找到更多内容。
Tcpdump
tcpdump 是一款用于捕获、过滤和分析网络流量的工具。该工具的主要目的是捕获流量并打印出来或将其存储到文件中。tcpdump 捕获的流量按比特流传输,保持原始传输格式。我们可以使用 tcpdump 分析网络流量,帮助故障排除。在这种情况下,您将使用 BPF 进行预过滤。然而,通常这种方法更适用于初步的筛查:
在取证实践中,其他方法更加普遍。Tcpdump 用于长时间捕获流量并将其存储到磁盘文件中,之后进行分析并与其他数据进行关联。
tcpdump 是一款高保真度工具,但捕获的流量质量取决于运行 tcpdump 的主机上可用的资源。例如,tcpdump 的性能将依赖于 CPU 的处理能力。数据包捕获是一项 CPU 密集型活动,如果 CPU 超负荷,tcpdump 将无法正常工作并丢失数据包。在取证案例中,我们希望捕获所有数据包,这个问题可能非常关键。在高负载的网络中,流量存储空间也是一个重要问题。如前所述,您可以通过过滤流量,只保留有用信息。
尽管过滤可以节省资源,如 CPU、磁盘空间和带宽,但需要谨慎实施,因为过度过滤可能会导致证据丢失。
Wireshark
另一个流行的捕获和流量分析工具是 Wireshark:
Wireshark 是一款拥有易于使用的图形用户界面的工具,因此它是网络取证初学者的好工具。它还具有许多过滤、解密和分析网络流量的功能。因此,这使得 Wireshark 成为任何网络调查员必备的工具。Wireshark 允许您在系统的任何接口上捕获流量,只要您拥有必要的权限,可以实时显示流量,并将其存储到磁盘文件中。
此外,还有一些有用的命令行工具,它们与 Wireshark 一起分发。
Tshark
Tshark 是 Wireshark 的命令行版本。它几乎具有相同的功能,并与相同的文件格式兼容:
Dumpcap
Wireshark 工具包中的另一个有用工具是 Dumpcap。它专门用于捕获网络数据包。因此,它在捕获方面经过优化,可以更好地发挥性能,并且占用的系统资源更少。如果您计划捕获流量并使用 Wireshark 进行分析,那么 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 CD
DEFT 还配备了 数字高级响应工具包 (DART)。DART 可以在 Windows 实时系统中运行,并在每个事件响应步骤中提供一套独特的工具。使用 DART,您可以执行以下操作:
-
获取 Windows 内存和硬盘
-
在需要时执行实时数据恢复
-
对一些 Windows 伪影进行法医分析
-
收集正在运行的系统信息
-
监控系统网络
您可以在以下截图中查看 DART 界面:
事件响应工具 DART
Helix
Helix 是一款 IR CD,提供免费版和商业版。它可以在三种操作系统上运行:Windows、Linux 和 Mac,并支持实时数据采集。以下截图展示了这一功能:
图 A:Helix 在实时采集中的不同操作系统支持
和 DEFT 类似,您可以从 Helix CD 启动,以应对系统断电的情况。在这种情况下,您可以将硬盘克隆到另一块硬盘,并执行硬盘复制器的相同功能。请前往 应用程序 | 采集与分析 | Helix pro。在打开的窗口中,您可以将硬盘克隆或制作最多四个镜像,无论是从系统内存还是系统硬盘。Helix 还可以计算镜像的哈希函数:MD5、SHA1、SHA256 或 SHA512,甚至全部计算:
从 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——选择映像目标位置
注意
FTK Imager 将硬盘逐位成像到一个单独的文件映像中。你不能像使用复制工具那样将硬盘成像到另一个硬盘。
使用 FTK Imager 进行网络映像
在某些情况下,你无法通过 USB 连接到目标系统以运行工具并连接存储设备。在这种情况下,你可以通过网络获取该系统的映像。
你需要做的是将你的机器与目标系统连接到同一个网络,并确保目标系统能够通过 ping 命令访问你的机器。从你的机器验证是否有足够的空间可用。现在,创建一个新文件夹,并以合适的读/写权限共享该文件夹。
在我们的示例中,共享文件夹的名称是Share,并且位于C:\。处理机的 IP 地址为 192.168.57.128,源/目标机器是 Windows 7 系统:
-
为了测试共享文件夹的可用性,请从源机器的运行窗口中运行
\\192.168.57.128命令,如下所示:打开共享文件夹
-
必须弹出认证窗口。输入机器 IP、用户名和用户密码:
共享文件夹认证
-
如果一切顺利,你将看到一个名为Share的文件夹。右键单击该文件夹并选择映射网络驱动器。你可以选择任何驱动器字母,在我们的案例中,我们选择了字母
Z:映射共享文件夹
-
现在,从源机器运行 FTK Lite 程序,然后从文件中打开创建磁盘映像。按照相同的步骤进行操作,并在选择映像位置时浏览到已映射的网络驱动器;它可能会要求你再次进行身份验证:
将映像保存到共享文件夹
-
点击完成按钮后,你会看到一个进度条,表示已从整个硬盘大小中捕获的数据量。
在处理机上,你将找到一个名为image.raw的文件,它被创建在 Share 共享文件夹下,并且你可以看到文件大小的增加,直到它达到目标机器硬盘的最大大小。
事件响应光盘在实时采集中的使用
如前所述,事件响应光盘带有内置的、易于访问的工具来执行不同的任务。这个任务之一是对实时系统的硬盘进行镜像,正如 DART 工具集和 Helix 所做的那样。
使用 Helix 时,如果它在实时系统中没有自动启动,你可以从合适的操作系统文件夹中打开该程序(在Helix部分的图 A中)。该程序将以相同的界面工作,但如果在实时系统中工作,你将无法复制硬盘。由于硬盘处于不稳定状态,并且操作系统的操作会不断改变它,克隆选项将不会出现在列表中。在映像过程之后,会进行验证过程。它会计算结果映像的哈希值,并将其与映像过程中比特流的哈希值进行比较。如果哈希值匹配,意味着映像没有错误。
为了通过网络获取映像,Helix 内置了相应的功能,采用相同的服务器/客户端概念。在目标机器上,即处理机,你需要从相同的 receiver.exe 文件夹中运行网络监听器:
Helix 网络监听器
在提供了完整的信息后,开始监听任何网络连接请求。
在源机器上,选择目标为 Helix 接收器。然后设置连接,输入监听器的 IP 地址、相同的端口,以及密码(如果有):
启动采集过程后,监听器中将开始一个新连接,并且在目标机器上指定的位置可以找到一个新的映像文件。
用于硬盘镜像的 Linux
假设你已经有一个无法启动的系统,并且需要取出机器的硬盘以进行镜像。你需要做的第一件事是确保通过写保护器将硬盘连接到你首选的 Linux 机器,以防止任何意外写入硬盘,这可能会改变证据并使其无法作为证据使用。
dd工具
在 Linux 操作系统中,有一个内置工具叫做dd。dd工具被认为是一个法医学上可靠的工具,因为它复制数据块,不管其结构如何。关于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在这里,你将看到一个移动的进度条,这意味着进程仍在运行,显示成像大小和成像速度:
添加进度状态
通过网络使用 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
你可以在下面的截图中看到这一点:
通过网络使用 netcat 的 dd(在目标机器上)
在目标机器上,启动dd并将输出通过管道传输到nc客户端,如下所示:
dd conv=sync,noerror bs=64K if=/dev/sda | pv | nc
192.168.57.128 3333
输出如下:
通过网络使用 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(原始数据)。
例如,如果我们有不同的字符串应用于相同的哈希函数,则哈希函数必须将每个字符串映射到不同的哈希值:
哈希函数
如前图所示,应用所有文本到相同哈希函数后,每个文本的结果哈希都不同。即使是单一字符的变化,如前图中的 Handling 和 Handlin,输出也会截然不同。如果输入的微小变化引起哈希值的轻微变化,则该哈希函数被认为不够完美。
哈希碰撞发生在两个不同的输入在应用相同的哈希函数时产生相同的哈希值。因此,最好使用多种哈希函数,如 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:\NTFSfolder1和D:\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:\FATfolder1,D:\FATfolder1的创建日期和修改日期将保持不变。以下表格反映了根据文件操作变化的属性:
| 操作 | 属性 |
|---|---|
| 重命名 | ..C. |
| 卷内位移 | ..C. |
| 卷之间的位移 | .AC. |
| 复制 | .ACB |
| 访问 | .AC. |
| 修改 | M.C. |
| 创建 | MACB |
| 删除 | .... |
提示
当我们谈论移动操作时,我们指的是使用 Windows 资源管理器进行的文件移动操作,和剪切粘贴过程,而不是命令行中的move命令。
另外需要提到的是,一些调查人员错误地认为禁用最后访问时间会阻止文件的最后访问时间更新(Vista+系统的默认设置)。这是不正确的。最后访问时间会在复制或移动命令执行时发生变化;只有在打开文件时,文件的最后访问时间才不会改变。
此外,通过 Windows 资源管理器剪切和粘贴的文件,在文件系统的边界内移动时不会更改创建时间。然而,如果使用命令行中的move命令移动文件,创建时间将发生变化。
Sleuth Kit
让我们考虑一下文件系统时间线创建的各个阶段。
创建时间线的第一步是构建正文文件。
有三种类型的数据需要收集:
-
存在于文件系统中的文件,我们可以通过
dir或ls命令列出它们。 -
已删除的文件,它们被删除但其结构仍然存在。这允许恢复文件的完整路径及其他属性。然而,这取决于文件系统,并非所有文件系统都允许这样做。
-
未分配的 inode(
$Orphan文件),这些是已不存在的文件结构。
要构建一个正文文件,我们将使用 TSK 中的fls工具。fls工具允许像操作文件系统一样与取证镜像进行交互,并从文件系统级别提取时间线数据。
这会获取 inode 目录的值,处理其内容,并显示目录中文件的名称(包括已删除的文件)。如果 inode 的值不存在,它将显示根目录的内容:
在我们的案例中,最重要的选项之一是 -m,它允许输出为 mactime 工具使用的格式:
所以,如果你有一个 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:
现在,我们将使用动态格式进行输出。动态输出格式允许像 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.tmp和ZkPECED.exe被创建在\Users\Alina\AppData\Local\Temp目录中:
使用--sliceDateTime和--slice_sizeMinutes参数,以及psort.py工具,我们可以将文件存储(timeline.body)中的样本数据限制在发生在时间范围*[DateTime-Minutes, DateTime + Minutes]*内的事件。
由于我们不知道ZkPECED.exe文件的可执行文件来自哪里,因此我们对所有在 UTC 时间 12:39:08 前后 10 分钟内创建或修改的可执行文件进行搜索:
请注意,在ZkPECED.exe文件出现之前,位于systemhost目录中的一个名为24FC2AE3CB0.exe的文件(inode 46912)的元数据发生了变化(这意味着文件被重命名或在本地移动),尽管它的其他时间戳(创建、最后修改和最后访问)回溯至 2010 年:
使用 TSK 工具包中的istat工具,我们获得了24FC2AE3CB0.exe文件(inode 46912)属性的信息:
上面的截图显示,$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 字节:
图中呈现的输出表明,名为2(57ebc62f-6dfa622f)的对象大小为 411,648 字节。
这是因为根据istat和icat工具的输出,/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 后面的数字,如
FAT12、FAT16或FAT32,代表在 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 文件本身也有一个条目。每个条目开头都有一个 42 字节的头部,并且具有 0xEB52904E 的签名,这在 ASCII 中等同于 FILE。
签名也可以是 BAD,这表明此条目发生了错误。头部之后,会有剩余的 982 字节用于存储文件元数据。如果还有空间存储文件内容,通常是小文件,文件的数据会直接存储在条目中,而不会占用数据区的空间。
每个 MFT 条目都有另一个称为属性的子结构。MFT 使用属性来存储文件的元数据。在单个 MFT 条目中可以使用不同类型的属性。每个属性都被指定用于存储不同的信息。例如,标准信息属性包含文件的时间戳和大小,而数据属性则包含文件的实际内容。
属性可以是以下之一:
-
驻留:此属性将其所有数据保存在 MFT 条目内。
-
非驻留:由于 MFT 大小的限制,一些属性可能需要将其数据存储在数据区。这种属性的一个明显例子就是数据属性。
将文件元数据存储在属性中为 NTFS 提供了灵活性,使其能够在未来添加操作系统可以识别的更多属性类型。如果一个文件有多个属性并且需要多个 MFT 条目来存储其元数据,它可以使用另一个条目,并通过序列号将两个条目链接在一起。
The Sleuth Kit (TSK)
The Sleuth Kit(TSK)是由Brian Carrier 和 Wieste 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 工具用于查看文件的元数据
icat
这个工具用于查看特定数据单元的内容。它使用 inode 号作为参考,查看与该文件相关的数据块。在正在调查的取证镜像中,我们将查看 inode 0 的 $MFT 文件内容:
$MFT 文件的内容
在某些情况下,恢复已删除的文件对正在调查的案件会有帮助。我们可以使用 icat 工具将任何已删除文件的内容复制到调查员机器上的另一个文件中以供进一步分析。对于 $MFT 文件,还有一些其他工具,可以单独解析 MFT 文件并以树状视图列出文件系统的内容:
使用 icat 复制已删除文件的内容
ifind
在分析过程中,如果调查员例如进行了一次文字搜索,并且在某个分区的数据单元中找到匹配项,那么他们现在需要将这个数据单元与文件系统中的一个条目关联起来,ifind 正是他们需要的工具。与之前的工具不同,ifind 可以接受数据单元号或文件名作为输入,并将该输入映射到文件系统中相应的条目,以收集关于该文件的其他信息。在我们的例子中,我们将尝试找到 hiberfile.sys 文件。
若要通过文件名进行搜索,我们需要使用 --n 选项:
使用 ifind 按文件名搜索
结果显示,与名为 hiberfil.sys 的文件相关的 inode 号是 563。再次使用 istat 查看与该文件相关的信息,将揭示该文件的详细信息:
关于 inode 563 的文件的完整信息
hiberfil.sys 文件是在用户选择使用休眠选项时,将内存的副本存储到硬盘中,用于死机系统分析。该文件对调查员有很大帮助,因为它提供了系统在上次休眠时内存的快照,并且可以从该文件的时间戳中获取。这文件是一个已分配文件,像之前处理 $MFT 文件一样,它可以从镜像中提取出来,然后用于内存分析。
如果我们需要使用 ifind 工具与数据单元号一起使用,则需要使用-d 选项。我们将获得另一个唯一 ID,描述文件在镜像中的位置。这个唯一 ID 将在下一部分——文件名层中讨论。在此示例中,我们使用了数据单元 ID 3269280,这是hiberfil.sys文件的一个数据单元:
使用 ifind 进行数据块地址查找
文件名层
工具在此层中工作,用于列出硬盘镜像中的文件结构。每个文件都会分配一个唯一的 ID,可以与其他工具结合使用,特别地定位此文件。
要列出分区下的文件,我们只需提供分区偏移量给工具:
使用 fls 工具浏览分区内容
在前面的图中,我们可以看到已删除的hiberfil.sys,其元数据地址为 57745,已分配的则是元数据地址 563。
如果我们需要浏览另一个目录(例如,Users 目录),我们可以向工具提供 Users 目录的唯一 ID(457-144-5):
使用目录 ID 与 fls 工具进行内容列举
如我们所见,我们正在浏览镜像的内容,而无需将任何分区或文件系统挂载到运行中的操作系统。
ffind 工具仅用于将元数据地址映射到文件名,无论其相关文件是已删除还是已分配:
映射元数据地址到其文件名
数据单元层(块)
在这一层中,文件的实际内容被存储。文件的元数据必须指向文件内容在此区域中的位置,正如我们之前用ifind工具讨论的那样。
blkcat
这是用于显示镜像中特定数据单元内容的。假设我们需要显示 Windows 目录中ntdll.dll文件的第一个数据单元。首先,我们可以使用ils工具找到该文件的元数据地址,并用ntdll.dll文件名进行 grep 查找:
ntdll.dll 文件的元数据地址
从结果来看,ntdll.dll文件中的一个文件有元数据地址25833。第二步是使用istat工具通过其元数据地址查找分配给该文件的数据单元:
通过 istat 工具获取的 ntdll.dll 文件的完整信息
结果显示,该文件的第一个数据单元号为1118226。我们现在需要做的是使用blkcat工具查看该数据单元的内容。我们将使用--h选项以十六进制视图查看内容:
使用 blkcat 显示一个数据单元的内容
blkls
该工具的默认设置是显示镜像文件中的未分配簇,以便进行进一步分析,如文件雕刻和恢复。如果我们使用带有 -e 选项的该工具,它会收集一个文件系统的所有块,如果我们需要从一个多分区的大镜像中提取一个分区,这将非常有用。在这里,我们只需收集镜像中的所有未分配空间,并将输出定向到一个名为unallocated.blkls的文件或屏幕上。
生成的文件将具有分区中空闲空间的相同大小。然后,可以对该文件进行进一步分析:
使用 blkls 收集所有未分配空间到一个文件中
Blkcalc
为了理解这个工具的目的,假设我们对未分配空间进行了某些分析,例如关键词搜索,并且找到了与正在调查的案件相关的匹配项。为了将找到的位置映射到完整镜像,我们需要使用blkcalc工具。
Autopsy
Autopsy 是一个基于 Web 的 TSK 界面,它使用 TSK 中相同的工具并以图形界面展示结果。为了使用 TSK 进行分析,调查员需要首先从命令行启动服务器。启动 Autopsy 后,它会给调查员提供一个 URL,通过该 URL 可以从互联网上访问它,在此案例中为http://localhost:9999/autopsy。在分析过程中不要关闭 Autopsy 进程,否则分析将无法进行:
启动 Autopsy
然后,从浏览器中打开该 URL 以开始创建案件:
Autopsy 界面
我们需要创建一个新案件,然后输入一些案件信息,以便调查员能够方便地跟踪案件以及每个案件的负责人:
创建新案件
创建案件后,默认会在/var/lib/autopsy下创建一个与案件同名的目录,其中包含案件的所有文件。我们所做的仅仅是创建案件;现在,我们需要添加与案件相关的所有主机,并添加我们之前从每个主机获取的镜像。这样做是为了跟进分析结果,并能够区分结果的来源。
如果调查中的案件发生在不同的时区,也就是说,涉及的硬盘运行在不同的时区,调整每个主机的时区是一个非常好的主意,以便获得标准化的结果:
将主机添加到案件中
添加主机后,我们需要将主机映射到一个镜像:
将主机映射到取证镜像
在此之后,您需要将每个主机映射到其对应的镜像。您需要输入镜像路径并指定它是磁盘镜像还是分区镜像。在我们的例子中,它是完整的磁盘镜像。我们可以选择使用同一个镜像并仅使用符号链接,或者直接复制或移动该镜像:
向主机添加图片
然后,系统会自动列出该镜像中所有已分配的分区,并显示每个分区的起始和结束扇区。这与我们在命令行中使用mmls工具时得到的结果相同,后者要求我们选择每个分区的挂载点。在我们的案例中,只有一个 NTFS 分区,我们将把它挂载为C:分区:
将已分配的分区挂载到案件中
一条确认消息将总结您所建立的配置:
确认消息
然后,将显示一个案件首页,调查员可以在其中选择对分区或整个磁盘镜像进行的操作:
开始案件分析
现在,我们将使用C:分区,它相当于在每个命令中使用-o选项指定偏移量,这样我们就为工作分区提供了偏移量。这里,接下来的分析将针对C:分区的内容。
在声明分析之后,调查员将找到一些选项卡,针对我们之前提到的所有调查层次,例如文件分析、元数据分析和数据集群分析。然而,命令行工具在定制结果方面仍然更为强大。例如,如果我们需要使用 Autopsy 重新做我们在ntdll.dll文件上的工作,我们需要首先从文件分析标签中搜索文件名:
按文件名搜索文件
我们现在有了元数据编号25833。您可以点击该编号或在Meta Data标签下搜索该编号。这将列出该文件的所有信息,包括所有包含该文件内容的集群。我们关注的是第一个集群编号 1118226,如下图所示:
按元数据 ID 列出元数据信息
然后,以相同的方式,您可以点击集群编号或在“DATA UNIT”标签下输入集群编号,它将以 ASCII、十六进制或 ASCII 字符串视图显示文件内容:
按集群编号列出集群内容
我们可以看到集群的状态为已分配,文件的签名(在其十六进制视图中)依然是0x4D5A(MZ)。
首先
使用 TSK,我们可以找到并恢复已删除的文件。这些已删除的文件仍然在元数据区域中保留其信息,这就是我们能够识别其信息并知道它们在数据区域位置的原因。如果没有已删除文件的条目,而我们只在数据区域中有文件的内容且没有该文件的元数据(根据这一假设,该文件将位于硬盘的未分配区域),在这种情况下,文件雕刻技术将有助于恢复此类文件。
每个文件有不同的类型,例如 Microsoft Office、Adobe、exe 和 AVI。文件名末尾的扩展名并不是区分文件类型的依据。每个文件的开头都有一个头部,且各类型文件的头部不同。有些文件类型在文件的结尾有一个尾部,但这并非强制要求。文件雕刻技术利用这些头部和尾部在图像或硬盘的未分配区域中切割并识别文件的位置,以恢复这些文件。
Foremost 是一款基于文件雕刻技术恢复数据的 Linux 工具。我们可以将 foremost 应用到所有图像上,但我们已经知道,雕刻操作将仅对未分配区域有效。那么,为什么不将 foremost 应用于未分配区域作为一个单独的文件呢?这个单独的文件是通过 tsk 的 blkls 工具从图像中生成的,命名为 unallocated.blkls。我们可以从硬盘中雕刻出这个生成的文件,以查找已删除的文件(如果有的话)。
foremost 的输出结果是在工作目录下的不同目录,使用 --o 选项时,每个文件类型都会有一个以文件类型命名的目录。如我们所知,每个文件会从簇的开始处开始,因此我们不需要搜索簇中其余的内容。我们可以使用 --q 选项,仅搜索簇的开始部分,以快速得到结果:
使用 Foremost 在图像中雕刻未分配区域
然后,在运行该工具的结果中,我们会发现一个 audit.txt 文件和一个 PDF 目录被创建在 foremost-results 目录下。打开 audit.txt 文件,我们可以看到一些关于文件雕刻过程的信息,例如时间、大小和提取的文件。在我们的案例中,只有一个 PDF 文件是从图像的未分配区域中提取的:
通过 foremost 提取的文件
由于如前所述,这个文件缺乏元数据,我们无法知道关于该文件的任何信息,除了文件的大小和内容。这个 PDF 文件是为了测试目的而创建的,我们假设它包含与正在调查的案件相关的证据数据:
提取的 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媒体文件的一些值:图 2:注册表中与 flv 扩展名关联的值
-
在同一注册表键下搜索
VLC.flv值时,我们将定位到用于运行.flv文件类型的可执行文件。在这种情况下,它是 VLC 媒体播放器。它还提到文件系统中可执行文件的位置:图 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\Classes 和 HKEY_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 作为本示例:
图 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。当创建新用户时,该配置文件的副本会被复制到该用户下,用户在配置中所做的所有更改都会记录在该配置文件下。该过程直到该用户第一次登录时才会发生。系统开始构建该用户配置文件,如下图所示:图 5:在 Windows 中创建新用户配置文件
在 HKU 下只能找到当前登录的用户,而不是所有用户。然而,在运行中的系统中,我们可以通过注册表中的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList 键找到系统用户的位置及更多详细信息。
在这个键中,我们可以找到关于所有系统用户配置文件的基本信息,包括每个配置文件的位置,但不能找到每个用户的配置和设置。在以下截图中,我们可以找到另一个 SID 以 1002 结尾的用户配置文件,这在 HKU 下找不到:
图 6:系统配置文件列表
HKEY_CURRENT_USER 或 HKCU
HKCU 只是当前用户在 HKU 下的一个指针,具有相同的配置和设置:
图 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。在本次练习中,我们将使用精简版,这在实时分析时更加有效,因为与安装版相比,它不会在系统中留下大量痕迹:
-
在 Windows 实时系统中,打开 FTK Imager Lite 程序。
-
从文件中选择添加证据项。
-
这将要求你选择一个源。在这种情况下,我们可以选择物理驱动器或逻辑驱动器。在我们这里没有区别;我们可以选择逻辑驱动器:
图 10:FTK 源类型
-
之后,我们需要选择源驱动器,并选择 Windows 工作分区,在我们的例子中是分区 C:
图 11:源分区
分区 C 的内容将在程序的左侧窗格中显示。
-
我们需要浏览到注册表文件所在的位置。选择注册表蜂窝文件,并将这些文件导出到外部连接的存储设备或网络共享文件夹中,而不是导出到本地计算机。这可以避免覆盖可能相关的证据数据,如下图所示:
图 12:通过 FTK Imager 导出注册表文件
之后,我们可以将提取的文件带到我们的 Linux 机器上进行分析。
值得一提的是,FTK Imager 具有一个内置功能,可以获取所有注册表文件和受保护的系统文件。可以通过导航到“文件” à 获取实时系统中的受保护系统文件,而无需添加任何设备或分区来访问此功能。
从取证镜像中提取注册表文件
要从取证镜像中提取文件到 Linux 中,我们需要首先将系统分区挂载到系统中作为只读,然后进行简单的复制和粘贴操作来提取注册表文件。
要在 Linux 中从取证镜像挂载一个分区,首先需要知道该分区在取证镜像中的偏移量。这个任务可以通过使用 TSK(The Sleuth Kit)中的 mmls 命令来完成。TSK 将在后续详细讨论:
图 13:Windows 分区
结果显示,系统分区从扇区 2048 开始。利用这一信息,我们可以将该分区挂载为只读:
-
首先,我们需要在
</mnt/mountpoint>创建一个目录作为挂载点,然后运行挂载命令,如下所示:图 14:创建挂载点并挂载映像
如我们所见,偏移量必须以字节为单位。因此,我们需要将其代入此公式(512*2048),其中 512 为扇区大小,2048 为扇区号。在此命令中,我们还选择将映像挂载为只读,显示系统文件,并忽略大小写,以便更容易浏览文件而不会出错。
-
因此,我们可以看到,所有的文件系统结构都可以从挂载点轻松访问:
图 15:挂载的系统分区
-
由于我们知道系统中注册表文件的位置,因此可以开始复制它们:
图 16:复制注册表文件
-
同样也可以对用户配置文件执行此操作。这里我们有两个用户: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/: |
| 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 字节:
图 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{D43B12BB-09B5-40DB-B4F6-F6DFEB78DAEC} | 这是根键的名称。其长度为 52 字节或字符。 |
表 4:单元格分析
现在,我们可以得出结论,这是一个名为CMI-CreateHive{D43B12BB-09B5-40DB-B4F6-F6DFEB78DAEC}的根键,大小为 136 字节,包含 11 个子键,没有值。现在,我们需要找出这个根键下的子键名称。
根据之前的分析,从 hbin 开始,子键列表的偏移量为 0x11E28。因此,我们需要加上 0x1000,从 hive 文件的开头获取它。最终偏移量为 0x12E28:
图 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 个字节。我们将看到每个偏移量会指向另一个具有不同名称的条目,如下图所示:
我们可以看到,在新的条目中,父单元格偏移量为 0x0020,这是名为CMI-CreateHive{D43B12BB-09B5-40DB-B4F6-F6DFEB78DAEC}的第一个条目的偏移量。
子键的完整列表如下:
-
应用事件
-
控制台
-
控制面板
-
环境
-
EUDC
-
身份
-
键盘布局
-
网络
-
打印机
-
软件
-
系统
为了通过实际案例验证这些结果,我们可以使用本地的 regedit 工具在我们的测试机上显示注册表。如果列表与结果匹配,则说明解析成功,如下图所示:
图 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 键中,以便在任何人登录系统时运行:
图 22:Zeus 自动运行技术
注册表分析
在我们从实时系统或取证镜像中提取注册表文件后,需要对它们进行分析。
我们将使用 RegistryRipper 和 sysinternals 进行注册表解析和分析。
RegistryRipper
Regripper 是由 Harlan Carvey 开发的一个 Perl 开源跨平台工具,可以从 code.google.com/p/regripper/ 下载。它解析注册表结构,搜索取证中重要的区域,并列出这些区域的内容。调查人员需要理解结果,并从输出中提取异常。
该工具是一个命令行工具,它也有一个简单的 GUI,可以分析不同类型的 hive。通过图形界面,调查人员可以选择一个 hive 文件进行分析,并通过从配置文件下拉框中选择 hive 文件的类型来选择要在该 hive 文件上运行的插件列表。报告将以 txt 格式创建,并且在分析过程中会创建一个日志文件,以便查看成功和失败的插件:
图 23:RegRipper 图形界面
RegRipper 还提供了一个命令行接口,可以与其他 Linux 工具(如 grep)一起使用,直接过滤分析结果。命令行非常简单,如下所示:
-
对 hive 文件运行完整配置文件,其中配置文件将提供针对特定 hive 运行的插件列表:
图 24:对 hive 文件进行完整配置文件分析
-
或者,你也可以只运行一个插件来分析 hive 文件,从中提取一条单独的信息。在以下图中,只有 appcompatcache 插件在系统 hive 上运行:
图 25:从 hive 文件中提取单个信息。
值得一提的是,appcompatcache 会解析注册表中的应用程序兼容性缓存,该缓存存储有关系统中可运行程序的信息。它存储有关路径、大小、最后修改时间戳、可执行文件的最近运行时间以及是否在系统中执行过的信息。
一个可能表明系统上安装了恶意软件的恶意结果是与以下图示的某银行恶意软件相关的可执行文件:
图 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:这是一个提取的注册表蜂巢:图 27:模拟 Windows 注册表文件夹
-
-
然后,我们在 Wine 中运行
autoruns.exe。autoruns.exe工具将显示许多自动运行的注册表项和服务,以及更多有用的分析信息。 -
从文件中选择 分析离线系统...,并浏览到新创建的文件夹:
图 28:打开模拟的目录
该程序具有不同的选项卡来过滤注册表。例如,登录选项卡会过滤整个注册表,在系统登录时运行。这些键通常由恶意软件可执行文件使用,以在重新启动后保持其在系统中的存在,正如前面讨论的那样:
图 29:离线系统注册表分析示例
如图 29 所示,对于所有处于黄色并且在Image Path下的条目,我们将找到文件未找到。这是正常的,因为相关系统实际上未运行。
小贴士
计划任务列表很重要,需要进行检查。一个恶意可执行文件保持其存在的技术是将自身添加为定期运行的任务。
MiTeC Windows 注册表恢复
MiTeC WRR 是另一个值得一提的注册表分析程序。它一次只能打开一个注册表集合,并且可以同时打开所有注册表集合。除了以结构化格式查看注册表之外,它还可以根据任务过滤注册表,例如启动程序和用户数据。WRR 可以在 Linux 中在 Wine 环境下运行:
图 30:MiTeC WRR
总结
在本章中,我们介绍了注册表作为 Windows 操作系统中最重要的工件之一,它包含大部分操作系统和安装程序的配置和设置。我们解释了每个注册表集合的功能及其在文件系统中的位置。此外,我们分析了一个注册表文件的结构,这是在需要分析损坏的注册表文件或恢复的注册表文件片段时的重要过程。然后,我们解释了恶意软件如何利用注册表来保持其在系统中的存在,并介绍了如何发现它们的存在。我们使用不同的工具来查看和分析注册表文件。
在下一章中,我们将介绍 Windows 操作系统的另一个重要工件,即事件日志文件。我们将探讨如何使用事件文件来跟踪系统用户的活动,以及如何发现系统中的恶意活动。