페도라에서 보안부팅용 버추얼박스 커널모듈 서명하기

 

보안부팅을 사용하는 시스템에서 리눅스를 사용할때는 MS 윈도에 비해 불편한 점들이 있습니다. 그 중 하나가 버추얼박스를 사용하기 위해서는 버추얼박스의 커널모듈을 서명해야한다라는 것인데 페도라는 우분투에 비해 이 과정이 많이 번거롭습니다. 이 포스팅의 내용은 페도라 공식문서에 있는 것이니 좀더 자세한 것이 필요하신 분은 해당 문서를 참고하시면 됩니다.

1. 필요한 패키지 : 커널모듈 서명을 위해서는 openssl,kernel-devel,mokutil,keyutils 패키지를 먼저 설치해야 합니다.

2. 설정 파일 생성 : 키 생성에 필요한 설정 파일을 아래 내용으로 만듭니다. 파일 이름은 키 생성시 지정할 수 있기 때문에 적당히 만들면 되는데 문서에서 사용하는 이름은 configuration_file.config 입니다. req_distinguished_name 항목에 있는 O,CN,emailAddress 부분은 사용자에 맞게 수정합니다.

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

[ req_distinguished_name ]
O = Organization
CN = Organization signing key
emailAddress = E-mail address

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

3. 키 생성 : 아래 명령으로 키를 생성합니다. 이때 입력한 패스워드는 시스템에 키를 등록할때 사용해야하니 잘기억해 두셔야 합니다.

openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config configuration_file.config -outform DER -out public_key.der -keyout private_key.priv

4. MOK 리스트에 키 등록 : 위에서 생성한 키를 아래 명령으로 시스템에 등록합니다. 여기서부터는 명령들을 root 권한으로 실행해야 합니다. 명령 실행 후 시스템을 리부팅하면 등록한 키를 인증하는 화면이 나옵니다. 선택해야하는 것을 순서대로 적으면 Enroll MOK -> Continue -> Yes -> Enter Password -> Reboot 입니다. 패스워드는 키를 생성할때 입력한 것을 사용합니다.

mokutil --import public_key.der

5. 버추얼박스 커널모듈 서명하기 : 리부팅까지 문제없이 진행되었다면 커널모듈을 서명합니다. 우선, 버추얼박스 커널모듈의 위치를 modinfo -n vboxdrv 명령으로 확인합니다. 그 후 아래 명령으로 서명합니다.

/usr/src/kernels/$(uname -r)/scripts/sign-file sha256 private_key.priv public_key.der 버추얼박스_모듈.ko

6. 커널모듈 읽어들이기 : 시스템을 리부팅하거나 modprobe 명령을 통해 수동으로 읽어들입니다.