GRUB이 암호화된 부팅 파티션을 찾을 수 없습니다

GRUB이 암호화된 부팅 파티션을 찾을 수 없습니다

Arch Linux 설치(암호화된 LVM에)그리고 부팅 파티션을 암호화해 보세요.

이는 암호화되지 않은 부팅 파티션을 사용한 "전체 디스크 암호화"에 대해 걱정스럽습니다. 이 질문은 내 설치에서 무엇이 잘못되었을 수 있는지에 대한 것입니다. 하지만 다음에 대한 정보를 알려주시면 정말 감사하겠습니다.암호화되지 않은 부팅 파티션 유무에 관계없이. 암호화되지 않은 부팅 파티션이 실제로 시스템의 취약점입니까? 여전히 취약한 것은 무엇입니까? 부팅 파티션을 암호화하면 시스템을 더 잘 보호할 수 있습니까?

즉, 문제 해결에 도움이 되도록 설치 및 시스템에 대해 필요한 정보를 자세하게 제공하기 위해 최선을 다할 것입니다.Grub이 부팅 파티션을 찾을 수 없는 이유, 그러나 자세히 설명해야 할 내용을 이해하도록 도와주셔서 감사합니다. 가능한 결정 요소와 시스템 부팅 프로세스의 작동 방식에 대한 몇 가지 힌트가 있을 뿐입니다. 저는 Linux 시스템을 탐색하고 실험하는 중입니다. 그리고 같은 것으로부터 배웁니다.

설치 후 시작할 때

Welcome to GRUB!

error: no such device: dbf12ef6-156f-43ac-980d-ee41ao17b917
error: unknown filesystem.
Entering rescue mode...
grub rescue>

설치하다

# iwctl to connect to a wifi
root@archiso ~ # iwctl

# update package repository index
root@archiso ~ # pacman -Syyy

# securely erase the disk
root@archiso ~ # dd if=/dev/urandom of=/dev/sda bs=4096 status=progress

# partition the table
root@archiso ~ # fdisk /dev/sda
    g (GPT Partition Table)
    /dev/sda1 EFI System (type alias 1) +500M
    /dev/sda2 Linux FileSystem (type alias 20) +500M
    /dev/sda3 Linux LVM (type alias 30) +100%FREE

root@archiso ~ # fdisk -l /dev/sda
#result
Disk /dev/sda: 298.09 GiB, 320072933376 bytes, 625142448 sectors
Disk model: Hitachi HTS54503
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes /4096 bytes
Disklabel type: gpt
Disk identifier: A9C36FBB-D67F-5840-9BD9-28326588F6BA

Device       Start       End       Sectors      Size    Type
/dev/sda1     2048   1026047       1024000      500M    EFI System
/dev/sda2  1026048   2050047       1024000      500M    Linux filesystem
/dev/sda3  2050047 625142414     623092367    297.1G    EFI System

root@archiso ~ # lsblk -f

NAME    FSTYPE      FSVER    LABEL    UUID    FSAVAIL    FSUSE%    MOUNTPOINT
loop    squashfs    4.0                             0      100%    /rub/archiso/sfs/airootfs
sda
-sda1   vfat        FAT32             7D44-F492
-sda2   crypto_LUKS 2                 60f94adc-1e6f-425d-a120-4888fa9bacd3
-sda3   crypto_LUKS 2                 5ab19132-685d-479b-8425-acaa133ed7a8

# format EFI partition
root@archiso ~ # mkfs.fat -F32 /dev/sda1

# encrypt boot partition
root@archiso ~ # cryptsetup luksFormat /dev/sda2

# open encrypted boot partition
root@archiso ~ # cryptsetup open --type luks /dev/sda2 cryptboot

# format encrypted boot partition
root@archiso ~ # mkfs.ext4 /dev/mapper/cryptboot

# encrypt LVM partition
root@archiso ~ # cryptsetup luksFormat /dev/sda3

