어쩌면 당신은 그것을 생각했을 수도 있습니다BootHole 취약점, GRUB2 부트로더를 통해 EFI/UEFI SecureBoot 메커니즘을 우회할 수 있습니다. 저는 개인적으로 내 EFI/UEFI 키(PK 키 포함)를 사용하며 EFI/UEFI 펌웨어에는 MS 키가 없습니다. 따라서 이 버그는 나에게 실제로 영향을 미치지 않습니다. 어쨌든 사용자가 다음을 사용하여 DBX 변수를 업데이트할 수 있는 수정 사항이 있습니다.UEFI 해지 목록 파일. 웹사이트에 따르면:
이러한 파일은 보안 부팅 금지 서명 데이터베이스 dbx를 업데이트하는 데 사용됩니다. 여기에는 *Data... EFI_VARIABLE_AUTHENTICATION_2의 SetVariable()에 전달된 원래 바이트가 새 변수 값과 연결되어 포함됩니다. 사용 예: SetVariable("dbx", EFI_IMAGE_SECURITY_DATABASE_GUID, NV+BS+RT+AT+AppendWrite, dbxUpdateDotBin_sizeInBytes, *dbxUpdateDotBin_bytes). dbxupdate.bin에는 이미 Microsoft KEK 서명(UEFI 사양에 지정된 대로 인코딩됨)이 포함되어 있습니다.
그렇다면 MS KEK 인증서가 있지만 시스템의 EFI/UEFI 펌웨어에는 이 인증서가 없으면 어떻게 될까요? 이 경우 이 파일을 사용하여 DBX 변수를 업데이트하는 방법은 무엇입니까?
답변1
이는 머신에 어떤 KEK 인증서가 있는지에 따라 다릅니다.
KEK 인증서가 있는 경우너개인 키가 있으면 파일 시작 부분에서 기존 서명을 제거 하고 생성된 EFI_SIGNATURE_LIST(접미사를 본 적이 있음)를 dbxupdate_x64.bin
자체 KEK 인증서로 서명할 수 있습니다. 그런 다음 이를 보안 부팅 변수에 적용할 수 있습니다. 로부터 명령을 받다.esl
dbx
efi-updatevar
jejb의 efitools.
기반으로이 Microsoft 지원 문서다음으로 연결이 PowerShell 스크립트, 절차는 다음과 같습니다.
파일의 처음 40바이트는 무시됩니다.
파일의 다음 2바이트는 다음과 같아야 합니다.
0x30 0x82
파일의 다음 2바이트는 빅엔디안 서명의 길이입니다. 예를 들어 다음 2바이트가
0x0c
sum 인 경우0xda
서명0x0cda
길이는 == 3290바이트입니다.서명 뒤부터 파일 끝까지의 바이트는 EFI_SIGNATURE_LIST의 내용입니다. 예 를 들어
0x0cda
, 이는 콘텐츠가40 + 2 + 2 + 0x0cda
파일 시작 부분부터 == 3334바이트에서 시작됨을 의미합니다. 이는 40바이트 + 2바이트0x30 0x82
+ 2 서명 길이 바이트 +0x0cda
서명 바이트입니다.
펌웨어를 사용하여 BIOS 설정 메뉴에서 서명을 확인하지 않고 보안 부팅 변수를 직접 편집할 수 있는 경우 이를 dbxupdate_x64.bin
EFI 시스템 파티션에 저장한 다음 dbx
변수를 편집하여 기존 내용을 이 파일로 바꿀 수 있습니다. 그러나 기술적으로 이는 그 자체로 보안 허점이 될 수 있습니다. BIOS 설정이 제한 없이 보안 부팅 설정을 변경할 수 있도록 허용하는 것은 아마도 보안 부팅 설계자의 원래 의도가 아니었을 것입니다.
펌웨어에서 보안 부팅 마스터 키(줄여서 PK)만 삭제할 수 있는 경우 PK를 삭제하면 보안 부팅이 소위 설정 모드로 전환되어 모든 보안 부팅 변수를 서명 없이 편집할 수 있다는 점에 유의해야 합니다. 정의될 때까지 새 PK를 얻었습니다. (이는 보안 부팅 구성을 완전히 제어하는 데 필요한 최소 BIOS 설정 기능입니다.)
그러나 자체 KEK 인증서가 없고 이를 시스템에 가져올 수 없는 경우 하드웨어 공급업체나 하드웨어 KEK를 보유한 사람으로부터 동등한 서명 업데이트 파일을 얻어야 합니다.