NTFS文件系统中文件的安全擦除

时间:2022-06-07 01:48:33

NTFS文件系统中文件的安全擦除

摘要:对于国家安全部门的文件的管理,往往与国防安全息息相关。其中,文件的销毁是文件管理的重要环节,也是防止文件泄露的工作重点。文章从安全回收文件的角度,分析NTFS文件系统的存储组织结构,给出NTFS下文件的安全擦除方法。

关键词:文件系统;NTFS;文件擦除

中图分类号:TP309.2文献标识码:A文章编号:1009-3044(2010)20-5463-02

NTFS(New Technology File System)是微软开发的具有较好容错性和安全性的文件系统。NTFS将磁盘卷中的所有数据都以文件的方式,而数据类型,大小等信息都作为文件的属性,记录在主文件表(Main File Table, MFT)记录中,每条MFT记录都分配同样大小的空间描述文件(夹)。当文件放入回收站并被清空删除时,操作系统将文件MFT记录相应字段置为删除标志(在MFT中0x16偏移处),同时文件MF记录号在$MFT的Bitmap属性中对应位置0标志该MFT记录号可供重新分配,将文件占用的数据簇在$Bitmap中的对应位置0标志空闲可供再分配。虽然删除文件,在操作系统用户视图中无法获取,但通过数据恢复手段,该文件仍然可以再现。

本文对NTFS的主文件表记录及位图文件进行分析,研究了NTFS文件系统下文件的安全擦除。

1 NTFS 卷文件管理

1.1 簇管理

NTFS以簇为基本单位分配回收存储空间[1],与FAT结构不同,NTFS卷(volume)从0扇区开始划分簇,每簇为1,2,4或8个扇区,根据分区的大小不同,最大值不超过8扇区,格式化时可以以格式化参数的形式设定。而在FAT中,由于卷管理空间的限制,只能通过增加簇大小来管理大容量硬盘,较NTFS文件系统,容易造成存储空间的浪费。NTFS簇大小,即每簇扇区数保存在BOOT扇区(0扇区)。同时,NTFS通过Bitmap文件记录所有簇的使用情况,1个bit对应一个簇,值为1表示已经分配,为0表示未分配。FAT文件系统中的FAT表不仅记录了数据簇的使用情况,还标明了数据簇的链接关系。

NTFS使用逻辑簇号(logical cluster number, LCN)和虚拟簇号(virtual cluster number, VCN)来对簇进行定位。LCN是对卷中所有簇头到尾进行简单编号,VCN则是对属于特定文件的簇从头到尾进行编号,以便访问文件中的数据,LCN是无符号整数,而VCN则是带符号整数,VCN可以映射成LCN,由Data Runs数组完成这个映射。NTFS数据区管理不是采用链接存储,而是采用索引存储[2],文件通过自己的Data Runs数据建立索引表,一个Run就是一个连续存储块,Data Runs数组由若干Run组成,以0x00结束。每个Run包括3部分,即头部,占用簇数,起始簇号。簇号用VCN,第一个VCN是相对于0簇。头部占用1个字节,存放占用簇数和起始簇号的字节数根据头部确定。如对于以下十六进制数据表示的如下Data Runs数组。

0x12 D4 38 04 00

其中,根据头部0x12取其高4位可知1字节(值为随后D4)表示占用簇数,取低4位可知2字节(值为3804),即表示0x0438簇开始的0xD4个簇。而随后的0x00表示Data Runs数组已到数组尾部。

假设一个文件的存储分布的Data Runs数组如下:

0x12 D4 38 04 31 28 D0 49 01 21 CB FF 00

则分解成4个Run:

12 D4 38 04,31 28 D0 49 01,21 23 CB FF,00

即文件存储在3个连续块:

1)Run 1: 0x0438簇开始的0xD4个簇。

2)Run 2: 0x0149D0+0x0438=0x014E08簇开始的0x28个簇。

3)Run 3: 这里VCN为0xFFCB=-0x35,则与前面Run的起始簇号累计为0x014E08-0x35=0x014DD3开始的0x23个簇,这里将VCN 0xFFCB换算成LCN,它相对于前一起始地址0x014E08。

