NTFS文件系统中文件的安全擦除7页word
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NTFS文件系统中文件的安全擦除
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 删除文件的残留信息