LUKS (Linux Unified Key Setup)是 Linux 硬盘加密的标准。 通过提供标准的磁盘格式,它不仅可以促进发行版之间的兼容性,还可以提供对多个用户密码的安全管理。 LUKS加密广泛用于各种Linux发行版中,以保护磁盘并创建加密的容器。作为一个独立于平台的开源规范,LUKS可以看作是磁盘加密的典型实现。LUKS提供多种加密算法、多种加密模式和多种哈希函数可供选择,是最难破解的磁盘加密系统之一。本文我们将介绍如何在Windows中处理LUKS加密以及如何通过分布式密码破解进行破解。
磁盘加密基础知识
所有磁盘加密工具都依赖于对称加密方式来加密数据,尽管Microsoft BitLocker默认使用128位AES密钥,但主要的磁盘加密工具通常都依赖于具有256位密钥的硬件加速AES加密。一些磁盘加密工具提供了加密算法的选择,最受支持的是VeraCrypt,它提供了约15种对称加密选项。
通过使用密钥生成函数(KDF)从用户的密码(或其他数据)生成对称加密密钥。 KDF使用用户输入的单向转换(哈希函数)来生成二进制加密密钥或解开用于解密实际对称加密密钥的中间密钥。使用不同的哈希函数以及大量的哈希迭代来降低潜在的暴力破解的速度。
破解加密容器时,你必须知道加密算法、哈希函数和哈希迭代次数的确切组合。错误的选择实际上会使你成功恢复的机会无效,即使你偶然发现了正确的密码也是如此。
LUKS磁盘加密
LUKS是最初为Linux OS开发的与平台无关的磁盘加密规范,LUKS是Linux中磁盘加密的事实上的标准,可促进各种Linux发行版之间的兼容性,并提供对多个用户密码的安全管理。如今,LUKS被广泛应用于桌面和笔记本电脑上的几乎每个Linux发行版中。它也是网络附加存储(NAS)设备中流行的加密格式,特别是那些QNAP生产的设备。
除了全盘加密之外,LUKS还可以用于创建和运行加密容器,其方式类似于其他加密容器,例如VeraCrypt,加密的容器具有与LUKS全盘加密相同的保护级别。
LUKS为用户提供了各种加密算法、哈希函数和加密模式的选择,从而提供了大约45种可能的组合。
LUKS加密算法
LUKS支持多种加密算法、加密模式和哈希函数的组合,包括:
高级加密标准(AES)
Serpent加密算法
Twofish加密算法
CAST-128加密算法
CAST-256加密算法
AES是唯一的一种硬件加速加密算法,是迄今为止三种中最常见的算法,尤其是在企业环境和网络连接存储(NAS)设备中使用时。 AES加密在具有AES加密加速函数的芯片组(例如Intel CPU中的AES-NI指令集)上使用时,可提供最高的流密码性能。Serpent和Twofish可以在创建加密卷时由用户手动指定。
LUKS支持以下加密模式:
ECB (分组加密的模式之一)
CBC-PLAIN64
CBC-ESSIV:哈希
XTS-PLAIN64
设置加密卷时,各种Linux发行版可能使用不同的默认设置。例如,Red Hat Linux使用cbc-essiv:sha256和256位AES密钥,这是许多流行的Linux发行版的默认组合。本文破解中要是用的破解工具支持CBC-PLAIN64,CBC-ESSIV:SHA256和XTS-PLAIN64加密模式。
LUKS哈希函数
在磁盘加密中,哈希函数用作密钥生成函数(KDF)的一部分。 KDF用于从用户提供的输入(通常是基于文本的密码短语)中导出二进制加密密钥,LUKS规范支持以下哈希函数:
SHA-1
SHA-256
SHA-512
RIPEMD160
Whirlpool(基于分组密码的散列算法)
不过对WHIRLPOOL的支持不属于该规范的一部分,但是本文使用的破解工具支持此哈希函数以及四个“正式”函数。默认情况下,大多数Linux发行版都使用SHA-256作为哈希函数。
LUKS默认加密设置
虽然每个Linux发行版的维护人员和嵌入式Linux的硬件制造商都可以自由选择他们自己的默认加密设置,但是带256位对称加密密钥的aes-cbc-essiv:sha256是最常见的默认加密设置。意思如下:
AES——加密算法为AES(默认情况下,使用256位密钥);
CBC ——密码块链接加密模式;
ESSIV ——加密的盐扇区初始化向量,此IV应该用于CBC模式下的密码;
SHA-256——使用32位字计算的安全哈希算法,这是CBC模式下密码的默认哈希函数。
非默认加密设置
用户可以在加密磁盘时指定默认设置以外的其他解密设置,与TrueCrypt / VeraCrypt不同,LUKS确实将有关所选加密设置的信息存储在加密元数据中,从而可以在发起破解之前检测到加密设置。Elcomsoft Distributed Password Recovery通过分析加密元数据来自动检测LUKS加密设置,在破解之前,必须使用Elcomsoft Forensic Disk Decryptor将其提取。
多个加密密钥
一个LUKS卷可以使用多个密钥来保护,该规范允许多个用户密钥解密用于加密的主密钥。结果,LUKS加密的设备可能包含多个密钥槽,这些密钥槽用于存储备份密钥/密码并允许多个用户使用各自的密码来解锁LUKS卷。
每个密钥槽都用独特的加盐加密保护,这使得反向暴力破解(将相同的KDF密码与不同的槽匹配)是不可行的。在破解过程中,必须为每个密钥槽分别计算KDF。因此,恢复密码以保护LUKS设备需要选择要破解的密钥槽。破解密码时,设置攻击时使用Elcomsoft Distributed Password Recovery执行此选择。
破解LUKS加密步骤1:提取加密元数据
为了保护对加密设备中存储的数据的访问,必须首先恢复原始的纯文本密码。涉及多个步骤,且需要使用几种不同的工具。
1.使用Elcomsoft Forensic Disk Decryptor或Elcomsoft System Recovery从加密的设备或磁盘映像中提取加密元数据。
2.使用提取的元数据(一个小文件)通过Elcomsoft Distributed Password Recovery对密码发起破解。
3.找到密码后,挂载磁盘卷或解密数据。
目前有两种不同的工具来提取LUKS加密元数据,选择正确的工具取决于你是在现场还是在实验室中工作。如果你要分析可疑计算机,则可以使用Elcomsoft System Recovery从USB闪存驱动器启动系统,并从连接到计算机的存储设备中提取加密元数据。
注意:Elcomsoft System Recovery 7.06和更高版本支持LUKS加密。如果你使用的是旧版工具,请更新至最新版本以获得LUKS支持。
1.下载Elcomsoft System Recovery,启动安装程序并创建可启动的USB驱动器。
2.使用USB驱动器将目标系统启动到Windows PE环境。
3.Elcomsoft System Recovery将自动启动。
4.查看附加的磁盘。
5.选择LUKS加密的分区,然后点击“转储”以提取加密元数据。
在你的计算机上传输加密元数据,并将其与Elcomsoft Distributed Password Recovery配合使用,以对LUKS加密密码发起破解。
如果你在实验室中工作并且正在处理磁盘或磁盘映像,则将使用Elcomsoft Forensic Disk Decryptor,使用Elcomsoft Forensic Disk Decryptor提取加密元数据非常简单。
注意:Elcomsoft Forensic Disk Decryptor 2.13及以上版本支持LUKS加密,如果你使用的是该工具的旧版本,请更新到最新版本以获得LUKS支持。
1.启动Elcomsoft Forensic Disk Decryptor。
2.选择操作模式“提取/准备数据以进一步恢复密码”。
3.打开包含LUKS卷的物理设备或磁盘映像,在下面的示例中,我们正在处理物理设备。
4.EFDD将显示加密卷的列表,选择你要从中提取加密元数据的卷。
5.点击“下一步”提取加密元数据并将其保存到文件中。
破解LUKS加密步骤2:破解密码
虽然LUKS通过在密钥生成过程中使用数千次哈希函数迭代来提供强大的保护,以防止暴力破解,但与过去相比,我们在密码恢复破解方面有了长足的进步。由于GPU加速、分布式和云计算的使用,强制输入密码的速度大大加快。通过Elcomsoft Distributed Password Recovery,最多可使用10000台计算机和按需云实例来破解单个密码。
为了进行破解,请执行以下操作。
1.启动Elcomsoft Distributed Password Recovery;
2.打开包含在上一步中使用Elcomsoft Forensic Disk Decryptor器获得的加密元数据的文件;
3.将显示可用的密钥槽以及哈希迭代次数。指定要破解的密钥槽;
4.配置并启动破解;
暴力破解不仅变得更快,而且变得更加聪明。用户的现有密码是一个很好的起点,这些密码可以从用户的Google帐户,macOS,iOS或iCloud钥匙串,Microsoft帐户中提取,也可以从用户的计算机中提取,用户的现有密码提示了可能使用的字符组:
Elcomsoft Distributed Password Recovery提供了许多选项,可以自动尝试密码的最常见变体(例如Password1,password1967或pa $$ w0rd):
掩码可用于尝试匹配已建立的通用模式的密码:
先进的技术允许使用最多两个字典和可编写脚本的规则来编写密码:
破解密码需要多长时间?
即使你确切地知道攻击每秒会产生多少密码,仍有许多因素会影响恢复LUKS密码所需的时间。密码的长度及其熵,以及你所了解的有关密码的知识或用户组成密码的方式,将对破解特定LUKS容量所需的时间产生巨大影响。
恢复速度如何?速度也不是一个恒定的值,很多影响破解速度的因素还不是很明显。你可以尝试的每秒密码数量取决于几件事,最重要的是以下几点:
硬件:你拥有的高端视频卡越多、越高端,原始速度就会越快。进行攻击的计算机数量也是如此,处理密码的电脑越多,速度就会越快。
哈希函数:一些哈希函数比其他哈希函数慢,对于LUKS,用户可以选择五个哈希函数,包括RIPEMD160,SHA-1,SHA-256,SHA-512和WHIRLPOOL,其中RIPEMD160是最快的,而WHIRLPOOL是最慢的。根据设置加密时哈希函数的选择,你的攻击可能会更快或更慢。
加密算法和加密模式:同样,在用户设置加密时选择这些设置,选择哈希函数会影响攻击的速度,但与哈希函数的选择相比,攻击的速度要慢得多。
哈希迭代次数以及用户计算机的速度:与BitLocker或VeraCrypt等其他磁盘加密工具不同,LUKS会更改用于保护主加密密钥的哈希迭代次数。当使用给定的加密设置组合创建加密磁盘时,LUKS会对用户的系统进行基准测试。该数据用于选择保护主加密密钥的哈希迭代次数。实际上,与在高端硬件上创建的类似磁盘或容器相比,在低端计算机上创建的LUKS加密磁盘或容器的保护函数较弱。如果将磁盘或容器移动到函数更强大的新计算机,则哈希迭代次数不会更改。
更有趣的是,哈希迭代次数会根据其他加密设置的选择而变化。如果使用较弱(较快)的哈希函数,则选择大量的哈希迭代,反之亦然。从理论上讲,不管选择的哈希函数和加密设置如何,哈希迭代的可变数量会使攻击在类似硬件上创建的LUKS卷或容器的速度相同。事实并非如此;不同算法和哈希函数之间的攻击速度仍然存在差异,如下面的基准测试所示。
值得注意的是,哈希迭代次数与其他加密元数据存储在一起,TrueCrypt / VeraCrypt容器不是这种情况,使得哈希迭代次数成为用户提供的另一个秘密。
总结
LUKS不仅是一种流行且广泛使用的加密规范,而且还是一个非常有趣的规范。多个密钥槽的支持,哈希函数的选择,加密算法和加密模式以及基于基准的算法,可在基于用户计算机的性能设置加密时自动选择哈希迭代次数。
本文翻译自:https://blog.elcomsoft.com/2020/08/breaking-luks-encryption/如若转载,请注明原文地址: