Windows Linux 安装系统的全盘加密。 加密多重启动

Windows Linux 安装系统的全盘加密。 加密多重启动
更新了 RuNet V0.2 中的全盘加密指南。

牛仔策略:

[A] Windows 7系统对已安装系统进行块加密;
[B] GNU/Linux 系统块加密 (Debian) 已安装的系统 (包括/boot);
[C] GRUB2 配置、带有数字签名/身份验证/散列的引导加载程序保护;
[D] 剥离——销毁未加密的数据;
[E] 加密操作系统通用备份;
[F] 攻击 <在项目 [C6]> 目标 - GRUB2 引导加载程序;
[G]有用的文档。

╭────#40号房间#方案:
├──╼ Windows 7安装-全系统加密,不隐藏;
├──╼已安装GNU/Linux (Debian 和衍生发行版) — 系统全加密,不隐藏(/,包括/boot;交换);
├──╼ 独立引导加载程序:VeraCrypt引导加载程序安装在MBR中,GRUB2引导加载程序安装在扩展分区中;
├──╼无需安装/重新安装操作系统;
└──╼使用的加密软件:VeraCrypt; 地穴设置; GnuPG; 海马; 哈希深; GRUB2 是免费的/免费的。

上述方案部分解决了“远程启动闪存驱动器”的问题,让您可以享受加密的操作系统Windows/Linux,并通过“加密通道”从一个操作系统到另一个操作系统交换数据。

PC 启动顺序(选项之一):

  • 打开机器;
  • 加载 VeraCrypt 引导加载程序 (输入正确的密码将继续启动Windows 7);
  • 按“Esc”键将加载 GRUB2 引导加载程序;
  • GRUB2 引导加载程序 (选择发行版/GNU/Linux/CLI),需要对 GRUB2 超级用户 <登录名/密码> 进行身份验证;
  • 成功验证并选择发行版后,您将需要输入密码来解锁“/boot/initrd.img”;
  • 输入无误的密码后,GRUB2 将“要求”输入密码 (第三,BIOS密码或GNU/Linux用户帐户密码——不考虑) 解锁并启动 GNU/Linux 操作系统,或自动替换密钥 (两个密码+密钥,或密码+密钥);
  • 外部侵入 GRUB2 配置将冻结 GNU/Linux 引导过程。

麻烦吗? 好吧,让我们自动化这些流程。

对硬盘进行分区时 (MBR表) 一台 PC 最多可以有 4 个主分区,或者 3 个主分区和 XNUMX 个扩展分区,以及一个未分配的区域。 与主部分不同,扩展部分可以包含子部分 (逻辑驱动器=扩展分区)。 换句话说,HDD 上的“扩展分区”取代了 LVM 来完成手头的任务:完整的系统加密。 如果你的磁盘分为4个主分区,则需要使用lvm,或者改造 (带格式) 从主要部分到高级部分,或者明智地使用所有四个部分并保留所有内容,以获得所需的结果。 即使您的磁盘上只有一个分区,Gparted 也会帮助您对硬盘进行分区 (对于附加部分) 不会丢失数据,但此类行为仍会受到少量惩罚。

下表列出了整篇文章将描述的硬盘驱动器布局方案。

Windows Linux 安装系统的全盘加密。 加密多重启动
1TB 分区表(编号 1)。

你也应该有类似的东西。
sda1 - 主分区 1 NTFS (加密);
sda2 - 扩展节标记;
sda6——逻辑磁盘 (它安装了 GRUB2 引导加载程序);
sda8 - 交换(加密交换文件/并不总是);
sda9——测试逻辑磁盘;
sda5 - 好奇的逻辑磁盘;
sda7 - GNU/Linux 操作系统(将操作系统转移到加密逻辑磁盘);
sda3 - 主分区 2,Windows 7 操作系统 (加密);
sda4 - 主部分 3 (它包含未加密的 GNU/Linux,用于备份/并不总是).

[A] Windows 7系统块加密

A1。 维拉密码Windows Linux 安装系统的全盘加密。 加密多重启动

从加载 官方网站,或者从镜子里 SourceForge上 VeraCrypt加密软件安装版 (在文章 v1.24-Update3 发布时,便携版 VeraCrypt 不适合系统加密)。 检查下载软件的校验和

$ Certutil -hashfile "C:VeraCrypt Setup 1.24.exe" SHA256

并将结果与​​ VeraCrypt 开发者网站上发布的 CS 进行比较。

如果安装了HashTab软件就更简单了:RMB (VeraCrypt 安装程序 1.24.exe)-properties - 文件的哈希和。

要验证程序签名,系统上必须安装软件和开发人员的公共 pgp 密钥 gnuPG; GP4Win.

A2。 使用管理员权限安装/运行 VeraCrypt 软件Windows Linux 安装系统的全盘加密。 加密多重启动

A3。 为活动分区选择系统加密参数VeraCrypt – 系统 – 加密系统分区/磁盘 – 正常 – 加密 Windows 系统分区 – 多重启动 – (警告:“不建议没有经验的用户使用此方法”,这是事实,我们同意“是”) – 启动盘 (“是”,即使不是这样,仍然是“是”) – 系统磁盘数量“2 个或更多” – 一个磁盘上多个系统“是” – 非 Windows 引导加载程序“否” (事实上​​,“是”,但是 VeraCrypt/GRUB2 引导加载程序不会在它们之间共享 MBR;更准确地说,只有引导加载程序代码的最小部分存储在 MBR/引导轨道中,它的主要部分是位于文件系统内) – 多重启动 – 加密设置...

如果您偏离上述步骤(块系统加密方案),那么 VeraCrypt 将发出警告并且不允许您加密该分区。

在目标数据保护的下一步中,进行“测试”并选择加密算法。 如果您的 CPU 过时,那么最快的加密算法很可能是 Twofish。 如果CPU很强大,你会注意到区别:根据测试结果,AES加密将比其加密竞争对手快几倍。 AES 是一种流行的加密算法;现代 CPU 的硬件专门针对“秘密”和“黑客攻击”进行了优化。

VeraCrypt 支持以 AES 级联加密磁盘的能力(双鱼)/和其他组合。 在十年前的旧核心 Intel CPU 上 (无需硬件支持 AES、A/T 级联加密) 性能的下降基本上是难以察觉的。 (对于同时代的AMD CPU/~参数,性能略有下降)。 操作系统动态运行,透明加密的资源消耗不可见。 相比之下,例如由于安装测试不稳定桌面环境Mate v1.20.1导致性能明显下降 (或者v1.20.2我不太记得了) 在GNU/Linux中,或者由于Windows7↑中遥测例程的操作。 通常,有经验的用户在加密之前会进行硬件性能测试。 例如,在Aida64/Sysbench/systemd-analyze中,将责任与加密系统后的相同测试结果进行比较,从而为自己反驳了“系统加密有害”的神话。 在备份/恢复加密数据时,机器的速度变慢和不便很明显,因为“系统数据备份”操作本身不是以毫秒为单位来衡量的,并且添加了相同的<即时解密/加密>。 最终,每个被允许修改密码学的用户都会平衡加密算法与手头任务的满意度、他们的偏执程度和易用性。

最好将 PIM 参数保留为默认值,这样在加载操作系统时就不必每次都输入准确的迭代值。 VeraCrypt 使用大量迭代来创建真正的“慢哈希”。 使用暴力/彩虹表方法对这种“加密蜗牛”进行攻击只有使用简短的“简单”密码和受害者的个人字符集列表才有意义。 密码强度的代价是加载操作系统时输入正确密码的延迟。 (在 GNU/Linux 中安装 VeraCrypt 卷的速度要快得多)。
用于实施暴力攻击的免费软件 (从 VeraCrypt/LUKS 磁盘头中提取密码) 哈希猫。 John the Ripper 不知道如何“破解 Veracrypt”,并且在与 LUKS 合作时也不了解 Twofish 密码学。

由于加密算法的加密强度,不可阻挡的密码朋克正在开发具有不同攻击向量的软件。 例如,从 RAM 中提取元数据/密钥 (冷启动/直接内存访问攻击), 有专门用于这些目的的免费和非自由软件。

完成加密活动分区的设置/生成“唯一元数据”后,VeraCrypt 将重新启动 PC 并测试其引导加载程序的功能。 重新启动/启动 Windows 后,VeraCrypt 将以待机模式加载,剩下的就是确认加密过程 - Y。

