你有没有在输入域名时把字母输错但是出现了你想要看到的网页?像appple.com、taobaoo.com这样的网页如果模仿了原网页,可以成为钓鱼网站。那么如果把脚本代码包起了一样差不多的名字感染进开发者的电脑里呢?想想就不寒而栗。大约10年前,有种名为Typosquatting的古老攻击手法——国内有将之翻译成“误植域名”的。这个词的前半部分“Typo”意思是排版错误,其实已经表达了这种攻击手法的内涵。
所以Typosquatting如果要分类的话,大概是可以划归到钓鱼攻击中去的。不过这类攻击手法主要是寄希望于用户可能会输错某些域名。最近来自德国汉堡大学的学生,利用Typosquatting攻击,将他自己的代码感染到了超过17000台开发者的计算机中。注意哦,是开发者的计算机!而且里面很多人还是为美国政府,甚至军方组织工作的。
究竟是怎么感染的?
这名汉堡大学的学生现年25岁,名叫Nikolai Philipp Tschacher。他在自己的学士论文里大致阐述了这种攻击手法,论文名为《Typosquatting in Programming Language Package Managers》,有兴趣的同学可以去搜一下。
整个过程其实很简单:他首先去浏览一些专门探讨编程语言的社区网站(如PyPI、RubyGems、NPM),记录了其中下载量较高的214个包。然后他自己伪造了这214个包,里面包含他自己的脚本代码(虽然并非恶意的),名字与这214个包非常相似。
虽然不是域名,不过他也将之称作Typosquatting攻击。实际上里面的确没有包含什么恶意代码,只是给那些下载的开发者以警示:您安错包啦!另外,这段代码还会向Tschacher的计算机发送一个Web请求,这样他就能够记录他的代码执行了多少次,是否获取到管理员权限。
攻击结果很“理想”
最终的结果是很“喜人”的,几个月时间内,他的代码就在超过17000个独立域名中执行了超过45000次,其中超过一半还获得了管理员权限。意外发现是,其中有两个域名后缀为.mil,表明这是美军有人也运行了这段脚本。Tschacher在论文中说:
“另外还有23个域名以.gov结尾,是美国政府机构的域名。这个数字是值得人们关注的,因为拿下美国研究工作室和政府机构的主机,会带来灾难性的后果。”
这件事比较有趣的地方在于,Tschacher攻击目标并非普通终端用户,而是开发者。如果Tschacher真的有意进行攻击,并植入了恶意代码,那么打击面和传播速度都并非一般的钓鱼网站可比。但凡从开发者入手的攻击,总是能够在短期内极速传播,因为如果开发过程都在神不知鬼不觉的情况下被植入恶意代码,那么终端用户遭遇攻击也就显得理所应当。
很多时候,将政府和企业作为目标的的攻击者,都很喜欢从开发者下手。因为开发者对敏感网络拥有很高的访问权限,能做的事自然就多多了。
延伸阅读:有关Bitsquatting
是不是感觉这群被感染的开发者很弱智?然而实际上,Typosquatting也有比较高级的应用。最后这部分作为简单的延伸:早在2011年的时候,安全研究人员Artem Dinaburg曾经介绍过一种名为Bitsquatting的攻击,基本理念就是取自于Typosquatting,但它并不依赖于用户输错域名,而是利用计算机的随机单比特错误。
其实所谓的比特错误是发生在硬件产品上的,比如内存、CPU缓存因为环境或者灰尘、辐射之类的,会莫名产生比特错误(如著名的UltraSparc II CPU就存在这种问题)。比如我们要访问一家网站,域名是n.com。其二进制表达方式是这样的:
n
.
c
o
m
01101110
0101110
01100011
01101111
01101101
如果内存模块发生比特错误,某一位比特发生错误,就会变成下面这样。你在访问n.com这个域名的时候,二进制数据是需要过一次内存的,但最终我们访问到的实际上是o.com,这个过程真正实现了神不知鬼不觉。如果有人注册一个o.com域名,用于模仿n.com网站,则钓鱼成功率几乎可以达到100%。
o
.
c
o
m
01101111
0101110
01100011
01101111
01101101
这听起来似乎很悬,前两年国外有安全专家特别做了针对Bitsquatting的实验(首先选择一些可能产生一比特之差的域名注册,比如说micrgsoft.com,然后主要从DNS来入手这个实验),结果每天都存在Bitsquatting后的域名请求,的确非常神奇。