剖析RTF文件中的Anti-Analysis技术

2016-04-27 222510人围观 ,发现 2 个不明物体 终端安全

这篇文章主要介绍几个最近的恶意RTF文件中存在的Anti-Analysis反分析技术,以及进一步提高rtfobj的处理能力。

武器库RTF文档

RTF文档和其他的MS Office格式文档相比一直公认很安全。事实上RTF文档确实不会包含宏。然而,较少人知道RTF文档可以包含一些恶意的OLE对象。更具体点,是OLE  “Package”对象,可以存储任何文件,包含可执行文件和脚本。如果最后用户双击这种对象,嵌入的文件将会被系统打开。这个特征经常会在真实场景下用来传递恶意软件,之后我们也会看到。

更糟糕的是,很多杀毒引擎不能够扫描存储在RTF文档中的文件:这篇文章在2007年曾提到过,并且根据我的测试,virustotal上将近一半的杀毒软件不能检测到。

RTF文档同样可以包含存在于MS word中的漏洞,从而可以任意代码执行。最后,同样可以包含其他软件的漏洞,例如Flash对象(SWF文件)。

RTF结构

一个RTF文档是由众多带参数的控制字构成的,同时被{……}所包含。控制字以反斜杠开始,例如”\fonttbl”。一个花括号内可以包含多个控制字,成为一个组。花括号同时可以包含普通文本,可以被其他花括号嵌套。下面是一些RTF控制字的例子:

 {\version1}

{\fonttbl{\f0\froman Tms Rmn;}{\f1\fdecor Symbol;}{\f2\fswiss Helv;}}

