IT学习网 - 爱学习 - 最具影响力综合资讯网站 -- 中国IT界的领航者!
热门关键字:      88888  as  xxx
站外
广告
站外
广告

NotPetya 勒索病毒Salsa20算法实现的缺陷分析

发布时间:2017-08-03 14:01文章来源:互联网文章作者: 佚名点击次数:
2017年6月份,NotPetya勒索病毒试图通过The Shadow Brokers泄露出的永恒之蓝等漏洞再次攻击全球网络系统。目前,关于NotPetya的算法解密工作目前并没有明确的解密进展。 360CERT团队在对NotPetya病毒所自定义实现的Salsa20算法分析过程中,发现存在两处变化

2017年6月份,NotPetya勒索病毒试图通过The Shadow Brokers泄露出的“永恒之蓝”等漏洞再次攻击全球网络系统。目前,关于NotPetya的算法解密工作目前并没有明确的解密进展。

360CERT团队在对NotPetya病毒所自定义实现的Salsa20算法分析过程中,发现存在两处变化。其中一处明显降低了标准Salsa20算法的加密强度,在一定条件下可以对加密数据进行解密。

0x01 Salsa20的简单介绍

Salsa20的原理是产生一种伪随机的字节流。 这种字节流在很长(约2的70次方)范围内和真正的随机字节流无法区分。 这样做到了和一次一密密码本(OTP,One Time Pad)加密等价的效果。

伪随机数流的产生其实就是将64字节(512比特)的输入送入核心函数,然后得到512比特的输出的过程。 每次输入的字节包含密钥、初始向量和计数器。 这样,要产生长度是N字节的伪随机数流,只需要调用核心函数若干次,直到获取了足够长度(不少于N)的输出即可。

64字节的输入如下:

\

本文所讨论的差异就是上面64字节产生的不同,核心函数都是相同的。

0x02 差异一:常量不同

原算法的常量:

\

样本的常量:

\

【结论】对算法的强度没有影响

0x03 差异二:小端化函数不同

原算法s20_littleendian函数:

\

样本s20_littleendian函数:

\

【差异】样本中原本是想模拟原算法的操作,但因为要在MBR中运行,采用了WORD为单位的运算,shl ax 10h时就会把ax清零。这样导致的后果就是64字节的输入的高位WORD会被填充为0,相当于将原函数改为:

\

【效果】原先的64字节输入:

0xdeadbeef 0xdeadbeef……0xdeadbeef(一共16个0xdeadbeef)

经过s20_littleendian函数后:

0x0000beef 0x0000beef ……0x0000beef(一共16个0x0000beef)

【影响】进入核心函数后:

\

虽然输入的随机序列有一半为零,但是经过1轮异或移位的操作,随机序列已经不含零了。并且该算法要进行10轮这样的操作,所以得到的序列随机化程度还是很高。

进入核心函数前:

\

经过一轮异或移位操作后:

\

【结论】 64字节的输入经过小端化函数后会导致高位2个字节清零。这样的话,爆破该输入的规模就从2的256次方降为了2的128次方,约为10的38次方,所以直接爆破出密钥的可能性几乎没有。
NotPetya 勒索病毒Salsa20算法实现的缺陷分析
本文由 IT学习网 整理,转载请注明“转自IT学习网”,并附上链接。
原文链接:http://www.ourlove520.com/Article/diannao/wangluo/1031241.html

标签分类:

上一篇:上一篇:元数据:黑客最好的朋友(下)
下一篇: 下一篇:没有了
无觅关联推荐,快速提升流量