SMRAM là gì?

Giải thích SMRAM như vùng memory bảo vệ cho SMM: layout, open/closed/locked state, Save State và checklist debug protection.

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

SMRAM, System Management RAM, là vùng memory dành riêng cho SMM trên nhiều x86 PC platform. Khi CPU vào SMM, SMM Core, handler, data nội bộ và CPU Save State được đặt trong vùng này.

Nếu phải tóm gọn bằng một câu: SMRAM là vùng RAM khóa kín của firmware, nơi OS không được đọc, ghi hoặc patch sau khi platform đã lock đúng cách.

SMRAM trong mental model DRAM

DRAM
├─ Normal memory visible to OS
│  ├─ Kernel
│  ├─ Drivers
│  └─ Applications
└─ SMRAM / MMRAM
   ├─ SMM Core
   ├─ SMM handlers
   ├─ SMM data
   └─ CPU Save State area

Vì sao OS không được thấy SMRAM?

Nếu OS hoặc malware ở ring 0 đọc/ghi được SMRAM, nó có thể patch SMM handler, thay đổi policy ghi flash, hook variable service hoặc mở đường ghi vào SPI flash. Khi đó Secure Boot, NVRAM protection và nhiều cơ chế firmware security gần như mất ý nghĩa.

Vì vậy mục tiêu của firmware là:

  1. reserve đúng vùng SMRAM,
  2. copy/load SMM code vào đó,
  3. close/lock vùng này trước khi OS có cơ hội truy cập,
  4. không expose vùng này qua UEFI memory map, ACPI/E820 hoặc resource table sai.

Trạng thái SMRAM cần nhớ

Mục Giá trị Ghi chú
Open Firmware có thể access để setup Dùng trong giai đoạn load SMM Core/driver. Trạng thái này không nên kéo dài tới OS runtime.
Closed Non-SMM code không access được Trạng thái mong muốn trước khi boot OS. SMM vẫn access được khi CPU ở SMM mode.
Locked Không thể mở lại tùy tiện Lock đúng giúp ngăn DXE/OS/malware mở lại SMRAM sau khi policy đã cố định.
Save State CPU context khi vào SMM Handler có thể đọc register context, ví dụ I/O instruction hoặc CPU state lúc SMI xảy ra.

SMRAM được chuẩn bị khi nào?

01 PEI

Reserve SMRAM

Platform phát hiện vùng memory có thể bảo vệ, thường liên quan chipset policy.

02 DXE

Load SMM Core

SMM Core và SMM driver được copy/load vào vùng được bảo vệ.

03 Register

Register handler

SMM driver register handler, communication handler hoặc SW SMI handler.

04 Lock

Close/Lock

SmmReadyToLock hoặc policy tương đương làm vùng này không còn mở cho non-SMM code.

05 OS

Runtime protection

OS không thấy SMRAM như RAM bình thường, SMI vẫn có thể vào handler khi cần.

SMRAM phải được reserve, dùng để load SMM code, rồi close/lock trước khi OS chạy.

SMRAM, MMRAM và TSEG

Trong tài liệu x86 PC, bạn thường gặp SMRAM hoặc TSEG. Trong PI/UEFI, thuật ngữ tổng quát hơn là MMRAM, Management Mode RAM. Có thể hiểu nhanh:

Mục Giá trị Ghi chú
SMRAM Thuật ngữ quen thuộc trên x86 SMM Nói về vùng RAM chỉ SMM được dùng sau khi lock đúng cách.
MMRAM Thuật ngữ PI tổng quát hơn Mô tả vùng memory cho Management Mode, không chỉ gắn chặt vào cách gọi x86.
TSEG Một kiểu vùng SMRAM trên nhiều PC platform Thường nằm ở top of memory, được chipset bảo vệ khỏi OS.

Trong blog/note học firmware, dùng SMRAM/MMRAM cạnh nhau là hợp lý. Nhưng khi đọc spec hoặc source EDK II, cần để ý context đang dùng thuật ngữ nào.

Failure pattern hay gặp

Mục Giá trị Ghi chú
OS thấy vùng đáng lẽ là SMRAM Expose sai memory map Kiểm tra UEFI memory map, ACPI/E820 và platform resource reporting.
SMM Core: SMRAM not found Reserve hoặc descriptor sai Kiểm tra PEI memory init, chipset SMRAM config và MMRAM descriptor.
Handler register fail SMRAM đã lock hoặc driver dispatch muộn Kiểm tra SmmReadyToLock timing và DEPEX của SMM driver.
SMM exception khi access data Pointer sai vùng Data nội bộ nên nằm trong SMRAM, CommBuffer từ ngoài phải nằm ngoài SMRAM và được validate.
Security issue SMRAM mở quá lâu hoặc mở lại được Kiểm tra lock bit, reopen path và code chạy sau SmmReadyToLock.

Debug Diary: SMRAM not found

Một lỗi hay gặp trong debug build là log kiểu:

SMM Core: SMRAM not found
SMM Core: Failed to allocate SMRAM

Đừng chỉ nhìn SMM Core. SMM Core là consumer của vùng memory này. Nếu nó báo không thấy SMRAM, lỗi có thể nằm sớm hơn: memory init chưa reserve đúng vùng, chipset policy chưa bật, descriptor base/size sai, hoặc firmware build config không map đúng vùng SMM.

Một cách debug thực tế:

Khi gặp lỗi SMRAM not found

Checklist protection

Khi review SMRAM/MMRAM

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

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

Bài liên quan

Nguồn tham khảo public

Thấy nội dung này hữu ích?

Lưu lại hoặc chia sẻ cho người cũng đang học firmware, BIOS/UEFI và embedded systems.

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.