저는 Linux 시스템에서 작업 중이며 보안 부팅을 구성하고 싶습니다. 흥미로운 점은 UEFI 부트로더를 포함하여 시스템의 모든 부분이 있다는 것입니다.
시작 프로세스에서 누락된 부분이 있는지 누구든지 말해 줄 수 있는지 궁금합니다.
- 전원을 켜고 UEFI 부트로더 실행을 시작합니다.
- UEFI 부트로더에는 Grub2(및 grub.cfg)를 인증하고 실행을 시작하는 컴파일된 키가 있습니다.
- Grub2는 efi 매직을 통해 동일한 키를 수신하고 이를 사용하여 커널을 인증하고 실행을 시작합니다. 글머리 기호 #3은 전혀 확실하지 않습니다. Microsoft CA를 전혀 다루지 않더라도 Shim이 필요합니까? Grub2에는 커널을 확인하는 코드가 있습니까, 아니면 Shim을 거쳐야 합니까?
가장 중요한 것은 grub2와 커널을 인증하기 위해 내 키와 내 키만 사용하고 싶다는 것입니다. 이것을 달성하려면 무엇이 필요합니까?
답변1
저는 시작 프로세스를 다음과 같이 설명하고 싶습니다.
1.) 전원을 켜고 보안 부팅을 지원하는 UEFI 펌웨어 실행을 시작합니다.
2.) 펌웨어는 시스템 NVRAM(또는 컴파일된 기본값)에 저장된 보안 부팅 키 세트와 비교하여 잠재적인 부트로더를 확인합니다.
3.) 부트로더는 동일한 방식으로 운영 체제 커널을 확인해야 합니다.
4.) 보안 부팅을 준수하고 의미 있는 효과를 얻으려면 Linux 커널은 로드된 모든 커널 모듈을 암호화 방식으로 검사해야 합니다.
최신 커널에는 4)의 선택적 기능이 포함되어 있습니다. RedHat과 같은 엔터프라이즈 배포판의 커널은 보안 부팅을 지원하는 시스템에서 부팅할 때 자동으로 이 기능을 활성화합니다. 사용자 정의 커널은 컴파일 타임에 서명 키와 함께 제공될 수 있습니다.
RedHat 커널의 경우 런타임 시 허용되는 키 목록은 (기본 커널에 서명하는 데 사용되는 키) + ( db
보안 부팅 키 세트의 모든 항목) + ( MOK
사용된 세트에 허용되는 키 shim.efi
(있는 경우)입니다.
따라서 보안 부팅을 사용하고 배포 커널과 함께 타사 커널 모듈을 사용하려는 경우 해당 모듈에 서명하고 허용 목록에서 서명 키를 가져와야 합니다. 그러나 자체 커널을 롤아웃하거나 보안 부팅 키를 제어하는 경우 보안 부팅 개인 키를 사용하여 타사 모듈에 서명할 수도 있습니다.
보안 부팅을 제어하려면 시스템에서 보안 부팅 키를 수정할 수 있도록 허용해야 합니다. 관심 있는 키는 4개(세트)입니다.
db
, 공개 인증서 모음허용하다부트로더 및/또는 SHA256 체크섬허용하다부트 로더dbx
공개 인증서 및/또는 체크섬 세트명시적으로 블랙리스트에 등록됨부트로더.KEK
, 서명 업데이트를 확인하는 데 사용되는 공개 인증서 세트db
- 및
PK
확인에 사용되는 고유 마스터 키(인증서)KEK
.
기본적으로 시스템에는 하드웨어 제조업체의 PK가 있어야 하며 Microsoft 및 하드웨어 제조업체 키가 모두 KEK
존재합니다 db
. 이를 통해 Microsoft 인증 부트로더(일부 Linux에서 사용하기 위한 "shim" 포함)와 하드웨어 제조업체의 펌웨어 업데이트 도구를 즉시 사용할 수 있습니다.
첫 번째 단계는 UEFI BIOS 설정을 매우 주의 깊게 확인하는 것입니다. 일부 시스템에서는 설치 프로그램을 통해 모든 보안 부팅 키를 추가하고 제거할 수 있습니다. 다른 시스템에서는 공장 기본 키로 재설정하고 모든 키를 지우는 것이 유일한 옵션입니다. 설치 프로그램에서 사용자 정의 키를 사용하기 위해 모든 키를 지워야 하는 경우 필요한 경우 선택적으로 복원할 수 있도록 기존 키를 먼저 백업할 수 있습니다.
안전 부팅 사양에 따르면, PK
이 옵션을 선택 해제하면 안전 부팅이 소위 설정 모드로 전환되어 모든 키 세트를 자유롭게 편집하고 무제한 부팅이 가능합니다. 따라서 이상적으로는 삭제 PK
하고 다른 키는 변경하지 않고 그대로 두는 것이 좋습니다.
기껏해야 적절한 도구를 사용하여 UEFI 인식 운영 체제에서 보안 부팅 키를 편집할 수 있으며, 최악의 경우 UEFI 셸 및 keytool.efi
유틸리티를 사용해야 합니다.James Bottomley의 efitools 패키지.
최종 목표는 아마도 다음과 같을 것입니다.
- 컬렉션
db
에는 다음이 포함되어야 합니다.- 명시적으로 서명한 콘텐츠를 시작하는 데 사용되는 자체 공개 키 인증서
- 수동으로 다시 서명할 필요 없이 사전 패키지된 커널을 사용하려면 선호하는 Linux 배포판의 커널 서명 인증서를 사용하세요.
- 필요한 경우 펌웨어 업데이트 설치를 허용하는 하드웨어 공급업체의 인증서일 수도 있습니다.
- 보안 부팅을 명시적으로 다시 서명하거나 비활성화할 필요 없이 사전 패키지된 Linux 부트 로더와 라이브 Linux 부팅 미디어를 사용할 수 있게 해주는 Microsoft의 타사 UEFI 인증서일 수 있습니다.
- Windows 이중 부팅을 사용하는 경우 Microsoft의 운영 체제 서명 인증서일 수 있습니다.
- 컬렉션
KEK
에는 다음이 포함되어야 합니다.- 갱신을 위한 자신의 인증서
db
와dbx
- 시스템에 UEFI를 지원하는 Microsoft 운영 체제가 포함되어 있는 경우 Microsoft의 KEK 인증서를 포함해야 할 수 있습니다. Microsoft의 업데이트에는 때때로 보안 부팅에 대한 액세스가 거부될 경우 성공적으로 설치되지 않는 업데이트가 포함되거나
db
/또는dbx
업데이트되기 때문입니다.
- 갱신을 위한 자신의 인증서
- 마지막으로 요구 사항에 따라 다른 모든 항목이 설정되면
PK
보안 부팅이 다시 작동하도록 여기에 자체 인증서를 넣어야 합니다.
답변2
이 구역Sakaki의 EFI 설치 가이드자체 서명된 커널을 확인하기 위해 키를 설치하는 방법을 보여줍니다. 전체 가이드는 Gentoo용으로 작성되었지만 이 섹션의 대부분은 모든 운영 체제에 적용되며 작동 방식을 설명합니다.