信息安全与通信保密・
2009.11
10二手房过户费怎么算
5
陈 欣,施 勇,薛 质,陈俊杰
(上海交通大学电子工程系,上海 200240)
【摘 要】文件隐藏技术是信息安全领域的关键技术,该技术对于重要信息的保护以及病毒、木马等恶
意软件的查杀和防范都有着极其重要的价值。文中介绍了NTFS的特征以及ADS的特性,简要介绍了NTFS上较重要的元文件功能及相关数据结构。在此基础上提出了一种基于NTFS的ADS特性的新型文件隐藏方案,给出了需要使用的一系列数据结构,具体讨论了该方案各步骤的技术实现细节,并且指出了如何提取那些利用该方法隐藏文件的思路。经过检验,该方法具有较高的隐蔽性和隐藏文件可恢复性。
【关键词】文件隐藏;新技术文件系统(NTFS);交换数据流;数据结构
【中图分类号】TP309.2 【文献标识码】A 【文章编号】1009-8054(2009) 11-0105-04
Study on a New Type of File Hiding on ADS
CHEN Xin, SHI Yong, XU Zhi, CHEN Junjie
(Department of Electronic and Engineering, Shanghai Jiaotong University, Shanghai 200240, China)
【Abstract 】File hiding is a key technology in information security field, study on the File hiding technology is valuable to protecting some important files and preventing and killing computer viruses or Trojans. A study on the NTFS volumes and the characteristics of ADS is presented firstly, and a bri
ef introduction of some important meta files on NTFS and some relevant data structures are provided. Based on the study a new type of file hiding method is proposed, and the detailed solutions of specific steps of the method are discussed. This article also illuminates how to extract the hidden files using this method. Using this new method the hidden files have higher concealment and recoverability.【Keywords 】file hiding; NTFS; ADS; data structure
一种基于ADS 的文件隐藏技术研究
隐藏文件怎么显示0 引言
NTFS(New Technology File System)是一种具有较好容错性和安全性的文件系统。研究NTFS的特性以及NTFS下文件的存储和隐藏方式,对于病毒和木马的防范以及数据恢复有着重要价值。文中基于NTFS磁盘上的文件存储方式,以及交换数据流(Alternate Data Streams,ADS)特性,提出了一种新型的文件隐藏方法,并对技术方案进行了整体设计。
1 NTFS文件系统以及ADS概述
1.1 NTFS 的特征和重要元文件
NTFS以簇作为磁盘空间分配和回收的基本单位,在NTFS上要定位一个簇需要用到逻辑簇号(Logical ClusterNumber,LCN)和虚拟簇号(Virtual Cluster Number,VCN)。LCN是对整个卷的簇从头到尾以0号起始的编号;VCN则是对属于特定文件的簇从头到尾以0号起始的编号。
元文件(Metadata File)是NTFS驱动程序管理卷时所必须的系统文件,NTFS中(NTFS v3.1 for WindowsXP)的元文件共有23个,这些元文件对于用户来说是不可见的。下面介绍几个NTFS中比较重要的元文件:
① 主控文件表¥MFT(Master File Table),是NTFS卷中最重要的系统文件,包含了卷中所有文件的记录信息,每个记录的大小都是固定的,为1 KB;
② 位图文件¥Bitmap,记录卷的分配状态,占用¥MFT中的第7个元文件记录。¥Bitmap中的一位与NTFS卷中的一簇对应,l表示该簇已分配,0表示未分配;
光纤宽带猫③ 引导文件¥Boot,占用¥MFT中的第8个元文件记录。¥Boot一般位于NTFS卷上的0号簇的第1个扇区,包含用于加载卷时所需的BPB(BIOS Parameter Block)表[1]。
除了上面介绍的3个元文件,NTFS上还有¥MFTMirr、
106
¥LogFile、¥Volume等元文件。1.2 NTFS 交换数据流ADS 简介
NTFS将文件/目录作为属性和属性值(属性的内容)的集合来处理,一个文件可以有若干不同的属性,也可以同时拥有若干个相同的属性。数据流属性¥DATA就可以有两种:未命名的数据流属性和命名的数据流属性。未命名数据流通常容纳用户存储的数据,它的大小就是文件的大小;而命名数据流一般都是操作系统为特定目的设置的,其大小和内容往往对用户是不可见的,这种命名数据流又称作NTFS交换数据流(ADS,Alternative Data Streams)[2]。
根据已知的文档显示,在Windows XP操作系统以及之前的所有Windows版本中,没有自带任何能够查询交换数据流功能的程序。因此,NTFS交换数据流有一定的隐蔽性,这让一些恶意软件有了可趁之机,通过ADS将自己隐藏起来,从此就从“资源管理器”中消失了。
2 基于ADS的新型文件隐藏的方案设计
虽然利用ADS隐藏文件具有一定的隐蔽性,但是目前的一些ADS检索软件已经能够查并更改ADS,而且一些主流杀毒软件已经能对基于ADS的病毒和木马进行查杀。
这里所讨论的基于NTFS的ADS的新型文件隐藏方案的总体思路是,将要隐藏的文件数据通过ADS的方式写到NTFS卷上,然后更改文件记录的相关结构,使相关软件无法对其查;对隐藏的文件数据进行提取和恢复时,可以通过隐藏时所记录的数据在卷上的具体位置,直接到并提取文件数据,其具体流程如图 1所示。
其主要流程如下:
① 将需要隐藏的文件写入宿主文件/目录的ADS中;② 备份与NTFS卷上簇的分配状态有关的元文件¥Bitmap,保存当前卷上簇的分配情况;
③ 查宿主文件/目录在¥MFT中的记录位置;④ 记录下隐藏数据所在的簇以备恢复时使用,簇信息位于ADS头结构中的运行列表中;
⑤ 删除宿主记录中的ADS的头结构,使查ADS的程序无法到隐藏的数据;
⑥ 将备份的¥Bitmap覆盖现有的¥Bitmap,以防止隐藏数据所占的簇被分配给其他文件。
如何定位文件记录以及如何定位文件的属性和属性值,是实现上述文件隐藏方案以及恢复隐藏文件的关键技术,此问题将在下面章节予以讨论。恢复隐藏文件时只需根据记录好的运行列表直接到NTFS卷上的相应位置,并把其中的数据复制到一个新的文件或直接复制到内存中去就可以了[3]。
3 具体技术实现
上述设计方案中涉及了许多关键的技术要点,本章将逐一进行讨论。首先,介绍一下设计方案中各步骤中频繁使用的有关运行列表的知识。3.1 运行列表(Run List)
感恩母亲的话10个字NTFS数据区管理采用索引存储,实际上一个运行就是若干个连续的簇。文件的每个非常驻属性都维护一个运行列表(Run List),运行列表是由一系列的运行定位组成的,每个定位存储一个相对于上一定位中LCN的偏移量(可正可负)和该运行的簇数。下面以一个具体的运行列表为例,分析运行列表的相关结构。这是一个EXE文件数据流属性的十六进制运行列表:“32 77 13 05 87 04 3289 1A A5 9E FE 00 F0 35 E1”,该运行列表含有2个运行定位,其结构分析如下[4] :
① 第1个字节“32”说明后面的5个字节(3+2)属于第一个运行定位,低2个字节0x1377表示位于该运行中的簇数;高3个字节0x048705是该运行相对于0号簇的偏移。也就是说,从0x048705号簇开始到0x049A7B号簇都是属于该文件数据流属性的第一个运行;
② 同上,可以定位第二个运行,该运行中的簇数为0x1A89个,相对于第一个运行的LCN偏移值为0xFE9EA5(-0x01615B),所以第二个运行的起始LCN为0x0325AA,结尾LCN为0x034032;
③ “00”表示该运行列表结束,为了补成8字节的倍数,随机使用3个字节占位。
图
1 新型文件隐藏设计方案
信息安全与通信保密・
2009.11
107
3.2 将隐藏数据写入NTFS 交换数据流
NTFS交换数据流可以直接在用户层创建,调用Windows提供的API函数CreateFile一个创建名为“宿主文件/目录:准备与宿主文件关联的数据流文件”的文件,再调用WriteFile函数将要隐藏的数据写入上面刚创建的文件中就行了。3.3 备份$Bitmap
备份¥Bitmap的过程是:首先在¥MFT中到¥Bitmap的记录;然后在¥Bitmap的¥Data属性的头结构中到运行列表;最后根据运行列表到¥Bitmap的文件内容并存储下来。由于¥MFT和¥Bitmap都是元文件,NTFS驱动程序出于对元文件的保护目的,没有向用户提供读写元文件的接口。下面通过寻NTFS卷的字节偏移的方法来定位¥MFT和¥Bitmap中的数据。
(1) 定位¥MFT
定位¥MFT要靠位置相对固定的分区引导扇区中的BPB(Boot Parameter Block)表来完成,BPB表位于0簇0扇区,是分区上第一段数据。NTFS卷的BPB表简要数
据结构及说明如下:
typedef struct NTFSBootParameterBlock{ //下面的偏移量都是相对于该结构开头的偏移
0x30 QWORD MFTStarLCN; //MFT表的起始簇号LCN}CNTFSBPB;[5]
根据¥MFT的起始LCN,即可定位¥MFT。
(2) 定位¥Bitmap的数据
由于¥Bitmap是¥MFT上第7个元文件,并且¥MFT中每个文件的记录占用1024字节,所以,¥Bitmap记录的字节偏移量(相对于卷开始)=¥MFT起始LCN×卷因子(簇的大小)+1024×6。¥Bitmap的文件记录以及数据存放的位置一般来讲是固定的。因此,可以直接用相对于¥Bitmap文件记录开始的偏移量,到¥Bitmap的数据运行列表,这个偏移量是0x0140,从这个位置开始后面的8个字节就是¥Bitmap的数据运行列表,并且它只含1个运行定位。根据前面所述运行列表的定位方法,就能到并备份¥Bitmap的文件内容。
3.4 在$MFT 中查宿主文件/目录的记录
位于¥MFT中第23号记录以后的记录是用户的文件/目录的记录。因此,从偏移量:¥MFT起始LCN×卷因子+1024×23处开始读入数据,每次读入1024字节数据(一个文件记录的大小),在这一个文件记录中判读是否是要寻的宿主文件/目录,需要用到文件/目录的名称属性¥FILE_NAME。根据下面¥FILE_NAME属性的数据结构,
可以到该文件/目录的名称,可以判断这条记录是不是我们要的宿主文件/目录的记录。¥FILE_NAME属性的数据结构简要说明如下:
typedef struct NTFSFileNameAttri{ //下面的偏移量都是相对于该结构开头的偏移
0x00 WORD AttriType; //属性类型,0x00000030表示名称属性0x58 BYTE CharLength; //文件/目录的名称长度,以字符计(L)0x60 BYTE FileName[2L]; //以Unicode方式表示的文件名,2L为大于文件名占用的最小整数,而且是8的整数倍,剩余空间用随机字符填充
}CNTFSFileName;
[5]
由于命名空间的不同,一个文件/目录可能存在多个¥FILE_NAME属性,然而,总是能在若干个¥FILE_NAME属性中到与宿主文件名相同的字符串(Unicode),这样就可以确定该记录为宿主文件/目录的记录。3.5 记录隐藏文件所在ADS 的运行列表
ADS是一种命名的¥Data属性,可以根据建立ADS时所使用的名称(Unicode),在宿主文件/目录的记录中寻隐藏文件所在的ADS头结构及其运行列表。¥Data属性的简要数据结构及说明如下:
typedef struct NTFSFileDataAttri{ //下面的偏移量都是相对于该结构开头的偏移
0x00 DWORD AttriType; //属性类型,0x00000080表示数据流属性电子信息类专业
0x04 DWORD AttriLength; //属性长度,常驻属性的大小0x09 BYTE NameLength; //属性名称的长度(以字为单位)0x0A WORD NameOffset; //属性名称相对于属性开头的偏移0x20 WORD RunListO
ffset; //运行列表相对于属性开头的偏移0x30 QWORD RealSize; //属性值的实际大小
0x40 BYTE Name[M]; //用于存储属性名(Unicode),M值为大于2×NameLength的整数,且是8的倍数,空位用0x00占位
0x40+M BYTE RunList[N]; //用于存储运行列表,N值为8的倍数,空位由随机内容占位
} CNTFSFileData;
[5]
南京 旅游在文件/目录的记录中寻¥Data属性与寻¥FILE_NAME属性类似。在上面的数据结构中,可以用NameLength和NameOffset到ADS的名称,用RunListOffset到运行列表。
3.6 在宿主文件/目录的$MFT 记录中删除ADS 头结构
这里删除交换数据流属性只是删除文件/目录的记录中的ADS属性结构,使一些查ADS的程序
和软件无法发现。删除ADS属性结构,可以用该属性结构后面的内容直接覆盖至该属性结构的起始位置,然后再更改文件/
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论