在系统加密的最后一步,VeraCrypt 将以“veracryptrescuedisk.iso”的形式创建活动加密分区标头的备份副本 - 这是必须完成的 - 在该软件中,这样的操作是必需的 (在 LUKS 中,作为一项要求 - 不幸的是,这被省略了,但在文档中强调了)。 救援盘对每个人都会派上用场,而且对某些人来说不止一次。 损失 (标头/MBR 重写) 标头的备份副本将永久拒绝 Windows 操作系统对解密分区的访问。

A4。 创建 VeraCrypt 救援 USB/磁盘默认情况下,VeraCrypt 提供将“~2-3MB 元数据”刻录到 CD 的功能,但并非所有人都有磁盘或 DWD-ROM 驱动器,创建可启动闪存驱动器“VeraCrypt 救援盘”对于某些人来说将是一个技术惊喜: Rufus /GUIdd-ROSA ImageWriter 和其他类似软件将无法应对该任务,因为除了将偏移元数据复制到可启动闪存驱动器之外,您还需要将图像复制/粘贴到 USB 驱动器的文件系统之外,简而言之,正确地将 MBR/道路复制到钥匙串。 您可以使用“dd”实用程序从 GNU/Linux 操作系统创建可启动闪存驱动器,查看此标志。

Windows Linux 安装系统的全盘加密。 加密多重启动

在 Windows 环境中创建应急磁盘是不同的。 VeraCrypt的开发者并没有在官方中包含这个问题的解决方案 文件 通过“救援盘”,但提出了一种不同的解决方案:他在他的 VeraCrypt 论坛上发布了用于创建“USB 救援盘”的附加软件,供免费访问。 Windows 版该软件的存档管理员是“创建 USB veracrypt 救援盘”。 保存rescue disk.iso后,活动分区的块系统加密过程将开始。 加密期间,操作系统的运行不会停止;无需重新启动 PC。 加密操作完成后,活动分区将完全加密并可以使用。 如果启动 PC 时未出现 VeraCrypt 启动加载程序,并且标头恢复操作也无济于事,请检查“启动”标志,它必须设置为 Windows 所在的分区 (无论加密和其他操作系统如何,请参见表 1)。
这就完成了使用 Windows 操作系统进行块系统加密的描述。

[B]卢克斯。 GNU/Linux 加密 (~Debian) 安装的操作系统。 算法和步骤

为了加密 Debian/派生发行版,您需要将准备好的分区映射到虚拟块设备,将其传输到映射的 GNU/Linux 磁盘,然后安装/配置 GRUB2。 如果您没有裸机服务器,并且您珍惜时间,那么您需要使用 GUI,并且下面描述的大多数终端命令都应该在“Chuck-Norris 模式”下运行。

B1。 从 live usb GNU/Linux 启动 PC

“对硬件性能进行加密测试”

lscpu && сryptsetup benchmark

Windows Linux 安装系统的全盘加密。 加密多重启动

如果您是一辆支持 AES 硬件的强大汽车的快乐拥有者,那么数字将看起来像终端的右侧;如果您是快乐的拥有者,但使用古董硬件,那么数字将看起来像左侧。

B2. 磁盘分区。 将 fs 逻辑磁盘 HDD 挂载/格式化为 Ext4 (Gparted)

B2.1。 创建加密的 sda7 分区头我将根据上面发布的分区表在这里和进一步描述分区的名称。 根据您的磁盘布局,您必须替换分区名称。

逻辑驱动器加密映射 (/dev/sda7 > /dev/mapper/sda7_crypt)。
#轻松创建“LUKS-AES-XTS分区”

cryptsetup -v -y luksFormat /dev/sda7

选项:

* luksFormat - LUKS 头的初始化;
* -y -passphrase(不是密钥/文件);
* -v -verbalization(在终端中显示信息);
* /dev/sda7 - 扩展分区中的逻辑磁盘 (计划传输/加密 GNU/Linux).

默认加密算法<LUKS1:aes-xts-plain64,密钥:256 位,LUKS 标头哈希:sha256,RNG:/dev/urandom> (取决于 cryptsetup 版本)。

#Проверка default-алгоритма шифрования
cryptsetup  --help #самая последняя строка в выводе терминала.

如果 CPU 上没有 AES 硬件支持,最好的选择是创建扩展的“LUKS-Twofish-XTS-partition”。

B2.2。 “LUKS-Twofish-XTS-分区”的高级创建

cryptsetup luksFormat /dev/sda7 -v -y -c twofish-xts-plain64 -s 512 -h sha512 -i 1500 --use-urandom

选项:
* luksFormat - LUKS 头的初始化;
* /dev/sda7 是你未来的加密逻辑盘;
* -v 言语表达;
* -y 密码;
* -c 选择数据加密算法;
* -s 加密密钥大小;
* -h 哈希算法/加密函数,使用 RNG (--使用urandom) 为逻辑磁盘头生成唯一的加密/解密密钥,即辅助头密钥(XTS); 存储在加密磁盘头中的唯一主密钥、辅助 XTS 密钥、所有这些元数据以及使用主密钥和辅助 XTS 密钥加密/解密分区上任何数据的加密例程 (章节标题除外) 存储在所选硬盘分区上的 ~3MB 中。
* -i 以毫秒为单位的迭代,而不是“数量” (处理密码时的时间延迟会影响操作系统的加载和密钥的加密强度)。 为了保持加密强度的平衡,对于像“Russian”这样的简单密码,您需要增加 -(i) 值;对于像“?8dƱob/øfh”这样的复杂密码,可以减小该值。
* —use-urandom 随机数生成器,生成密钥和盐。

映射 sda7 > sda7_crypt 部分后 (操作速度很快,因为加密标头是使用约 3 MB 的元数据创建的,仅此而已),需要格式化并挂载sda7_crypt文件系统。

B2.3。 比较

cryptsetup open /dev/sda7 sda7_crypt
#выполнение данной команды запрашивает ввод секретной парольной фразы.

选项:
* open - 匹配“with name”部分;
* /dev/sda7 - 逻辑磁盘;
* sda7_crypt - 用于挂载加密分区或在操作系统启动时初始化它的名称映射。

B2.4。 将 sda7_crypt 文件系统格式化为 ext4。 在操作系统中挂载磁盘(注意:您将无法在 Gparted 中使用加密分区)

#форматирование блочного шифрованного устройства
mkfs.ext4 -v -L DebSHIFR /dev/mapper/sda7_crypt 

选项:
* -v - 语言化;
* -L - 驱动器标签(显示在资源管理器中的其他驱动器中)。

接下来,您应该将虚拟加密块设备 /dev/sda7_crypt 挂载到系统

mount /dev/mapper/sda7_crypt /mnt

使用 /mnt 文件夹中的文件将自动加密/解密 sda7 中的数据。

在资源管理器中映射和挂载分区更方便 (鹦鹉螺/caja GUI),该分区将已经在磁盘选择列表中,剩下的就是输入密码来打开/解密磁盘。 将自动选择匹配的名称,而不是“sda7_crypt”,而是类似 /dev/mapper/Luks-xx-xx...

B2.5。 光盘标头备份(~3MB 元数据)其中一个 重要 需要立即完成的操作 - “sda7_crypt”标头的备份副本。 如果您覆盖/损坏标头 (例如在sda2分区安装GRUB7等),加密的数据将完全丢失,并且没有任何恢复的可能性,因为不可能重新生成相同的密钥;密钥是唯一创建的。

#Бэкап заголовка раздела
cryptsetup luksHeaderBackup --header-backup-file ~/Бэкап_DebSHIFR /dev/sda7 

#Восстановление заголовка раздела
cryptsetup luksHeaderRestore --header-backup-file <file> <device>

选项:
* luksHeaderBackup —标头备份文件-备份命令;
* luksHeaderRestore —标头备份文件-恢复命令;
* ~/Backup_DebSHIFR - 备份文件;
* /dev/sda7 - 要保存加密磁盘头备份副本的分区。
到此<创建并编辑加密分区>就完成了。

B3。 移植 GNU/Linux 操作系统 (sda4) 到加密分区 (sda7)

创建文件夹/mnt2 (注意 - 我们仍在使用实时 USB,sda7_crypt 安装在 /mnt),并将我们的GNU/Linux挂载到/mnt2,需要加密。

mkdir /mnt2
mount /dev/sda4 /mnt2

我们使用 Rsync 软件进行正确的操作系统传输

