yocto로 구축된 Linux 버전에 대해 UEFI 보안 부팅을 활성화하는 방법은 무엇입니까?

yocto로 구축된 Linux 버전에 대해 UEFI 보안 부팅을 활성화하는 방법은 무엇입니까?

저는 yocto 빌드를 구축 중이며 사용 중인 Intel 시스템에서 UEFI 보안 부팅을 활성화하고 싶습니다. 이것은 core-image-minimal 및 Meta-Intel을 사용하는 매우 기본적인 yocto 빌드입니다. 생성되는 아티팩트는 다음과 같습니다.

./core-image-minimal-intel-corei7-64.wic
./bzImage-intel-corei7-64.bin
./bzImage--6.1.38+git0+d62bfbd59e_11e606448a-r0-intel-corei7-64-20240208204456.bin
./core-image-minimal-intel-corei7-64.manifest
./OvmfPkKek1.crt
./OvmfPkKek1.pem
./systemd-bootx64.efi
./core-image-minimal-intel-corei7-64-20240215181510.rootfs.tar.xz
./microcode.cpio
./modules-intel-corei7-64.tgz
./core-image-minimal-intel-corei7-64-20240215181510.rootfs.manifest
./microcode_20230808.cpio
./modules--6.1.38+git0+d62bfbd59e_11e606448a-r0-intel-corei7-64-20240208204456.tgz
./bzImage
./core-image-minimal-intel-corei7-64-20240215181510.testdata.json
./grub-efi-bootx64.efi
./ovmf.vars.qcow2
./core-image-minimal-intel-corei7-64.qemuboot.conf
./ovmf.secboot.code.qcow2
./linuxx64.efi.stub
./OvmfPkKek1.key
./ovmf.secboot.qcow2
./core-image-minimal-intel-corei7-64.tar.xz
./core-image-minimal-intel-corei7-64-20240215181510.rootfs.wic
./ovmf.code.qcow2
./core-image-minimal.env
./core-image-minimal-systemd-bootdisk-microcode.wks
./ovmf.qcow2
./core-image-minimal-intel-corei7-64-20240215181510.qemuboot.conf
./core-image-minimal-intel-corei7-64.testdata.json

내 부팅 파티션은 다음과 같습니다.

./loader
./loader/loader.conf
./loader/entries
./loader/entries/boot.conf
./EFI
./EFI/BOOT
./EFI/BOOT/bootx64.efi
./bzImage

이 파일을 사용하여 보안 부팅을 활성화하는 방법을 모르겠습니다. 서명을 등록하는 옵션이 있는데 bootx64.efi 파일을 사용하여 이 작업을 수행한 다음 부팅을 시도하면 일종의 bzImage 오류가 발생하고 보안 정책 위반에 대한 내용이 표시됩니다.

USB 드라이브에 Kali Linux를 무작위로 설치하여 동일한 프로세스를 수행하려고 시도했을 때 비슷한(그러나 다른) 오류가 발생했습니다.

"서명 등록", "PK 등록", "KEK 등록" 등과 같은 uefi 옵션도 있습니다. 나는 yocto가 생성하는 OvmfPkKek1* 파일을 선택할 수 있기를 바라며 이러한 옵션을 시도했지만 이것이 키라고 가정했지만 uefi 인터페이스 부팅 파티션을 검색할 때 복사했는데도 디스크에 표시되지 않습니다. 이유는 모르겠습니다.

이 설치를 보안 부팅과 함께 작동시키는 방법에 대한 아이디어가 있습니까?

답변1

다른 키를 입력하기 전에 PK(마스터 키)를 지워보세요. 이렇게 하면 보안 부팅이 활성화되어야 합니다.설정 모드주요 업데이트에는 최소한의 제한이 있어야 합니다. 필요에 맞게 다른 보안 부팅 키 변수를 업데이트한 후 키를 PK로 입력하여 보안 부팅을 일반 모드로 되돌립니다.

db먼저 화이트리스트에 등록되어 있으므로 키 변수에 키를 넣어야 합니다 . *.efi화이트리스트 변수에 키로 서명된 모든 항목은 특별히 블랙리스트에 등록되지 않는 한 보안 부팅 실행을 허용합니다.

핵심 dbx변수는 블랙리스트입니다. 블랙리스트 키로 서명된 파일이나 해시가 블랙리스트 해시와 일치하는 파일을 로드할 때 펌웨어는 해당 파일의 로드 및/또는 실행을 허용하지 않습니다.

보안 부팅이 일반 모드에 있으면 주요 KEK변수 컨트롤(프로그래밍 방식으로?)이 및 로 업데이트됩니다 db. dbx가능하다면 키도 이 변수에 두기를 원합니다.

PK변수는 KEK 변수에 대한 업데이트를 제어하고 하나의 키만 보유합니다. 시스템 제조업체의 기본 키가 아닌 사용자의 것이 바람직합니다.

귀하의 OvmfPkKek1.pem파일은 UEFI에 필요한 파일일 수 있지만 가능한 여러 형식이 필요할 수 있습니다.

펌웨어가 PEM 파일을 읽을 수 없는 경우(있는 그대로 또는 *.cer또는 *.crt접미사 포함) DER 형식으로 변환해 보십시오.

openssl x509 -in OvmfPkKek1.pem -inform PEM -out OvmfPkKek1.cer -outform DER

*.cerDER 파일 접미사는 또는 이어야 합니다 *.crt.

일부 UEFI 사용자 인터페이스는 특별히 기대합니다.EFI 서명 목록파일( *.esl)은 efisiglist패키지에 있는 명령을 사용하여 생성하거나 패키지의 명령을 사용하여 생성 pesign할 수 있습니다 .cert-to-efi-sig-listefitools

DER 형식 인증서를 EFI 서명 목록으로 변환하려면:

efisiglist --outfile OvmfPkKek1.esl --add --certificate=OvmfPkKek1.cer

또는

cert-to-efi-sig-list OvmfPkKek1.cer OvmfPkKek1.esl

보안 부팅 설정 모드가 아닌 경우(예: PK를 설정하는 경우) 펌웨어 사용자 인터페이스는 ESL 파일만 허용할 수 있습니다.인증서가 KEK 또는 PK 키 변수에 있는 보안 부팅 키를 사용하여 서명됨. 이는 실행 중인 운영 체제에서 프로그래밍 방식으로 보안 부팅 키를 업데이트할 때와 동일한 규칙을 따릅니다. 그렇다면 이러한 파일의 예상 접미사는 *.auth.

sign-efi-sig-list패키지의 명령은 efitoolss에서 *.auth파일을 생성할 수 있습니다 *.esl. *.auth동일한 실제 키를 사용하더라도 각 키 변수에 대해 별도의 파일을 생성해야 합니다 .

sign-efi-sig-list -a -c OvmfPkKek1.pem -k OvmfPkKek1.key db OvmfPkKek1.esl signed-key-for-db.auth
sign-efi-sig-list -a -c OvmfPkKek1.pem -k OvmfPkKek1.key KEK OvmfPkKek1.esl signed-key-for-KEK.auth
sign-efi-sig-list -a -c OvmfPkKek1.pem -k OvmfPkKek1.key PK OvmfPkKek1.esl signed-key-for-PK.auth

관련 정보