# open encrypted LVM partition
root@archiso ~ # cryptsetup open --type luks /dev/sda3 cryptlvm

# create physical volume
root@archiso ~ # pvcreate /dev/mapper/cryptlvm

# create volume group
root@archiso ~ # vgcreate volgroup0 /dev/mapper/cryptlvm

# create logical volume 
root@archiso ~ # lvcreate -L 50GB volgroup0 -n root

# format root filesystem logical volume
root@archiso ~ # mkfs.ext4 /dev/volgroup0/root

# mount root logical volume
root@archiso ~ # mount /dev/volgroup0/root /mnt

# create directory to mount the encrypted boot partition
root@archiso ~ # mkdir /mnt/boot

# mount the encrypted boot partition
root@archiso ~ # mount /dev/mapper/cryptboot /mnt/boot

#create /etc directory
root@archiso ~ # mkdir /mnt/etc

# generate fstab file (required for successful boot)
root@archiso ~ # genfstab -U -p /mnt >> /mnt/etc/fstab

# sanity check on file
root@archiso ~ # cat /mnt/etc/fstab

# /dev/mapper/volgroup0-root
UUID=71d35768-2e3b-4aad-bd88-313544742d72    /        ext4    rw,relatime             0 1

# /dev/mapper/cryptboot
UUID=dbf12ef6-156f-43ac-980d-ee41a017b917    /boot    ext4    rw,relatime,stripe=4    0 2

#install packages on file system
#(obs
#linux <defaultLinuxKernel> linux-lts <alternateLinuxKernel
#   -makes possibly a selection at the start process of the computer in which you can set the alternate kernel, which is very useful if you run into a problem
#
#efibootmgt dosfstools os-prober mtools
#   -packages to support grub
#)
root@archiso ~ # pacstrap -i /mnt base base-devel linux linux-lts linux-headers linux-lts-headers networkmanager wpa_supplicant wireless_tools netctl openssh dialog lvm2 grub efibootmgr dosfstools os-prober mtools vim

# change to archroot to access in progress installation to make additional changes
root@archiso ~ # arch-chroot /mnt

# enable openssh NetworkManager by default (start automatically at boot time)
[root@archiso /]# systemctl enable sshd NetworkManager

# edit the very specific file /etc/mkinitcpio.conf
# line -- HOOKS=(base udev autodetect keyboard keymap consolefont modconf block lvm2 encrypt filesystems fsck)
[root@archiso /]# vim /etc/mkinitcpio.conf

# run mkinitcpio -p against whatever kernel decided to go along with
[root@archiso /]# mkinitcpio -p linux
[root@archiso /]# mkinitcpio -p linux-lts

# set time zone
[root@archiso /]# ln -sf /usr/share/zoneinfo/Brazil/East /etc/localtime

# generate /etc/adjtime
[root@archiso /]# hwclock --systohc

# Localization - edit /etc/locale.gen uncommenting appropriate locale
[root@archiso /]# vim /etc/locale.gen

# generate the locale(s)
[root@archiso /]# locale-gen

# set the LANG variable in a file named /etc/locale.conf
[root@archiso /]# vim /etc/locale.conf

# set the keyboard layout in a file named /etc/vconsole.font
[root@archiso /]# vim /etc/vconsole.conf

# configure bootloader (grub has the most compatibility, applications such as timeshift have an issue when not using grub)
# (obs
# GRUB_ENABLE_CRYPTODISK=y
# GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 cryptdevice=/dev/sda3:volgroup0:allow-discards quiet"
# )
[root@archiso /]# vim /etc/default/grub

# create file for EFI information (files that are required for booting the system)
[root@archiso /]# mkdir /boot/EFI

# mount the EFI System partition
[root@archiso /]# mount /dev/sda1 /boot/EFI

# install grub bootloader on the hard drive
# no errors were reported
[root@archiso /]# grub-install --target=x86_64-efi --bootloader-id=grub_uefi --recheck