rsync -avlxhHX --progress /mnt2/ /mnt

Rsync 选项在 E1 段中描述。

此外, 必要 对逻辑磁盘分区进行碎片整理

e4defrag -c /mnt/ #после проверки, e4defrag выдаст, что степень дефрагментации раздела~"0", это заблуждение, которое может вам стоить существенной потери производительности!
e4defrag /mnt/ #проводим дефрагментацию шифрованной GNU/Linux

制定一条规则:如果您有硬盘,请不时对加密的 GNU/LInux 执行 e4defrag。
传输和同步【GNU/Linux > GNU/Linux-加密】到此步骤完成。

在 4。 在加密的 sda7 分区上设置 GNU/Linux

成功转移操作系统 /dev/sda4 > /dev/sda7 后,需要登录加密分区上的 GNU/Linux 并进行进一步配置 (无需重新启动电脑) 相对于加密系统。 也就是说,位于实时 USB 中,但执行“相对于加密操作系统的根目录”的命令。 “chroot”将模拟类似的情况。 快速接收有关您当前使用的操作系统的信息 (加密与否,因为sda4和sda7中的数据是同步的),取消操作系统同步。 在根目录下创建 (sda4/sda7_crypt) 空标记文件,例如 /mnt/encryptedOS 和 /mnt2/decryptedOS。 快速检查您使用的操作系统 (包括未来):

ls /<Tab-Tab>

B4.1。 “模拟登录加密操作系统”

mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt

B4.2。 验证工作是针对加密系统进行的

ls /mnt<Tab-Tab> 
#и видим файл "/шифрованнаяОС"

history
#в выводе терминала должна появиться история команд su рабочей ОС.

B4.3。 创建/配置加密交换,编辑 crypttab/fstab由于每次操作系统启动时都会格式化交换文件,因此现在创建交换并将其映射到逻辑磁盘并输入 B2.2 段中的命令是没有意义的。 对于Swap来说,它自己的临时加密密钥将在每次启动时自动生成。 交换键的生命周期:卸载/卸载交换分区 (+清理内存); 或重新启动操作系统。 设置swap,打开负责块加密设备配置的文件 (类似于 fstab 文件,但负责加密)。

nano /etc/crypttab 

我做

#“目标名称”“源设备”“密钥文件”“选项”
交换 /dev/sda8 /dev/urandom 交换,密码=twofish-xts-plain64,大小=512,哈希=sha512

选项
* swap - 加密 /dev/mapper/swap 时的映射名称。
* /dev/sda8 - 使用逻辑分区进行交换。
* /dev/urandom - 用于交换的随机加密密钥生成器(每次新操作系统启动时,都会创建新密钥)。 /dev/urandom 生成器的随机性不如 /dev/random,毕竟 /dev/random 是在危险的偏执环境中工作时使用的。 加载操作系统时,/dev/random 会使加载速度减慢几分钟 (参见 systemd-分析).
* swap,cipher=twofish-xts-plain64,size=512,hash=sha512: -分区知道它是交换分区并“相应地”格式化; 加密演算法。

#Открываем и правим fstab
nano /etc/fstab

我做

#交换在安装过程中在/ dev / sda8上
/dev/mapper/swap 无 交换 sw 0 0

/dev/mapper/swap 是在 crypttab 中设置的名称。

替代加密交换
如果由于某种原因您不想为交换文件放弃整个分区,那么您可以采用另一种更好的方法:使用操作系统在加密分区上的文件中创建交换文件。

fallocate -l 3G /swap #создание файла размером 3Гб (почти мгновенная операция)
chmod 600 /swap #настройка прав
mkswap /swap #из файла создаём файл подкачки
swapon /swap #включаем наш swap
free -m #проверяем, что файл подкачки активирован и работает
printf "/swap none swap sw 0 0" >> /etc/fstab #при необходимости после перезагрузки swap будет постоянный

交换分区设置完成。

B4.4。 设置加密的 GNU/Linux(编辑 crypttab/fstab 文件)如上所述,/etc/crypttab 文件描述了系统引导期间配置的加密块设备。

#правим /etc/crypttab 
nano /etc/crypttab 

如果您匹配 sda7>sda7_crypt 部分,如段落 B2.1 中所示

#“目标名称”“源设备”“密钥文件”“选项”
sda7_crypt UUID=81048598-5bb9-4a53-af92-f3f9e709e2f2 none luks

如果您匹配 sda7>sda7_crypt 部分,如段落 B2.2 中所示

#“目标名称”“源设备”“密钥文件”“选项”
sda7_crypt UUID=81048598-5bb9-4a53-af92-f3f9e709e2f2 none cipher=twofish-xts-plain64,size=512,hash=sha512

如果您匹配了 B7 或 B7 段中的 sda2.1>sda2.2_crypt 部分,但不想重新输入密码来解锁和启动操作系统,那么您可以替换密钥/随机文件来代替密码

#“目标名称”“源设备”“密钥文件”“选项”
sda7_crypt UUID=81048598-5bb9-4a53-af92-f3f9e709e2f2 /etc/skey luks

使用说明
* 无 - 报告加载操作系统时需要输入秘密密码才能解锁根。
* UUID - 分区标识符。 要查找您的 ID,请在终端中输入 (提醒一下,从现在开始,您将在 chroot 环境中的终端中工作,而不是在另一个实时 USB 终端中工作)。

fdisk -l #проверка всех разделов
blkid #должно быть что-то подобное 

/dev/sda7: UUID=«81048598-5bb9-4a53-af92-f3f9e709e2f2» TYPE=«crypto_LUKS» PARTUUID=«0332d73c-07»
/dev/mapper/sda7_crypt: LABEL=«DebSHIFR» UUID=«382111a2-f993-403c-aa2e-292b5eac4780» TYPE=«ext4»

当从安装了 sda7_crypt 的实时 USB 终端请求 blkid 时,此行可见)。
您从 sdaX 获取 UUID (不是 sdaX_crypt!,UUID sdaX_crypt - 在生成 grub.cfg 配置时将自动保留)。
* cipher=twofish-xts-plain64,size=512,hash=sha512 -luks 高级模式加密。
* /etc/skey - 密钥文件,自动插入以解锁操作系统启动 (而不是输入第三个密码)。 您可以指定最大 8MB 的任何文件,但读取的数据将小于 1MB。

#Создание "генерация" случайного файла <секретного ключа> размером 691б.
head -c 691 /dev/urandom > /etc/skey

#Добавление секретного ключа (691б) в 7-й слот заголовка luks
cryptsetup luksAddKey --key-slot 7 /dev/sda7 /etc/skey

#Проверка слотов "пароли/ключи luks-раздела"
cryptsetup luksDump /dev/sda7 

它看起来像这样:

(自己做,自己看看)。

cryptsetup luksKillSlot /dev/sda7 7 #удаление ключа/пароля из 7 слота

/etc/fstab 包含有关各种文件系统的描述信息。

#Правим /etc/fstab
nano /etc/fstab

#“文件系统”“挂载点”“类型”“选项”“转储”“pass”
#/在安装过程中位于/ dev / sda7上
/dev/mapper/sda7_crypt / ext4 错误=remount-ro 0 1

选项
* /dev/mapper/sda7_crypt - sda7>sda7_crypt 映射的名称,在 /etc/crypttab 文件中指定。
crypttab/fstab 设置完成。

B4.5。 编辑配置文件。 关键时刻B4.5.1。 编辑配置 /etc/initramfs-tools/conf.d/resume

#Если у вас ранее был активирован swap раздел, отключите его. 
nano /etc/initramfs-tools/conf.d/resume

并注释掉 (如果存在) “#”行“继续”。 该文件必须完全为空。

B4.5.2。 编辑配置 /etc/initramfs-tools/conf.d/cryptsetup

nano /etc/initramfs-tools/conf.d/cryptsetup

应该匹配

# /etc/initramfs-tools/conf.d/cryptsetup
CRYPTSETUP=是
导出 CRYPTSETUP

B4.5.3。 编辑 /etc/default/grub 配置 (此配置负责在使用加密的 /boot 时生成 grub.cfg 的能力)

nano /etc/default/grub

添加行“GRUB_ENABLE_CRYPTODISK=y”
值“y”,grub-mkconfig 和 grub-install 将检查加密驱动器并生成在引导时访问它们所需的附加命令 (insmods ).
一定有相似之处

