我们该相信自己的眼睛吗?
就在几天前,我们的一个客户提交了一个病毒样本(SHA1: fbe71968d4c5399c2906b56d9feadf19a35beb97, 检测为TrojanDropper:Win32/Vundo.L),这个木马劫持了vk.com和vkontakte.ru域名(这两个都是俄罗斯的社交网站)并将他们重定向到了92.38.209.252这个ip,但是他们使用了一种不太寻常的方式。
通常劫持域名并将用户重定向到攻击者的仿冒网站都是通过修改Window系统位于%SystemRoot%system32driversetc目录下的hosts文件实现的,但是,我们在检查了受感染电脑的hosts文件之后并没有发现任何与vk.com和vkontakte.ru相关的条目,hosts文件看起来一切正常:
但是在我们选择显示隐藏文件之后,我们看到了另外一个隐藏的hosts文件,就像下面这样:
etc目录下居然有两个名字完全相同的hosts文件,这怎么可能?
很显然,一个目录是不可能包含两个名字完全相同的文件的,我们将这两个文件的名字拷贝到写字板,并保存为Unicode文件,然后使用16进制编辑器打开这两个文件(上面的是那个隐藏的hosts文件,而下面的则是第二个“hosts”文件):
在Unicode(UTF-16)中,0x006F就代表ASCII的0x6F,也就是字符“o”,但是Unicode的0x043E是个什么东东,通过查找Unicode码表(范围:0400-04FF),我们发现下面这个字符:
我们可以看到Unicode 0x043E是一个斯拉夫文字母,但是它看起来和英文的”o”字符几乎没有区别,所以那个隐藏的hosts文件才是真正的hosts文件,打开这个文件,我们可以看到木马在其中添加了2个条目:
谜底解开!
这并不是我们第一次发现黑客使用Unicode字符来误导用户,在2010年8月,就有一个中国黑客借助Unicode的控制字符来误导用户执行exe文件,黑客使用了Unicode控制字符0x202E(RLO)来反转部分文件名,这会改变文件名在Windows资源管理器中的呈现。
举个例子:假设有一个文件叫做”picgpj.exe”,就像下面这样:
文件名中的”gpj.exe”是有意构造的,只需要在”gpj.exe”前面插入一个RLO字符,文件名在资源管理器中就变成了下面这样:
黑客通常都会使用一个图片的icon来作为程序图标,这样粗心的人们就会将这个文件当作是一个图片,双击去执行它,从而导致恶意程序运行,很显然,这种技巧对于Unicode敏感的程序是没有意义的,但是对于人眼,要发现其中的猫腻则不那么容易。
那么我们应该相信自己的眼睛吗?答案是… 不总是
———-
本文来自微软恶意程序防护团队博客文章”Can we believe our eyes?”,作者:Zhitao Zhou,翻译:@yuanyiz