# create directory /boot/grub/locale
[root@archiso /]# mkdir /boot/grub/locale

# copy file into directory
[root@archiso /]# cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo
    
# Generate GRUB's configuration file:
[root@archiso /]# grub-mkconfig -o /boot/grub/grub.cfg

# create a swap file
# (obs
# it's preferable to create a swap file instead of a swap partition because it is easier to change the size of swap just deleting and recreating the file with a bigger size whereas with a swap partition. With a swap partition it's needed to resize the partitions which is a lot more risky
# )
[root@archiso /]# fallocate -l 4G /swapfile

# adjust the swap file permissions to be more restrictive
[root@archiso /]# chmod 600 /swapfile

# Make swap
[root@archiso /]# mkswap /swapfile

# create a backup of fstab file
[root@archiso /]# cp /etc/fstab /etc/fstab.bak

# Make swap activate as soon as computer is started adding to fstab file
[root@archiso /]# echo "/swapfile none swap sw 0 0" | tee -a /etc/fstab

# sanity check on file
[root@archiso /]# cat /mnt/etc/fstab

# /dev/mapper/volgroup0-root
UUID=71d35768-2e3b-4aad-bd88-313544742d72    /        ext4    rw,relatime             0 1

# /dev/mapper/cryptboot
UUID=dbf12ef6-156f-43ac-980d-ee41a017b917    /boot    ext4    rw,relatime,stripe=4    0 2

/swapfile none swap sw 0 0

# install micro code package for the actual CPU (if AMD cpu - amd-ucode; elseif intel cpu - intel-ucode)
[root@archiso /]# pacman -S intel-ucode

# package to facilitate a desktop environment
[root@archiso /]# pacman -S xorg-server

# consider installing a video driver, if intel or AMD gpu - mesa; elseif NVIDIA gpu - nvidia nvidia-lts nvidia-utils
[root@archiso /]# pacman -S mesa

# back to arch linux install media
[root@archiso /]# exit

# umount -a
root@archiso ~ # umount -a

# poweroff or reboot
root@archiso ~ # poweroff

쉽게 말하면 설치입니다. 질문을 작성할 때 GRUB가 장치 ID를 찾으려고 시도하는 것을 발견했습니다.dbf12ef6-156f-43ac-980d-ee41ao17b917

error: no such device: dbf12ef6-156f-43ac-980d-ee41ao17b917

이는 장치 ID입니다./dev/mapper/cryptboot문서에 표시된 대로/mnt/etc/fstab그렇지 않으면/etc/fstab설치 중에 /boot에 설치됩니다.

# /dev/mapper/cryptboot
UUID=dbf12ef6-156f-43ac-980d-ee41a017b917    /boot    ext4    rw,relatime,stripe=4    0 2

명령 이후에만 존재하는 것 같습니다.root@archiso ~ # cryptsetup open --type luks /dev/sda2 cryptboot

이것이 문제가 될 수 있습니까? 문제가 무엇인지, 어디에서 잘못되었는지, 해결 방법에 대한 힌트가 있습니까?

정말 감사드리며 누락된 정보가 있으면 더 자세히 알려드리겠습니다.

답변1

TelcomM이 제안한 대로 설치하기 전에 Arch Wiki의 두 링크를 모두 철저하게 검토했지만 특정 지침 하나를 놓쳤습니다.

참고: /boot는 별도의 파티션에 남아 있을 필요가 없으며 시스템의 루트/디렉토리 트리 아래에 위치할 수도 있습니다.

이것이 내 설치에서 "grub이 암호화된 부팅 파티션을 찾을 수 없는 이유"라는 질문에 대답하지 못하거나 grub이 파티션을 찾는 문제를 해결하지 못하더라도, 두 개의 서로 다른 파티션을 암호화하는 것은 동일한 디스크가 하나는 시스템 루트용이고 다른 하나는 시스템 부팅용이라는 것은 말이 되지 않습니다.

