继续在我们的加密101系列中,我们给了Malmware分析师在加密时的底漆并展示了使用加密技术ShiOne ransomware现在,我们来看看如何破解加密。要破解像加密这样强大的东西,就必须有某种秘密漏洞。这种缺陷往往是执行错误的结果。

实现加密的人可能会出错。难度是能够识别和分析程序员用于加密的方法,并寻找任何缺点的程序员。

这些弱点可以是任何东西弱加密算法和弱键生成器服务器端漏洞泄露的钥匙

定位加密算法

在尝试找到漏洞之前,您必须首先知道使用的加密算法是什么。很多时候,它就像查看API调用一样简单。如果是这种情况,那么识别算法就非常简单了。这就是之前ShiOne演练的情况。

然而,有时加密会被静态编译到恶意软件中,甚至会使用定制的加密算法。在这种情况下,您必须能够理解加密算法的内部工作原理,以便能够识别代码。

文件的内容将被加密并写入到文件中,因此缩小加密所在的一般区域的一个快速方法是简单地xrefreadfile.writefile.API呼叫。可以在这两点之间执行加密实现。

识别加密代码

在查找静态编译的加密代码时,正如我们提到的,您将无法搜索任何API调用。有必要对这些加密算法如何工作的一些底层细节有基本的了解。

从下面开始,我们具有AES算法的高级流。通常,大多数同步加密算法对此具有类似的流动;差异可以是所执行的数学运算的类型,但核心概念保持不变。因此,了解AES将足够的起点,以帮助识别在实际分析中展开的其他类型。

用AES,因为它是对称的加密算法,它执行一系列的数学和逻辑运算对三件事一起工作:

  1. 需要加密的明文数据
  2. 静态字节是算法的一部分(查找表)
  3. 用于加密的密钥

根据AES和键尺寸的味道,流量将略有不同。在上面的图片中,您看到涉及几个块的循环:

  1. 添加关键
  2. 换行
  3. 子字节
  4. 混合列

在这些步骤中发生的情况是文件数据被读取为固定数量的字节数。在这种情况下,它是16字节,但根据算法,它可能是任何东西。以下是一轮的步骤:

  • 添加关键将关键数据与输入数据的矩阵进行xor四舍五入。
  • 换行圆形使用a滚动数据转移操作。我所说的滚动是这样的:4 5 2 1。如果滚动左转一计数,那将成为5 2 1 4. r它再次变成了2 1 4 5。
  • 子字节轮次涉及内置于算法中的静态字节数组。从先前步骤的每个数据字节用作查找阵列的索引。因此,存在静态替代。您可以将其视为类似于编程中的枚举。
  • 在里面m第九列圆形,矩阵中的字节由一些数学操作和线性变换进行操作,并导致矩阵的每个字节现在不同。

每组这四个系列操作被认为是一轮。AES可以有10到14轮。这意味着,当您正在寻找二进制文件中的加密代码时,很可能是一个很长的函数,具有很多重复的代码。这是一个方面,可以帮助您在二进制中查找时将其识别为加密代码。

这是一轮加密的另一个例子,可能来自AES或类似同步加密的不同风味:

正如您所看到的,操作顺序有点不同。这些细节对我们来说不是太重要,因为我们不是加密人员。一般来说,我们不希望在AES算法本身中找到弱点,我们希望在实施中找到弱点。对AES内部运作情况进行此类细节的原因只是让您了解它的工作原理,以便在您在野外看到它时可以在代码中识别它。

我会给你们看一个我们之前做的分析圣甲虫ransomware.这就是上面代码的示例。他们使用静态编译的aesno API调用加密文件。我们必须对各种加密方法的内部工作进行一些研究,以便能够正确地识别算法实际在做什么。

这个函数中这些操作集的数量是我们判断这段代码属于哪个算法的主要指标之一。

我将这张来自上一篇文章的图片再次包含进来,只是为了提醒大家在单个文件中使用了许多加密方法ransomware.如果在找到正在使用多种加密时,请注意响起,不要混淆。在这里,我们有流程图,显示文件加密,但也是加密前一个键的算法。虽然它不是修改文件本身的加密,但它将是用于保留文件加密密钥安全的内容。在寻求破坏加密时,这两个领域都是弱点。

关键是,在技术上可以使用任意数量的加密组合,因为这取决于作者。您必须能够理解和识别每一个以及它在整个方案中扮演的角色。可能是单个加密用法实现不正确,可能被破坏,也可能是几件事情的组合,一起在整个方案中造成漏洞。

随机数发电机

在寻找加密中的弱点时,通过查看加密密钥生成器,这是一个良好的起点,在大多数情况下只是随机数发生器的某种形式。

如果您已经阅读了关于加密的任何内容,您可能会遇到某人提及随机数发生器的重要性。这样做的原因是,如果可以强制随机数生成器的输出来重复在先前加密期间生成的相同值,则可能能够重新创建原始加密密钥。