GRUB_DEFAULT = 0
GRUB_TIMEOUT = 1
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || 回显Debian`
GRUB_CMDLINE_LINUX_DEFAULT="acpi_backlight=供应商"
GRUB_CMDLINE_LINUX="安静启动 noautomount"
GRUB_ENABLE_CRYPTODISK=y

B4.5.4。 编辑配置 /etc/cryptsetup-initramfs/conf-hook

nano /etc/cryptsetup-initramfs/conf-hook

检查该行注释掉<#>。
在未来 (即使现在,这个参数也没有任何意义,但有时它会干扰更新 initrd.img 映像)。

B4.5.5。 编辑配置 /etc/cryptsetup-initramfs/conf-hook

nano /etc/cryptsetup-initramfs/conf-hook

KEYFILE_PATTERN=”/etc/skey”
乌玛斯克=0077

这会将密钥“skey”打包到 initrd.img 中,操作系统启动时需要该密钥来解锁 root (如果您不想再次输入密码,则可以用“skey”钥匙代替汽车钥匙)。

B4.6。 更新/boot/initrd.img [版本]要将密钥打包到 initrd.img 并应用 cryptsetup 修复,请更新映像

update-initramfs -u -k all

更新 initrd.img 时 (正如他们所说“这是可能的,但不确定”) 将会出现与 cryptsetup 相关的警告,或者例如有关 Nvidia 模块丢失的通知 - 这是正常的。 更新文件后,检查是否确实更新了,查看时间 (相对于 chroot 环境./boot/initrd.img)。 警告! 在 [update-initramfs -u -k all] 之前,请务必检查 cryptsetup 是否已打开 /dev/sda7 sda7_crypt - 这是/etc/crypttab中出现的名称,否则重启后会出现busybox错误)
到这一步,配置文件就设置完成了。

[C] 安装和配置 GRUB2/保护

C1。 如有必要,格式化引导程序专用分区(一个分区至少需要20MB)

mkfs.ext4 -v -L GRUB2 /dev/sda6

C2。 将 /dev/sda6 挂载到 /mnt所以我们在chroot下工作,那么根目录下就不会存在/mnt2目录了,/mnt文件夹会是空的。
挂载 GRUB2 分区

mount /dev/sda6 /mnt

如果您安装了旧版本的 GRUB2,则位于 /mnt/boot/grub/i-386-pc 目录中 (其他平台也是可能的,例如,不是“i386-pc”) 没有加密模块 (简而言之,该文件夹应包含模块,包括这些.mod:cryptodisk; luks; gcry_twofish; gcry_sha512;signature_test.mod), 在这种情况下,GRUB2需要动摇。

apt-get update
apt-get install grub2 

重要的! 从存储库更新 GRUB2 软件包时,当询问“关于选择”安装引导加载程序的位置时,必须拒绝安装 (原因 - 尝试安装 GRUB2 - 在“MBR”或实时 USB 上)。 否则您将损坏 VeraCrypt 标头/加载器。 更新 GRUB2 软件包并取消安装后,引导加载程序必须手动安装在逻辑磁盘上,而不是安装在 MBR 中。 如果您的存储库有过时版本的 GRUB2,请尝试 更新 这是官方网站上的,没查过 (与最新的 GRUB 2.02 ~BetaX 引导加载程序一起使用)。

C3。 将 GRUB2 安装到扩展分区 [sda6]您必须有已安装的分区 [项目 C.2]

grub-install --force --root-directory=/mnt /dev/sda6

选项
* —force - 安装引导加载程序,绕过几乎始终存在并阻止安装的所有警告 (必需的标志)。
* --root-directory - 安装目录到 sda6 的根目录。
* /dev/sda6 - 你的 sdaХ 分区 (不要错过 /mnt /dev/sda6 之间的 <space>)。

C4。 创建配置文件[grub.cfg]忘记“update-grub2”命令,并使用完整配置文件生成命令

grub-mkconfig -o /mnt/boot/grub/grub.cfg

完成 grub.cfg 文件的生成/更新后,输出终端应包含在磁盘上找到的操作系统的行 (如果您有一个带有 Windows 10 的多重引导闪存驱动器和一堆实时发行版,“grub-mkconfig”可能会从实时 USB 中找到并获取操作系统 - 这是正常的)。 如果终端是“空”并且没有生成“grub.cfg”文件,那么这与系统中存在GRUB错误时的情况相同 (很可能是来自存储库测试分支的加载器), 从可信来源重新安装 GRUB2。
“简单配置”安装和GRUB2设置完成。

C5。 加密 GNU/Linux 操作系统的验证测试我们正确完成了加密任务。 小心地留下加密的 GNU/Linux (退出 chroot 环境)。

umount -a #размонтирование всех смонтированных разделов шифрованной GNU/Linux
Ctrl+d #выход из среды chroot
umount /mnt/dev
umount /mnt/proc
umount /mnt/sys
umount -a #размонтирование всех смонтированных разделов на live usb
reboot

重新启动 PC 后,应加载 VeraCrypt 引导加载程序。
Windows Linux 安装系统的全盘加密。 加密多重启动

*输入活动分区的密码将开始加载 Windows。
*如果您选择加密的 GNU/Linux,则按“Esc”键会将控制权转移到 GRUB2 - 需要密码 (sda7_crypt) 来解锁 /boot/initrd.img(如果 grub2 写入 uuid“未找到” - 这是一个grub2 引导加载程序有问题,应该重新安装,例如,从测试分支/稳定版等)。
Windows Linux 安装系统的全盘加密。 加密多重启动

*根据您配置系统的方式(请参阅第 B4.4/4.5 段),输入正确的密码解锁 /boot/initrd.img 映像后,您将需要密码来加载操作系统内核/根目录或密钥key 将自动替换为“skey”,无需重新输入密码。
Windows Linux 安装系统的全盘加密。 加密多重启动
(屏幕“自动替换密钥”)。

*然后将遵循熟悉的加载 GNU/Linux 和用户帐户身份验证的过程。
Windows Linux 安装系统的全盘加密。 加密多重启动

*用户授权并登录操作系统后,需要再次更新/boot/initrd.img (见 B4.6)。

update-initramfs -u -k all

如果 GRUB2 菜单中有多余的行 (来自带有 live USB 的 OS-m 拾音器) 摆脱他们

mount /dev/sda6 /mnt
grub-mkconfig -o /mnt/boot/grub/grub.cfg

GNU/Linux 系统加密的快速总结:

  • GNU/Linuxinux完全加密,包括/boot/kernel和initrd;
  • 密钥封装在initrd.img中;
  • 目前的授权方案 (输入解锁initrd的密码;启动操作系统的密码/密钥;授权Linux帐户的密码).

《简单的GRUB2配置》块分区的系统加密就完成了。

C6。 高级 GRUB2 配置。 具有数字签名+身份验证保护的引导加载程序保护GNU/Linux 是完全加密的,但引导加载程序不能加密——这种情况是由 BIOS 决定的。 因此,GRUB2 的链式加密引导是不可能的,但简单的链式引导是可能/可用的,但从安全角度来看,这是没有必要的 [参见P.F]。
针对“存在漏洞”的GRUB2,开发人员实现了“签名/身份验证”的引导加载程序保护算法。

  • 当引导加载程序受到“其自己的数字签名”保护时,文件的外部修改或尝试在此引导加载程序中加载其他模块将导致引导过程被阻止。
  • 通过身份验证保护引导加载程序时,为了选择加载发行版或在 CLI 中输入其他命令,您需要输入超级用户 GRUB2 的登录名和密码。

C6.1。 引导加载程序身份验证保护检查您是否在加密操作系统的终端中工作

ls /<Tab-Tab> #обнаружить файл-маркер

创建超级用户密码以在 GRUB2 中进行授权

grub-mkpasswd-pbkdf2 #введите/повторите пароль суперпользователя. 

获取密码哈希。 像这样的东西

grub.pbkdf2.sha512.10000.DE10E42B01BB6FEEE46250FC5F9C3756894A8476A7F7661A9FFE9D6CC4D0A168898B98C34EBA210F46FC10985CE28277D0563F74E108FCE3ACBD52B26F8BA04D.27625A4D30E4F1044962D3DD1C2E493EF511C01366909767C3AF9A005E81F4BFC33372B9C041BE9BA904D7C6BB141DE48722ED17D2DF9C560170821F033BCFD8

挂载 GRUB 分区

mount /dev/sda6 /mnt 

编辑配置

nano -$ /mnt/boot/grub/grub.cfg 

检查文件搜索,确保“grub.cfg”中没有任何标志(“-unrestricted”“-user”,
添加在最后 (在 ### END /etc/grub.d/41_custom ### 行之前)
“设置超级用户=”root“
password_pbkdf2 根哈希值。”

应该是这样的

# 该文件提供了一种添加自定义菜单条目的简单方法。 只需键入
# 您想要在此评论后添加的菜单条目。 注意不要改变
#上面的'exec tail'行。
### 结束 /etc/grub.d/40_custom ###

### 开始 /etc/grub.d/41_custom ###
如果 [ -f ${config_directory}/custom.cfg ]; 然后
源 ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; 然后
源 $prefix/custom.cfg;
fi
设置超级用户=“root”
password_pbkdf2 root grub.pbkdf2.sha512.10000.DE10E42B01BB6FEEE46250FC5F9C3756894A8476A7F7661A9FFE9D6CC4D0A168898B98C34EBA210F46FC10985CE28277D0563F74E108FCE3ACBD52B26F8BA04D.27625A4D30E4F1044962D3DD1C2E493EF511C01366909767C3AF9A005E81F4BFC33372B9C041BE9BA904D7C6BB141DE48722ED17D2DF9C560170821F033BCFD8
### 结束 /etc/grub.d/41_custom ###
#

如果您经常使用命令“grub-mkconfig -o /mnt/boot/grub/grub.cfg”并且不想每次都更改grub.cfg,请输入以上行 (登录密码) 在最底部的 GRUB 用户脚本中

nano /etc/grub.d/41_custom 

猫<<EOF
设置超级用户=“root”
password_pbkdf2 root grub.pbkdf2.sha512.10000.DE10E42B01BB6FEEE46250FC5F9C3756894A8476A7F7661A9FFE9D6CC4D0A168898B98C34EBA210F46FC10985CE28277D0563F74E108FCE3ACBD52B26F8BA04D.27625A4D30E4F1044962D3DD1C2E493EF511C01366909767C3AF9A005E81F4BFC33372B9C041BE9BA904D7C6BB141DE48722ED17D2DF9C560170821F033BCFD8
EOF

当生成配置“grub-mkconfig -o /mnt/boot/grub/grub.cfg”时,负责身份验证的行将自动添加到 grub.cfg 中。
此步骤完成 GRUB2 身份验证设置。

C6.2。 带数字签名的引导加载程序保护假设您已经拥有个人 pgp 加密密钥 (或创建这样的密钥)。 系统必须安装加密软件:gnuPG; 克利奥帕特拉/GPA; 海马。 加密软件将使您在所有此类问题上的生活变得更加轻松。 Seahorse - 稳定版软件包 3.14.0 (更高版本,例如 V3.20,有缺陷并且存在重大错误)。

PGP 密钥仅需要在 su 环境中生成/启动/添加!

生成个人加密密钥

gpg - -gen-key

导出您的密钥

gpg --export -o ~/perskey

如果尚未挂载,则在操作系统中挂载逻辑磁盘

mount /dev/sda6 /mnt #sda6 – раздел GRUB2

清理 GRUB2 分区

rm -rf /mnt/

在 sda2 中安装 GRUB6,将您的私钥放入主 GRUB 映像“core.img”中

grub-install --force --modules="gcry_sha256 gcry_sha512 signature_test gcry_dsa gcry_rsa" -k ~/perskey --root-directory=/mnt /dev/sda6

选项
* --force - 安装引导加载程序,绕过所有始终存在的警告 (必需的标志)。
* —modules="gcry_sha256 gcry_sha512 signature_test gcry_dsa gcry_rsa" - 指示 GRUB2 在 PC 启动时预加载必要的模块。
* -k ~/perskey -“PGP 密钥”的路径 (将密钥打包到镜像后即可删除)。
* --root-directory -设置启动目录为sda6的根目录
/dev/sda6 - 您的 sdaX 分区。

生成/更新 grub.cfg

grub-mkconfig  -o /mnt/boot/grub/grub.cfg

将“trust /boot/grub/perskey”行添加到“grub.cfg”文件的末尾 (强制使用 pgp 密钥。) 由于我们安装了 GRUB2 和一组模块,包括签名模块“signature_test.mod”,因此无需在配置中添加“set check_signatures=enforce”等命令。

它应该看起来像这样 (grub.cfg 文件中的结束行)

### 开始 /etc/grub.d/41_custom ###
如果 [ -f ${config_directory}/custom.cfg ]; 然后
源 ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; 然后
源 $prefix/custom.cfg;
fi
信任 /boot/grub/perskey
设置超级用户=“root”
password_pbkdf2 root grub.pbkdf2.sha512.10000.DE10E42B01BB6FEEE46250FC5F9C3756894A8476A7F7661A9FFE9D6CC4D0A168898B98C34EBA210F46FC10985CE28277D0563F74E108FCE3ACBD52B26F8BA04D.27625A4D30E4F1044962D3DD1C2E493EF511C01366909767C3AF9A005E81F4BFC33372B9C041BE9BA904D7C6BB141DE48722ED17D2DF9C560170821F033BCFD8
### 结束 /etc/grub.d/41_custom ###
#

“/boot/grub/perskey”的路径不需要指向特定的磁盘分区,例如 hd0,6;对于引导加载程序本身,“root”是安装 GRUB2 的分区的默认路径 (参见设置 rot=..)。

签署 GRUB2 (所有 /GRUB 目录中的所有文件) 用你的钥匙“perkey”。
关于如何签名的简单解决方案 (适用于 nautilus/caja 探险家): 从存储库安装资源管理器的“seahorse”扩展。 您的密钥必须添加到 su 环境中。
使用 sudo“/mnt/boot”-RMB-符号打开资源管理器。 在屏幕上看起来像这样

Windows Linux 安装系统的全盘加密。 加密多重启动

密钥本身是“/mnt/boot/grub/perskey” (复制到grub目录下) 还必须有您自己的签名。 检查 [*.sig] 文件签名是否出现在目录/子目录中。
使用上述方法,签署“/boot” (我们的内核,initrd)。 如果您的时间很有价值,那么此方法无需编写 bash 脚本来签署“大量文件”。

删除所有引导加载程序签名 (如果出了问题)

rm -f $(find /mnt/boot/grub -type f -name '*.sig')

为了不在更新系统后对引导加载程序进行签名,我们冻结了所有与 GRUB2 相关的更新包。

apt-mark hold grub-common grub-pc grub-pc-bin grub2 grub2-common

到这一步<利用数字签名保护bootloader>GRUB2的高级配置就完成了。

C6.3。 GRUB2 引导加载程序的验证测试,受数字签名和身份验证保护GRUB2。 选择任何 GNU/Linux 发行版或进入 CLI 时 (命令行) 需要超级用户授权。 输入正确的用户名/密码后,您将需要 initrd 密码

Windows Linux 安装系统的全盘加密。 加密多重启动
GRUB2 超级用户成功身份验证的屏幕截图。

如果您篡改任何 GRUB2 文件/更改 grub.cfg,或者删除该文件/签名,或者加载恶意 module.mod,将会出现相应的警告。 GRUB2 将暂停加载。

Windows Linux 安装系统的全盘加密。 加密多重启动
屏幕截图,试图“从外部”干扰 GRUB2。

在“正常”启动“无入侵”期间,系统退出代码状态为“0”。 因此,保护​​是否有效尚不得而知 (也就是说,“有或没有引导加载程序签名保护”在正常加载期间状态都是相同的“0” - 这很糟糕)。

如何检查数字签名保护情况?

一种不方便的检查方法:伪造/删除 GRUB2 使用的模块,例如删除签名 luks.mod.sig 并得到错误。

正确方法:进入bootloader CLI并输入命令

trust_list

作为响应,您应该收到一个“perkey”指纹;如果状态为“0”,则签名保护不起作用,请仔细检查 C6.2 段。
至此,高级配置“用数字签名和身份验证保护GRUB2”就完成了。

C7 使用散列保护 GRUB2 引导加载程序的替代方法上面描述的“CPU引导加载程序保护/身份验证”方法是经典的。 由于 GRUB2 的缺陷,在偏执的情况下它很容易受到真正的攻击,我将在下面的 [F] 段中给出。 此外,更新操作系统/内核后,必须重新签名引导加载程序。

使用哈希保护 GRUB2 引导加载程序

与经典相比的优势:

  • 更高水平的可靠性 (散列/验证仅在加密的本地资源中进行。GRUB2 下的整个分配分区都受到控制以进行任何更改,其他所有内容均已加密;在具有 CPU 加载程序保护/身份验证的经典方案中,仅控制文件,但不控制自由空间,其中可以添加“某种东西”“某种险恶的东西”)。
  • 加密日志记录 (该方案中添加了人类可读的个人加密日志)。
  • 速度 (分配给 GRUB2 的整个分区的保护/验证几乎立即发生)。
  • 所有加密过程的自动化。

相对于经典的缺点。

  • 伪造签名 (理论上,可以找到给定的哈希函数碰撞)。
  • 难度增加 (与经典相比,需要更多的 GNU/Linux 操作系统技能)。

GRUB2/分区哈希思想如何工作

GRUB2 分区已“签名”;当操作系统启动时,将检查引导加载程序分区的不变性,然后登录安全(加密)环境。 如果引导加载程序或其分区受到损害,除了入侵日志之外,还会启动以下内容:

事物。Windows Linux 安装系统的全盘加密。 加密多重启动

类似的检查每天进行四次,不会加载系统资源。
使用“-$ check_GRUB”命令,可以随时进行即时检查,无需记录日志,但会将信息输出到 CLI。
使用命令“-$ sudo签名_GRUB”,GRUB2引导加载程序/分区立即重新签名并更新日志记录 (操作系统/启动更新后必需),生活还要继续。

引导加载程序及其部分的哈希方法的实现

0) 让我们首先将 GRUB 引导加载程序/分区挂载到 /media/username 中来对其进行签名

-$ hashdeep -c md5 -r /media/username/GRUB > /podpis.txt

1) 我们在加密操作系统的根目录 ~/podpis 中创建一个没有扩展名的脚本,对其应用必要的 744 安全权限和万无一失的保护。

填充其内容

#!/bin/bash

#Проверка всего раздела выделенного под загрузчик GRUB2 на неизменность.
#Ведется лог "о вторжении/успешной проверке каталога", короче говоря ведется полный лог с тройной вербализацией. Внимание! обратить взор на пути: хранить ЦП GRUB2 только на зашифрованном разделе OS GNU/Linux. 
echo -e "******************************************************************n" >> '/var/log/podpis.txt' && date >> '/var/log/podpis.txt' && hashdeep -vvv -a -k '/podpis.txt' -r '/media/username/GRUB' >> '/var/log/podpis.txt'

a=`tail '/var/log/podpis.txt' | grep failed` #не использовать "cat"!! 
b="hashdeep: Audit failed"

#Условие: в случае любых каких-либо изменений в разделе выделенном под GRUB2 к полному логу пишется второй отдельный краткий лог "только о вторжении" и выводится на монитор мигание gif-ки "warning".
if [[ "$a" = "$b" ]] 
then
echo -e "****n" >> '/var/log/vtorjenie.txt' && echo "vtorjenie" >> '/var/log/vtorjenie.txt' && date >> '/var/log/vtorjenie.txt' & sudo -u username DISPLAY=:0 eom '/warning.gif' 
fi

我们运行脚本 su,GRUB分区及其引导加载程序的哈希值将被检查,保存日志。

例如,让我们创建或复制一个“恶意文件”[virus.mod] 到 GRUB2 分区并运行临时扫描/测试:

-$ hashdeep -vvv -a -k '/podpis.txt' -r '/media/username/GRUB

CLI 必须看到对我们的“城堡”的入侵#修剪 CLI 中的登录

Ср янв  2 11::41 MSK 2020
/media/username/GRUB/boot/grub/virus.mod: Moved from /media/username/GRUB/1nononoshifr
/media/username/GRUB/boot/grub/i386-pc/mda_text.mod: Ok
/media/username/GRUB/boot/grub/grub.cfg: Ok
hashdeep: Audit failed
   Input files examined: 0
  Known files expecting: 0
          Files matched: 325
Files partially matched: 0
            Files moved: 1
        New files found: 0
  Known files not found: 0

#可以看到,出现“Files moving: 1 and Audit failed”,说明检查失败。
由于正在测试的分区的性质,而不是“找到新文件”>“移动的文件”

2) 将gif放在这里> ~/warning.gif,将权限设置为744。

3) 配置 fstab 在启动时自动挂载 GRUB 分区

-$ sudo nano /etc/fstab

LABEL=GRUB /media/用户名/GRUB ext4 默认 0 0

4) 旋转日志

-$ sudo nano /etc/logrotate.d/podpis 

/var/log/podpis.txt {
每天
旋转50
大小5M
日期文本
压缩
延迟压缩
olddir /var/log/旧
}

/var/log/vtorjenie.txt {
每月一次
旋转5
大小5M
日期文本
olddir /var/log/旧
}

5) 将作业添加到 cron

-$ sudo crontab -e

重新启动 '/订阅'
0 */6 * * * '/podpis

6) 创建永久别名

-$ sudo su
-$ echo "alias подпись_GRUB='hashdeep -c md5 -r /media/username/GRUB > /podpis.txt'" >> /root/.bashrc && bash
-$ echo "alias проверка_GRUB='hashdeep -vvv -a -k '/podpis.txt' -r /media/username/GRUB'" >> .bashrc && bash

操作系统更新后 -$ apt-get upgrade 重新签名我们的 GRUB 分区
-$ подпись_GRUB
至此,GRUB分区的哈希保护就完成了。

[D] 擦除 - 破坏未加密的数据

南卡罗来纳州发言人特雷·高迪 (Trey Gowdy) 表示,彻底删除你的个人文件,“连上帝都无法读取它们”。

像往常一样,有各种各样的“神话和 传说”,关于从硬盘删除数据后恢复数据。 如果您相信网络巫术,或者是Dr网络社区的成员并且从未尝试过删除/覆盖后的数据恢复 (例如,使用 R-studio 进行恢复),那么所提出的方法不太可能适合您,请使用最接近您的方法。

成功将 GNU/Linux 转移到加密分区后,必须删除旧副本,并且无法恢复数据。 通用清洁方法:适用于Windows/Linux的免费GUI软件 BleachBit.
很快 设置该部分的格式,需要销毁的数据 (来自 Gparted) 启动BleachBit,选择“清理可用空间”-选择分区 (您的 sdaX 带有以前的 GNU/Linux 副本),剥离过程将开始。 BleachBit - 一次性擦除磁盘 - 这就是“我们需要的”,但是! 理论上,只有在您使用 BB v2.0 软件格式化磁盘并清理磁盘时,此方法才有效。

警告! BB 擦除磁盘,留下元数据;当数据被删除时,文件名被保留 (Ccleaner - 不留下元数据)。

关于数据恢复可能性的神话并不完全是神话。Bleachbit V2.0-2 前不稳定操作系统 Debian 软件包 (以及任何其他类似的软件:sfill;wipe-Nautilus - 在这个肮脏的行业中也被注意到) 实际上有一个严重的错误:“自由空间清理”功能 它工作不正确 在 HDD/闪存驱动器上 (ntfs/ext4)。 此类软件在清除可用空间时,不会像许多用户认为的那样覆盖整个磁盘。 还有一些 (很多) 已删除的数据 操作系统/软件将此数据视为未删除/用户数据,并且在清理“OSP”时会跳过这些文件。 问题是,经过这么长时间,清理磁盘 “删除的文件”可以恢复 即使擦拭光盘 3 次以上。
Bleachbit 上的 GNU/Linux 2.0-2 永久删除文件和目录的功能可靠,但不会清除可用空间。 相比之下:在Windows上CCleaner中的“OSP for ntfs”功能工作正常,上帝真的无法读取已删除的数据。

所以,要彻底去除 “妥协” 旧的未加密数据, Bleachbit 需要直接访问此数据,然后使用“永久删除文件/目录”功能。
要在 Windows 中删除“使用标准操作系统工具删除的文件”,请使用带有“OSP”功能的 CCleaner/BB。 在 GNU/Linux 中解决这个问题 (删除已删除的文件) 你需要自己练习 (删除数据+独立尝试恢复它,你不应该依赖软件版本(如果不是书签,那么就是错误)),只有这样你才能了解这个问题的机理,并彻底摆脱被删除的数据。

我还没有测试过Bleachbit v3.0,问题可能已经解决了。
Bleachbit v2.0 可以正常运行。

到这一步,磁盘擦除就完成了。

[E] 加密操作系统通用备份

每个用户都有自己的备份数据的方法,但加密的系统操作系统数据需要稍微不同的方法来完成任务。 统一软件(例如 Clonezilla 和类似软件)无法直接处理加密数据。

加密块设备备份问题的说明:

  1. 通用性——适用于Windows/Linux的相同备份算法/软件;
  2. 能够在任何实时 USB GNU/Linux 的控制台中工作,无需下载额外的软件 (但还是推荐GUI);
  3. 备份副本的安全性 - 存储的“图像”必须加密/受密码保护;
  4. 加密数据的大小必须与实际复制数据的大小相对应;
  5. 从备份副本中方便地提取必要的文件 (不需要先解密整个部分)。

例如,通过“dd”实用程序备份/恢复

dd if=/dev/sda7 of=/путь/sda7.img bs=7M conv=sync,noerror
dd if=/путь/sda7.img of=/dev/sda7 bs=7M conv=sync,noerror

它几乎对应于任务的所有要点,但根据第 4 点,它经不起批评,因为它复制了整个磁盘分区,包括可用空间 - 这并不有趣。

例如,通过存档器 [tar" | GNU/Linux 备份] gpg] 很方便,但是对于 Windows 备份,您需要寻找其他解决方案 - 这并不有趣。

E1。 通用 Windows/Linux 备份。 链接rsync(Grsync)+VeraCrypt卷创建备份副本的算法:

  1. 创建加密容器 (卷/文件) VeraCrypt 操作系统;
  2. 使用 Rsync 软件将操作系统传输/同步到 VeraCrypt 加密容器中;
  3. 如有必要,将 VeraCrypt 卷上传到 www.

创建加密的 VeraCrypt 容器有其自身的特点:
创建动态卷 (DT的创建只能在Windows中使用,也可以在GNU/Linux中使用);
创建一个常规卷,但有一个“偏执性格”的要求 (据开发商称) – 容器格式化。

在 Windows 中几乎可以立即创建动态卷,但是当从 GNU/Linux > VeraCrypt DT 复制数据时,备份操作的整体性能会显着下降。

创建了常规 70 GB Twofish 卷 (我们只是说,平均 PC 功率) 到硬盘〜半小时内 (一次性覆盖之前的容器数据是出于安全需要)。 VeraCrypt Windows/Linux 中删除了创建卷时快速格式化卷的功能,因此只能通过“一次性重写”或创建低性能动态卷来创建容器。

创建常规 VeraCrypt 卷 (非动态/ntfs),应该不会有什么问题。

在 VeraCrypt GUI > GNU/Linux live usb 中配置/创建/打开容器 (该卷将自动安装到 /media/veracrypt2,Windows 操作系统卷将安装到 /media/veracrypt1)。 使用 GUI rsync 创建 Windows 操作系统的加密备份 (同步)通过选中复选框。

Windows Linux 安装系统的全盘加密。 加密多重启动

等待该过程完成。 备份完成后,我们将得到一个加密文件。

同样,通过取消选中 rsync GUI 中的“Windows 兼容性”复选框来创建 GNU/Linux 操作系统的备份副本。

警告! 在文件系统中为“GNU/Linux 备份”创建 Veracrypt 容器 ext4。 如果您备份到 ntfs 容器,那么当您恢复此类副本时,您将失去所有数据的所有权限/组。

您可以在终端中进行所有操作。 rsync 的基本选项:
* -g -保存组;
* -P —进度 —处理文件所花费的时间的状态;
* -H - 按原样复制硬链接;
* -a -存档模式 (多个 rlptgoD 标志);
* -v - 语言化。

如果您想通过 cryptsetup 软件中的控制台挂载“Windows VeraCrypt 卷”,您可以创建一个别名 (su)

echo "alias veramount='cryptsetup open --veracrypt --tcrypt-system --type tcrypt /dev/sdaX Windows_crypt && mount /dev/mapper/ Windows_crypt /media/veracrypt1'" >> .bashrc && bash

现在“vermount pictures”命令将提示您输入密码,加密的Windows系统卷将安装在操作系统中。

在 cryptsetup 命令中映射/挂载 VeraCrypt 系统卷

cryptsetup open --veracrypt --tcrypt-system --type tcrypt /dev/sdaX Windows_crypt
mount /dev/mapper/Windows_crypt /mnt

在 cryptsetup 命令中映射/挂载 VeraCrypt 分区/容器

cryptsetup open --veracrypt --type tcrypt /dev/sdaY test_crypt
mount /dev/mapper/test_crypt /mnt

我们将添加(启动脚本)带有 Windows 操作系统的系统卷和逻辑加密的 ntfs 磁盘到 GNU/Linux 启动,而不是别名

创建脚本并将其保存在 ~/VeraOpen.sh 中

printf 'Ym9i' | base64 -d | cryptsetup open --veracrypt --tcrypt-system --type tcrypt /dev/sda3 Windows_crypt && mount /dev/mapper/Windows_crypt /media/Winda7 #декодируем пароль из base64 (bob) и отправляем его на запрос ввода пароля при монтировании системного диска ОС Windows.
printf 'Ym9i' | base64 -d | cryptsetup open --veracrypt --type tcrypt /dev/sda1 ntfscrypt && mount /dev/mapper/ntfscrypt /media/КонтейнерНтфс #аналогично, но монтируем логический диск ntfs.

我们分配“正确”的权利:

sudo chmod 100 /VeraOpen.sh

在 /etc/rc.local 和 ~/etc/init.d/rc.local 中创建两个相同的文件(同名!)
填写文件

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will «exit 0» on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

sh -c "sleep 1 && '/VeraOpen.sh'" #после загрузки ОС, ждём ~ 1с и только потом монтируем диски.
exit 0

我们分配“正确”的权利:

sudo chmod 100 /etc/rc.local && sudo chmod 100 /etc/init.d/rc.local 

就是这样,现在加载 GNU/Linux 时我们不需要输入密码来挂载加密的 ntfs 磁盘,磁盘会自动挂载。

简要说明上面 E1 段中逐步描述的内容(但现在针对操作系统 GNU/Linux)
1) 在 Veracrypt [Cryptbox] 中的 fs ext4 > 4gb(用于文件)Linux 中创建一个卷。
2) 重新启动至 live USB。
3) ~$ cryptsetup open /dev/sda7 Lunux #映射加密分区。
4) ~$ mount /dev/mapper/Linux /mnt #将加密分区挂载到/mnt。
5) ~$ mkdir mnt2 #为将来的备份创建一个目录。
6) ~$ cryptsetup open —veracrypt —type tcrypt ~/CryptoBox CryptoBox && mount /dev/mapper/CryptoBox /mnt2 #映射一个名为“CryptoBox”的 Veracrypt 卷并将 CryptoBox 挂载到 /mnt2。
7) ~$ rsync -avlxhHX —progress /mnt /mnt2/ #将加密分区备份到加密 Veracrypt 卷。

(p/s/ 警告! 如果您要将加密的 GNU/Linux 从一种架构/机器传输到另一种架构/机器,例如 Intel > AMD(即将备份从一个加密分区部署到另一个加密的 Intel > AMD 分区), 别忘了 传输加密的操作系统后,也许可以编辑秘密替代密钥而不是密码。 之前的密钥 ~/etc/skey - 将不再适合另一个加密分区,并且不建议从 chroot 下创建新密钥“cryptsetup luksAddKey” - 可能会出现故障,只需在 ~/etc/crypttab 中指定而不是“/etc/skey”暂时“none”“,重新启动并登录操作系统后,再次重新创建您的秘密通配符密钥)。

作为IT老手,请记住单独备份加密的Windows/Linux操作系统分区的标头,否则加密会对您不利。
至此,加密操作系统的备份就完成了。

[F] 对 GRUB2 引导加载程序的攻击

商品详细信息如果您使用数字签名和/或身份验证保护您的引导加载程序 (参见 C6 点。),那么这将无法防止物理访问。 加密数据仍然无法访问,但保护将被绕过 (重置数字签名保护) GRUB2 允许网络恶棍将其代码注入引导加载程序而不引起怀疑 (除非用户手动监视引导加载程序状态,或者为 grub.cfg 提供自己强大的任意脚本代码)。

攻击算法。 入侵者

* 从实时 USB 启动 PC。 任何改变 (违规者) 文件将通知 PC 的真正所有者有关引导加载程序的入侵。 但是简单地重新安装 GRUB2 并保留 grub.cfg (以及随后的编辑能力) 将允许攻击者编辑任何文件 (在这种情况下,加载GRUB2时,不会通知真实用户。状态与<0>相同)
* 挂载未加密的分区,存储“/mnt/boot/grub/grub.cfg”。
* 重新安装引导加载程序 (从 core.img 图像中删除“perskey”)

grub-install --force --root-directory=/mnt /dev/sda6

* 返回“grub.cfg”>“/mnt/boot/grub/grub.cfg”,必要时对其进行编辑,例如,将模块“keylogger.mod”添加到“grub.cfg”中包含加载器模块的文件夹中> 行“insmod 键盘记录器”。 或者,例如,如果敌人很狡猾,那么重新安装 GRUB2 后 (所有签名均保留) 它使用“grub-mkimage with option (-c)”构建主 GRUB2 映像。 “-c”选项将允许您在加载主“grub.cfg”之前加载配置。 配置可以只包含一行:重定向到任何“modern.cfg”,例如混合约 400 个文件 (模块+签名) 在文件夹“/boot/grub/i386-pc”中。 在这种情况下,攻击者可以插入任意代码并加载模块,而不会影响“/boot/grub/grub.cfg”,即使用户将“hashsum”应用于该文件并暂时将其显示在屏幕上。
攻击者不需要破解 GRUB2 超级用户登录名/密码;他只需要复制这些行 (负责认证) “/boot/grub/grub.cfg”到您的“modern.cfg”

设置超级用户=“root”
password_pbkdf2 root grub.pbkdf2.sha512.10000.DE10E42B01BB6FEEE46250FC5F9C3756894A8476A7F7661A9FFE9D6CC4D0A168898B98C34EBA210F46FC10985CE28277D0563F74E108FCE3ACBD52B26F8BA04D.27625A4D30E4F1044962D3DD1C2E493EF511C01366909767C3AF9A005E81F4BFC33372B9C041BE9BA904D7C6BB141DE48722ED17D2DF9C560170821F033BCFD8

并且 PC 所有者仍将被验证为 GRUB2 超级用户。

链条装载 (引导加载程序加载另一个引导加载程序)正如我上面所写,没有意义 (它是为了不同的目的)。 由于 BIOS 无法加载加密的引导加载程序 (链引导重新启动 GRUB2 > 加密的 GRUB2,错误!)。 不过,如果你还是采用链式加载的思路,就可以确定加载的是加密的。 (未现代化) 加密分区中的“grub.cfg”。 这也是一种错误的安全感,因为加密的“grub.cfg”中指示的所有内容 (模块加载)总计从未加密的 GRUB2 加载的模块。

如果您想检查这一点,请分配/加密另一个分区 sdaY,将 GRUB2 复制到其中 (无法在加密分区上进行 grub 安装操作) 和“grub.cfg”中 (未加密的配置) 像这样改变线路

menuentry 'GRUBx2' --class parrot --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-382111a2-f993-403c-aa2e-292b5eac4780' {
加载视频
insmod gzio
如果 [ x$grub_platform = xxen ]; 然后insmod xzio; 因斯莫德·佐皮奥; 菲
insmod 部分_msdos
insmod 加密盘
照明系统勒克斯
安装 gcry_twofish
安装 gcry_twofish
安装 gcry_sha512
插入mod ext2
cryptomount -u 15c47d1c4bd34e5289df77bcf60ee838
set root=’cryptouuid/15c47d1c4bd34e5289df77bcf60ee838′
正常 /boot/grub/grub.cfg
}

线
* insmod - 加载使用加密磁盘所需的模块;
* GRUBx2 - GRUB2 启动菜单中显示的行名称;
* cryptomount -u 15c47d1c4bd34e5289df77bcf60ee838 -参见。 fdisk -l (sda9);
* 设置root——安装root;
* 正常 /boot/grub/grub.cfg - 加密分区上的可执行配置文件。

当在 GRUB 菜单中选择行“GRUBx2”时,确信加载的是加密的“grub.cfg”是对输入密码/解锁“sdaY”的肯定响应。

在 CLI 中工作时,以免混淆 (并检查“set root”环境变量是否有效), 创建空令牌文件,例如在加密部分“/shifr_grub”中,在未加密部分“/noshifr_grub”中。 检查 CLI

cat /Tab-Tab

如上所述,如果恶意模块最终出现在您的电脑上,这将无助于防止下载恶意模块。 例如,键盘记录器能够将击键保存到文件中,并将其与“~/i386”中的其他文件混合,直到被具有 PC 物理访问权限的攻击者下载。

验证数字签名保护是否有效的最简单方法 (未重置),并且没有人入侵bootloader,在CLI中输入命令

list_trusted

作为回应,我们会收到一份“perkey”的副本,或者如果我们受到攻击,我们什么也不会收到 (您还需要检查“set check_signatures=enforce”).
此步骤的一个显着缺点是手动输入命令。 如果将此命令添加到“grub.cfg”中并使用数字签名保护配置,则屏幕上关键快照的初步输出时间太短,加载GRUB2后您可能没有时间看到输出。
没有人特别声明:开发商在他的 文件资料 第18.2条正式声明

“请注意,即使有 GRUB 密码保护,GRUB 本身也无法阻止对计算机有物理访问权限的人更改该计算机的固件(例如 Coreboot 或 BIOS)配置,从而导致计算机从不同的(攻击者控制的)设备启动。 GRUB 充其量只是安全启动链中的一个环节。”

GRUB2 的功能过多,给人一种虚假的安全感,其发展在功能上已经超过了 MS-DOS,但它只是一个引导加载程序。 有趣的是,GRUB2 - “明天”可以成为操作系统,以及可启动的 GNU/Linux 虚拟机。

一个关于我如何重置 GRUB2 数字签名保护并向真实用户宣告我的入侵的短视频 (我吓到你了,但是你可以编写无害的任意代码/.mod,而不是视频中显示的内容).

结论:

1) Windows 的块系统加密更容易实现,并且使用一个密码进行保护比使用 GNU/Linux 块系统加密使用多个密码进行保护更方便,公平地说:后者是自动化的。

2)我写的文章相关且详细 简单 一台家用机器上的全盘加密 VeraCrypt/LUKS 指南,这是迄今为止 RuNet 中最好的(恕我直言)。 该指南的长度超过 50k 个字符,因此它没有涵盖一些有趣的章节:消失/隐藏在阴影中的密码学家; 关于这样一个事实:在各种 GNU/Linux 书籍中,他们很少/根本不写密码学; 关于俄罗斯联邦宪法第51条; 氧 许可/禁止 俄罗斯联邦的加密,关于为什么需要加密“root/boot”。 该指南内容相当广泛,但也很详细。 (甚至描述简单的步骤)反过来,当您进行“真正的加密”时,这将为您节省大量时间。

3)在Windows 7 64上进行全盘加密; GNU/Linux 鹦鹉 4x; GNU/Debian 9.0/9.5。

4)成功实施攻击 他的 GRUB2 引导加载程序。

5) 创建教程是为了帮助 CIS 中所有偏执的人,在立法层面允许使用加密。 主要针对那些想要在不拆除已配置系统的情况下推出全磁盘加密的人。

6) 重新设计并更新了我的手册,与 2020 年相关。

[G] 有用的文档

  1. TrueCrypt 用户指南 (2012 年 XNUMX 月俄罗斯)
  2. VeraCrypt 文档
  3. /usr/share/doc/cryptsetup(-run) [本地资源] (关于使用 cryptsetup 设置 GNU/Linux 加密的官方详细文档)
  4. 官方常见问题解答 cryptsetup (有关使用 cryptsetup 设置 GNU/Linux 加密的简要文档)
  5. LUKS 设备加密 (archlinux 文档)
  6. cryptsetup语法详细说明 (拱形手册页)
  7. crypttab详细说明 (拱形手册页)
  8. GRUB2 官方文档.

标签:全盘加密、分区加密、Linux全盘加密、LUKS1全系统加密。

只有注册用户才能参与调查。 登录拜托

你在加密吗?

  • 17,1%我尽我所能加密一切。 我很偏执14

  • 34,2%我只加密重要数据。28

  • 14,6%有时我加密,有时我忘记。12

  • 34,2%不,我不加密,既不方便又昂贵。28

82 位用户投票。 22 名用户弃权。

来源: habr.com

添加评论