UEFI Secure Boot và mokutil¶
Trang này trình bày cơ chế UEFI Secure Boot trên máy x86 chạy Linux, vai trò của shim và MOK (Machine Owner Key), sau đó là công cụ mokutil dùng để kiểm tra trạng thái Secure Boot và quản lý MOK. Thứ tự gồm: các biến key của firmware, chuỗi shim, quy trình đăng ký MOK, rồi các lệnh mokutil thường dùng.
Biến key của UEFI Secure Boot¶
Firmware UEFI giữ bốn nhóm key trong các biến không bay hơi (non-volatile):
| Biến | Vai trò |
|---|---|
PK (Platform Key) |
Key của chủ nền tảng. Ai giữ PK thì được phép thay KEK. |
KEK (Key Exchange Key) |
Key được phép cập nhật db và dbx. |
db |
Danh sách key và hash được tin cậy. Firmware chỉ chạy file EFI có chữ ký khớp db. |
dbx |
Danh sách key và hash bị thu hồi. |
Khi Secure Boot bật, firmware kiểm tra chữ ký của mỗi file EFI trước khi chạy. Các bản phân phối Linux không thể đưa key của từng hãng vào db của mọi mainboard, nên dùng một bootloader trung gian nhỏ là shim, được Microsoft ký để firmware tin cậy sẵn.
Chuỗi tin cậy với shim¶
Shim mang theo key của bản phân phối và giữ thêm một danh sách key riêng của máy là MOK. Chuỗi verify như sau:
- Firmware verify shim bằng key trong
db. - Shim verify GRUB bằng key của bản phân phối hoặc bằng MOK.
- GRUB nhờ shim verify kernel.
- Kernel verify kernel module nếu bật module signing, key ký module lấy từ key được tin cậy của kernel, trong đó có MOK.
MOK giải quyết trường hợp người dùng tự build kernel hoặc module (ví dụ driver ngoài cây nguồn) mà không cần sửa db của firmware. Khái niệm chain of trust nói chung xem tại Secure boot và TrustZone.
Đăng ký MOK¶
Việc thêm key vào MOK cần xác nhận trực tiếp tại máy, để phần mềm chạy trong OS không tự thêm key khi người dùng chưa đồng ý. Quy trình điển hình:
- Tạo cặp key và chứng chỉ định dạng DER, ký module hoặc kernel bằng private key.
- Chạy
mokutil --importkèm chứng chỉ. Lệnh yêu cầu đặt một mật khẩu dùng một lần. - Khởi động lại máy. Shim chạy chương trình MokManager trước khi vào OS.
- Trong MokManager, chọn đăng ký key (enroll) và nhập lại mật khẩu ở bước 2.
- Máy khởi động tiếp, key đã nằm trong MOK.
Công cụ mokutil¶
mokutil là công cụ dòng lệnh trong dự án shim, đóng gói thành gói mokutil trên các bản phân phối như Ubuntu, Debian và Fedora. Công cụ đọc và ghi các biến UEFI liên quan tới shim, nên cần quyền root và máy phải boot bằng UEFI.
| Lệnh | Tác dụng |
|---|---|
mokutil --sb-state |
Hiển thị Secure Boot đang bật hay tắt. |
mokutil --list-enrolled |
Liệt kê các key đã đăng ký trong MOK. |
mokutil --import key.der |
Yêu cầu đăng ký key, chờ xác nhận ở lần boot sau. |
mokutil --delete key.der |
Yêu cầu xóa key khỏi MOK, chờ xác nhận ở lần boot sau. |
mokutil --test-key key.der |
Kiểm tra key đã nằm trong MOK hay chưa. |
mokutil --revoke-import |
Hủy yêu cầu đăng ký đang chờ. |
mokutil --disable-validation |
Yêu cầu shim bỏ qua kiểm tra chữ ký của thành phần phía sau. Không tắt Secure Boot của firmware. |
mokutil --enable-validation |
Bật lại kiểm tra chữ ký trong shim. |
Ví dụ kiểm tra trạng thái:
Kết quả SecureBoot enabled nghĩa là firmware đang thực thi Secure Boot. Nếu máy không boot bằng UEFI, lệnh báo biến EFI không khả dụng.
Chưa kiểm chứng
Danh sách lệnh trên dựa trên kiến thức chung về mokutil, chưa đối chiếu với man page mokutil(1) của một phiên bản cụ thể. Tên và hành vi của một số tùy chọn có thể khác giữa các phiên bản (ví dụ --timeout, --reset, --export). Cần đối chiếu với man mokutil trên bản phân phối đang dùng trước khi dựa vào chi tiết.
Liên quan¶
- GRUB (Embedded): vai trò của GRUB trong chuỗi shim, GRUB, kernel và cơ chế SBAT.
- Secure boot và TrustZone: chain of trust trên SoC ARM.
- CVE: theo dõi lỗ hổng của GRUB và shim.
Tài liệu tham khảo¶
mokutil(1), man page của gói mokutil, xem bằngman mokutiltrên máy Linux.- Unified Extensible Firmware Interface/Secure Boot - ArchWiki - wiki.archlinux.org
- shim: UEFI shim loader - github.com/rhboot