想要硬刚勒索病毒,脱密加密的文件,是很难的。之前,我已经介绍了数字签名,勒索病毒使用了公钥加密另一个常用应用“数字信封”技术。
想要恢复勒索病毒加密的文件,可以破解黑客的公钥,或者破解黑客加密文件的临时对称密钥。而这2种算法,黑客都选用了目前可靠的算法,不可能被破解。
为什么不能被破解?这2种算法保障着全球信息系统的安全性,如果能通过破解加密算法恢复文件,现代的信息防护技术也就都失效了。因此,如果必须恢复文件,目前的办法就是支付赎金给黑客,然后加固系统。
数字信封
不严谨的描述一下:
1.随机选取对称密钥
2.用对称加密明文得到密文
3.用公钥加密对称密钥,得到加密的对称密钥。
4.将密文和加密后的对称密钥保存在一个文件中。
最后的数字信封中全部是密文,先要解密数字信封,必须要有公钥对应的私钥,先从数字信封中解密对称密钥,在解密密文。
上面只是最简单的数字信封原理,我们可以进一步了PKCS#7解数字信封的格式,参考文献3。
数 字 信 封 格 式 (不带签名) | |
版本号 | 0 |
接收者信息 | 版本号 |
证书序列号 | |
对密钥的加密算法标识 | |
加密的报文密钥 | |
加密内容信息 | 数据类型 |
数据加密算法标识 | |
加密的内容 |
数 字 信 封 格 式 (带签名) | |
版本号 | 0 |
接收者信息 | 版本号 |
证书序列号 | |
对密钥的加密算法标识 | |
加密的报文密钥 | |
信息摘要算法 | 算法标识 |
加密内容信息 | 数据类型 |
加密的内容(使用报文密钥加密) | |
证书 | 签名者证书和签发者证书(可选) |
签名者信息 | 版本号(1) |
签名者证书序列号 | |
签名时间 | |
签名算法 | |
加密的签名值(使用报文密钥加密) | |
其它属性 |
勒索病毒
先看一下分析资料,
加密过程
1, 病毒运行时会随机生成RSA Session公私钥对,私钥命名为:计算机-#-加密时间.key。
此文件会被随机生成的AES-256 key对称加密,保存在计算机-#-加密时间.key.~xdata~ 文件的头部。
2, 病毒作者用事先准备好的RSA公钥,把随机生成的AES-256 key加密后,保存在 *.key.~xdata~文件的尾部。
3, 普通文件,用随机生成的AES-256 key进行加密后存在文件头部。(大于100M的文件,只加密前15M,小于等于100M,大于等于10M的,加密前10M,小于10M的文件,加密filesize & 0xFFFFFFF0的 全文)
4, 用RSA Session public key加密随机生成的AES-256 key,并保存在加密文件的尾部。
解密过程
5, 病毒作者手中的RSA private key可以用来解密*.key.~xdata~ 的文件尾,获取到文件加密的AES-256 key。
6, 用上一步解密出来的AES-256 key 解密*.key.~xdata~,可以获取完整的RSA Session private key。
7, 用RSA Session private key解密用户电脑上所有的*.~xdata~ 文件尾部,获取每个文件的AES-256 key。
8, 用上一步获取到的AES-256 key解密每个 被加密文件。
解密的重点在于黑客手上的RSA private key!黑客在解密时,是不能提供自己的私钥的,*.key.~xdata~文件中就是一个加密对称密钥,黑客只需要解密这个文件还原AESkey,这里和数字信封原理是一样的。
黑客还用了一些技巧,每个文件都采用不同的对称密钥,和临时RSA Session private key ,这里是数字信封的原理用了2遍,做了一次嵌套。
个人感觉RSA Session private key,没有给加密系统增加安全性。如果我来做,用主AES key加密每个文件的AES key。这个观点大家是否支持?
参考文献:
1.XData勒索病毒加密方式剖析及解密工具 https://www.freebuf.com/sectool/136540.html
2. WannaCry勒索病毒,是这么一回事 https://www.guokr.com/article/442167
3. PKCS1签名&PKCS7签名&PKCS7信封格式 http://blog.sina.com.cn/s/blog_6a17ac950102w1ka.html