시스템 루트 디렉토리에 /boot가 있는 암호화된 파티션만 제대로 작동하고 시스템이 정상적으로 부팅됩니다.

위에서 언급했듯이 제 생각에는 이 솔루션은 암호화되지 않은 부팅 파티션을 사용하여 "전체 디스크 암호화"를 가장하는 데 발생하는 문제를 해결하는 데 완전히 충분합니다. 그래서 /boot 파티션에 관한 문제가 해결된 것 같습니다.

그러나 이 설치에는 여전히 "성가신" 암호화되지 않은 EFI 시스템 파티션이 있으며 "이 파티션이 암호화되지 않았다는 사실이 시스템에 취약점이 될 수 있습니까?"라는 질문이 남아 있습니다.

어떤 토론 포인트라도 정말 감사하겠습니다.

답변2

Arch Wiki에는 부팅 파티션과 grub이 서로 호환되도록 구성하는 방법에 대한 구체적인 지침이 있습니다. 암호화된 /boot 파티션 - Arch Wiki

암호화된 부팅 파티션을 생성할 때 여기에 나열된 단계를 철저히 확인하고 완료했는지 확인할 기회가 있었습니까?

Arch Wiki 전체 시스템 암호화 가이드

암호화되지 않은 부팅 파티션이 실제로 시스템의 취약점입니까?

나는 /boot에 무엇이 있는지 확실히 알지 못하지만, 누군가가 나머지 디스크의 암호화를 깨뜨릴 수 있는 추가적인 위험을 야기할 수 있는 것이 많이 있다고 생각합니다.

공격자가 실행 중인 커널에 대한 정보를 찾을 수도 있습니다.

답변3

# encrypt boot partition
root@archiso ~ # cryptsetup luksFormat /dev/sda2

로 변경:

# encrypt boot partition
root@archiso ~ # cryptsetup --type luks1 luksFormat /dev/sda2

grub2는 파티션을 포맷할 때 기본적으로 설정되는 전체 luks2 암호화를 지원하지 않습니다. grub과 함께 작동해야 하는 다른 파티션의 경우에도 마찬가지입니다. :)

답변4

제공된 정보에서 GRUB을 시작할 수 없는 이유를 알 수 없습니다. 맞습니다. grub은 "dbf12..." 장치를 찾을 수 없습니다. 왜냐하면 이 장치는 암호 해독으로 부팅한 후에만 사용할 수 있기 때문입니다. 그러나 GRUB는 암호화된 파티션에 위치하고 있으며 부팅 파티션의 암호를 해독할 수 있는 핵심 이미지 암호화 모듈에 포함되어 있다고 추론해야 합니다. 몇 가지 팁: 확인하세요/etc/default/grub암호화된 디스크가 활성화되어 있습니다(GRUB_ENABLE_CRYPTODISK=y) 그리고 확인/boot/grub.cfg. 복구 모드에서는 cryptomount 명령을 통해 부팅 파티션 잠금 해제를 시도할 수 있습니다(비록 복구 모드에서는 사용하지 못할 수도 있습니다. 이는 cryptodisk 확장이 실제로 활성화되어 있는지 여부에 따라 다릅니다). grub-install을 자세한 모드(-v)로 실행하여 모듈을 설치하는 데 사용되는 경로를 확인할 수 있습니다(자세한 출력은 문제의 원인을 가리킬 수 있는 추가 정보를 제공합니다).

가능한 해결책으로 다음 옵션을 사용하여 암호화되지 않은 EFI 파티션에 grub을 설치할 수 있습니다"--boot-디렉토리=/boot/EFI"(설치되어 있다고 가정)/시작/efi귀하의 경우인 것 같습니다.) 이 설정에서 grub 코어 이미지와 모든 모듈은 암호화되지 않은 파티션에 있습니다. grub.cfg가 잘못 구성된 경우에도 grub 콘솔에서 Linux를 수동으로 로드할 수 있습니다. 엄밀히 말하면 이것은 질문에 대한 대답은 아니지만(GRUB은 원하는 방식으로 설치할 수 있으므로) 디스크를 암호화하는 다양한 방법을 평가하고 있는 것 같습니다.