4)Run 4: 0x00,Data Runs数组到达尾部。

由上可知,文件的存储地址并不是完全依次连续增加的,而是依据数据簇的分配算法得出的。

1.2 主文件表和位图属性

NTFS卷上的任何事物都是文件[2],文件在卷上的位置都是通过主文件表(master file table, MFT)记录来确定的,其组织结构图如图1所示。MFT是一个对应的数据库,由一系列的文件记录组成,以下称其为MFT记录。卷中每一个文件都有一个MFT记录(对于大型文件还可能有多个MFT记录与之对应),同时,MFT自身也有一个文件,也有其文件记录。MFT的每个MFT记录都有一个ID号,这个ID号从0开始,以递增的方式顺序编号。MFT自身是NTFS系统的第一个文件$MFT,其开始簇号在BOOT扇区中保存,与其他23个系统文件,他们组成系统的元文件(Metafiles),其中根目录占用ID号为5的文件记录。用户的文件MFT记录ID号从24开始分配,用户每添加一个文件ID号加1。

当某个文件被删除时,其所对应的MFT记录由系统回收,该ID号记录为空闲。在$MFT(系统元文件)的Bitmap属性中,维护各个MFT号的占用情况,可以视其为位数组。$MFT的Bitmap位数组中,每1bit代表一个文件MFT号的使用情况。如果文件MFT号对应在该数组中的标志bit为1,则表示正在使用,如果其标志bit为0,则表示该MFT号空闲并可以被系统再分配,也是文件MFT号是否使用的依据。

当某个文件被删除时,其所对应的MFT记录由系统回收,该ID号记录为空闲。在$MFT(系统元文件)的Bitmap属性中,维护各个MFT号的占用情况,可以视其为位数组。$MFT的Bitmap位数组中,每1bit代表一个文件MFT号的使用情况。如果文件MFT号对应在该数组中的标志bit为1,则表示正在使用,如果其标志bit为0,则表示该MFT号空闲并可以被系统再分配,也是文件MFT号是否使用的依据。

当需要给新文件分配MFT记录时,系统则优先给该文件分配ID号小的MFT记录,即查找$MFT:Bitmap数组中第一个不为0xFF的元素,找到第一个为0的bit到$MFT:Bitmap头的bit偏移(该空闲bit相对于$MFT:Bitmap头的bit偏移即为空闲的MFT记录号)。

1.3 位图元文件

在元文件中,除了$MFT文件还有一个位图文件十分重要。文件$Bitmap标识的是该卷中簇的占用情况。与$MFT:Bitmap类似,$Bitmap位数组中每bit代表卷定位置一簇。为0代表此簇空闲,为1代表此簇已使用。这样可以更合理的分配磁盘空间。当文件被删除,它所占用的簇对应的为会被清空(置0)。NTFS通过这个文件管理卷的使用情况,这也是文件安全擦除的重要依据。如前所述根据解析元文件$Bitmap中的0x80属性的Data Runs数组,可以得到该文件的数据。

2 文件安全擦除

2.1 删除文件的残留信息

当NTFS卷中文件被删除(清空回收站操作),系统回收其文件MFT记录,其对应MFT记录被置为删除标记,该标记录位于偏移0x16两个字节(相对于MFT记录头),0x0001表示正常文件,删除后被置为0x0000标记为删除。另外,在$MFT:Bitmap中对应位置0,标记该文件MFT记录号为空闲。如果该文件数据较少,可以在文件MFT记录中常驻,则数据不占用额外簇;如果该文件数据大于文件MFT记录长度,则以非常驻方式占用额外簇来存储数据,此时,文件被删除时,系统在回收该文件MFT号同时会将该文件所占用数据簇在元文件$Bitmap的对应位置0标记为空闲。

同时,删除文件后,系统会清除该文件所属的文件夹下该文件的目录项。在NTFS文件系统中系统在删除文件在文件夹下的目录项时,和FAT文件系统的处理有很大区别。在FAT文件系统中,当删除文件夹下的文件时,系统将该文件目录项(一般为32字节)首字节置删除标记0xE5;而在NTFS文件系统中系统是将该目录下的目录项记录前移覆盖该删除文件目录项。

