[揭秘]基于磁盘数据的电子取证过程详解

0×1 简介

随着计算机犯罪个案数字不断上升和犯罪手段的数字化,搜集电子证据的工作成为提供重要线索及破案的关键。恢复已被破坏的计算机数据及提供相关的电子资料证据就是电子取证。NSTRT也曾协助进行过电子取证的工作,本期NSTRT将以一个假定的案例对基于磁盘的电子取证的过程进行一次讲解。

在一般的数据取证工作中,为了证据保全,确保取证工作造成数据丢失,在获取到证据介质后,首先要做的就是对介质数据进行全盘镜像备份。在制作完镜像备份后,接下来要做的就是对镜像进行数据提取了。

本文按照数据提取的常规思路,来介绍如何利用磁盘存储和文件系统的知识来进行磁盘数据提取。

对磁盘数据进行备份的方式中,比较常见的格式有dd、img、raw等。在提取了磁盘镜像后(本处使用dd镜像),使用某些工具可以详细地分析查找各种可用的数据。这里以强大的TSK(The Sleuth Kit)工具包为例进行说明。(工具下载)The SleuthKit可以对存储镜像做基于文件系统层,数据层,inode层和文件层等多个角度的详细分析。

本例假设得到一个dd镜像文件image.dd,取证的目标是查找JimmyJungle相关的数据信息。

在本例中,我们制作好了一个dd镜像,文件名为image.dd。本次取证的目标是查找与“JimmyJungle”相关的数据信息。

在对磁盘数据进行取证时,我们会进行多个层面的分析,包括文件系统层、数据层、inode层和文件层。这些不同的分析层面互相之间有着紧密的关联。下面我们来一一介绍各个层面的对取证的作用和分析过程

0×2 文件系统层分析

在得到一个磁盘或镜像后,一般首先会先进行文件系统层分析。文件系统层分析,顾名思义,就是了解磁盘分区的文件系统信息。获取文件系统信息不是为了直接获取数据,而是为了给后续的数据层分析和文件层分析提供分析依据。这些分析依据包括扇区信息、数据区域信息、目录区域信息和簇信息等。

在TSK里面的fsstat工具用于分析镜像的文件系统信息。使用方法非常简单,直接在命令行后面加入磁盘或镜像文件的路径。如下图显示了此镜像的扇区总数为2879,数据区域位于扇区19-2879,磁盘根目录位于扇区19-32,用于存放文件的地方位于扇区33-2879。簇大小为512b,刚好一个扇区。

0×3 数据层分析

数据层分析简单来说就是是分析磁盘镜像中基于簇的数据信息。数据层包含了文件的真实内容。分析数据层的目的是在磁盘的簇信息中查找目标相关的数据线索。数据在不同的文件系统里存储在不同名称的单元结构中。

我们首先提取未分配空间内容至un.ls:

D:\Program\sleuthkit-win32-4.0.2\bin>blklsd:/image.dd > D:/un.ls

然后提取un.ls里面的ASCII字符串(也可以按需求选择其它格式字符串)。D:\Program\sleuthkit-win32-4.0.2\bin>strings-t d D:/un.ls > d:\str.str,对un.ls立面的字符串进行搜索,找到了Jimmy Jungle的相关内容:

发现数据内容Jimmy Jungle,其中第一个信息位于未分配空间区域的第2560个扇区。下面我们以地址2560为第一个线索进行分析。

根据前面fsstat数据信息得知,簇大小为512,用2612除去簇大小后得知数据位于第5到第6个簇的开头之间。所以“Jimmy Jungle”的相关数据块位于未分配空间中的第5个簇。下面使用blkcalc工具计算第5个簇的扇区位置。

计算出image.dd的第五个簇位于扇区的位置是38。

在原始dd镜像中提取38号数据单元的内容。下图使用命令blkcat,不加其它参数的话默认只显示1个簇内容。

D:\Program\sleuthkit-win32-4.0.2\bin>blkcat.exed:/image.dd 38

0×4 inode层分析

首先介绍一下文件系统的inode。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

通过inode层我们能够了解到数据存储单元与文件属性信息的联系。

我们使用ifind工具查找数据区域扇区号对应的文件元数据信息的位置:

D:\Program\sleuthkit-win32-4.0.2\bin>ifind.exe-a -d 38 d:/image.dd

由以上命令得知,此文件的文件元数据信息位于第五个元数据结构单元。

下面我们使用istat工具来输出此文件的inode信息:

D:\Program\sleuthkit-win32-4.0.2\bin>istat.exed:/image.dd 5

0×5 文件层分析

文件层的分析主要是根据inode信息来收集文件的具体内容。

根据inode层所提供的信息得知此文件为一个后缀名为doc的文档,大小为20480字节,占用的扇区为33-72一共40扇区。占有的扇区包括如下

33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64
65 66 67 68 69 70 71 72

把此内容提取出来存为word文件。

D:\Program\sleuthkit-win32-4.0.2\bin>blkcat.exed:/image.dd 33 40 > d:/dd.doc

这样一个完整的文件就提取出来了。

至此,我们就根据得到的信息提取出了一份完整的文件 。

0×6 总结

