[译]我们能相信自己的眼睛吗?

几天前一个客户向我们提交了一个样本(SHA1值为fbe71968d4c5399c2906b56d9feadf19a35beb97,检测结果 为TrojanDropper:Win32/Vundo.L)。这个木马使用了一种特殊的方式劫持了vk.com以及vkontakte.ru这两个域名 (都是俄罗斯的社交网站),并将他们重定向到92.38.209.252的IP地址。

通常劫持一个网站并将其重定向到攻击者的IP地址的方法是修改位于%SystemRoot%system32driversetc目录下的 hosts文件,然而,当我们在被感染的机器上打开hosts文件的时候,里面并没有发现与vk.com和vkontakte.ru相关的重定向规则,如 下图所示:
Windows hosts文件
但是当设置显示隐藏文件的时候,我们发现了另一个hosts文件,该文件是隐藏的,如下图所示:
被隐藏的hosts文件
竟然在etc目录下存在两个名字同为hosts的文件,这到底是怎么回事呢?

我们都知道同一目录下是不允许存在同名文件的。现在我们复制这两个文件的文件名到记事本之中,并保存为Unicode文本文件,再在十六进制编辑器中打开文本文件,我们可以分别看到如下的情况:
通过16进制编辑器对比
对于Unicode(UTF-16),0x006F与ASCII中的0x6F是一样的,都是字母“o”。那0x043E在Unicode中又是表示什么呢?我们可以查一查Unicode字符对照表(0×0400至0x04FF),下图是这个表的部分截图:
Unicode字符对照表
我们可以看到0x043E在Unicode中表示一个西里尔(Cyrillic)字符,这个字符酷似小写英文字母“o”。现在可以断定隐藏的hosts文件才是真正的hosts文件,当我们打开这个文件时可以看到里面添加了两个网站的IP重定向:
真正的hosts文件内容
至此谜团终于解开了。

黑客通过Unicode字符来误导用户已经不是第一次了,在2010年8月,一位中国黑客披露了一种利用Unicode控制符来诱导用户执行可执行 文件的手段。黑客使用Unicode控制符0x202E(RLO)来逆转文件名的部分字符,使得文件名在资源管理器中看上去不一样。

举个例子,有一个文件名为“picgpj.exe”的文件,如下图所示:
正常文件名picgpj.exe
“gpj.exe”是有目的选取的名字,当在“gpj.exe”前面插入一个RLO控制符的时候,整个文件名看起来是这样的:
通过Unicode RLO处理后的假文件名
黑客同时使用一个图片图标作为可执行程序的图标,粗心的用户会误以为这是一个jpg图片文件,并盲目的通过双击来打开它,从而执行了可执行文件。显然这种手段对Unicode敏感的程序没有作用,但是用户却很难凭着眼镜来辨别。

我们能相信自己的眼睛吗?答案是……并不是经常是这样的。

原文:Can we believe our eyes?
案例:W32/XDocCrypt.a Infects Executable and Doc Files

译文原文:http://www.programlife.net/can-we-believe-our-eyes.html
演示:
Unicode RLO文件名混淆