这篇blog名字有点蛋疼,文件系统方面知识不是很懂,在网上查了一些资料,再加上一点自己想法,打算拼凑成一篇文章,于是有此文。

  • 文件系统
  • 1. FAT32

    FAT32最早出现在1997年的Windows 95B中,几乎所有主流操作系统都可以创建、读取和写入FAT32分区,对于低容量外部存储(例如USB闪存驱动器)FAT32仍然是一个不错的选择。现代操作系统在默认情况下选择NTFS,Mac操作系统运行HFS+。

    作为一个32位文件系统,FAT32被限制为最大分区大小32TB,8KB簇,虽然这种格式的原来格式限制被限制为最大分区2TB,而当前Windows操作系统让其难以使FAT32分区大于32GB。簇大小直接取决于分区大小,簇的范围从512字节到8KB之间。由于文件大小被存储在4字节字段中,最大文件大小限制为4GB。这对于视频文件或者驱动器镜像而言,将是一个问题。文件名是灵活地,允许最多255字符。FAT32并不支持日志(journaling),这意味着用户数据或元数据的完整性问题可能导致信息丢失。FAT32不支持权限管理。

    Windows XP提供安装到FAT32分区的选项,而Windows Vista和7并不提供,因为它们依赖于NTFS。

    2. NTFS

    新技术文件系统与Windows NT一起推出,与IBM的HPFS很类似。文件大小可以高达16TB(理论上是16EB),而分区目前最大可达256TB。其文件大小限制与FAT32的4GB相比更具现实意义。文件名最多可长达255字符。NTFS支持LZ77压缩、文件级加密(通常是AES)和访问控制,通过ACL管理。4KB(FAT32为32KB)簇大小确保写入驱动器的小文件不会浪费太多容量。这也是为什么4KB簇大小对SSD性能的重要性,你会发现,NTFS比其他文件系统更具优势。

    主文件表(Master File Table,以下简称MFT)存储文件的属性、位置和访问信息。最小的文件直接被保存在MFT中。与文件分配表不同,MFT在格式化过程中并不会被完全写入,会随着时间的推移而增长。正因为如此,它是唯一可以经受碎片的。它还能够日志记录元数据,这意味着写入操作先被记录,写入程序再执行,日志中会记录成功完成的结果。写入过程会因为电源故障而失败吗?例如,系统恢复之前写入的日志和恢复到稳定的文件系统状态。

    3. exFAT

    exFAT是微软专门设计来处理闪存的,高容量SDXC卡都采用了exFAT,虽然并没有严格要求使用。所有现有Windows版本(从Vista SP1或XP SP2起)都支持exFAT,高达64ZB,文件高达16EB。与FAT32不同,其簇可以增加到32MB,访问控制通过ACL管理。自由空间位图负责容量分配,提高删除性能。这能够最大程度的提高写入性能,尤其是与NTFS相比,NTFS要求被删除的数据被覆盖。

    然而,因为微软的exFAT授权机制,该文件系统并没有像FAT32和NTFS一样受到广泛支持。因此,exFAT还没有广泛应用于消费类电子产品,尽管它就是为此目的而设计(即使XP SP2和Mac OS X 10.6.5都支持exFAT)。Windows Vista和7在很大程度上依赖于NTFS提供的文件权限和其他功能。

    4. HFS+

    HFS+也被称为Mac OS Extended, 它能够在所有类型的存储设备上运作,包括光盘。HFS+支持日志,且分袂通常可以安装在Unix和Linux系统中。即使给定内核不支持HFS+,通常可以找到可选软件包,然而,有时候这些只支持读取HFS+格式化的分区。另外还有第三方工具提供Windows对HFS+的支持,例如Paragon Software的HFS for Windows或者Mediafour的MacDrive。

    HFS+具有512字节扇区(被分组成分配块),最多支持255个字符的文件名,最大文件大小为8EB。HFS+通过不断尝试寻找足够容纳一个被写入文件的自由空间来管理文件碎片。文件大小的增加可能会导致文件需要完全被重写。最后,自10.3版本的Mac OS X开始支持动态碎片整理,当文件被分为8个以上部分且其他活动/访问先决条件不适用时就会采取行动,HFS+支持访问控制、压缩和加密。

  • 文件系统场景注意
  • 由于微软专利的限制,NTFS格式硬盘不能被mac写入,只能以只读方式查看数据。对于移动硬盘,若希望可以在mac和PC上面通用,建议格式化成FAT32。

    MAC OS不只支持FAT32,Mac也有自己的分区格式(HFS+),Mac OS X 中的宗卷和文件限制:
    最大宗卷数(所有 Mac OS X 版本)无限制
    文件夹中的最大文件(或者文件和文件夹)数(所有 Mac OS X 版本)最多 21 亿 (2)
    最大宗卷大小和文件大小 (Mac OS X v10.0 - 10.1.5)2 TB (1)
    最大宗卷大小和文件大小 (Mac OS X v10.2 - 10.2.8)8 TB (1)
    最大宗卷大小和文件大小 (Mac OS X v10.3 - 10.3.9)16 TB (1)
    最大宗卷大小和文件大小(Mac OS X v10.4 或更高版本)接近 8 EB (1,3)

  • NTFS文件流
  • NTFS文件系统实现了多文件流特性,NTFS环境一个文件默认使用的是未命名的文件流,同时可创建其他命名的文件流,windows资源管理器默认不显示出文件的命名文件流,这些命名的文件流在功能上和默认使用的未命名文件流一致,甚至可以用来启动程序。

    生成文件流方法比较简单,如图:

    1. echo HelloShy >> test.txt
    创建test.txt文件,并写入内容HelloShy。
    2. echo hide content >> test.txt:hide.txt
    创建流文件,test.txt:hide.txt,并写入内容hide content。
    3. notepad test.txt:hide.txt
    打开流文件,会发现确实已经写入了hide content。

    此时,我们看当前目录,会发现只有一个文件test.txt。没错,默认情况下我们很难发现这个文件的存在,因此在黑客攻击中,这是一种隐写技术。

    注:如果test.txt删除,则test.txt:hide.txt流文件也将会消失。

  • winhex工具
  • winhex 是一个专门用来对付各种日常紧急情况的工具。它可以用来检查和修复各种文件、恢复删除文件、硬盘损坏造成的数据丢失等。同时它还可以让你看到其他程序隐藏起来的文件和数据。总体来说是一款非常不错的 16 进制编辑器。得到 ZDNetSoftwareLibrary 五星级最高评价,拥有强大的系统效用。

    具体来说,WinHex[2] 是一款以通用的 16 进制编辑器为核心,专门用来对付计算机取证、数据恢复、低级数据处理、以及 IT 安全性、各种日常紧急情况的高级工具: 用来检查和修复各种文件、恢复删除文件、硬盘损坏、数码相机卡损坏造成的数据丢失等。功能包括 (依照授权类型):
    * 查看,编辑和修复磁盘,可用于硬盘,软盘,以及许多其它可存储介质类型。
    *支持 FAT12/16/32, exFAT, NTFS, Ext2/3/4, Next3, CDFS, UDF
    * 内置RAID和动态磁盘分析器
    * RAM 编辑器,可直接查看/编辑被调试程序的虚拟内存
    * 数据解释器,精通 20 种数据类型
    * 使用模板编辑数据结构
    * 连接,分割,合并,分析和比较文件
    * 智能搜索和替换功能,进行替换时,如果替换字符大于或小于原始字符时可进行选择性操作
    * 不同驱动器克隆以及驱动器镜像解释
    * 脚本和应用程序接口(API)
    * 用于文件和磁盘的成熟的撤消和备份机制
    * 加密和解密数据,Hash计算(校验和,CRC32,MD5,SHA-1,...)
    * 粉碎文件和磁盘数据,粉碎后的文件和磁盘数据任何人都不可能进行恢复
    * 支持所有剪贴板格式的导入
    * 数据格式转换,支持二进制,16 进制 ASCII,Intel 16 进制,及 Motorola-S 等数据之间的相互转换;
    * 隐藏数据和查找隐藏数据
    *支持打开超过4GB的文件,而且速度很快
    * 用于计算机进程的众多显著有效的高级功能

    下载地址:
    http://www.winhex.com

  • 使用WinHex工具排查流文件隐写
  • 以上面的test.txt为例子,给大家演示如何查找流文件。

    1. 使用管理员什么打开WinHex应用程序

    2. 选择对应的磁盘

    3. 找到文件所在目录,并选中文件

    在编辑器下面,会显示此文件的额外信息,我们可以看到隐藏的流文件名字和他的内容。

  • 可能的攻击手法
  • 回到本文标题————文件后门,在一些特定场景,我们可以利用文件隐写方式,隐藏我们的木马程序。

    通常情况下,漏洞扫描器不会扫描这种流文件,对于windows的服务器,在攻击时,不妨思考这类攻击的可能。

    网上有提出关于文件引用的攻击方式,大概是说编写php代码:
    include("test.txt:hide.txt");

    而test.txt:hide.txt这个文件内容则写eval之类的攻击语句。

    个人觉得,此攻击手法极为鸡肋,既然都能修改目标网站代码,加入include。那么权限已经很高,隐写方法仅是锦上添花而已,并未对攻击有实质性贡献。

    因此,本文仅作思路讨论。