본문 바로가기
Linux/Driver

Lockdown: insmod: unsigned module loading is restricted; see man kernel_lockdown.7 문제 해결

by khd0801 2022. 4. 13.
반응형

 1. Error 내용

모듈 로드시 커널 로그

Ubuntu Kernel 4.4.0-20 이후로 "EFI_SECURE_BOOT_SIG_ENFORCE"라는 커널 컨피그가 Enable되어 Secure Boot가 활성화 되었다. Secure Boot가 활성화 되면서 해당 커널에서는 일반적인 방법으로 모듈 드라이버를 로드하는게 막혀지게 되었다.

모듈 드라이버를 로드 하기 위해서는 해당 컨피그를 Disable 시킨뒤 사용해야 되나 노트북에 이미 설치되어 있는 리눅스를 다시 설치하기 번거롭기 때문에 Secure Boot가 Enable 되어 있어도 모듈 드라이버를 로드 할 수 있는 방법을 설명한다. 

 

 

 2. Signing Key 생성, 서명 및 등록

2-1. Signing Key 생성

openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive common name/"

위 명령어를 실행 하면 아래아 같이 MOK.der, MOK.priv 파일이 생성 된다.

$openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive name/"

Generating a RSA private key

........................................+++++

.+++++

writing new private key to 'MOK.priv'

-----

$ls

MOK.der  MOK.priv

 

 

2-2. Module 드라이버 서명

sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der ./path/to/module

위 명령어를 사용하여 모듈 드라이버를 서명한다. "./path/to/module" 부분에 모듈드라이버의 경로를 적어준다. 

모듈 드라이버에 서명이 정상적으로 되었는지는 modinfo 명령얼 통하여 아래와 같이 확인이 가능하다.

$ls

hello_world.ko  MOK.der  MOK.priv

$modinfo hello_world.ko

filename: /home/khd0801/Test-Code/module/hello_world.ko

description: Hello World program

author: khd0801

license: GPL

srcversion: 9FD3969E2A728BB050DC75F

depends:

retpoline: Y

name: hello_world

vermagic: 5.13.0-35-generic SMP mod_unload modversions

$sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der ./hello_world.ko 

$modinfo hello_world.ko

filename:       /home/khd0801/TEST/hello_world.ko

description:    Hello World program
author:         khd0801

license:        GPL

srcversion:     9FD3969E2A728BB050DC75F

depends:       

retpoline:      Y

name:           hello_world

vermagic:       5.13.0-35-generic SMP mod_unload modversions 

sig_id:         PKCS#7

signer:         Descriptive name

sig_key:        54:23:31:4A:32:0E:9E:D3:49:E0:F8:F0:33:48:E2:0A:71:82:E8:AB

sig_hashalgo:   sha256

signature:      6A:DD:7E:C1:91:0A:66:2D:D0:4B:C0:7D:39:F1:F0:36:C3:26:CA:6A:

                6E:2E:0E:57:72:6B:8A:E5:7A:B7:89:E8:DD:91:38:49:EA:47:A3:1D:

                C9:02:79:B8:43:77:4A:4D:A8:65:96:69:A9:2D:7E:54:F6:FF:95:9B:

                1F:FA:00:FE:C2:55:19:66:F1:7F:70:87:6F:85:43:43:C4:2D:E8:4F:

                63:27:99:52:ED:89:03:59:EA:3C:08:8A:80:D3:B7:05:69:E7:21:B8:

                ED:25:3F:69:29:08:DE:3C:8C:92:76:6D:B3:89:4F:82:50:91:4F:82:

                D3:5E:C4:1F:08:DC:D8:D5:3B:93:C3:27:FD:06:D3:FA:E5:88:47:F5:

                DD:B6:19:02:9F:A9:1A:14:5B:18:16:E6:2F:DE:97:50:97:61:8F:D6:

                16:B8:22:C8:1E:7E:BB:D4:C4:79:9C:C0:E6:74:AC:93:B8:7C:29:A8:

                0F:F2:9A:F0:2D:EF:BB:B9:E0:85:1E:E1:19:75:D2:FE:11:04:31:0B:

                4D:2B:7D:8E:CA:46:16:46:69:3D:85:91:9B:BC:D4:D1:85:C7:EC:0D:

                1F:4E:50:93:FA:1A:97:D4:D4:3D:3B:66:BD:AE:A1:73:34:90:C3:5D:

                59:29:9E:A5:64:8F:79:20:62:AC:24:09:B2:9F:E0:46

 

 

2-3. Secure Boot에 Key 등록

sudo mokutil --import MOK.der

만약 mokutil 명령어가 없다면 아래 명령어로 mokutil를 설치하도록 한다.

sudo apt install mokutil

키 등록 명령어를 실행하면 패스워드 등록 요청이 온다. 최소 8자리 characters를 입력하면 된다. 

키 등록이 완료 되었으면 reboot을 한다.

 

 

2-4. MOK  management 설정

리붓 한뒤에는 부팅이 되기전 아래와 같은 창이 뜨는데 Enroll MOK을 선택하여 엔터입력을 한다.

MOK management

엔터 입력 후 아래와 같은 창이 뜨는데 Continue를 선택한다.

MOK 등록

엔터 입력 후 키 등록을 확인하는 창이 뜨는데 YES를 선택한다.

YES를 누른 후 패스워드 입력 란이 뜨는데 2-3.Secure Boot Key 등록에서 "mokutil --import" 명령 후 입력하였던 패스워드를 입력한다.

해당 패스워드 입력 후 리붓 창이 뜨는데 OK를 선택하고 리붓 한다.

리붓이 완료되고 정상적으로 부팅이 되었다면 Secure Boot Enable상태에서 드라이버 모듈 로드를 위한 작업이 다 완료 되었다.

 

 

 3. 드라이버 로드 테스트

서명된 모듈을 로드하여 아래 그림 처럼 Hello, world! 내용을 커널 로그에 출력하였다.

$dmesg -w | grep world &

$sudo insmod hello_world.ko

[33182.212059] Hello, world!

$sudo rmmod hellow_world.ko

[33187.066464] Bye, World!

 

 

 

 

반응형

'Linux > Driver' 카테고리의 다른 글

간단한 리눅스 모듈 드라이버  (0) 2022.04.14

댓글