用户
搜索
  • TA的每日心情
    慵懒
    4 天前
  • 签到天数: 132 天

    连续签到: 2 天

    [LV.7]常住居民III

    i春秋作家

    Rank: 7Rank: 7Rank: 7

    34

    主题

    95

    帖子

    2170

    魔法币
    收听
    0
    粉丝
    4
    注册时间
    2015-11-20

    i春秋签约作者

    发表于 2018-8-4 20:40:59 13816

    破解内存转存中的全盘加密

    如何从拥有root用户的主机上获取到使用完全磁盘加密运行的虚拟机中数据的访问权限,这是一个非常有意思的操作。

    以前遭遇过许多破解全盘加密的方法,但最简单的方法是对正在运行的VM使用内存转储时并从内存里提取到加密密钥。可以采取的步骤如下所示。

    • 先使用全盘加密设置Ubuntu 16.04 VM
    • 对磁盘解锁时转储Virtualbox VM的内存数据
    • 使用findaes工具从内存转储中提取出主密钥
    • 使用密钥从VM的磁盘文件解密加密的分区
    • 然后挂载分区并访问数据

    安装程序

    我们在Virtualbox中设置了一个带有全盘加密的Ubuntu 16.04桌面虚拟机来试试这个方法。

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

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

    转储VM的内存数据

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

    VirtualBox公开了一个功能丰富的调试器,除此以外,它允许我们转储VM的内存数据。

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

    这将以原始文件格式进行内存转储,使用这条命令需要一段时间才能完成。

    从内存转储中提取密钥

    然后,我们就可以使用可以从文件中识别AES字符串的任何工具从内存转储中提取加密密钥,这次操作选择使用findaes。

    可以从https://sourceforge.net/projects/findaes/下载findaes。此文件是findaes源代码文件,必须先编译才能使用它。

    让我们提取下载的zip文件

    unzip findaes-1.2.zip

    编译它

    cd findaes-1.2 ; make

    对内存的转储文件运行findaes命令,看看是否能够提取任何密钥。

    ./findaes /path/to/fdedump2.raw


    找到密钥的输出

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

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

    最后找到了符合要求的两个密钥,通过将两个键组合在0x34dfcf88和0x34dfcd98来获得主密钥。由于Intel x86-64使用小端模式,所以必须以相反的顺序组合密钥。


    识别主密钥

    现在有一个潜在的主密钥,可以尝试解密加密分区。

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

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

    要解密分区,我们首先需要挂载磁盘。为此,我们首先复制VM的磁盘并将其附加到新的Virtualbox VM,我们将使用实时Ubuntu环境来挂载磁盘并解密分区。完成后,我们将使用Ubuntu Live环境启动到新VM。

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

    我们需要找到磁盘并从我们的实时环境中列出其分区。我们可以使用fdisk来做到这一点

    sudo fdisk -l


    加密磁盘中的分区

    我们使用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


    解密后的LVM分区

    现在可以看到一个LVM卷,它是解密分区的根分区。现在安装下,看看是否能找到一些有趣的东西。

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

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

    ls/mnt/root


    我们能够在解密后读取敏感文件

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

    参考链接:https://blog.appsecco.com/breaking-full-disk-encryption-from-a-memory-dump-5a868c4fc81e

    学习一下~
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册