如何攻破加密算法

当应用加密算法时,有许多地方可能会出错。难点在于识别和分析程序员用来加密的方法,然后寻找其中的漏洞。漏洞的种类也很多,比如弱加密算法、弱密钥生成器、服务端漏洞和密钥泄露等。

定位加密算法

在尝试寻找漏洞之前,首先要知道使用了什么加密算法。最常用的方法就是查看API调用,如果API调用可以查到,那很容易就可以识别使用的算法。

很多时候,加密算法是静态编译到恶意软件中的,或者使用了传统的写加密算法。这种情况下,就要理解解密算法的内部工作流程来识别代码。

文件的内容可以被加密然后写回文件中,所以最快的减小加密的范围的方法是交叉引用ReadFile和WriteFile API调用。加密就是在这两个点间执行的。

识别加密代码

当寻找静态加密编译的加密代码时,不需要找任何的API调用。理解加密算法的底层工作原理是非常必要的。

首先,我们看一下AES算法的高级流。大多数的同步加密算法的流都与之类似,区别在于所使用的数学操作的类型,但是核心概念是相同的。所以,理解AES对于在现实中识别其他类型的加密算法是非常有帮助的。

AES是对称加密算法,会执行一系列的数学和逻辑运算:

· 要加密的明文数据

· 静态字节是算法的一部分

· 加密使用的密钥

根据AES的选择和密钥大小,流会有所不同。从上面的图会有一些block组成的环:

· Add key添加密钥

· Shift rows行变换

· Sub bytes字节替换

· Mix columns行列交换

上面的步骤中,文件数据被读入固定字节的矩阵中。本例中是16字节,但实际上根据算法的不同,几字节都有可能。下面是这几轮的结果:

· Add key将密钥数据和输入数据矩阵进行XOR运算;

· Shift rows对数据进行移位操作。比如,数据本来是 4 5 2 1,左移1位就变成了5 2 1 4。

· Sub bytes是利用算法内置的静态字节数组。数据的每个字节都是lookup矩阵的索引。这样,一个静态的替换就发生了。

· Mix columns对矩阵中的字节进行一些数据操作和线性变换,这样矩阵中的每个字节就都变了。

上面4个步骤可以看做是一轮。AES有10到14轮,也就是说在二进制文件中寻找加密代码,应该是一段很长的重复代码。这是从二进制文件中寻找加密代码的一种方法。

下面是加密的另一轮,AES算法的另一种或相似的同步加密:

操作的顺序有点不同,但这不重要。我们并不是寻找AES算法的漏洞,我们寻找的是AES在实践时的漏洞。给出AES内部工作原理细节的原因是让大家更好的理解其工作原理,便于在代码中识别。

以Scarab勒索软件为例,它使用了静态编译的AES来加密文件,我们对不同加密算法的内部工作原来进行了研究,这可以帮我们识别使用加密算法。

这也就说明了在同一个勒索软件中可能会使用多种加密方法。我们有文件加密的流图还有加密密钥的算法。虽然这不是修改文件本身的加密,但是可以用来确保文件加密密钥的安全。这些弱点都可以用来攻破加密。技术上可以使用任意次数的加密组合,因为这是由作者决定的。必须要理解和识别每个加密算法以及所起的作用。因为攻破一个错误使用的加密算法就可以连环攻破整个加密方案。

随机数生成器

攻破加密的另一个出发点就是加密密钥生成器,大多数情况下加密密钥生成器来源于一个随机数生成器。

如果你之前了解过任何加密的话,就应该知道随机数生成器的重要性。因为一旦你可以让随机数生成器生成之前加密时所产生的值,那么就可以重新生成之前的加密密钥。

下图中,系统时间作为弱随机数生成器的种子。

大多数情况下,任何的计算机算法都只能执行一定次数的循环。如果输入函数的输入是一样的,那么输出的结果也应该是一样的。对随机数生成器来说,只要有足够大的输入来生成随机数值就可以进行推断了。比如,一些弱随机数生成器利用日期作为输入。因此,这些条件都可以重新创建的。唯一需要做的就是利用足够多的随机输入来获取足够多的熵值。

一些强的随机数生成器会使用样本音频数据、加上日期。并使用鼠标输入和其他的元素来让输入尽可能的随机化。这样的话,暴力破解进行重新创造就变得很难。

破解弱RNG的理论过程

假设勒索算计用用当前时间的微秒作为RNG的种子,使用的加密是标准加密。下面是攻击的基本步骤。

· 网络管理员分析勒索软件发现了用于加密的公钥是受害者的ID。

· 网络管理员可以通过日志等了解感染发生的大概时间,比如,10:00:00am 到10:00:10am一个10秒的时间窗口。

· 因为RNG使用微秒作为seed,那么就有1000万个可能的seed。

