db và dbx khác nhau thế nào?

Giải thích db và dbx trong Secure Boot: allowed database, forbidden database, revoke image, certificate/hash, dbx update và debug boot bị chặn.

Cập nhật 14 phút đọc
Đọc bằng Tiếng Việt English 日本語
Security Advanced cover

Bạn có một file BOOTX64.EFI đã ký. Trước đây boot được, sau một lần BIOS update hoặc Windows update thì boot thất bại với EFI_SECURITY_VIOLATION. Khi kiểm tra Secure Boot variables, bạn thấy db vẫn còn key cho phép, nhưng dbx đã được cập nhật. Đây là lúc cần hiểu rõ dbdbx.

Nói ngắn gọn: Trong Secure Boot, db là allowed signature database, dùng để cho phép image/certificate/hash được tin cậy. dbx là forbidden signature database, dùng để chặn hoặc revoke image/certificate/hash không còn được tin cậy. Khi xác thực image, firmware thường kiểm tra dbx trước, rồi mới xét db.

db và dbx nằm ở đâu?

Secure Boot variable database

UEFI Variable Store / NVRAM
├─ PK
│  └─ Platform ownership
├─ KEK
│  └─ Authority to update db/dbx
├─ db
│  ├─ Allowed X.509 certificates
│  ├─ Allowed image hashes
│  └─ Allowed signature lists
└─ dbx
├─ Forbidden certificates
├─ Forbidden image hashes
└─ Revoked vulnerable bootloaders/drivers

dbdbx đều là authenticated variables. Muốn cập nhật chúng, update phải được ký bằng authority phù hợp, thường liên quan đến KEK hoặc PK tùy policy.

Secure Boot kiểm tra db/dbx như thế nào?

01 Load

Firmware loads EFI image

Image có thể là bootloader, UEFI app, driver hoặc Option ROM.

02 Hash

Calculate image hash

Firmware tính digest và đọc chữ ký/certificate của image.

03 dbx

Check forbidden database

Nếu image/hash/cert match dbx, image bị chặn.

04 db

Check allowed database

Nếu image/cert/hash match db, image được cho phép.

05 Policy

Apply platform policy

Xét thêm SetupMode, SecureBoot, image type và vendor policy.

06 Result

Allow or Security Violation

Không allowed hoặc bị revoked thì trả lỗi/chặn boot.

Firmware thường kiểm tra danh sách chặn trước danh sách cho phép.

db là gì?

db chứa những thứ firmware tin cậy để cho phép UEFI image chạy.

db, Allowed Signature Database
Entry trong db Ý nghĩa Debug
X.509 certificate Cho phép image được ký bởi cert/chain tương ứng Signer phải chain tới cert trong db
Image hash Cho phép đúng một image cụ thể Rebuild image làm hash đổi
Signature list Format chứa nhiều entry theo UEFI Parser/dump cần đọc đúng
Owner GUID Cho biết entry thuộc owner nào Audit nguồn trust
OEM/OS vendor cert Cho phép bootloader vendor Restore factory keys thường khôi phục
Custom cert Cho phép custom bootloader Dễ mất khi restore defaults
Append entry Thêm trust mới Sai thành replace sẽ mất trust cũ
Replace database Thay toàn bộ db Có thể làm OS không boot

dbx là gì?

dbx chứa các entry bị cấm hoặc revoke. Nó là cơ chế quan trọng để chặn bootloader/driver đã từng trusted nhưng sau đó phát hiện lỗ hổng.

dbx, Forbidden Signature Database
Entry trong dbx Ý nghĩa Debug
Forbidden image hash Chặn đúng image cụ thể Bootloader cũ bị block
Forbidden certificate Chặn mọi image ký bởi cert đó Ảnh hưởng rộng hơn hash
Revoked bootloader Image bị revoke vì vulnerability Sau dbx update boot fail
Revoked Option ROM UEFI OpROM bị chặn Pre-boot network/storage mất
Signature list Format chứa nhiều forbidden entries dbx có thể lớn
Owner GUID Nguồn revoke entry Audit update
Append dbx Thêm revoke entry Có thể làm image đang dùng bị chặn
Replace dbx Thay toàn bộ revoke database Có thể mất revoke quan trọng

