取证之文件系统科普贴

文件系统已经经历了很多年的发展,很难用一篇文章把文件系统完整的讲清楚。
本篇定位科普贴,涵盖文件系统中大多数概念与特性。

0x01 什么是文件系统?

计算机的文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的那个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中。
上面这段话来自维基百科对文件系统的介绍,真是晦涩难懂。总结成一句大白话就是方便用户存和取文件的东西。
下面我们会基于这个重点从多个维度了解文件系统。

0x02 常见的文件系统有哪些?

FAT16: 采用16bit记录长度信息实属硬伤,导致磁盘分区最大只能到2GB。这里特别写出FAT16是因为UEFI引导中ESP分区默认采用的是FAT16文件系统。
exFAT:FAT家族的文件系统发展到FAT32居然还有单文件不能大于4G的硬伤,这个问题在exFat里得以解决。exFat是windows,linux,macOS都支持的较好的文件系统。
NTFS:NTFS是一个跟我同龄(93年出生)的文件系统。最新版本是NTFS3.1,从windows xp一直用到win10。三大操作系统也只有windows自己能够完美支持NTFS的读写操作。在macOS和linux上面使用三方库对NTFS执行大量写操作都有丢数据的风险。
Ext4:广泛运用于各大linux发行版和android的文件系统。
APFS:苹果于2016年在WWDC宣布的新一代文件系统用以代替年老的HFS+。从macOS10.13,ios10.3版本开始均已默认使用macOS文件系统。参考之前写过一篇macOS文件系统(https://www.jianshu.com/p/c401d546cebf)

0x03 扇区(Sector)和簇(Cluster)基本概念

最大的区别是:扇区是物理硬盘层面的容量单位,而簇是文件系统层面的容量单位。
机械硬盘是由多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。磁头走过的路就是磁道,磁盘的磁道是一个个同心圆。磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区。硬盘的读写以扇区为基本单位。具体参考下图:


因为扇区的单位太小,因此把它捆在一起,组成一个更大的单位更方便进行灵活管理就形成了簇。簇是文件系统存储管理的的最小单位,在分区被格式化为文件系统时就将簇大小定了下来。每个文件系统对簇大小有自己的喜好,比如NTFS和Ext4喜欢用4096(8个扇区)作为簇大小,f2fs则默认用2M作为块大小。
文件系统中文件的存取是以簇为基本单位。以簇大小是4K为例,无论文件大小是1K还是3K文件系统都会分配4K大小给它,分配了但是未被使用的空间称为slack空间,slack空间的使用信息隐藏技术惯用手段。(参考信息隐藏第一课:https://www.computersecuritystudent.com/FORENSICS/HIDING/lesson1/index.html
不同的文件系统喜欢用不同的名称,比如NTFS中喜欢叫Cluster,其他别名包括Block,Page,Fragment,Chunk。其实是同一个东西。

0x04 文件系统的最小模型:tar

tar和zip的数据结构已经在我的文章中多次提及了,这也是特别常用的数据结构。
tar的数据结构十分简单:文件元数据与数据部分。再感受下tar的元数据部分数据结构:

Field offset Field size Field
0 100 File name
100 8 File mode
108 8 Owner's numeric user ID
116 8 Group's numeric user ID
124 12 File size in bytes (octal base)
136 12 Last modification time in numeric Unix time format (octal)
148 8 Checksum for header record
156 1 Link indicator (file type)
157 100 Name of linked file

对比于ls -l命令的返回值,你会发现一个文件的核心要素都在这里了。
在一个文件系统中,文件的元数据信息至少包括文件名,文件权限,文件类型,文件大小,所属用户与所属组,存储文件元数据信息的结构体叫inode。

0x05 tar的升级版zip

相比于tar,zip提供了与真正文件系统更接近的特性:

  1. 有magic number作为自身标志
    判断一个文件是否是zip文件首先看前4个字节十六进制是否是0x50 0x4b 0x03 0x04。如同判断是否是F2FS文件系统时首先检查1024起始的4个字节是否是 0x10 0x20 0xF5 0xF2
  2. 文件元数据与文件数据分离
    zip文件格式由文件数据区、中央目录结构,中央目录结束标志组成。在中央目录结构区记录了大量文件的元数据信息,通过deHeaderOffset偏移获得该文件在文件数据区的偏移。这个行为更贴近于文件系统的存储方式,在文件元数据中存放一个指向真正数据的偏移。文件系统中的文件数据在磁盘上不一定是连续存放的,所以文件元数据区会存放多个数据偏移和长度的组合,这种组合在NTFS中叫 data run,在其他文件系统中叫extent
  3. 压缩数据以节省空间
    文件会先经过deflat压缩然后进入zip的文件数据区,这是一种节省空间的方案。
    文件系统中节省空间有2种方案:sparse文件和文件内容压缩。
    sparse(稀疏)文件是各大文件系统都会比较喜欢的高效利用磁盘空间的方案,除了最差劲的HFS不支持sparse特性。当文件中部分(至少一个簇)内容或者全部内容为空(全0)时,则在文件系统中不为空数据分配空间。
    文件内容压缩Apple文件系统(HFS/HFS+/APFS)的特色,而且这些文件中并不是所有文件数据都会被压缩。因为数据的压缩意味着读取和修改时都需要经历解压再压缩的操作,很明显这个过程是很耗时间的。只有不被频繁修改的文件才适合启用压缩选项,比如库文件,可执行的二进制文件。
  4. 扩展域
    相比于tar,zip有一个很大的优点是提供了扩展域的支持。扩展域用于存储数据结构未规定的信息。比如zip标准数据结构中只有文件最后修改时间这个字段,但是文件创建时间和最后访问时间也很重要啊!此时就用到了扩展域。
    文件不仅仅包含元数据和文件内容。部分文件系统还提供了attribute这个概念,类似于zip的扩展域用以记录文件更多的信息。比如NTFS允许自行追加命名的$DATA属性内容,就形成了ADS流。APFS文件系统中"com.apple.decmpfs"记录了文件内容被压缩后的数据,类似的还有"com.apple.FinderInfo","com.apple.ResourceFork"等其他扩展属性。
  5. 数据加密
    文件打包为zip时允许输入密码以加密文件内容。现代部分文件系统也在逐渐带入加密特性支持,比如新出生的APFS和依然在发展的F2FS。老文件系统想加密数据只能依靠操作系统或者三方软件帮忙了,比如NTFS,HFS+。
    macOS10.13版本之前采用的文件系统是HFS和HFS+,因为HFS和HFS+文件系统本身不具备加密特性,所以macOS中FileVault功能采用的逻辑卷管理方案(Core Storage)。因为Core Storage是在操作系统层面做的加密,所以数据可以落到任意文件系统上面(对文件系统透明),并且生成一个未加密的逻辑设备对上层文件读写操作隐藏加密这个细节。在这种情况下如果对逻辑设备打镜像是未加密的,对原始磁盘打镜像则是加密的。
    macOS10.13中引入APFS文件系统后,操作系统事情变得简单了。因为直接采用文件系统层面的加密,所以也省去了Core Storage这个中间层。对上层文件读写操作而言依然感受不到数据被加密解密的过程。在这种情况下只能在操作系统层面关闭FileVault功能(会将磁盘上所有加密文件解密)再打未加密磁盘镜像,或者直接打磁盘镜像在取证软件中解密。

0x06 文件的inum

inum(index number)概念广泛存在于所有文件系统,用于唯一标识某个文件,存储在每个文件的元数据数据结构中。注意与上面提到的inode概念区分,inode是一个结构体保存文件元数据信息,inum是存储在inode中的一个序号。
每个文件的inum可以通过ls命令查看,下面是针对ls命令的-i参数官方文档解释(来自man ls):

-i, --inode
              print the index number of each file

ls -li命令返回值示例(inum在第一列):

3407873 drwxr-xr-x   2 root   root   4.0K Sep 12 14:48 bin
4718593 drwxr-xr-x   3 root   root   4.0K Oct  8 14:05 boot
4849665 drwxr-xr-x   4 root   root   4.0K May  5 11:19 data
      2 drwxr-xr-x  19 root   root   3.9K Oct  7 12:48 dev
6029313 drwxr-xr-x 111 root   root   4.0K Oct  7 12:48 etc
5505025 drwxr-xr-x   4 root   root   4.0K Jan 11  2019 home
     22 lrwxrwxrwx   1 root   root     33 Oct  7 12:48 initrd.img -> boot/initrd.img-4.15.0-65-generic
     12 lrwxrwxrwx   1 root   root     33 Oct  7 12:48 initrd.img.old -> boot/initrd.img-4.15.0-64-generic

当理解inum这个概念后,就很容易的理解linux命令中很多命令。比如ls -l展示出来的硬链接数,软链接与硬链接的本质区别,find命令中-inum参数如何使用。

文件系统很多,但每个几近相同。编程语言很多,但基本概念是共通的。三大操作系统本质上也没有区别。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容

  • 何为APFS 在iOS 10.3中,苹果新增了APFS新文件系统,最早在2016年WWDC大会上公布。APFS是A...
    一个人在路上走下去阅读 7,344评论 1 24
  • 以下所有文字描述及截图均基于macOS10.13.6(17G65) APFS简介APFS是apple在WWDC20...
    cracker_zhou阅读 12,720评论 0 1
  • WinRAR - 最新版本的更新 版本 5.50 1. WinRAR 和命令行 RAR 默认使用 RAR ...
    王舒璇阅读 2,380评论 0 2
  • 禅房中坐禅 心无杂念定 禅定把迷破 迷破见自性 爱之存有临在笔!
    爱之存有临在阅读 235评论 3 8
  • 我幻化为你的影子 想随你花开缱绻 爱却彷徨去了极夜 你笑容哽咽 还问我扶桑花期 一世菩提与你虔诚拥抱 生死轮回做你...
    阆苑奇葩阅读 148评论 1 1