· 如果勒索软件用时间作为seed值x,那么加密密钥对就是KEYx。

· 然后从10:00:00开始以微秒的单位递增,用标准软件进行密钥对创建。

· 然后检查是否与受害者ID(公钥)匹配。

· 最终,会有一个与之匹配的密钥。然后可以尝试私钥并进行解密,就可以将原始文件恢复。

在这个场景中,用到了暴力破解。如果RNG用微秒和当时的进程数相结合作为seed,就增加了复杂性。比如说当时运行的进程有5-25个,那么暴力破解需要尝试的次数就是1000万-2亿次,虽然也是可以破解的,但是增加了破解的复杂度。

如果加入了足够多的参数,或者参数的可能性比较多的话,那么最终需要暴力破解的次数会非常多,多到可能用尽你余生的时间都不够的。

解密实践

下面是一些成功破解的勒索软件的例子和所使用的方法。

7ev3n, XORist, Bart: Weak encryption algorithm
Petya: Mistakes in cryptography implementation
DMA Locker, CryptXXX: Weak key generator
Cerber: Server-side vulnerability
Chimera: Leaked keys

弱加密算法

DES算法是上世纪开发的,并广泛用于加密实践。因为密钥位数限制,目前DES被认为是一种弱加密算法。因为加密算法的密钥的位数是考虑加密算法强壮性的一个因素。密钥位数越大,破解的难度就越大。

通过查看文件也可以得到加密算法的一些信息。 

从上图可以看出,熵值比较低,加密文件中的数据与原文比较相似。这应该是明文XOR的结果。

从上图看出,熵值明显是比较大的。很难从密文中看出与明文的相似处。

文件可视化是对给定勒索软件进行解密的第一步,从中我们可以找到所使用的加密算法和加密算法的强弱。也能给出一个攻击的方向和如何攻破加密。比如,上面列表中的Cerber就是利用服务端的漏洞进行攻击的,虽然加密本身是很强的,但是也可以攻击侧信道来创建解密器。

结论

为了寻找加密算法的弱点,需要对加密算法进行识别和分类。然后对代码进行初步识别,再进一步找出可能存在的弱点和漏洞,再利用这些漏洞和弱点就可以攻破加密算法。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Albert陈凯

2018-10-11 对称加密、非对称加密、Hash算法看完这篇文章加解密就别蒙了散列函数 加密算法

http://hongyitong.github.io/2016/07/18/%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86%E3%8...

2663
来自专栏小工匠技术圈

【Java小工匠聊密码学】--对称加密--IDEA

  国际数据加密算法(IDEA)是[上海交通大学]教授来学嘉与瑞士学者James Massey联合提出的。它在1990年正式公布并在以后得到增强。这种算法是在[...

902
来自专栏区块链

SSL证书的加密技术

根据密钥类型不同将现代密码技术分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密)。对于对称性加密算法,信息接收双方都需事先知道密匙和加解密算...

2306
来自专栏程序猿

数据加密之加密算法RSA公钥加密系统

本来想写一下SQL注入来着,还是写一下这个可爱的算法吧。 加密算法有多中,md5等多中加密算法,但是RSA算法不知各位有没有听说...

39110
来自专栏GAIAWORLD

GaiaWorld:加密技术在区块链中的意义

加密技术作为区块链技术里极其重要、不可或缺的一部分,为区块链的匿名性、不可篡改和不可伪造等特点保驾护航。如果说共识机制是区分一个公链质量的核心和灵魂,那么加密算...

960
来自专栏小工匠技术圈

【Java小工匠聊密码学】--非对称加密--RSA1

  RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(...

823
来自专栏吴伟祥

加密 原

在日常设计及开发中,为确保数据传输和数据存储的安全,可通过特定的算法,将数据明文加密成复杂的密文。目前主流加密手段大致可分为单向加密和双向加密。

773
来自专栏一名叫大蕉的程序员

RSA 这俩世纪最重要的算法之一No.91

本文大概1000字,读完共需5分钟 Diffie–Hellman加密算法的劣势 上一篇文章我们聊到 Diffie–Hellman key exchange ...

3195
来自专栏安恒信息

NSA能破解大部分Tor加密密钥

全研究人员认为,Tor匿名网络使用的大部分密钥能被美国国家安全局(NSA)破解。 渗透测试公司Errata Security CEO Rob Graham设立了...

3043
来自专栏码神联盟

敲一天代码了,轻松下吧,精彩 !看人潮如海

先来首歌曲,耶耶耶..... ? 一边听歌,一遍来看几个算法 一、数字摘要算法 数字摘要也称为消息摘要,它是一个唯一对应一个消息或文本的固定长度的值,它由一个...

2865

扫码关注云+社区

领取腾讯云代金券