前情提要就不多说了,标题里说的病毒就是在5月12日爆发的那个勒索病毒WannaCry。
这个病毒的运作机制是利用漏洞传播到你的电脑里,然后加密你的文件并向你索要赎金。如果你交赎金,那么有一定几率就会获得解除文件加密的密钥。
在原理上,该病毒利用AES-128和RSA算法加密,这是两种比较可靠的算法。正常来说,除非你掌握了真正的密码,否则没有人能“恢复你的文件”——对,杀毒软件之前说能恢复都是忽悠,他们只是骗你安装全家桶而已。
换个说法,如果AES-128和RSA被攻破了,那意味着世界上所有的银行都不安全了,安全界才真的是要雪崩。
所以……那些被加密的文件就真的没救了吗?
等等,Windows XP不是有一堆漏洞嘛?本来不就是现存最不安全的操作系统之一嘛?反过来说,难道在XP上用了这两种算法加密文件就能保证一定不会被盗走吗?
有位外国安全小哥反向思维了一下发现:竟然不是!
我们先从原理上解释一下:
病毒在加密的时候先生成一个AES密钥,然后将AES密钥用RSA2048进行本机加密,接着本机的RSA2048密钥被黑客再次用RSA2048加密。
本来是一个万无一失的加密过程,但是……
旧版本的Windows XP早年曾有过另外一个奇葩的漏洞,就是系统的随机数生成器并不是“真随机”。也就是说在生成随机数之后,不会把它立刻从内存里清除!
RSA算法在加密的过程中,需要这些随机数来加密。早年RSA算法爆出的另外一个漏洞导致如果你知道了在加密过程中使用的随机数,那么你就能推算出原文件是什么。
你可以不严谨的把上面这段话理解为:原本利用这两个漏洞黑客是可以通过木马偷到你的银行账户,但现在利用这两个漏洞可以直接看到WannaCry的正确密码!
只要写个小脚本去读内存,就能解锁文件啦!
就职于安全公司Quarkslab的研究人员Adrien Guinet首先想到了这个思路,然后在他的Github上公布了可以用于恢复WannaCry加密文件的工具WannaKey。
不过,要使用这个小工具,你还是需要满足两个非常苛刻的条件的:
你的Windows版本是XP SP2的早期版本或SP2以前的版本,因为之后的版本修复了随机数生成器漏洞。
你的电脑在中毒之后没有重新启动过,否则存留在内存里的随机数会在重启时被删除。
如果你的幸运值EX,恰巧满足了上述两个条件,那可以在GitHub上下载到WannaKey来获取密钥,并于同一个作者那里下载到用于解密文件的工具WanaFork。
如果,你近些天今明两天看到又国内的安全公司推出了真的能解密的工具,那不要太惊讶一定是用这个原理逻辑实现的。Win7也有解密的可能,因为Win7也爆出过随机数生成器漏洞,如果你恰好是有漏洞的那个版本,理论上也可以解密。
但我并不觉得这有什么意义,因为事情过去这么多天大多数机器早都已经重新启动过了。在这里写出这篇文章的主要目的是为了再次提醒大家:不要抱着旧版系统不升级了,它真的不安全,连病毒运行在旧系统上都不“安全”!
另外,你知道最讽刺的是什么吗?这个恢复工具所利用的RSA算法漏洞,也是NSA埋的……和这次WannaCry利用的永恒之蓝漏洞来自一个地方:
关注PingWest品玩(微信号:wepingwest)
发现更多有趣好玩的内容