APFS文件系统科普贴

以下所有文字描述及截图均基于macOS10.13.6(17G65)

  1. APFS简介

    APFS是apple在WWDC2016跟随ios13一起发布的新一代文件系统,用以取代年龄比xp还大的HFS+(HFS Extend)文件系统。当升级到以下系统版本时会自动转换已有文件系统到apfs:macOS10.13,iOS 10.3, tvOS 10.2,watchOS 3.2。当然考虑到iOS10.3不支持32位设备,所以iphone5及之前的老设备都没机会享受这种待遇了。在macOS里面看到的大概是下图这样:
  2. APFS是个容器,多个卷共享存储空间

    这种设计与其他文件系统都不同,倒与lvm或者ldm的设计原理类似但又有区别。从上图我们可以看到这个APFS的容器一共53.48G,被4个卷共享空间(shared by 4 volumes),展示在界面上的只有一个卷叫APFS,放到火眼证据分析中解析可以看到4个卷:
    默认安装10.13系统并且选择磁盘选择格式化为apfs类型时,系统默认生成四个卷:

    APFS:这个名称不一定叫APFS,在系统安装界面会提示用户输入这个卷名,用于存放系统和用户数据。
    Preboot:如果启用了FileVault加密会通过这个分区启动系统。(加密问题比较复杂,后面会详细说)
    VM:交换分区,开机后会挂载在/private/var/vm。
    Recovery:进入macOS的recovery模式,比如可以用来清除用户密码。

    在APFS这个容器中,最多支持100个apfs卷,所有卷共享容器空间,但内容互相独立,这种独立包括文件系统的属性。通过磁盘管理可以动态的在APFS容器中添加或者删除apfs格式的卷(在这里其他的文件系统都是不被支持的),所允许创建的卷类型如下:
    从上图可以看出APFS卷创建时有2个选择:大小写是否敏感,是否加密。默认情况下是大小写不敏感(Case insensitive)和不加密。
    大小敏感:主流的linux文件系统都是大小写敏感的,比如ext系列,xfs之类。这意味在在同一文件夹下允许存在只有大小写不同的两个文件。文件系统不会搞混。
    是否加密:APFS设计时就考虑了安全性,所以把加密做到了文件系统这个层级,后面详细聊APFS加密问题。
  3. APFS的Copy-On-Write机制
    Copy On Write机制提供了很多的优点,无论是在数据安全性还是文件写入性能方面。所以Copy On Wite特性也被运行到了很多技术场合,最为熟知的是qcow镜像,同样vhd的差分镜像与vmware的snapshot也有类似的味道在里面。APFS的很多功能也依赖于Copy On Write特性。
    比如APFS的Time Machine和写文件。设想现在有一个1G的大文件,需要修改这个文件的第1个字节。那么传统的做法一般是把文件修改写在磁盘上同样位置。但是如果保存过程中发生的某种错误,那么这个文件就被永久损毁了,所以会存在数据的不一致性这种风险。而Copy On Write的做法是分配一个新的block块将数据写入,再将旧的数据块标记为未使用。这样做既可以提高性能,又可以降低错误率。
    单独要说的是APFS的复制功能。从Copy On Write原则看,文件的复制并没有改变文件的内容,所以APFS的做法是分配一个新的block块将原文件的元数据(文件名,权限,内容所在块之类信息)复制过去,这样做完后连内容所在块都不用调整,还是指向原来文件内容。所以这就是网上一直传闻的在APFS文件系统中复制文件并且不额外占用空间的原因。

  4. APFS加密的开启和关闭
    对于想额外添加加密卷则直接在磁盘管理中执行增加卷的操作并选择为加密即可。
    同样,关闭加密功能操作与开启操作几乎一致。
    对于已安装好系统的macOS,想开启系统卷的加密功能采用下列方法:
    系统偏好设置-> 安全与隐私 -> 点按锁按钮以更改 -> 开启FileVault


4.APFS的FileVault加密
HFS+ 没有原生的加密支持。为了达到数据的安全性,HFS+ 卷采用 CoreStorage 加密层进行包裹。CoreStorage 是一个逻辑卷管理系统,可以在数据块层次对卷中的数据进行加密。当我们对CoreStorage 中的加密卷进行“解锁”的时候,会生成一个新的逻辑卷设备,其中包含整个已解密的文件系统,包括卷中以连续块方式存在的未分配空间。如果我们对这个逻辑设备进行镜像,就会得到接加密卷的所有处于解密状态的块数据(包括未分配的数据块)。
APFS 在文件系统级别对数据进行加密。以卷为单位进行加密。“解锁” APFS 卷也不会生成特殊的处于解密状态的块设备。所以取证分析工具必须能够提供APFS卷的解密能力,而且在FileVault加密开启的情况,一定需要对目标设备做全盘镜像。

APFS采用了基于块单位的XTS-AES-128加密操作。想解密块数据除了需要提供加密块数据还需要提供128bit的卷加密秘钥,二级加密密钥,加密盐值(大部分情况是加密数据所在的块编号,但并不全是)。如果提供了用户密码或者recovery秘钥,目前火眼可以正确解密APFS并且处理大小写问题。(弹出窗口给出卷名提示输入密码)
  1. 关于APFS的数据恢复
    对于未加密的APFS卷,可以直接扫描出未分配簇各种恢复手段各显神通不影响。
    对于加密的APFS卷,扫描出未分配簇后存在以下问题:
    (1). 无法得知这个未分配簇属于哪个卷,即使知道所有卷的密码,不同的卷的卷秘钥与二级秘钥都不相同。而且无法尝试,因为基于AES加密的特性,是无法判断解密数据的正确性的。
    (2).假设第一个问题已经搞定了,无法得知准确的加密盐值。
    所以对加密APFS卷做数据恢复难度相当大。

你可能感兴趣的:(APFS文件系统科普贴)