例如,我知道,如果你只有一个操作系统,你就不能加密包含 Linux 的系统分区,只能加密 Windows。但我想知道你是否可以使用“隐藏操作系统”功能,将 Windows 设为外部系统,将 Linux 设为隐藏系统 - 这可能吗?
答案1
Linux 有自己的加密,(当然)不使用 truecrypt。
它通常需要未加密的启动分区,但您可以将其存储在可移动磁盘或 USB 驱动器上...
它也是通常使用 LUKS 分区,该分区未隐藏(LUKS 标头很容易看到)。
对于所有通常行为,它可以被定制来做任何你想做的事情,尽管它并不像在 Linux Mint 或 Ubuntu 等安装程序中单击“加密我的系统”复选框那么简单。
使用普通的 dm-crypt(而不是 LUKS)将会有一个更“隐藏”的分区,没有容易看到的标题,但是比 LUKS 提供的配置信息更多,密码强化更少(也没有多个密码)。
为了解决“windows 中隐藏的 linux”问题,你可以尝试保留虚拟机(如 VirtualBox 或 VMWare?)安装运行 Linux,全部在隐藏的加密分区上(或大文件),您从 Windows 内部解密并运行。Windows 会留下许多迹象,表明程序已运行,因此便携的实际上未安装的 VM 会有所帮助...
答案2
隐藏的 Linux 操作系统的操作方法很简单,但很难让它工作,它在我所做的测试中工作,不知道隐藏的操作系统在那里。
需求:知道如何将完整的 linux losetup(带有 -P 和 --offset 和 --sizelimit 参数)注入带有 hooks 目录的 initrams 中,等等。
脚步:
在 100% 加密的 HDD 上安装 Linux,使用 Grub2 让它从加密的 rootfs 启动,使用 /boot 作为文件夹。在 rootfs 分区上找到一个未使用的大型块列表。在飞解密的 rootfs 上创建一个循环,但不是在文件上,在 luks 上,需要使用 --offset 和 --sizelimit 执行 losetup,因为偏移量和大小是“秘密”(只存储在您的脑海中,而不是 grub.cfg 上)。
具体来说,它的工作原理很简单,从一个没有数据的新硬盘开始解释:
创建一个 GPT 表,只有一个分区,用 LUKS 加密该分区,在其上安装一个虚拟 Linux,并使用 grug2 作为引导加载程序(执行 grub2-install 时不要忘记添加 --modules="luks",因此 grub2 可以安装在 luks 分区内,不需要 /boot 作为分区,它可以是加密的 LUKS rootfs 内的文件夹)...这个 Linux 将是取证工具、边境代理等看到的 Linux。
现在在可用空间上找到一个未使用的连续区域(注意在使用外部 Linux 时不要覆盖这样的区域),该连续块将用于隐藏的操作系统。
在解密的 luks(/dev/mapper/...)上使用 losetup --ofset=InitialPosition --sizelimit=SizeOfSuchSpace 创建一个循环,该循环将被视为存储在可用空间上的虚拟硬盘...(这是 TrueCrypt 和 VeraCrypt 使用的相同概念)。
创建一个 LUKS(没有标题),这样你就有一个新的 /dev/mapper/... 用于这样的空间,在其中创建一个 ext4 或完整的 GPT 表,其中包含你想要的真正隐藏操作系统的分区方案,安装你想要的 Linux(与外部相同的 32 位或 64 位,但不需要是相同的发行版,只需要相同的架构),但在重启之前,编辑 initram 脚本和所需的完整 losttup ans 库(initramfs 上的一个标准不支持 --offset 和 --sizelimit,它只支持从 X 位置到块设备末尾),还要放置脚本来挂载外部 rootfs(其中一些块用于隐藏操作系统),然后在这样的脚本上还添加 losetup 命令(使用个人参数从 grub2 告诉偏移量和大小限制或在脚本上对它们进行硬编码),这将为这样的块创建一个设备 /dev/loop#,输入打开 LUKS 的命令(没有 luks 标头),这将创建一个 /dev/mapper/... 作为块设备,然后挂载文件系统或使用如果您创建分区方案,则需要 -P 参数等(如果您在这样的 luks 上创建分区,则在 losetup 上使用 -P 参数将创建 /dev/loop#p# 设备,因此需要为此类循环添加挂载命令),现在可以访问隐藏的操作系统(记得在 /root 文件夹上挂载 rotfs)... 所有这些命令都在 initramfs 的预挂载脚本中进行。
外部可见操作系统将如何启动:开机,BIOS 或 [U]EFI 加载,Grub2 从以 /boot 为文件夹的 LUKS 加密分区内部加载,它要求输入此类 luks 的密码(这就是为什么安装 grub2 时需要 --modules="luks" 的原因),然后出现菜单,选择启动 Linux,外部 Linux 将从由 luks 加密的 rootfs 加载……在那个 rootfs 里面你会有很多连续的空闲块,因为它会有很多空闲空间,其中一些只有你自己知道用于存储某些数据(实际上不是免费的,但 linux 文件系统将它们作为免费),这些数据将是隐藏的操作系统,所以没有人可以证明这是什么东西。
为什么不可能检测出这样的空间与其他空间不同?因为存储在那里的数据是由与外部 Linux 相同的 luks 加密的,但是当由这样的 luks 解密时,它将被视为随机数据,因为它也是由另一个 luks 层加密的(请注意,必须没有 luks 标头,这是必须的,否则它会被检测到)。
现在如何启动隐藏操作系统:开机,BIOS 或 [U]EFI 加载,Grub2 从 LUKS 加密分区内部加载,以 /boot 为文件夹,它要求输入此类外部 luks 的密码(这就是为什么安装 grub2 时需要 --modules="luks" 的原因),然后出现菜单,按'c'键进入控制台并开始输入 grub2 命令以访问隐藏操作系统,这将要求输入隐藏操作系统密码,然后命令加载 vmlinuz... 使用偏移量和 sizelimit 的个人参数(如果不是在 initram 脚本上硬编码),然后输入 boot 开始启动隐藏操作系统,它会在启动时再次要求输入两个密码(针对外部和隐藏)。
grub2 上的命令(不完全准确,仅为指南): insmod luks(可能不需要,它是为了能够调用 cryptmount) cryptmount(hd0,gpt1),用于安装位于 /dev/sda1 上的外部 luks loopback my_loop(crypto0),带有偏移量和 sizelimit 参数(仅在您脑海中的数据) cryptmount(my_loop),用于安装隐藏操作系统的 rootfs linux(crypto1,gpt1)/boot/vmlinuz ... my_parameter_offset = value my_param_size = value initrd(crypto1,gpt1)/boot/initrd.img ... boot
根据您的具体情况调整值,gpt 表示 gpt 分区表,对于 bios 来说,它是 msdos (hd0,msdos1) 或仅仅是数字 (hd0,1),等等。
一些发行版在 /vmlinuz 上创建到 /boot/vmlinuz... 的符号链接,并且对 /boot/initrd.img... 也采用同样的想法,将其链接到 /initrd.img,这样就更容易更新,因为不需要记住此类文件的名称。
这是一个完美的合理拒绝,因为任何取证人员都不可能确定哪些块用于隐藏操作系统以及哪些块包含随机数据。它们都由相同的 luks 层(外部)加密,如果必须透露外部密码,则所有隐藏操作系统块都会在此类文件系统上显示为空闲的未使用块,并且所看到的数据无法被检测为随机数据。起始位置和长度不存储在任何地方(只存储在您的脑海中),并且由于隐藏操作系统位于 luks 内(没有 luks 标头),因此无法看到解密的外部 luks 上是否有其他 luks。
用于启动隐藏操作系统的 grub2 命令不能存储在除了您的大脑之外的任何地方,否则隐藏的操作系统将能够被看到。
我知道以这种方式启动它很困难,但这是我第一次 100% 完全正常工作。
问题:如果使用外部操作系统,在隐藏操作系统出现后,隐藏操作系统可能会损坏,因为其块在这种外部 Linux 上被视为空闲,因此它可以覆盖它们。但至少,您的私人数据保持私密,并且可以合理地否认它存在。
如果不知道以下信息,就无法检测到这种隐藏操作系统:-外部密码-用于隐藏操作系统的块的初始位置-隐藏操作系统的大小(块数)-隐藏操作系统密码
非常重要:-隐藏操作系统块必须位于解密的外部 luks 的可用空间上,而不是此类文件系统上的文件。-隐藏操作系统块必须是唯一一个连续的区域-如果使用外部操作系统,可能会损坏隐藏操作系统
提示:如何获取完整的连续块区域...首先使用 livecd 创建外部 linux(真实硬盘,加密)的低级块克隆,以便之后可以恢复它,我建议将其克隆到文件...将文件作为循环挂载并打开 luks,创建一个大文件,获取文件块列表,确保它是连续的,现在您有了隐藏操作系统的起点和大小...卸载 luks 并循环文件,删除文件...现在您知道在真实硬盘上,打开 luks 后,您知道可以用于隐藏操作系统的整个空闲块区域。
我希望真正具有丰富知识的人能够在两个密码分叉下实现所有这些(如果密码 1 仅用于转到外部 Linux,如果密码 2 则转到隐藏的 Linux)。
TrueCrypt 和 VeraCryrpt 无法确保拒绝,因为它们知道如何访问隐藏操作系统而无需用户告诉它隐藏操作系统在哪里......无论它如何存储该信息,信息都在那里......所以这个 Linux 解决方案在安全性方面更好,但在日常使用中太难使用了,想象一下每天需要启动五次。
我不知道其他真正隐藏 Linux 的方法,也不知道有谁知道。
非常重要,真的非常重要:为了能够启动隐藏操作系统,您(至少)需要 grub2 版本 2.02~beta3(是的,是 beta3,不是 beta2,因为 beta2 的 cryptomount 命令有一个大错误,因为它只允许调用一次,其余的什么都不做,而且它也不允许访问未加密的 luks)。
希望更多人使用这个结构来实现隐藏操作系统。我在我的所有 Linux(32 位和 64 位)上都使用它。
预计实施时间:超过一两天。知识水平:非常高,真的非常高。隐藏操作系统的速度:在旧的 Pentium IV HT(3.4GHz)上读/写速度低于 15MiB/s,在现代 PC 上速度更快,如果使用加密处理器硬件指令,速度会更快……您正在级联使用两层、一些循环等。