通过以上的步骤,我们看到几个层次之间的线索共享关系,并通过各种关联的方法得到了最终想要的结果,除了上述的基于磁盘的取证外。对其他类型数据的取证技术也非常多,取证的思路也多种多样。这是一个最简单的磁盘数据分析例子,希望能够给大家对磁盘的取证分析带来一个系统化的分析和学习思路。目前电子取证技术发展越来越快,并且已经从原先的PC端取证延伸到了移动终端,在未来电子取证也将成为信息安全的一个重要分支领域,NSTRT也将在以后的技术分享中继续给大家介绍其他的取证技术。

原文发布时间为:2015-02-03

本文来自合作伙伴“大数据文摘”,了解相关信息可以关注“BigDataDigest”微信公众号

时间: 2024-08-03 18:36:35

[揭秘]基于磁盘数据的电子取证过程详解的相关文章

基于Android实现百度地图定位过程详解_Android

一.问题描述 LBS位置服务是android应用中重要的功能,应用越来越广泛,下面我们逐步学习和实现lbs相关的应用如定位.地图.导航等,首先我们看如何基于百度地图实现定位功能 二.配置环境 1.注册密钥:地址http://developer.baidu.com/map/ 2.下载定位SDK,并导入SDK如图所示:   三.编写MyApplication类 编写MyApplication类,为了使用方便我们可以将实现定位的方法封装的Application组件中 封装下列方法 1.  获取定位信息

基于Linux网关服务器squid配置过程详解_Linux

前言 在此,我们要配置一个只对内部网络提供代理服务的 Proxy Server.它具有如下功能它将用户分为高级用户和普通用户两种,对高级用户采用网卡物理地址识别的方法, 普通用户则需要输入用户名和口令才能正常使用. 高级用户没有 访问时间和文件类型的限制,而普通用户只在上班时可以访问以及一些其它的限制. 安装 从源中安装 源中自带稳定版本,执行下面的命令进行安装 sudo apt-get install squid squid-common 源码编译安装 当然你也可以到官方网站下载最新的版本进行

基于Android实现百度地图定位过程详解

一.问题描述 LBS位置服务是android应用中重要的功能,应用越来越广泛,下面我们逐步学习和实现lbs相关的应用如定位.地图.导航等,首先我们看如何基于百度地图实现定位功能 二.配置环境 1.注册密钥:地址http://developer.baidu.com/map/ 2.下载定位SDK,并导入SDK如图所示: 三.编写MyApplication类 编写MyApplication类,为了使用方便我们可以将实现定位的方法封装的Application组件中 封装下列方法 1.  获取定位信息--

JavaScript处理解析JSON数据过程详解_javascript技巧

JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包. JSON的规则很简单: 对象是一个无序的"'名称/值'对"集合.一个对象以"{"(左括号)开始,"}"(右括号)结束.每个"名称"后跟一个":"(冒号):"

Sql Server使用cursor处理重复数据过程详解_MsSql

/************************************************************ * Code formatted by setyg * Time: 2014/7/29 10:04:44 ************************************************************/ CREATE PROC HandleEmailRepeat AS DECLARE email CURSOR FOR SELECT e.email

SQL语句执行过程详解

SQL语句执行过程详解一条sql,plsql的执行到底是怎样执行的呢?一.SQL语句执行原理:第一步:客户端把语句发给服务器端执行当我们在客户端执行 select 语句时,客户端会把这条 SQL 语句发送给服务器端,让服务器端的进程来处理这语句.也就是说,Oracle 客户端是不会做任何的操作,他的主要任务就是把客户端产生的一些 SQL 语句发送给服务器端.虽然在客户端也有一个数据库进程,但是,这个进程的作用跟服务器上的进程作用事不相同的.服务器上的数据库进程才会对SQL 语句进行相关的处理.不

Android的init过程详解(一)init的初始化

本文使用的软件版本 Android:4.2.2 Linux内核:3.1.10 本文及后续几篇文章将对Android的初始化(init)过程进行详细地.剥丝抽茧式地分析,并且在其中穿插了大量的知识,希望对读者了解Android的启动过程又所帮助.本章主要介绍了与硬件相关初始化文件名的确定以及属性服务的原理和实现. Android本质上就是一个基于Linux内核的操作系统.与Ubuntu Linux.Fedora Linux类似.只是Android在应用层专门为移动设备添加了一些特有的支持.既然An

新浪微博OAuth认证和储存的主要过程详解

 本文给大家介绍的是参考Twitter的认证过程实现的新浪微博OAuth认证和储存的主要过程详解     网上很多关于OAuth的文章,但是包括sina本身都都没有详细的的介绍,包括验证过程和验证后数据的储存,所以参考了Twitter的认证过程写下一些详细的注释代码. 在我们开始前,我们先建立一张数据库来保存用户信息,下面是一个基本的 Mysql 的例子: ? 1 2 3 4 5 6 7 8 9 CREATE TABLE `oauth_users` ( `id` INT(10) UNSIGNED

《嵌入式 Linux应用程序开发标准教程(第2版)》——2.2 Linux启动过程详解

2.2 Linux启动过程详解 嵌入式 Linux应用程序开发标准教程(第2版) 在了解了Linux的常见命令之后,下面详细讲解Linux的启动过程.Linux的启动过程包含了Linux工作原理的精髓,而且在嵌入式开发过程中非常需要这方面的知识. 2.2.1 概述 用户开机启动Linux过程如下: (1)当用户打开PC(intel CPU)的电源时,CPU将自动进入实模式,并从地址0xFFFF0000开始自动执行程序代码,这个地址通常是ROM-BIOS中的地址.这时BIOS进行开机自检,并按BI