서명된 커널 모듈 - "신뢰할 수 있는 키로 서명되지 않음"

서명된 커널 모듈 - "신뢰할 수 있는 키로 서명되지 않음"

질문:

서명된 커널 모듈을 사용하려고 하는데 명령이 실패합니다 insmod.

PKCS#7 signature not signed with a trusted key

Linux 시작 중에 관련 오류 메시지가 나타날 수 있습니다.

[    3.342888] Loading compiled-in X.509 certificates
[    3.391774] Problem loading in-kernel X.509 certificate (-129)

이 명령은 다음 cat /proc/keys을 표시합니다..builtin_trusted_keys: empty

설정:

4.9.x 커널은 다음 defconfig 옵션을 사용하여 컴파일됩니다.

...
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODVERSIONS=y
CONFIG_MODULE_SRCVERSION_ALL=y
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_ALL=y
CONFIG_MODULE_SIG_FORCE=y
CONFIG_MODULE_SIG_SHA256=y
CONFIG_MODULE_SIG_HASH="sha256"
CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_KEYS_DEBUG_PROC_KEYS=y
CONFIG_PERSISTENT_KEYRINGS=y
CONFIG_ENCRYPTED_KEYS=y
CONFIG_SECURITY_DMESG_RESTRICT=y
CONFIG_SECURITY=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_PATH=y
CONFIG_HARDENED_USERCOPY=y
CONFIG_SECURITY_SMACK=y
CONFIG_SECURITY_SMACK_BRINGUP=y
CONFIG_DEFAULT_SECURITY_DAC=y
...

모듈은 다음 명령을 사용하여 서명됩니다. sign-file sha256 certs/signing_key.pem certs/signing_key.x509 <.ko>

논평:

커널에서 X.509 인증서 로딩 버그를 수정해야 한다고 가정하고 있지만 이를 수행하는 방법을 아직 찾지 못했습니다. 커널 컴파일 중에 생성된 파일이 certs/signing_key.pem커널에 래핑될 것이라고 생각했지만 /proc/keys. 열쇠. 누구든지 제안 사항이 있으면 크게 감사하겠습니다.

아직 진전이 없는 nvidia 드라이버와 Ubuntu/Fedora에 대한 게시물을 찾았습니다. 예: PKCS#7 서명이 신뢰할 수 있는 키로 서명되지 않았습니다.

답변1

커널 컴파일을 위해서는 signed_key.* 파일이 "certs" 하위 디렉터리가 아닌 커널 소스 트리의 기본 디렉터리에 있어야 한다고 생각합니다. 컴파일 프로세스에서는 표준 모듈에 자동으로 서명해야 하며, 타사 모듈만 수동으로 서명해야 합니다.

또한 서명된 모듈이 포함된 4.9.* 커널을 컴파일하는 데 사용한 이전 스크립트에는 DER 형식의 인증서 파일이 있었습니다. 어쩌면 필요한가요?

커널 4.14 이상에서는 프로세스가 약간 다릅니다. 인증서 파일의 경로 이름을 지정하는 커널 구성 옵션이 있습니다.

답변2

@bjornruffians 자신만의 x509.genekey 파일을 생성하고 컴파일하기 전에 커널 소스, 즉 certs/ 폴더에 복사할 수 있습니다. 경고하다:사용자 정의/수동 생성된 signed_key.pem 또는 x509.genekey를 제외한 cert 폴더의 다른 파일을 복사하지 마십시오. 커널은 x509.genekey 파일을 기반으로 signed_key.x509 및 signed_key.pem 파일을 자동으로 생성합니다.

관련 정보