Insmod로 인해 키가 서비스에서 거부됨

Insmod로 인해 키가 서비스에서 거부됨

저는 AlmaLinux 9(RedHat 9 복제본)를 실행 중이고 새 커널 모듈을 컴파일했습니다. UEFI 및 보안 부팅이 활성화된 가상 머신에서 실행 중입니다. 모듈을 삽입하면 다음 오류가 발생합니다.

insmod: ERROR: could not insert module npreal2.mod: Key was rejected by service

다른 게시물에서 UEFI/보안 부팅과 관련이 있다고 결론을 내렸습니다. 그래서 보안 부팅을 비활성화하고 insmod가 다음과 같이 보고했습니다.

insmod: ERROR: could not insert module npreal2.mod: Invalid module format

안전 모드를 끈 상태에서 다시 컴파일을 시도했고 insmod가 작동했지만 보안 부팅을 비활성화해야 했습니다. 이 모듈을 안전하게 시작하려면 어떻게 해야 합니까?

에 관한 게시물이 있습니다.깃허브자신만의 MOK 키 생성과 관련하여 이는 DKMS에만 해당되는 것 같습니다.

답변1

이제(댓글에서 논의한 후) 작동하지만 서명되지 않은 npreal2.ko커널 모듈이 있으므로 보안 부팅 문제를 해결해 볼 수 있습니다.

먼저 MOK로 사용할 X.509 키 쌍(공개 키와 해당 비밀 키)을 생성해야 합니다. 이렇게 하려면 먼저 다음과 같은 최소 OpenSSL 구성 파일을 만듭니다 ~/x509.genkey.

[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
x509_extensions = myexts

[ req_distinguished_name ]
O = ModuleType
CN = ModuleType module signing key

[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid

CN =줄은 MOK의 인식 가능한 기본 이름을 정의하므로 원하는 대로 입력하세요. 이 O =줄에는 조직의 이름이 표시되지만 원하는 경우 전체 줄을 생략할 수 있습니다.

이제 키 쌍을 생성할 수 있습니다.

openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 \
    -batch -config x509.genkey -outform DER \
    -out signing_key.x509 \
    -keyout signing_key.priv

이 명령은 생성일로부터 10년 동안 명목상 유효한 키 쌍을 생성합니다. 이를 변경하려면 -days매개변수를 변경하세요.

이제 두 개의 파일이 있어야 합니다.

  • signing_key.x509MOK(머신 소유자 키)로 등록하는 공개 키입니다.
  • signing_key.priv직접 빌드한 커널 모듈에 서명하는 데 사용해야 하는 해당 개인 키입니다. 이 개인 키는아니요비밀번호로 보호되어 있으니 안전하게 보관하세요.

MOK로 등록하려면 패키지가 설치되어 있는지 signing_key.x509확인한 후 다음을 실행하세요.mokutil

sudo mokutil --import signing_key.x509

이 명령은 키 등록 프로세스에 대한 일회용 비밀번호를 설정하도록 요청합니다. 이 작업이 완료되면 MOK 등록의 첫 번째 단계가 완료됩니다. MOK 등록을 완료하려면 재부팅해야 합니다.

재부팅하면 shimx64.efiMOK 등록 프로세스가 시작되었음을 감지하고 또는 Enroll MOK옵션이 포함된 간단한 텍스트 기반 메뉴와 함께 블루 스크린이 나타납니다 Continue boot.

Enroll MOKMOK 등록의 두 번째 단계를 시작하려면 선택하세요 . 그런 다음 CN =등록하려는 해시 및 키 라인을 검토한 후 예/아니요 확인을 거쳐 마지막으로 위의 첫 번째 등록 단계에서 설정한 일회용 비밀번호를 검토할 수 있는 기회가 제공됩니다 . 등록이 성공하면 더 이상 비밀번호가 필요하지 않습니다. Linux로 돌아가려면 블루 스크린 메뉴에서 "재부팅"을 선택하십시오.

(등록 프로세스의 두 번째 단계는 시스템에 물리적으로 동등한 액세스 권한을 가진 사람만 프로세스를 완료할 수 있도록 재부팅 중에 발생하며, 비밀번호는 등록 중인 키가 첫 번째 단계에서 사용한 키인지 확인합니다. 일부 악성 코드에 의해 삽입되지 않았습니다).

키 등록이 성공했는지 확인하려면 루트로 실행할 수 있습니다 . MOK, 여기에 포함된 distro 키, 펌웨어의 제조업체 및 Microsoft 키를 sudo keyctl list %:.platform포함하여 시스템에서 인식하는 모든 보안 부팅 키가 표시되어야 합니다 .shimx64.efi

또는 실행하여 sudo mokutil -l배포 키 및 MOK의 더 자세한 목록을 얻을 수 있습니다.

이제 커널 모듈에 서명할 준비가 되었습니다.

/usr/src/kernels/$(uname -r)/scripts/sign-file sha256 \
    ~/signing_key.priv \
    ~/signing_key.x509 \
    /some/where/npreal2.ko   # adjust the paths as needed

서명을 확인하려면 다음을 실행하세요 . 여기에는 MOK 이름이 포함된 sudo modinfo ./npreal2.ko줄 과 긴 16진수 블록이 포함되어야 합니다.signer:CN =signature:

물론 이제 sudo insmod npreal2.ko보안 부팅이 활성화된 모듈을 로드할 수 있습니다!

원천:https://www.redhat.com/sysadmin/secure-boot-systemtap

관련 정보