![서명된 커널 모듈 - "신뢰할 수 있는 키로 서명되지 않음"](https://linux55.com/image/11666/%EC%84%9C%EB%AA%85%EB%90%9C%20%EC%BB%A4%EB%84%90%20%EB%AA%A8%EB%93%88%20-%20%22%EC%8B%A0%EB%A2%B0%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%8A%94%20%ED%82%A4%EB%A1%9C%20%EC%84%9C%EB%AA%85%EB%90%98%EC%A7%80%20%EC%95%8A%EC%9D%8C%22.png)
질문:
서명된 커널 모듈을 사용하려고 하는데 명령이 실패합니다 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 파일을 자동으로 생성합니다.