So sánh db và dbx

db vs dbx
Khía cạnh db dbx
Tên đầy đủ Allowed Signature Database Forbidden Signature Database
Vai trò Cho phép image trusted Chặn image/cert/hash bị revoke
Khi match Image có thể được chạy Image bị block
Ưu tiên Thường xét sau dbx Thường xét trước db
Entry phổ biến Cert vendor, custom cert, image hash Hash/cert bị revoke
Tác động update Thêm trust mới Thu hồi trust cũ
Rủi ro khi sửa sai Cho phép quá rộng hoặc mất OS key Chặn nhầm bootloader đang dùng
Debug lỗi Image không trong db Image nằm trong dbx

Certificate vs hash trong db/dbx

Một entry có thể là certificate hoặc hash. Hai kiểu này có phạm vi ảnh hưởng rất khác nhau.

Certificate entry vs hash entry
Loại entry Trong db Trong dbx
Certificate Cho phép nhiều image được ký bởi cert đó Chặn nhiều image ký bởi cert đó
Image hash Cho phép đúng image có hash đó Chặn đúng image có hash đó
Phạm vi Rộng hơn Rộng nếu cert, hẹp nếu hash
Khi image rebuild Vẫn pass nếu ký lại bằng cert trusted Hash allow cũ không còn match
Rủi ro Cert bị lộ làm nhiều image nguy hiểm được ký Revoke cert có thể chặn nhiều image hợp lệ
Dễ quản lý Tốt cho vendor/key chain Hash tốt cho exception cụ thể
Debug Check signer chain Check exact digest
Policy Phụ thuộc mức trust muốn cấp Phụ thuộc mức revoke muốn áp

dbx update đến từ đâu?

dbx có thể được cập nhật qua BIOS update, OS update hoặc cơ chế vendor-specific.

Nguồn dbx update
Nguồn Ý nghĩa Debug
BIOS/firmware update Vendor cập nhật default dbx hoặc migrate dbx Behavior đổi sau BIOS update
OS update OS đưa dbx update qua authenticated variable Sau Windows/Linux update bootloader cũ bị chặn
Manual enrollment Admin thêm forbidden hash/cert Custom policy
Factory restore Restore dbxDefault Có thể mất hoặc thêm revoke entry
Enterprise management MDM/security baseline Nhiều máy đổi cùng lúc
Recovery flow Có thể áp policy riêng Debug môi trường recovery
Security advisory Revocation do vulnerability Cần update bootloader trước
Custom mode Người dùng tự quản dbx Dễ mismatch với OS expectation

db/dbx và Secure Boot modes

Secure Boot mode ảnh hưởng cách db/dbx được sử dụng và cập nhật.

Mode ảnh hưởng db/dbx
Mode/trạng thái Ảnh hưởng Debug
Setup Mode Chưa có PK active, key enrollment thường dễ hơn Không giống production enforcement
User Mode PK active, db/dbx update cần authenticated authority Policy enforce thật
Standard Mode Dùng factory/default keys db/dbx theo vendor/OS baseline
Custom Mode Admin tự quản keys/db/dbx Dễ mất key hoặc block nhầm
SecureBoot OFF Image verification không enforce như ON db/dbx vẫn có thể tồn tại
SecureBoot ON db/dbx dùng để allow/block Security Violation nếu fail
Audit Mode Có thể log thay vì block tùy platform Không nên nhầm với production
Deployed Mode Policy chặt hơn Key update/debug khó hơn

Debug Diary: Image signed nhưng bị Security Violation

Triệu chứng:

Image đã ký
Secure Boot ON
LoadImage -> EFI_SECURITY_VIOLATION

Checklist signed image bị chặn

Debug Diary: Sau dbx update, bootloader cũ không chạy

Triệu chứng:

