通过内存转储打破Linux全盘加密保护

栏目: 编程工具 · 发布时间: 5年前

内容简介:如何在主机上成为root用户获取全盘加密运行虚拟机中数据的访问权限?这是我们在Appsecco内部讨论的一个问题,我们需要一个合理而可能的解决方案。据我所知,可以破解全盘加密的方法手段非常的多。但缺点是大部分这些方法都非常复杂,且操作起来费时费力。其中最简单的方法就是对正在运行的VM进行内存转储,并从中提取加密密钥。我们的操作步骤如下:设置Ubuntu 16.04 VM全盘加密保护

如何在主机上成为root用户获取全盘加密运行虚拟机中数据的访问权限?这是我们在Appsecco内部讨论的一个问题,我们需要一个合理而可能的解决方案。

据我所知,可以破解全盘加密的方法手段非常的多。但缺点是大部分这些方法都非常复杂,且操作起来费时费力。其中最简单的方法就是对正在运行的VM进行内存转储,并从中提取加密密钥。我们的操作步骤如下:

设置Ubuntu 16.04 VM全盘加密保护

在磁盘解锁时转储Virtualbox VM的内存

使用findaes工具从内存转储中提取主密钥

使用密钥从VM的磁盘文件解密加密的分区

挂载分区并访问数据

设置

让我们在Virtualbox中设置一个带有全盘加密的Ubuntu 16.04桌面虚拟机。

在安装期间我们使用默认的“使用LVM进行全盘加密”选项,其将使用dm-crypt/LUKS进行加密。使用的默认cryptsetup配置为512位加密密钥的aes-xts-plain64:sha256。

安装完成后,我们通过输入我们配置的加密密码来启动VM

转储VM内存

首先,我们在磁盘处于解锁状态时来获取VM的内存转储。注意:VM必须处于运行/暂停状态,以便我们能够将内存转储提取到文件中。

VirtualBox有一个功能强大的调试器,除了基本的一些功能外,它还支持VM内存转储。

VBoxManage debugvm <vm-name> dumpvmcore --filename=<filename.raw>

这将以原始文件格式进行内存转储,这个过程可能需要一段时间才能完成。

从内存转储中提取密钥

我们可以使用任何可以从文件中识别AES字符串的工具,来帮助我们从内存转储中提取加密密钥。这里我们使用的是 findaes

让我们提取下载的zip文件

unzip findaes-1.2.zip

编译

cd findaes-1.2 ; make

运行findaes命令提取相关密钥

./findaes /path/to/fdedump2.raw

通过内存转储打破 <a href='https://www.codercto.com/topics/18170.html'>Linux</a> 全盘加密保护

可以看到,findaes为我们从内存转储中识别出了许多密钥。AES算法从主加密密钥生成轮密钥,这些密钥也存储在存储器中。即使主密钥由于某种原因不可用,我们仍然可以从轮密钥计算出主密钥。所以我们看到的是主密钥,轮密钥和其他能够被识别的AES密钥的混合。你可以参考 cryptsetup文档 了解有关如何实现全盘加密的更多信息。

我们可以编写一个脚本来尝试解密分区的所有密钥。但是,由于我们已经知道我们正在寻找的密钥为512位,而提取的密钥都是256位,因此我们可以将搜索范围缩小到内存中连续的两个256位密钥。

我们找到了符合要求的两个密钥。我们通过将两个键0x34dfcf88和0x34dfcd98组合来获取主密钥。由于Intel x86-64使用little-endian(小端)模式,因此我们必须以相反的顺序组合密钥。

通过内存转储打破Linux全盘加密保护

现在我们有了一个潜在的主密钥,我们将尝试解密加密分区。

使用主密钥解密LUKS加密驱动器

我们将使用dmsetup工具和恢复出的主密钥来尝试解密加密分区。

要解密分区,首先我们需要挂载磁盘。复制VM的磁盘并将其attach到一个新的Virtualbox VM,我们将使用live Ubuntu环境来挂载磁盘并解密分区。完成后,我们将使用Ubuntu Live环境启动到新的VM中。

要手动使用主密钥来解密加密分区,我们需要分区的大小和使用的确切加密方案。我们知道dmcrypt使用的默认加密方案是来自 cryptsetup FAQ 的aes-xts-plain64:sha256 。

我们需要找到磁盘,并从我们的live环境中列出其分区。我们可以使用以下命令:

sudo fdisk -l

通过内存转储打破Linux全盘加密保护

使用blockdev命令找到加密分区/dev/sda5的大小

sudo blockdev --getsz /dev/sda5

解锁和解密分区的命令语法如下:

echo "0 <size> crypt aes-xts-plain64 <key> 0 </dev/drive> 4096" | sudo dmsetup create luks-volume

如果没有发生错误,则解密成功!

访问数据

我们使用lsblk命令来查看下解密后现在可用的LVM卷

sudo lsblk

通过内存转储打破Linux全盘加密保护

我们现在可以看到一个LVM卷,它是解密分区的根分区。现在让我们挂载到该分区,看看能否找到一些有趣的东西。

sudo mount /dev/mapper/ubuntu--vg-root /mnt

让我们列出root用户的主文件夹内容

ls /mnt/root

通过内存转储打破Linux全盘加密保护

现在我们已经成功从内存转储中提取出了加密密钥,并成功读取了使用全盘加密的VM磁盘中的文件内容。

*参考来源: appsecco ,FB小编 secist 编译,转载请注明来自FreeBuf.COM


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

组合数学

组合数学

卢开澄 / 清华大学 / 2002-7-1 / 19.8

组合数学,ISBN:9787302045816,作者:卢开澄,卢华明著一起来看看 《组合数学》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具