安全路透社
当前位置:安全路透社 > 网络转载 > 正文

CIA机密文档追踪工具Scribbles详细分析

*本文原创作者:ArkTeam/Wellee,属Freebuf原创奖励计划,未经许可禁止转载

2017年4月28日,维基解密发布了CIA“涂鸦”(Scribbles)项目的文档和源代码(参考地址1)。这是一个文档预处理系统,用于给涉密文档打上“Web beacon”类型的追踪水印。该系统相关简介已有参考文章(参考地址2),在此不做过多叙述。文本首先通过其源代码,分析该系统生成水印的流程,然后通过实际使用,介绍其使用方法,并对其实际效果进行测试和总结。

一、 原理概述

“Webbeacon”追踪标签,通常被用于植入电子邮件和网页,可以利用它来发送关于邮件是否已被打开的信息。如在邮件中嵌入一个隐藏的远程图片URL,当邮件被打开时,会主动请求该URL,以加载远程图片。远程服务器获得请求,便可获知该邮件已被打开。

同理,Scribbles实际上是在文档中嵌入一种隐藏的水印,注意,该水印并不是office软件中自带的水印功能(如添加背景字等),而是类似上述“Web beacon”的原理,之所以称其为水印,是因为Scribbles的说明文档和源代码都使用的“watermark”关键词,索性在此称之为水印。Scribbles的水印严格来说就是在文档中插入一个远程图像的URL,当文档被打开时,会主动通过HTTPHTTPS协议的GET请求访问该URL以加载远程图片,远程服务器接收到请求便可得知有机密文件已经被打开,并可根据请求信息,得知文件被打开时所在的主机源IP等信息,从而进行追踪。注:下文中所述的水印都是指该URL。

Scribbles给文档嵌入上述水印,生成并记录水印中的特定字符串,当远程服务器收到请求,便可根据该请求中的特殊字符串得知是哪个文件被窃取,虽然原理简单易懂,但是该策略十分有效,具体细节下文进行介绍。

二、 系统源码分析

该系统可给Word, Excel, PowerPoint三种文档的多种版本打上水印,进行追踪,其原理和流程大致相同,下面就以Word文档水印生成流程的代码进行详细分析。

1. 水印生成流程

Word文档水印生成主要流程如下图:

图片 1.png

1) Scribbles程序运行需要从命令行或者配置文件中读取相关参数,关键参数主要有:

url_Scheme:协议类型,可为HTTP和HTTPS

hostServerName:发起请求的域名

hostRootPath:发起请求的域的根路径

hostSubDirs:发起请求的域的子路径

hostFileName:发起请求的文件名

hostFileExtList:发起请求的文件类型后缀

output_Directory:已嵌入水印的文件输出路径

output_WatermarkLog:输出构造水印日志

图片 2.png

程序根据读取的参数,生成一个特定的URL,该URL中包含一个特殊字符串,以用来唯一标识文档。

2) 接下来,程序根据读取参数,创建输出目录,复制源文件到输出目录。接下来的处理都是对输出目录中得到的新文件进行。此步骤中,如果源文件是.doc后缀类型文件,会将其转为.docx文件,打上水印后再将其处理还原回.doc类型

图片 3.png

图片 4.png

3) 接下来,在新文件中的页眉中插入图片占位符

图片 5.png

4) 然后将文件转为xml格式,存到程序创建的临时文件夹中。然后将图片占位符替换为水印URL。

图片 6.png图片 7.png

将程序中删除临时文件夹的代码注释掉,再次运行程序便可在临时文件夹中的word目录下的rels子目录的header1.xml.rels文件查看到已经嵌入的水印URL。

图片 8.png

5) 之后,程序将之前解压处理并植入水印的XML文件还原回正常的Word文档,至此水印URL在新文档中植入完成。

图片 9.png

6) 接下来将水印生成的相关信息记录到日志文件中,水印嵌入过程到此结束。

图片 10.png

三、 使用方法及测试

1. 使用方法

接下来介绍程序的使用方法:

源码部分已经说明程序需要从命令行或者配置文件中读取相关参数来构造水印URL,下面实际测试通过构造配置文件的方式让程序读取相关参数。

1) 测试所用的配置文件1.xml的内容如下图

图片 11.png

其中的参数之所以为list,是因为程序会从参数list中随机选取值,来为每个文件构造URL,具体构造的URL事例详见下文。

2) 程序一方面需要根据参数构造水印URL,另一方面,需获得要打水印的源文件的路径,路径可以为多层次的文件夹。本次测试的源文件存放位置大致如下图:

图片 12.png

InputDir是赋予程序的输入目录,程序会自动读取该目录下的所有文件夹和文件,通过复制源文件的方式,创建新文件并打上水印。之后,记录日志到配置的tsv日志文件中。

3) 命令行使用上述1.xml配置文件,运行程序,如下图:

图片 13.png

程序运行结束后,文件夹结构如下图:可看出程序按照InputDir文件夹的层次结构,在配置的OutputDir文件夹下,创建一模一样的文件夹层次结构,并复制了源文件,将其打上水印。

图片 14.png

最后,程序创建的日志文件的部分内容如下图:主要包含源文件的路径名称,水印Tag,水印URL等内容。

图片 15.png

2. 效果测试

将生成的水印文档进行测试,并进行抓包分析,证明了上述原理分析。

1) 打开嵌入水印后的Word文档,如下图:首先将源文件(左)和嵌入水印的文件(右)对比,发现嵌入水印后的文件多了页眉,当然,如果源文件本身也有页眉的话,那么直观来看,根本看不出有任何变化。

图片 16.png

打开抓包工具,然后打开文件,抓到的数据包可看到,当文件打开时,其请求了水印URL,效果如下:

图片 17.png

其中的1ntwe4fvbg77v.z8x9ntj3bj06j67b4就是前述所说的构造特殊字段,该字段保证水印的唯一性和文件的一一对应关系。

图片 18.png

观察程序生成水印时记录的日志,便可得知此次请求是因为1.docx文件被打开,另一方面服务器端收到请求,获得请求端的源IP地址,可在一定程度上进行追踪溯源。

2) 事实上,打开Word文件中的页眉,仔细观察会发现页眉左边有个很小的图像像素点,但是不仔细看真的很难发现,而且文档打开时,不会有任何提示。

图片 19.png

将页眉全选后,该像素点效果如图:

图片 20.png

拖动该像素点,将其拉长,可看到其就是一个链接的远程图片,因为水印URL是程序随机使用配置参数中的数据构造的假链接,所以文档中显示,“无法显示该图像”。如图:

图片2 1.png

至此,Word的水印构造过程和其原理已经清楚。另外,打开Excel和PPT的效果大致类似,亲测同样有效!在此不再赘述。但是有个细节是,打开PPT文件时,PPT会弹出“是否需要打开对外部图片的引用”提示,如下图:

图片 22.png

这也正是为什么运行程序时,会给出让用户确认是否需要对PPT文件进行水印处理通知的原因,防止高级攻击者打开PPT文件时发现异常。

四、总结 

Scribbles利用水印进行溯源追踪,利用了office可以链接远程文件的“漏洞”,技术实现和工作原理上都较为简洁,该技术思路未公开之前,效果也颇为明显。

但是其也存在诸多弊端,一方面如其说明文档所述,对打开文档软件的有效性有所限制,如在Linux系统中的LibreOffice中打开时会失效。另一方面,随着该技术的普及,攻击者得知后,可以在断开网络的主机上查看窃密文件,或者打开文件之前断开网络,该追踪策略也即失效。

当然该技术目前看还是有很大的应用场景的,比如企业、政府内部可以利用其制作多个欺骗性文件,以此感知未被发现的文件窃密攻击等等。还有众多应用场景,大家可以尽情发挥想象力!Happy hunting!

五、参考资料

[1] https://wikileaks.org/vault7/

[2] http://www.freebuf.com/news/133571.html

*本文原创作者:ArkTeam/Wellee,属Freebuf原创奖励计划,未经许可禁止转载

未经允许不得转载:安全路透社 » CIA机密文档追踪工具Scribbles详细分析

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册