LUKS 全盘加密的一个通用解密方法--从内存中提取LUKS MASTER KEY
作者:橙子酱
前言
之前的文章中提到了一种有启动分区的情况
磁盘主引导->引导分区->引导内核->系统启动->解密挂载分区 (一个引导分区 +一个主分区)
遇到这种情况就可以通过简单的提取文件系统中的秘钥解决.
但是运气不好还会遇到两种更变态的情况
磁盘主引导->引导分区->引导内核->引导内核中解密挂载分区->系统启动->解密挂载分区(只有一个引导分区)
磁盘主引导->磁盘引导程序->解密分区->引导->系统启动->解密其他分区 (一个明文分区都没有)
这时,通常只能通过逆向引导程序来提取内核镜像.最终拿到镜像中的秘钥文件.
这个过程十分的繁琐. 在没有符号表的情况逆向魔改过的linux引导内核也非常困难.
那么有没有一个简单的方法解决这个问题呢?
破解LUKS全盘加密
luks 解密进行磁盘后硬盘上的数据实际仍然是加密的.
为了可以实时读写加密分区内的数据,加解密使用的秘钥一定存在于内存之中.
从内存镜像中提取MASTER KEY
第一步 判断加密算法
挂载硬盘 使用cryptsetup luksDump 判断分区使用的加密算法
本文使用的是 AES 256 加密 (默认加密算法)
第二步 DUMP 包含秘钥的内存
在虚拟机第一个分区完成解密后,dump虚拟机完整内存 (快照 暂停 命令行 均可)
第三步 从内存寻找aes key
使用工具从内存寻找aes key
https://sourceforge.net/projects/findaes/
https://github.com/mmozeiko/aes-finder
https://www.kali.org/tools/aeskeyfind/
选择对应长度的key hex转成raw文件作为key
第四步 解密分区
ryptsetup luksOpen 加密的分区 –master-key-file key文件 挂载名
依次尝试各个分区和各个秘钥的组合 无错误返回即为解密成功.