UEFI SHIM 오류 "verify_buffer() 서명을 찾을 수 없습니다."

UEFI SHIM 오류 "verify_buffer() 서명을 찾을 수 없습니다."

계속하다Microsoft 서명 운영 체제 로더에서 로드된 UEFI 자체 서명 커널나는 사용했다https://github.com/rhboot/shim/releases/tag/15.4내 로컬 컴퓨터에서 빌드합니다(Ubuntu 18.04 LTS).

openssl req -new -x509 -newkey rsa:2048 -keyout MOK.key -out MOK.crt -nodes -days 3650 -subj "/CN=Your Name/"
openssl x509 -in MOK.crt -out MOK.cer -outform DER

SHIM 키(MOK.cer)를 사용하기 위한 소스 코드 컴파일

make VENDOR_CERT_FILE=MOK.cer

콘솔에 "Hello World"를 인쇄하는 테스트 바이너리(grubx64.efi로 이름 변경)에 서명했습니다.

sbsign --key MOK.key --cert MOK.crt --output grubx64.efi  test.efi

objdump 도구를 사용하면 서명된 grubx64.efi에서 유효한 SecureDir 섹션을 볼 수 있습니다.

objdump -x grubx64.efi

또한 sbverify를 사용하여 서명을 확인했습니다.

sbverify --list grubx64.efi

이제 SecureBoot에서 SHIM을 실행할 때 SHIM이 SHIM 키로 서명된 grubx64.efi를 로드하려고 하면 다음 오류가 발생합니다.

pe.c:857:handle_sbat() SBAT section data
pe.c:865:handle_sbat() sbat, 1, SBAT Version, sbat, 1, https://github.com/rhboot/shim/blob/main/SBAT.md
pe.c:865:handle_sbat() shim, 1, UEFI shim, shim, 1, https://github.com/rhboot/shim
sbat.c:121:verify_single_entry() component sbat has a matching SBAT variable entry, verifying
sbat.c:182:verify_sbat_helper() finished verifying SBAT data: Success
pe.c:574:generate_hash() sha1 authenticode hash:
pe.c:575:generate_hash() 00000000  XX XX XX XX XX XX XX XX  XX XX XX XX 09 aa c7 09  XXXXXXXXXXXX|....|
pe.c:575:generate_hash() 00000004  1e 6b c6 68 88 a9 e5 88  72 fd 81 08 32 15 2e 24  |.k.h....r...2..$|
pe.c:576:generate_hash() sha256 authenticode hash:
pe.c:577:generate_hash() 00000000  08 16 c3 bd 93 91 a5 0f  3a b4 24 a1 b1 97 5c ee  |........:.$...\.|
pe.c:577:generate_hash() 00000010  47 33 76 37 7f 71 cc b0  c9 82 e0 ac 50 49 0d 0e  |G3v7.q......PI..|
shim.c:630:verify_buffer() check_allowlist: Not Found
shim.c:644:verify_buffer() No signatures found
Verification failed: Security Policy Violation
Failed to load image: Security Policy Violation
shim.c:378 check_allowlist() check_db_hash(db, sha256hash) != DATA_FOUND
shim.c:386 check_allowlist() check_db_hash(db, sha1hash) != DATA_FOUND
shim.c:430 check_allowlist() check_db_hash(MokList, sha256hash) != DATA_FOUND
shim.c:629 verify_buffer() check_allowlist(): Not Found
shim.c:1188 start_image() Failed to load image: Security Policy Violation
start_image() returned Security Policy Violation
Exit status code: Security Violation

어떤 아이디어가 있나요?

답변1

진단하려면 다음이 필요할 수 있습니다.운영 체제 수준 mokutil도구.

이것을 실행하면 mokutil --list-enrolledMOK.cer에 대한 인증서 정보를 얻을 수 있습니까(와 유사한 출력 openssl x509 -in MOK.crt -noout -text)? 그렇지 않으면 MOK가 제대로 등록되지 않은 것입니다. 오류 목록의 다음 줄은 가능한 원인을 제안합니다.

shim.c:630:verify_buffer() check_allowlist: Not Found

shim.c:430 check_allowlist() check_db_hash(MokList, sha256hash) != DATA_FOUND

즉, UEFI NVRAM이라는 변수가 MokList존재하지 않거나 MOK 인증서를 포함하지 않습니다.

MOK의 경우 부팅 시에만 직접 액세스할 수 있는 방식으로 MokList새 UEFI NVRAM 변수가 생성되고 보호됩니다( shimx64.efi및/또는 를 통해). 이는 또한 해당 파일이 존재하지 않기 때문에 파일을 통해 직접 확인할 mmx64.efi수 없다는 의미이기도 합니다 ./sys/firmware/efi/efivars/MokList-605dab50-e046-4300-abb6-3dd810dd8b23

콘텐츠의 두 번째 복사본은 MokListRT실행 중인 OS( /sys/firmware/efi/efivars/MokListRT-605dab50-e046-4300-abb6-3dd810dd8b23Linux에서와 같이)에 액세스할 수 있는 UEFI 변수에 있어야 하며 NVRAM에 영구적으로 저장되어서는 안 됩니다. shimx64.efi부팅할 때마다 복사되므로 OS에 MokListRT펌웨어 및 그림과 같이 올바른 내용이 포함되어 있으면 mokutil --list-enrolled패드에 MOK가 작동하고 있음을 확신할 수 있습니다.

MOK 스토리지에는 UEFI NVRAM 변수가 포함되어 있기 때문에 불행하게도 UEFI 펌웨어 버그 및 구현 문제가 발생할 수 있습니다. 때로는 NVRAM 가변 저장 장치를 공장 초기화할 수도 있습니다(보다 정확하게는UEFI 펌웨어 설정, 그러나 이전 이름이 여전히 존재하는 것 같습니다).

사용 중인 시스템/마더보드의 이름을 언급할 수 있습니다. 보안 부팅 및/또는 UEFI NVRAM 변수에 알려진 문제가 있고 다른 사람이 해결 방법을 찾은 경우 도움을 받을 수 있습니다.

관련 정보