勒索那点事
0x01一个故事开头
这次事件我就不过多描述,病毒的故事始于对如下域名的访问:
www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com
勒索程序开头会去尝试访问这样一个域名,如果成功,平安夜。
后来听说一位安全小哥注册了此域名,就大范围抑制了病毒的感染。然而在中国效果最差,不得不吐槽一下中国网络的质量。
不知道大家有没有这么个疑问,为什么要去访问这样一个域名?给大家讲个逗逼的故事,我开始还跟一个小伙伴讨论,如果作者在这个域名里加一个随机数,让域名变成:
www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea76545677.com
这样子,任你注册再多的域名,也无法阻止它,引入随机数,瞬间高大上,有木有?
当我觉得为自己的想法洋洋得意的时候,一个闷不做声小哥说,直接把访问域名那段逻辑注释掉,或者不管访问成功与否,都进行下面的动作,岂不是更好?
仔细想想,好像是这么回事,没毛病啊。瞬间打脸,很尴尬有木有。。。
老大实在是看不下去了说道,这只是病毒程序的一个开关。作者也无法预知病毒的破坏力和感染力,对于不受控的病毒,后果是无法预料的,而这个开关算得上他能控制病毒最后一招。如果不小心被抓住,破坏性越大,他的惩罚也越重。等到后期,及时注册这么一个域名,也算是最后苍白的补救。
不过还是有一点得吐槽,敏感字符硬编码在程序中,是违反安全红线的啦!稍稍反编译分析一下,就暴露无遗,这不符合病毒程序编写规范,就像ofo的密码一样。如果别人早早发现,早早注册这个域名,病毒的破坏力就大打折扣了嘛。那么该怎么做,还有什么办法可以给病毒做一个好开关呢?本文不谈技术,有兴趣的小伙伴可以讨论下。
0x02聊点加密技术
那就再聊聊加密那点事。这里主要用到了两个算法:
RSA:https://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95
AES:https://zh.wikipedia.org/wiki/%E9%AB%98%E7%BA%A7%E5%8A%A0%E5%AF%86%E6%A0%87%E5%87%86
简单说说这两个算法:
RSA是非对称加密,包含两个密钥对:
公钥:(N, e),可以公开
私钥:(N, d),私密保存
AES是对称加密算法,加解密双发约定好密钥,用这个密钥进行加解密。
RSA速度慢,适合做签名,证书等;AES速度快,适合对文件加解密。
没有兴趣的小伙伴,可以跳过这一段,你只需要知道,黑客用一个很牛逼的方法,把文件加密了。他如果不告诉你密钥,你就不可能恢复。对,这样理解就可以了。
本次病毒用了两层RSA和一个AES,设计5个密钥(3对)。
1-1:RSA-Pub-Key 全局公约,唯一,硬编码在程序
1-2:RSA-Pri-Key 全局私钥,跟RSA-Pub-Key配对,病毒作者手里
2-1:RSA-Pub-Key-Vic 每个受害者一个,随机产生并保存
2-2:RSA-Pri-Key-Vic 跟RSA-Pub-Key-Vic配对产生,但被RSA-Pub-Key加密
3:AES-Key 每个文件一个,随机产生,但被Pub-Key-Vic加密
加密过程:
(1)RSA-Pub-Key-Vic=>xxxxxxxx.pky
(2)RSA-Encrypt ( Key = RSA-Pub-Key, Text = RSA-Pri-Key-Vic )=>xxxxxxxx.eky
(3)RSA-Encrypt ( Key =RSA-Pub-Key-Vic, Text =AES-Key )=>Encrypt-Key
(4)AES-Encrypt ( Key = AES-Key, Text = File )=>Encrypt-File
(5)Encrypt-File + Encrypt-Key=>xxxxFile.WNCRY
最终留给受害者和加解密有关的文件是:
1个受害者公钥:xxxxxxxx.pky
1个被RSA加密的受害者私钥:xxxxxxxx.eky
N个被加密的文件:xxxxFile.WNCRY
解密过程:
只能拥有病毒作者手里的 RSA-Pri-Key 私钥才能完成解密。
(1)xxxxFile.WNCRY=>Encrypt-File, Encrypt-Key
(2)RSA-Decrypt ( Key =RSA-Pri-Key, Text =xxxxxxxx.eky )=>RSA-Pri-Key-Vic
(3)RSA-Decrypt ( Key =RSA-Pri-Key-Vic, Text =Encrypt-Key)=>AES-Key
(4)AES-Decrypt ( Key =AES-Key, Text =Encrypt-File)=>File
描述到这里就说完了,下面上个流程图,看看解密过程是如何进行的。
橙色框框里面的内容,表示保存在受害者电脑上的东东。
算法分析:
整个加解密流程还是符合密码学设计规范的,加密过程只和硬编码在程序中的RSA-Pub-Key有关,而从RSA-Pub-Key也得不到任何能够恢复RSA-Pri-Key的有用信息。病毒作者只需要维护一个RSA-Pri-Key根密钥,就可以完成对所有解密过程的控制。受害者需要把自己的eky上传给病毒作者,病毒作者解密恢复出受害者的私钥,再通过这个私钥完成对文件的解密。RSA2048的安全强度还是很高的,目前基本不可能破解,没有密钥来破解AES加密的内容,目前也是不可能的。可见在没有病毒作者的根私钥,想从算法的层面上恢复文件,基本是不可行的。
这种树状的密钥维护机制,作者只保留根密钥,其余的2层密钥都在本地被加密存储,密钥维护的服务端是没有任何存储压力。但是缺点是所有用户都依赖于同一个密钥,一旦这个密钥泄露,那么所有文件就都能被解救了。
大家也不用着急删除这些文件,特别是重要的文件,如果这个病毒作者被抓,他肯定是会公布出这个密钥的,大家的文件还是可以被恢复回来的,只是可能要等等。那么如果他把密钥销毁了呢?那么他就失去了最后减刑的机会,大家也可以用逝去的文件祭奠他在监狱的青春。从他开放了这么个域名开关,可见他其实是不想把事情搞得太大的,而且他也说了,“他以人格担保,付费的用户就会把文件恢复”,姑且先不说他的人格值多少钱,但是为了使得更多的受害者付费,他还是会保留这个密钥的。
0x03业界补救
文件加密勒索,主要有两种方式。
(1)直接对源文件加密,这样是没办法恢复的。
(2)先将文件引入内存,然后完成加密,再将原始文件从硬盘删除。
如果是心细的黑客,会将原始文件删除后,再在存放原始文件的扇区填充一下垃圾数据,这样文件就没办法恢复了。但是幸运的是,这次勒索病毒,并没有这样做。因此在磁盘没有做大量读写的情况下(即原始文件数据没有被覆盖),可以通过恢复磁盘数据的方式来恢复文件,这就有了“概率性“恢复文件的说法。目前一些安全公司的恢复方法也都是如此。
目前一些安全公司,第一时间都对这次病毒做了二进制分析,对感染原理以及交易过程等也都有分析。事情的动态也在实时跟进,工作也都做了很多,报道和文字也很多,应对措施也及时跟上。事情也就这样被热起来,也成了大家茶前饭后的议题,我们这群吃瓜群众,也就抱着被科普的心态,百度了很多,学习了很多知识。接触业界高大上的议题,甚至牵涉到国外一些政府机构,也算是涨了见识嘛。总结一下应对方案:
(1)没有感染的兄弟,赶紧断网关闭445端口。
(2)不幸感染了的小伙伴,不要惊慌,不要付钱。
(3)可以尝试业界的免费概率性恢复方法。
(4)做好文件永远找不回来的准备。
最后还不忘苦口婆心的啰嗦几句,要有安全意识,做好防御,备份…。
实际上,我也会如此,马上你就会见识到了!
0x04一个故事结尾
这次事件,造成的破坏还是挺大的,其根本原因是由于大多数用户的安全意识薄弱,没有防范意识,实际上这个漏洞早在一个多月前就被爆出,早点关掉445端口,就不会有任何问题。
说到这里,我又想讲个故事了。神医扁鹊的故事大家都听过,他的医术更是空前绝后。而当魏文王问他:“你们兄弟三人都精于医术,谁的医术最好呢?“扁鹊却答:“大哥最好,二哥次之,我最差”。魏王不解,扁鹊说:“大哥治病,是在病情发作之前,那时候病人自己还不觉得有病,但大哥就下药铲除了病根,使他的医术难以被人认可,所以没有名气,只是在我们家中被推崇备至。我的二哥治病,是在病初起之时,症状尚不十分明显,病人也没有觉得痛苦,二哥就能药到病除,使乡里人都认为二哥只是治小病很灵。我治病,都是在病情十分严重之时,病人痛苦万分,病人家属心急如焚。此时,他们看到我在经脉上穿刺,用针放血,或在患处敷以毒药以毒攻毒,或动大手术直指病灶,使重病人病情得到缓解或很快治愈,所以我名闻天下。”
搞过软件工程的人也都知道,在设计阶段就发现问题并解决,比在产品发布后再解决问题,代价就小得多得多了多多多。
医学如此,工程如此,安全亦如此。安全甚至可以做的更早,从培养安全意识开始,防范于未然,才是安全之道,也是哲学之道。
这些大道理大家都知道,然而 who cares?就像小时候,妈妈让你出门前穿秋裤,你自己非不穿,到了学校冻成SX时,才明白,蹦一蹦其实也可以暖和起来,穿秋裤真的还是没必要。没办法,事实就是这样,受伤过的人才明白痛。只有那些论文被锁了,而愁于毕业的小伙伴,才会在墙角瑟瑟发抖吧。
作为一个不专业的看客,我也是被老心扎了铁,懵懂之中发了些感慨。给大家推荐一款牛逼闪闪公众号,时而不时会有让您眼睛一亮的东东哦^_^