Trước update boot OK
Sau dbx update: Security Violation

Checklist dbx update làm boot fail

Debug Diary: Restore Factory Keys làm custom boot fail

Triệu chứng:

Custom bootloader trước đó chạy
Restore Factory Keys xong bị chặn

Checklist factory keys làm mất custom db

Debug Diary: Thêm cert vào db nhưng image vẫn fail

Triệu chứng:

Enroll custom cert vào db
Custom EFI app vẫn Security Violation

Checklist db enrollment nhưng vẫn fail

Debug Diary: dbx chặn quá rộng

Triệu chứng:

Sau khi thêm forbidden certificate vào dbx
Nhiều image hợp lệ cũng bị chặn

Checklist dbx entry quá rộng

Anti-pattern khi hiểu db/dbx

Anti-pattern db/dbx
Anti-pattern Vì sao sai Cách sửa
Chỉ kiểm db, bỏ qua dbx Revoked image vẫn bị chặn Luôn check dbx trước
Nghĩ signed là đủ Signer phải trusted và không revoked Check db + dbx
Replace db khi muốn thêm cert Mất vendor/custom keys Append đúng cách
Revoke certificate khi chỉ cần revoke một file Chặn quá rộng Cân nhắc hash revoke
Không backup keys/databases Khó recover Export db/dbx trước khi sửa
Apply dbx update trước bootloader update Boot fail Update bootloader trước
Disable Secure Boot để fix Che root cause Xác định db miss hay dbx hit
Không log owner GUID/entry Audit khó Document từng entry

Instrumentation nên có

Instrumentation cho db/dbx debug
Vị trí Nên log Mục tiêu
Variable dump db/dbx size, hash, entry count Biết database đổi không
Entry summary Cert subject/hash/owner GUID Audit trust/revoke
Image verify Image path, signer, digest Biết image target
dbx check Match cert/hash nào Root cause bị block
db check Match cert/hash nào Root cause allowed
SetVariable Append/replace, status Enrollment debug
Factory restore Before/after db/dbx diff Detect lost custom key
dbx update Update source/version Regression debug
Boot fail EFI_SECURITY_VIOLATION + image path Support debug
Good/bad diff Database entries and image digest Tìm thay đổi

db/dbx debug playbook

db/dbx debug playbook

Security checklist

Security checklist cho db/dbx

Khi đọc db/dbx dump nên tìm gì?

db/dbx dump reading checklist
Cần hiểu Tìm trong dump Câu hỏi
Database size db/dbx size Có thay đổi bất thường không?
Entry count Số signature lists/entries Có entry custom/factory không?
Signature type Cert hay hash Phạm vi allow/revoke rộng hay hẹp?
Owner GUID Owner của entry Entry từ vendor, OS hay custom?
Certificate subject Signer identity Image chain có match không?
Hash Exact image digest Image cụ thể có match không?
Before/after diff Entry thêm/xóa Update nào gây fail?
dbx overlap Same cert/hash trong dbx Có revoke override db không?
Mode Standard/Custom Database có expected baseline không?
Attributes Authenticated variable attrs Update path hợp lệ không?

Câu hỏi tự kiểm tra

Tự kiểm tra sau khi đọc note này

Blog seeds

  • db và dbx trong Secure Boot khác nhau thế nào?
  • Vì sao signed bootloader vẫn bị Security Violation?
  • dbx update là gì và vì sao có thể làm boot fail?
  • Certificate vs hash trong Secure Boot database
  • Debug db/dbx khi custom UEFI app không chạy

Bài liên quan

Nguồn tham khảo public

Bài viết này hữu ích với bạn?

Bạn có thể chia sẻ cho người đang học firmware, BIOS/UEFI, embedded systems hoặc ủng hộ tác giả.

Nội dung liên quan

Một số bài viết, ghi chú hoặc project có liên quan đến nội dung bạn vừa đọc.

Biến note thành bài viết hoàn chỉnh

Notes là nơi ghi nhanh khái niệm.