由上可知,在清空回收站如果无新增文件操作后,虽然系统回收其文件MFT号、数据簇及目录项;但其包含文件名、文件大小、创建时间等重要信息仍完整保留在文件MFT记录中。尤其是包含关键信息的数据的索引也完整的保存在文件的MFT记录中,可以通过数据恢复的手段完整或部分取回该文件。而对于文件的安全造成了极大的威胁,因此要完全清除具有高保密级的文件时,就必须粉碎以上残存在磁盘卷中的所有关键信息。

2.2 基于位图文件的数据擦除

文件的数据是文件关键信息的载体,因此,在文件中的残存数据信息必须首先确保清除。在NTFS文件系统中,文件删除并作清空回收站处理后,如果该文件的MFT号被系统回收未被重新分配时,该文件的MFT记录仍存在磁盘卷中。而该文件的MFT记录中仍以常驻或非常驻属性保留该文件数据或数据的外部索引,因此,通过文件关键字定位文件占用簇后返查定位至该文件的MFT记录,可以定位到该文件的数据信息。

在NTFT文件系统中,文件的数据以0x80属性(Data attribute)存在于文件的MFT记录中,当数据较小能容纳于文件的MFT记录(一般大小为2KB)中时,清除该文件的MFT记录即清除了该文件数据。而对于用户文件数据信息,大多数都大于文件的MFT记录本身大小。对于不能以常驻方式(即直接存放于MFT记录的0x080属性中)的文件数据,则文件的MFT记录的0x80记录中存放的是索引到外部簇的索引,通常以Data Run的形式索引到外部数据簇。

综上所述,可将文件数据擦除分为以下步骤。

1)如果文件的MFT记录不存在,则读取$Bitmap位数组将磁盘卷中所有空闲簇的卷偏移并记录其卷偏移至擦除队列,执行步骤3。否则,如果文件的MFT记录存在,定位至文件的MFT记录,执行下一步。

2)读取该文件MFT记录的数据0x80属性,如果该属性为常驻标志,则执行步骤4。否则,该文件MFT记录的0x80属性为非常驻标志,定位其Data Runs数组,如前面所述进行解析,将数据簇的卷偏移记录至擦除队列,执行下一步。

3)如果队列空则数据擦除结束,否则跳至队列下一条记录得到簇偏移位置,定位至卷中该簇,并读取元文件$Bitmap位数组中对应位,如果为1则表明该簇已被占用执行步骤3,否则以填充标志(通常写全0)填充该簇,执行步骤(3)。

2.3 文件的安全擦除

当文件被删除后,要对其进行安全擦除,必须利用关键字搜索定位到该文件的数据其中任一占用数据簇,然后,从第一个MFT记录开始遍历各MFT记录返查到该文件的MFT记录,最后根据卷位图文件$Bitmap擦除文件,则可以达到安全擦除高保密级文件的要求。

综上所述,文件的安全擦除可分为以下几个步骤:1)读取卷Boot扇区,得到BPB信息(即卷空间管理的相关信息),执行下一步;2)输入文件查询关键字,遍历卷中各扇区,定位文件所属占用簇,执行下一步;3)基于位图文件的数据擦除,执行下一步;4)如果文件的MFT记录存在,则清空,安全擦除结束。

删除文件经过以上安全擦除步骤后,没有破坏卷中原有文件分布,且消除了高保密文件的信息安全隐患。

3 结束语

NTFS以其优越的安全性和稳定性,已经成为主流的文件系统,同时,随着越来越多单位对文件管理的制度化,需要相关文件管理工具的支持。本文研究了基于NTFS文件系统的安全文件擦除方法,为文件安全管理提供了有力的支持。

参考文献:

[1] 黄步根.NTFS系统存储介质上文件操作痕迹分析[J].计算机工程,2007,33(23):281-282.

[2] 粱金千,张跃.NTFS文件系统的主要结构[J].计算机工程与应用,2003,39(8):116-118.

上一篇:基于VB.NET的高职院校学籍管理系统的设计与实... 下一篇:IPv6过渡机制和安全性综述