下面展示了一个这样的例子。系统时间被用作弱随机数生成器的种子。

在大多数情况下,任何计算机算法只能执行有限一系列操作。如果函数的输入相同,则输出也必须是相同的。这是非常逻辑的。在随机发生器的情况下,智能建模在采用足够的输入来为随机值进行种子,使得输出不是在重新创建的。例如,一些弱发电机将一天中的时间作为输入。虽然这是一种晦涩难懂的情况,但肯定可以重新创建条件。必要的是使用足够的半随机输入来给予足够的熵。

正如你在上面所看到的,一个更可靠的随机生成器可能会采样音频数据,以及一天中的时间,并使用鼠标输入和一些其他元素来尝试让输入尽可能随机。这需要不合理数量的操作,以暴力或重建。

脆弱的理论过程

以下是使用弱发电机称为RNG的勒索软件的理论示例。假设勒索WAWN使用具有目前微秒的当前时间的RNG种子,并且加密是标准算法。这些是攻击的基本步骤:

  • 网络管理员对勒索软件进行分析,发现用于加密的公钥被用作勒索软件的受害者ID。
  • 网络管理员大致了解感染在他的网络上发生的时间,可能是通过查看网络日志。让我们说它发生在10:00 AM和10:00在10:00窗口之间的某个时间。
  • 由于RNG使用了微秒的时间,因此让他留下了10000000年可能的种子。
  • 然后,管理员对自己说:“如果使用的赎金软件时间作为种子价值X,然后加密代码生成密钥对值钥匙X
  • 他逐步使用微秒,一个逐个,从10:00开始,使用一些标准软件执行密钥对创建。
  • 现在他检查是否与他获得的公钥(受害者ID)匹配。
  • 不,不匹配。这意味着RNG没有使用x(上午10:00)作为种子。
  • 他再次尝试x + 1等等,直到他在上午10:00:10之前到达最后的微秒。
  • 最终,将生成一个匹配—生成的公钥将与受害者ID匹配。
  • 他现在将知道生成的私钥与对他的硬盘进行加密时生成的私钥相同。
  • 现在他可以拍摄该私钥,通过他的现成解密软件运行它,并返回原始文件。

在这种情况下,蛮力攻击完全是理性的。现在,如果RNG使用毫秒,则与在给定时间运行的进程数量结合使用,这会增加更多复杂性。它将采用最初的10,000,000种可能性乘以机器上运行的潜在流程范围。您可以假设它可能在5到25个进程之间。所以现在,最初的10,000,000次尝试变为20万次。它仍然迭代,但增加了复杂性。你明白了。

如果添加足够的参数或具有大量可能结果的参数,则该数字最终将变得如此之大,在您的一生中,蛮力尝试不会成为如下所示。

在实践中解密

以下是已成功损坏的冗员示例的列表和使用的方法。

  • 7ev3n,Xorist,Bart:弱加密算法
  • Petya:密码实现错误
  • DMA储物柜,Cryptxxx:弱密钥发生器
  • CETBER:服务器端漏洞
  • 嵌合体:泄露密钥

弱加密算法

DES算法是在20世纪70年代开发的,并且广泛用于加密。它现在被认为是一种弱加密算法,因为它的密钥大小。作为加密算法的密钥生成的比特量是算法强度的考虑之一。例如,有一场比赛,可以在他的大学使用几百台机器赢得一名40位密码。只有三个半小时。钥匙的大小越大,越难以破解加密 - 也就是说,而不是知道它的任何东西。

这并不是说普通的分析人员可以访问这些资源,但我只是想让您更好地理解为什么加密算法可能被认为是薄弱的。

通常,您可以通过查看文件的可视化来初步了解加密方法。

正如您在这里看到的,这里有低熵,加密文件中的数据显示出与原始明文相似之处。这可能是异或类型的密码,以及其他一些密码的结果

让我们将其与另一种算法加密的文件进行比较。您将能够在加密中讲述高熵结果的差异:

当研究给定的勒索软件是否能够被解密时,文件可视化也可以是一个很好的起点,因为它可以帮助你弄清楚算法是什么,以及它是否是一个已知的薄弱算法。它还可以向您指出您可能希望攻击进程的哪个部分以破坏加密。但正如您从上面的列表中看到的,Cerber是通过利用服务器端漏洞而被攻破的。因此,尽管加密本身很强大,但为了创建解密器,一个侧信道遭到了攻击。

结论

在这篇文章中,我们介绍了识别和分类加密算法的必要性,以寻找弱点。然后我们学习了如何识别代码的基本知识。我们讨论了各种可能被利用的弱点,并通过一个网络管理员可能能够解密勒索软件的场景的理论示例。

请收听第四部分,解密案例研究,开启我们的加密101系列的最后一部分,在那里我们将通过一个弱勒索软件的代码,并准备编写定制解密工具的游戏计划。