1. 1. Protection in Segmented Virtual Memory:
• 4 privilege levels (4 modes) of protection:
• (0): OS kernel
• (1): High-priority device drivers & OS services
• (2): Lower-priority device drivers
• (3): Applications
• Protection design principle:
TRUST THE OS AS LITTLE AS POSSIBLE
Study case: Intel Pentium using IA-32 (32-bit architecture)
John Hennessy, David Patterson, “Computer Architecture: A Quantitative Approach”, 5th edition, Morgan Kaufmann Publisher, 2012 1
BẢO VỆ TRONG VÙNG NHỚ ẢO
Phần 1. Hiện thực trong Segmented Virtual Memory
Mở đầu: Các giải pháp bảo vệ bộ nhớ ảo được thiết kế, cải tiến liên tục trong suốt lịch sử
phát triển của ngành máy tính. Vì thế, để có thể xem xét các giải pháp bảo vệ dành cho
các kiến trúc bộ nhớ ảo khác nhau, chúng ta sẽ xem xét thông qua các study case của các
kiến trúc đã có. Vì những giải pháp được đưa ra được sử dụng thông suốt (best practice)
trong lĩnh vực bán dẫn
1. Bảo vệ bộ nhớ từ trong thiết kế của kiến trúc IA-32
Kiến trúc IA-32 (viết tắt của Intel Architecture 32 bit) tăng cường mức độ bảo vệ của bộ
nhớ thông qua 4 phân mức đặc quyền:
• Mức 0: dành riêng cho nhân hệ điều hành (đặc quyền cao nhất)
• Mức 1: Dành cho driver được ưu tiên cao và dịch vụ của hệ điều hành
• Mức 2: Dành cho driver có ưu tiên thấp hơn
• Mức 3: Dành cho ứng dụng (đặc quyền thấp nhất)
Việc phân chia mức độ đặc quyền, kiến trúc IA-32 sẽ phân phối các stack riêng rẽ cho
các tầng đặc quyền khác nhau để đảm bảo không có kẽ hở bảo mật giữa các tầng
2. Các giải pháp bảo vệ khác được các kỹ sư Intel thiết kế dựa trên nguyên tắc: HẠN
CHẾ TIN TƯỞNG HỆ ĐIỀU HÀNH MỘT CÁCH THẤP NHẤT CÓ THỂ
1
2. 3 approaches in design:
•Adding Bounding Checking & Memory Mapping
•Adding Sharing & Protection
•Adding Safe Calls from User-to-OS Gates & Inheriting
Protection Level for Parameters
John Hennessy, David Patterson, “Computer Architecture: A Quantitative Approach”, 5th edition, Morgan Kaufmann Publisher, 2012
2
3 hướng tiếp cận trong quá trình thiết kế memory protection:
• Kiểm tra phạm vi truy cập bộ nhớ (Bounding Checking) & Xây dựng phương thức
ánh xạ bộ nhớ (Memory Mapping)
• Chia sẻ (Sharing) & Bảo vệ vùng nhớ được chia sẻ (Protection)
• Thêm cơ chế Safe Call để hỗ trợ việc truy cập từ vùng có đặc quyền thấp (User)
đến vùng có đặc quyền cao (OS) & Kế thừa cơ chế phân cấp đặc quyền (đã nói
trong slide trước) để bảo vệ memory parameter
2
3. a. Adding Bounds Checking and Memory Mapping
• Memory Mapping: IA-32 contain
index in a virtual memory data
structure called a descriptor table
The equivalent of a page table entry
is a segment descriptor.
• Bound Checking: 4 bit of limit field,
which establishes the upper bound
of valid offsets for this segment
John Hennessy, David Patterson, “Computer Architecture: A Quantitative Approach”, 5th edition, Morgan Kaufmann Publisher, 2012
3
a. Giải pháp 1 trong việc bảo vệ giải pháp phân đoạn bộ nhớ ảo (Segmented Virtual
Memory): Thêm vào thành phần hỗ trợ kiểm tra phạm vi truy cập bộ nhớ và phương
thức ánh xạ bộ nhớ
1. Xây dựng phương thức ánh xạ bộ nhớ (Memory Mapping): IA-32 sử dụng cấu trúc
dữ liệu bộ nhớ ảo được gọi là <descriptor tables> (tạm dịch: bảng nhận diện phân
vùng bộ nhớ). Trong trường hợp này: <descriptor tables> đóng vai trò như một bảng
<paging> truyền thống. Và tương đương với <page table entry>, IA-32 đưa ra khái
niệm <segment descriptor> (tạm dịch: phần tử nhận diện phân vùng bộ nhớ)
2. Kiểm tra phạm vi truy cập bộ nhớ (Bound Checking): IA-32 định nghĩa 4 bit limit
field trong <segment descriptor>, (Không được định nghĩa trong trong các hệ thống
phân trang), để thiết lập cận trên offset cho mỗi segment
3
4. IA-32 Segment Descriptor
(a.k.a Segment Table Entry)
1. , “IA-32 Intel® Architecture Software Developer’s Manual, Volume 3: System Programming Guide”, (2005).
2. John Hennessy, David Patterson, “Computer Architecture: A Quantitative Approach”, 5th edition, Morgan Kaufmann Publisher, 2012
Base: Defines the
starting physical
address of the
segment
D/B bit: Operands
and addressing
modes are 16 or
32 bits?
Granularity bit (G):
Indicates whether the
Limit field is to be
interpreted
Descriptor Privilege Level
(DPL): Specifies the privilege
level of the segment (value:
0-3 2 bits)
S bit: Code segment
or Data segment?
Segment Present bit (P):
In nonpaged systems, P = 0
(segment is not present in
memory).
In paged system, P=1
Limit
Defines the size of the
segment.
4KB to 4GB = 215 Mbit
Type: Distinguishes
between various kinds of
segments and indicates the
access attributes (4 bits)
4
Các thông số quan trọng của Segment descriptor:
• Base:
• Granularity bit (G): :
• Limit:
• Descriptor Privilege Level (Đã đề cập trong phần “bảo vệ bộ nhớ từ giai đoạn thiết
kế”): 2 bit biểu thị các cấp độ đặc quyền từ 00 (dec 0) đến 11 (dec 3)
• S bit: Code segment or Data segment?
• Segment Present bit (P): In nonpaged systems, P = 0 (segment is not present in
memory). In paged system, P=1
• Type: Distinguishes between various kinds of segments and indicates the access
attributes (4 bits)
Tham khảo tại:
1. Stallings, William, “Computer Organization and Architecture”, 7th edition, Prentice
Hall International, 2016
2. John Hennessy, David Patterson, “Computer Architecture: A Quantitative
Approach”, 5th edition, Morgan Kaufmann Publisher, 2012
3. , “IA-32 Intel® Architecture Software Developer’s Manual, Volume 3: System
Programming Guide”, (2005). URL: https://www.scs.stanford.edu/05au-
cs240c/lab/ia32/IA32-3.pdf
4. , “INTEL 80386 PROGRAMMER'S REFERENCE MANUAL 1986”, (1986),
URL: https://css.csail.mit.edu/6.858/2013/readings/i386.pdf
4
5. b. Adding Sharing and Protection
Protected sharing: Divide the address space into 2 spaces
• Global address space: shared by all processes. Contain all
descriptors for a shared segment
• Local address space: unique to each process. Contain all
descriptors for a private segment
John Hennessy, David Patterson, “Computer Architecture: A Quantitative Approach”, 5th edition, Morgan Kaufmann Publisher, 2012
5
b. Giải pháp 2:
IA-32 chia địa chỉ thành 2 vùng:
• Global address space: được chia sẻ bởi tất cả process. Chứa tất cả các <descriptor>
trỏ về shared segment
• Local address space: độc nhất cho riêng process. Chứa tất cả các <descriptor> trỏ về
private segment
5
6. c. Adding Safe Calls from User-to-OS Gates and
Inheriting Protection Level for Parameters
• Why? Prevent user from randomly jumping anywhere into a protected
or more privileged code segment
• How? Special segment descriptor – call gate (full physical addresses of
an object in memory)
John Hennessy, David Patterson, “Computer Architecture: A Quantitative Approach”, 5th edition, Morgan Kaufmann Publisher, 2012
6
c. Giải pháp 3: Thêm cơ chế Safe Call để hỗ trợ việc truy cập từ vùng có đặc quyền
thấp (User) đến vùng có đặc quyền cao (OS) & Kế thừa cơ chế phân cấp đặc quyền
để bảo vệ memory parameter
Thêm cơ chế Safe Call để hỗ trợ việc truy cập từ vùng có đặc quyền thấp (User) đến
vùng có đặc quyền cao (OS):
• Để ngăn chặn các vùng có đặc quyền thấp ngẫu nhiên nhảy đến các phân vùng được
bảo vệ hoặc có phân quyền cao hơn.
IA-32 hiện thực cơ chế safe-call như thế nào?
• IA-32 định nghĩa <segment descriptor> đặc biệt: call gate – để kết nối giữa user với
OS
Các giá trị trong 1 segment
• Word count controls the number of words copied from the current stack to the new
stack on a call gate.
• Destination selector and destination offset, select the descriptor of the destination of
the call and the
offset into it,
6
7. Accessing Call
gate at various
Privilege levels
“IA-32 Intel® Architecture Software Developer’s Manual, Volume 3: System Programming Guide”, (2005). URL: https://www.scs.stanford.edu/05au-
cs240c/lab/ia32/IA32-3.pdf
7
Ví dụ về call gate kết nối <code segment A> có phân mức đặc quyền 3 (thấp nhất) đến
<code segment B> có phân mức đặc quyền 0 (cao nhất) thông qua <call gate A>
7
8. Protection checking
categories for segmented virtual memory:
•Limit checks.
•Type checks.
•Privilege level checks.
8
“IA-32 Intel® Architecture Software Developer’s Manual, Volume 3: System Programming Guide”, (2005). URL: https://www.scs.stanford.edu/05au-
cs240c/lab/ia32/IA32-3.pdf
Từ các giải pháp thiết kế protection như trên, IA-32 thực hiện quá trình kiểm tra bộ nhớ
ảo trong kiến trúc IA-32 với các công việc như sau:
• Limit checks: kiểm tra phạm vi truy cập.
• Type checks: kiểm tra kiểu của segment (là data segment hay code segment)
• Privilege level checks: kiểm tra các tương tác dữ liệu giữa các segment có phân mức
đặc quyền khác nhau
8
9. 2. Protection in Paged Virtual Memory:
• Multilevel hierarchical page-table design
• 64-bit virtual address of the AMD64
architecture is mapped onto 52-bit physical
addresses
• The Opteron, uses:
• 48-bit virtual addresses
• 40-bit physical addresses
Study case: AMD Opteron 64-bit
9
Phần 2. Hiện thực trong Paged Virtual Memory
Cơ chế page-translation đã được sử dụng từ các kiến trúc 32-bit điển hình là IA-32 và
đến kiến trúc 64-bit, các cơ chế này được kế thừa lại.
Tuy nhiên để không bị bùng nổ kích thước của các page-table (264) như cách thiết kế từ
kiến trúc 32-bit, Kiến trúc AMD64 sử dụng thiết kế page table kế thừa đa tầng
<Multilevel hierarchical page-table> (Rõ hơn trong slide kế tiếp)
Trong thiết kế chung của các kiến trúc AMD64 và các kiến trúc kế thừa: địa chỉ ảo 64-bit
sẽ được ánh xạ bởi địa chỉ vật lý 52-bit.
Tuy nhiên trên thực tế, ở đây ví dụ bởi kiến trúc cho CPU AMD Opteron thì địa chỉ ảo
64-bit sẽ được biểu diễn ở dạng chính tắc (canonical form) trong đó 16 bits dấu và 48 bits
địa chỉ ảo được ánh xạ bởi địa chỉ vật lý 40-bit
Có 2 mô hình <page translation> được sử dụng trong AMD64,
1. Mô hình <legacy-mode page translation>: cơ chế paging kế thừa từ kiến trúc IA-32
(32 bit)
2. Mô hình <long-mode page translation>: (Minh họa bởi hình trong slide sau)
Dẫn chứng có thể thấy rõ ràng nhất là 2 thư mục Program Files và Program Files (x86)
9
10. 16 bits 9 bits 9 bits 9 bits 9 bits 12 bits
1. John Hennessy, David Patterson, “Computer Architecture: A Quantitative Approach”, 5th edition, Morgan Kaufmann Publisher, 2012
2. “AMD64 Architecture Programmer’s Manual, Volume 2: System Programming”, AMD, Revision 3.37, Date: Mar 2021
The four-level translation of the 48-bit virtual addresses of the Opteron.
3 potential places to
check protection
restrictions
10
Mô hình Long-Mode Page Translation
Để không bùng nổ kích thức của 1 page table (64 bit, a.k.a 264 phần tử), AMD64 sử dụng
thiết kế page table kế thừa đa tầng (multi level hierarchy) như vậy thì số table lúc này
sẽ phụ thuộc vào kích thước của địa chỉ ô nhớ (address size). Cụ thể:
• 4 Kbyte 4 page table {Page-map L4; Page-dir pointer, Page-dir, Page-table}
• 2 Mbyte 3 page table {Page-map L4; Page-dir pointer, Page-dir}
• 1 Gbyte 2 page table {Page-map L4; Page-dir pointer}
Cấu trúc phần tử trong các page table đều có các cờ kiểm tra, tiêu biểu có thể kể đến:
• User/Supervisor (U/S) bit: Kiểm tra phân quyền
• Read/Write (R/W): Kiểm tra read-only hay không?
• No-Execute (NX): Các tập lệnh có bị đánh dấu không thực thi được hay không?
Vì thế trong các page table đều có thể thiết lập các phương thức kiểm tra, và như trên
hình thể hiện 3 nơi tiềm năng về mặt lý thuyết để có thể thực hiện các phép kiểm tra
page-protection
Tham khảo tại:
1.John Hennessy, David Patterson, “Computer Architecture: A Quantitative Approach”,
5th edition, Morgan Kaufmann Publisher, 2012
2.“AMD64 Architecture Programmer’s Manual, Volume 2: System Programming”,
AMD, Revision 3.37, Date: Mar 2021, URL:
https://www.amd.com/system/files/TechDocs/24593.pdf
10
11. Protecting paging VM principle
• The page tables are protected from being written by user
programs (non-privileged).
• Sharing of memory between processes is accomplished by
having a page table entry in each address space point to the
same physical memory page
11
1. John Hennessy, David Patterson, “Computer Architecture: A Quantitative Approach”, 5th edition, Morgan Kaufmann Publisher, 2012
2. “AMD64 Architecture Programmer’s Manual, Volume 2: System Programming”, AMD, Revision 3.37, Date: Mar 2021, URL:
https://www.amd.com/system/files/TechDocs/24593.pdf
Với các đặc tính của phương pháp thiết kế page table kế thừa đa tầng, AMD64 được
thiết lập các nguyên tắc nhất định:
• Do có 2 phân quyền chính supervisor và user (không có đặc quyền), vì thế các
pagetable phải được bảo vệ khỏi việc ghi từ chương trình không được phân quyền
(user)
• Phương thức chia sẻ dữ liệu được thực hiện thông qua các phần tử của page-table có
thể trỏ về cùng một địa chỉ vùng nhớ chính
Một số thông tin thêm: The Opteron hiện thực 4 cấu trúc 4 tầng pagetable để nhằm rút
ngắn chi phí thời gian khi truy cập. Trong đó 2 bảng dùng cho instruction accesses và 2
bảng dùng cho data accesses
11
12. AMD64 Page-protection
•Supervisor pages
•Read-only pages
•Instruction fetch restrictions
•Memory protection keys
•Shadow stack pages
12
AMD64 Architecture Programmer’s Manual, Volume 2: System Programming”, AMD, Revision 3.37, Date: Mar 2021
Các cơ chế page-protection được hiện thực trong kiến trúc AMD64:
1. Supervisor pages: Phương thức bảo vệ ngăn chặn các code phi đặc quyền (user - non-
privileged) truy cập vào data và code của các phân vùng đặc quyền (supervisor)
2. Read-only pages: Ngăn chặn các chương trình viết vào các không gian read-only
3. Instruction fetch restrictions: Chặn bộ xử lý (processor) lấy các lệnh từ các page chứa
dữ liệu không thực thi (non-executable data) hoặc không được phép truy cập do
không có quyền hợp lệ
4. Memory protection keys: Phương thức cho phép các ứng dụng truy cập các data có
phân quyền cao thông qua các cơ chế truy cập được bảo vệ mà kiến trúc cho phép
5. Shadow stack pages: Đọc thêm phần Shadow stack trong tài liệu tham khảo
Tham khảo tại:
1., “AMD64 Architecture Programmer’s Manual, Volume 2: System Programming”,
AMD, Revision 3.37, Date: Mar 2021, URL:
https://www.amd.com/system/files/TechDocs/24593.pdf
12
13. 3. Protection in modern
architecture:
Study case: modern x86
and AMD64 Architecture
Stallings, William, “Computer Organization and Architecture”, 7th edition, Prentice Hall International, 2016 13
Phần 3. Hiện thực trong các kiến trúc x86 & AMD64 hiện đại dùng kiến trúc hybrid
Các kiến trúc hiện đại đa phần đều là dạng kết hợp 2 phương thức thiết kế bộ nhớ ảo,
điển hình là x86 và AMD64 (a.k.a x86_64)
Quá trình kiểm tra trong segment-protection và page-protection sẽ được thực hiện tuần tự
bởi bộ xử lý trung tâm. Trong đó:
• Sẽ thực hiện trước các phương pháp segment-protection, kế tiếp sẽ đến page-
protection
• Nếu phát hiện ra các xung đột trong quá trình segment-protection, sẽ không thực
hiện page-protection
• Khi có xung đột tại segment-protection hoặc page-protection, sẽ tạo ra exception và
không thực hiện truy cập bộ nhớ
13
14. Architecture manual list
• “AMD64 Architecture Programmer’s Manual, Volume 2: System Programming”, AMD, Revision 3.37, Date:
Mar 2021, URL: https://www.amd.com/system/files/TechDocs/24593.pdf
• “Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A: System Programing Guide,
Part 1”, Intel, (2016), URL:
https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-
software-developer-vol-3a-part-1-manual.pdf
• “The IA-32 Architecture”, Guide to Assembly Language Programming in Linux, 10.1007/b136895(Chapter 4),
61–78. (2005). doi:10.1007/0-387-26171-0_4
• “IA-32 Intel® Architecture Software Developer’s Manual, Volume 3: System Programming Guide”, (2005).
URL: https://www.scs.stanford.edu/05au-cs240c/lab/ia32/IA32-3.pdf
• “INTEL 80386 PROGRAMMER'S REFERENCE MANUAL 1986”, (1986), URL:
https://css.csail.mit.edu/6.858/2013/readings/i386.pdf
14
14