EFI 서명을 쿼리하는 방법

EFI 서명을 쿼리하는 방법

Grub-EFI는 "서명된" Linux 커널만 부팅하는 것 같습니다. 사용할 수 있는 명령이 있나요?묻다어떤 서명이 있는지 알아보기 위해 커널 이미지가 제공되면 어떤 서명이 있는지 확인하시겠습니까?

답변1

말하는 서명 유형에 따라 다릅니다. EFI 시스템이 있는 경우 EFI 실행 파일( *.efi)에 서명하고 EFI 펌웨어가 알려진 서명이 있는 파일만 실행하도록 강제할 수 있습니다. 이것은 ... 불리운다보안 부트. EFI 바이너리의 서명을 확인하려면 다음 도구를 사용할 수 있습니다 sbverify.

$ sbverify --no-verify signed-binary.efi
Signature verification OK
$ sbverify --no-verify unsigned-binary.efi
No signature table present
Unable to read signature data from unsigned-binary.efi
Signature verification failed

안타깝게도 EFI 서명을 추출하고 표시하는 쉬운 방법을 찾지 못했습니다. :(

더 필요한 것은 GRUB 자체에서 부팅 중인 모듈과 커널에 유효한 서명이 있는지 확인하는 기능입니다(보안 부팅은 GRUB 바이너리 자체에만 영향을 미치며 GRUB가 로드하는 모든 항목은 반드시 EFI 서명이 필요하지 않습니다). 이것은 (내가 아는 한) 평범하고 오래된 분리 GPG 서명입니다(예: 커널이라는 이름의 경우 vmlinuz-1.2.3서명이 포함된 파일이 있습니다). vmlinuz-1.2.3.sig간단하게 표시하고 확인할 수 있습니다.

$ gpg --verify vmlinuz-1.2.3.sig vmlinuz-1.2.3
gpg: Signature made Tue Apr  1 12:34:56 2014 CEST using RSA key ID d3adb33f
gpg: Good signature from "John Doe <[email protected]>"

*.sig커널에 파일이 없으면 분명히 서명되지 않은 것입니다.

set check_signature=noGRUB 명령 프롬프트에 입력하여 GRUB에서 서명 확인을 비활성화 할 수 있습니다 . 이 주제에 대한 자세한 정보를 얻을 수 있습니다여기(이 기능은 비교적 새로운 기능입니다. GRUB 공식 웹사이트에는 이 기능이 없는 버전 2.00 온라인 매뉴얼만 있습니다.) 또한 자신의 키로 모듈과 커널에 서명하고 GRUB에 알리는 방법도 설명합니다.

답변2

예를 들어 다음과 같이 사용할 수 있습니다 sbverify.

# sbverify --list /efi/EFI/refind/shimx64.efi.signed
warning: data remaining[1159744 vs 1322936]: gaps between PE/COFF sections?
signature 1
image signature issuers:
 - /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011
image signature certificates:
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Windows UEFI Driver Publisher
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011
 - subject: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation UEFI CA 2011
   issuer:  /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=Microsoft Corporation Third Party Marketplace Root

또는:

# sbverify --list /boot/vmlinuz-5.7.11-amd64
signature 1
image signature issuers:
 - /CN=morfikov's kernel-signing key
image signature certificates:
 - subject: /CN=morfikov's kernel-signing key
   issuer:  /CN=morfikov's kernel-signing key

답변3

Andreas가 제공한 정보를 바탕으로 다음과 같은 결론을 내립니다.

작업 시스템에서 Grub-EFI 자체그리고Linux 커널은 동일한 키를 사용하여 서명됩니다. 작동하지 않는 시스템에서는 Grub이나 Linux 커널이 모두 서명되지 않습니다. 한 시스템에서 다른 시스템으로 Linux 커널을 복사하려고 하면 Grub에서 커널이 서명되지 않았다고 불평합니다. 별도의 GPG 서명은 없습니다. Grub은 내부 PE 서명인 Secure Boot와 동일한 것을 찾고 있는 것 같습니다.

이제 OpenSUSE가 32비트 버전의 Linux 커널에 서명하도록 하는 방법을 알아낼 수 있다면...

관련 정보