注:以下内容建议在win10及以上操作系统的NTFS格式分区下复现。
近期博主在使用7-Zip,时,发现了一个很有意思的选项,叫做“交替数据流”。
经过博主研究过,发现这个还是挺有趣的,所以今天博主分享一下关于NTFS交换数据流的溯源方法。
首先,我们在任意网站下载一个文件。
然后,我们运行打开7-Zip目录下的“7zFM.exe”。(没有安装7-Zip,可以在在这里下载 https://www.7-zip.org )
再然后我们找到刚刚下载的文件。
选择刚刚下载的文件,右击,选择“交替数据流”。
可以看到打开了一个新的窗口,路径是下载文件的文件名加一个冒号,里面有一个叫做“Zone.Identifier”的文件。
我们选择他,右键,选择“查看(V)”
可以看到7-Zip运行了一个记事本打开了一个名字叫做“CyberChef_ZH_CN-master.zip:Zone.Identifier”的文件。
文件内容有两个字段,一个是“ZoneId”,另一个是“HostUrl”。
然后我们找到浏览器的下载记录,一对比就发现,HostUrl字段记录的就是我们刚刚下载文件的下载连接。
那么问题来了,为什么下载文件的时候,会被产生一个“:Zone.Identifier”文件呢?
我们可以在 https://stackoverflow.com/questions/1809725/ntfs-alternate-data-streams 找到答案,这类文件属于NTFS分区的交换数据流,而我们刚刚看到的“CyberChef_ZH_CN-master.zip:Zone.Identifier”文件则是浏览器在文件下载时所创建的一个交换数据流,里面的“ZoneId”字段被用作表示文件的来源,例如表示文件来源于互联网或者来源于本地创建等等,具体的定义如下:
typedef enum tagURLZONE {
URLZONE_INVALID = -1, //这是一个无效区域,仅在没有合适的区域可用时使用。
URLZONE_PREDEFINED_MIN = 0,
URLZONE_LOCAL_MACHINE = 0, //此区域用于用户本地计算机上已有的内容。
URLZONE_INTRANET, //此区域用于在 Intranet 上找到的内容。
URLZONE_TRUSTED, //此区域用于 Internet 上的受信任网站。
URLZONE_INTERNET, //此区域用于来自 Internet 的内容,受信任或限制区域中列
// 出的网站除外。
URLZONE_UNTRUSTED, //此区域用于不受信任的网站。
URLZONE_PREDEFINED_MAX = 999,
URLZONE_USER_MIN = 1000,
URLZONE_USER_MAX = 10000
} URLZONE
我们刚刚所看到的“ZoneId=3”则对应“URLZONE_INTERNET”,表示这个文件来源于互联网。
而“HostUrl”则表示文件的下载连接。
除此之外,“:Zone.Identifier”根据实际情况还可能保存有“ReferrerUrl”、“AppZoneId”、“HostIpAddress”、“LastWriterPackageFamilyName”等字段,均可以助于我们溯源。
当我们在取证中找到恶意样本时,便可使用此方法找到恶意样本的下载来源。
博主就曾使用此方法在取证时,溯源到恶意样本来源于某钓鱼网站。
最后,希望大家有所收获。
转载请注明:夜羽的博客 » 【原创】通过NTFS交换数据流进行攻击溯源