根据 Microsoft RTF Specifications第12页的描述, RTF Version部分在RTF文档中应该总是以控制字{\rtf1 开始,表示RTF版本1.x。

下面是一个RTF文档的例子(摘录自RTF说明文档)

{\rtf1\ansi\deff0{\fonttbl{\f0\froman Tms Rmn;}{\f1\fdecor Symbol;}{\f2\fswiss Helv;}} 

{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;

\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;}

{\stylesheet{\fs20 \snext0 Normal;}}{\info{\author John Doe}{\creatim\yr1990\mo7\dy30\hr10\min48} 

{\version1}{\edmins0}{\nofpages1}{\nofwords0}{\nofchars0}{\vern8351}}

\widoctrl\ftnbj \sectd\linex0\endnhere\pard\plain \fs20 This is plain text.\par}

嵌入对象

OLE对象使用一系列关键字进行存储,在Microsoft RTF Specifications第150页有详细的说明,” Object”部分:

{\object … {\objdata }}

对象数据通过使用OLESaveToStream格式(后面章节将会介绍)被序列化成字节字符串,字符串通过\objdata编码成16进制数据。

在说明文档中没有严格定义这些16进制编码数据。使用MS word或者WordPad可以查看RTF文档,其实就是一些16进制数据字符串,以及使用空格或者换行符分成很长的行。

下面是一个RTF文件中包含的MS word文档的OLE对象样本:

{\object\objemb{\*\objclass Word.Document.12}\objw9355\objh1018{\*\objdata 

01050000 

02000000 

11000000 

576f72642e446f63756d656e742e313200 

00000000 

00000000 

003a0000 

d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000

0000000000010000000100000000000000001000000200000001000000feffffff000000000000

0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

在这些16进制数据中可以很明显看出并提取这些对象。这个我在工具rtfobj中也实现了。

Anti-Analysis技术

然而,最近我发现了几个恶意的RTF样本(感谢@iHeartMalware, @r00tbsd 和@Sebdraven)不能被rtfobj正确解析。

在确认后,发现它们通过精心制作来欺骗安全工具,使用的是一些反分析技术。下面我们仔细看一下。

Trick #1:不完整的RTF头部

一些文件开始使用”{\rt0”或者” \rtvpn”,而不是MS文档说明的那样使用”{\rtf1” 。这些可以通过我的恶意软件搜索引擎,例如这个样本(SHA256: 04beed90f6a7762d84a455f 8855567906de079f48ddaabe311a6a281e90bd36f):

图片1.png

 MS word会认为他们是RTF文档,但是很多分析工具只会识别文本,不会认为这是RTF文件。例如,下面的来自malwr.com的截图:

图片2.png

 似乎MS word在解析RTF文件时只会寻找\rt ,来判定文件是否为RTF文件。

Trick #2:奇怪的16进制数

16进制编码的字节数据,应该总会存在一个16进制数。这个可能很明显,但是如果在16进制编码数据的后面添加额外的16进制数据呢,一些解析器可能在解码的时候就会失败。这个是我的rtfobj的一个例子。

MS word默认是许可的,忽视任何额外的16进制数据。

Trick #3:在16进制数中插入额外的空格

MS word中的16进制数据是很整齐的,所有的数据都是一组组的。但是根据我对MS word的实验,在16进制数据中是可以插入空格字符的(包括空格,TAB,换行符等等),甚至在两个16进制数据可以表示一个简单的字节。

下面的例子和之前的例子是等价的:

{\object\objemb{\*\objclass Word.Document.12}\objw9355\objh1018{\*\objdata 

01050000 

02000000 

11000000 

5 7    6 f  7 2 6 4         2 e44 6f 637  56d

656e742e313200 

00000000 

00000000 

003a0000 

d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000

0000000000010000000100000000000000001000000200000001000000feffffff000000000000

0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

Trick #416进制编码数据中的虚假RTF控制字

同样查看之前的相同的样本,我们可以看到在16进制数据中额外的控制字(\object):

图片3.png

 这个在RTF说明文档中没有提到,但是根据我的测试,MS Word似乎忽略了这个控制字。为了让解析更复杂,这些控制字还可以嵌套,例如“{\foo{}{\bar}}”。

Trick #5:在16进制数据中包含二进制数据

另外一个武器库RTF样本,例如这个(SHA256: 65cd5120aa5133659bf190cb4d97609435d 059b88f9e3a969efbad070d4126bd)。

在一些0的后面插入控制字\bin,在16进制数据的中部偏右部位置:

图片4.png

在RTF说明文档的第145页,”pictures” 部分,图片数据可能是以16进制数据存储的,或者数据通过 ”\binN”控制字。但是并没有提到OLE对象中的情况,似乎MS word支持它。在测试中,任何16进制编码数据和二进制数据都是允许的。

“\bin”控制字紧跟在一个二进制数据后面的10进制数据。最终允许0。根据第8页的文档说明,”一个RTF解析器必须允许 在10位数之前选择一个负号”。

根据我在MS word中的测试,10进制数据实际可包括250个数据。

最后,在实际的二进制数据开始前,“\bin”控制字以及它的10进制参数可能会紧跟一个可选的空格字符。

这些问题真的要紧么?

的确,很多解析RTF文档的工具需要提取包含的OLE对象。这些具有安全分析能力的工具例如rtfobj和officeMlaScannner/RTF,同样也是反病毒引擎。

我在EICAR测试文件使用一个包含OLE package的RTF文档:在VirusToal上,测试了56个反病毒引擎,30个检测到了EICAR文件。这让人很吃惊,因为期待的是100%检测率,但是这些年我们知道,一些杀毒软件不会分析RTF中的嵌入文件,因为当用户打开他们的时候,这些文件会被捕捉到。

然而,将本文描述的技巧全部应用上去的话,只有6个杀毒引擎可以检测到疑似病毒文件。而在这6个当中,只有两个能正确检测到EICAR文件。剩下的4个只会报告说RTF文件有缺陷或者混淆过的。

当所有的技巧都布置上去就可以隐藏恶意的payload,邮件通道、网络服务以及一些检测系统将不能正确捕捉到变化。而这些技巧早就在野外的一些样本中使用了。

Rtfobj

我的工具rtfobj是一个很简单的python脚本,用来提取RTF文件中的OLE对象。根据本文的描述,最近我又提升了一部分功能。

这个脚本已经被@r00tbsd和@Sebdraven分析最近的一个MS word的漏洞了CVE-2015-1641,具体可以看这篇文章:http://www.sekoia.fr/blog/ms-office-exploit-analysis-cve-2015-1641/

新版本的rtfobj可以在oletools package中下载。

*参考来源:decalage.info,FB小编东二门陈冠希编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

发表评论

已有 2 条评论

取消
Loading...
css.php