시작 암호화에 대한 일반적인 질문입니다. GRUB(모든 부트로더가 암호화를 지원하는 것은 아님)와 마찬가지로 FDE에도 여러 "등급"이 있으며 암호화된 파티션에 숨겨진 부팅 파일 수가 다릅니다.

  1. GRUB, 커널 및 initramfs 이미지는 EFI와 같은 암호화되지 않은 파티션에 있습니다(이러한 파일을 포함하기 위해 별도의 파티션을 만들 수 있지만 반드시 필요한 것은 아니므로 단순화를 위해 모든 부팅 파일을 EFI 파티션에 보관할 수 있습니다. 500MiB이면 충분합니다). . 이 설정에서 공격자는 커널 또는 initramfs 이미지를 변조할 수 있으며 디스크에 액세스할 수 있는 사람은 누구나 파일을 지울 수 있습니다. 비밀번호는 커널을 로드한 후 입력하거나 별도의 보호가 필요한 키 파일과 함께 제공되어야 합니다. 귀하의 질문에 대답하자면 - 이 설정에서 시스템의 취약한 지점은 커널 + initramfs + GRUB입니다.

  2. GRUB는 암호화되지 않은 EFI 파티션에 있고, 커널과 initramfs는 루트 파티션의 일부인 암호화된 /boot 폴더에 있습니다. 이 경우 커널을 로드하기 전에 GRUB 부팅 중에 비밀번호를 제공해야 합니다. 커널 부팅 후에도 사용할 수 있어야 하지만 단순화를 위해 키 파일을 initramfs에 내장할 수 있습니다(initramfs가 보호되지 않기 때문에 옵션 1에서는 불가능합니다). 이 경우 공격자는 커널이나 initramfs 이미지를 변조할 수 없지만 (이론적으로) grub 코어 파일이나 모듈(취약점)을 변조하여 비밀번호를 "훔칠" 수 있습니다.

  3. GRUB 코어 이미지와 암호화 모듈은 암호화되지 않은 EFI 파티션에 있고 나머지 GRUB는 암호화된 루트 파티션에 있습니다. 이 설정에서 GRUB 코어 이미지(단일 EFI 파일에 "포함된" 여러 암호화 관련 모듈의 도움으로)는 나머지 이미지를 해독하고 커널 및 initramfs 이미지에 액세스하기 위한 비밀번호가 필요합니다. 이 경우 공격자는 코어 이미지(간단히 "EFI 파일")만 조작할 수 있으므로 UEFI SecureBoot와 같은 다른 수단으로 보호해야 합니다. 그러나 SecureBoot가 없더라도 공격 표면은 옵션 2의 "모든 GRUB 파일"에서 "GRUB 코어 파일"로 줄어듭니다.

따라서 이론적으로는 Secureboot가 활성화된 전체 체인 GRUB 코어 이미지 -> GRUB 모듈 -> 커널 이미지 + initramfs를 보호할 수 있습니다. 그러나 이는 인식된 위협과 보호하려는 부팅 프로세스 부분에 따라 달라집니다. 어떤 사람들은 옵션 3이 너무 멀다고 생각할 수도 있습니다. 또한 일부 관할권에서는 주정부가 귀하에게 비밀번호를 넘겨주도록 법적으로 강제할 수 있는 반면, 다른 관할권에서는 주정부가 문자 그대로 귀하에게 비밀번호를 넘겨주도록 "강제"(불법)할 수 있다는 점에 유의해야 합니다. 이를 염두에 두고, 대중으로부터 데이터를 보호하려면 옵션 1로 충분하므로 국가에서는 GRUB 악성 코드 작성을 방해하지 않을 것입니다. 이것은 원래 질문을 약간 넘어서는 매우 크고 일반적인 주제입니다.

관련 정보