LUKS 全盘加密的一个通用解密方法--从内存中提取LUKS MASTER KEY
作者:橙子酱
前言
之前的文章中提到了一种有启动分区的情况
磁盘主引导->引导分区->引导内核->系统启动->解密挂载分区 (一个引导分区 +一个主分区)
遇到这种情况就可以通过简单的提取文件系统中的秘钥解决.
但是运气不好还会遇到两种更变态的情况
磁盘主引导->引导分区->引导内核->引导内核中解密挂载分区->系统启动->解密挂载分区(只有一个引导分区)
磁盘主引导->磁盘引导程序->解密分区->引导->系统启动->解密其他分区 (一个明文分区都没有)
这时,通常只能通过逆向引导程序来提取内核镜像.最终拿到镜像中的秘钥文件.
这个过程十分的繁琐. 在没有符号表的情况逆向魔改过的linux引导内核也非常困难.
那么有没有一个简单的方法解决这个问题呢?
破解LUKS全盘加密
luks 解密进行磁盘后硬盘上的数据实际仍然是加密的.
为了可以实时读写加密分区内的数据,加解密使用的秘钥一定存在于内存之中.![钱镜洁, 魏鹏, 沈长达. LUKS加密卷的离线解密技术分析[J]. 信息网络安全, 2014, 14(9): 217-219.](https://cdn.nlark.com/yuque/0/2022/png/25577536/1660727113540-e4036be1-b341-43c8-91ae-89bbc75b44f2.png#clientId=ued3e38dd-9d43-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=346&id=uc40cb572&margin=%5Bobject%20Object%5D&name=%E5%9B%BE%E7%89%87.png&originHeight=433&originWidth=566&originalType=binary&ratio=1&rotation=0&showTitle=true&size=33756&status=done&style=none&taskId=u3fd91d24-301d-493c-9d5f-f450f54ab20&title=%E9%92%B1%E9%95%9C%E6%B4%81%EF%BC%8C%20%E9%AD%8F%E9%B9%8F%EF%BC%8C%20%E6%B2%88%E9%95%BF%E8%BE%BE.%20LUKS%E5%8A%A0%E5%AF%86%E5%8D%B7%E7%9A%84%E7%A6%BB%E7%BA%BF%E8%A7%A3%E5%AF%86%E6%8A%80%E6%9C%AF%E5%88%86%E6%9E%90%5BJ%5D.%20%E4%BF%A1%E6%81%AF%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%2C%202014%2C%2014%289%29%3A%20217-219.&width=452.8)
从内存镜像中提取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文件 挂载名
依次尝试各个分区和各个秘钥的组合 无错误返回即为解密成功.
