Protection Rings trong bảo mật máy tính


Trong khoa học máy tính, Hierarchical Protection Domains (hay Protection Rings) là cơ chế nhằm bảo vệ dữ liệu và chức năng của một chương trình tránh khỏi nguy cơ lỗi hoặc bị truy cập trái phép bởi các chương trình khác.

Một Protection Ring là một mức độ (mode/level/layer) truy cập tài nguyên hệ thống. Số lượng Ring tùy thuộc vào kiến trúc CPU và hệ điều hành chạy trên kiến trúc đó có khả năng hỗ trợ bao nhiêu Ring.

Các Ring được sắp xếp có thứ bậc, từ mức có nhiều đặc quyền nhất (dành cho trusted-software, thường được đánh số 0) đến mức có ít đặc quyền nhất (dành cho untrusted-software, được đánh số cao nhất).

Dưới đây là hình minh họa các Ring trong kiến trúc CPU x86

Các chương trình hoạt động tại Ring 0 có đặc quyền cao nhất, có thể tương tác trực tiếp với phần cứng như CPU, Memory…

Để cho phép các ứng dụng nằm ở Ring có trọng số cao truy cập các tài nguyên được quản lý bởi các chương trình nằm ở Ring có trọng số thấp hơn, người ta xây dựng các cổng (gate) đặc biệt. Ví dụ như system call (lời gọi hàm hệ thống) giữa các Ring.

Việc quy định chặt chẽ chương trình nào nằm tại Ring nào cộng với việc xây dựng các cổng phù hợp giữa các Ring sẽ đảm bảo tính ổn định của hệ thống, đồng thời ngăn chặn các chương trình nằm trong Ring cao sử dụng trái phép (do vô tình hoặc cố ý) các tài nguyên dành cho các chương trình khác nằm tại Ring thấp hơn

Ví dụ, một spyware đang chạy với tư cách là ứng dụng cho người dùng thông thường (thuộc untrusted software) nằm tại Ring 3 có ý định bật webcam mà không được sự đồng ý của người dùng. Hành vi này sẽ bị hệ thống ngăn chặn vì muốn truy cập tới phần cứng là thiết bị webcam nó phải sử dụng một hàm trong phần mềm điều khiển thiết bị (device driver) của webcam (thuộc trusted software) nằm tại Ring 1.

Hầu hết các hệ điều hành chỉ sử dụng 2 Ring ngay cả khi phần cứng mà hệ điều hành chạy trên đó hỗ trợ nhiều hơn 2 Ring. Ví dụ, Windows chỉ sử dụng 2 mức là Ring 0 (tương ứng với Kernel Mode) và Ring 3 (tương ứng với User Mode).

Tiện đây, tôi xin nói thêm về Kernel Mode và User Mode

  • Kernel Mode là 1 chế động hoạt động của CPU.

Nếu 1 chương trình hoạt động trong Kernel Mode thì nó sẽ có thể nắm quyền sử dụng mọi tài nguyên hệ thống như: sử dụng được tất cả các chỉ lệnh CPU, truy cập tới mọi vùng nhớ trong RAM…

Khi CPU đặt trong Kernel Mode, bạn phải chắc rằng CPU đang thực thi các đoạn mã chương trình của các trusted software. VD: Kernel, Device Driver, System Programs… là các chương trình đáng tin cậy.

VD: Khi bạn cài đặt driver cho một phần cứng mới mà driver này chưa được xác thực bằng chữ kỹ số (digital signature) bởi Windows thì hệ thống sẽ đưa ra một thông điệp cảnh báo, trong tình huống này bạn sẽ luôn chọn Contiune Anyway cho thông báo cài đặt driver này chứ!?

Hãy cẩn thận vì rất có thể đó là malware giả mạo driver, điều tồi tệ gì sẽ xảy ra nếu con malware này được chạy trong Kernel Mode chắc ai cũng hình dung được.

  • User Mode cũng là 1 chế độ hoạt động khác của CPU.

Các chương trình nằm trong User Mode thì ít có đặc quyền truy cập tới tài nguyên hệ thống như: số lượng các chỉ lệnh CPU được sử dụng bị giới hạn, bị cấm truy cập tới vùng nhớ được cấp phát cho Kernel và các chương trình khác…

Tất cả các phần mềm ứng dụng lớp người dùng (thuộc untrusted software) khi mới được khởi chạy đều được đưa vào vùng User Mode.

Vậy nếu giả sử ứng dụng web browser muốn mở 1 kết nối mạng – là 1 tài nguyên hệ thống nằm trong Kernel Mode thì phải làm sao?

Giải pháp ở đây là cơ chế Mode Switch. Tức là chỉ khi nào ứng dụng yêu cầu 1 dịch vụ được cung cấp bởi Kernel.

Với ví dụ trên thì web browser sẽ triệu gọi một system call tương ứng để tạo một socket. Khi đó, hệ điều hành sẽ chuyển process của ứng dụng này vào Kernel Mode. Sau khi kernel đáp ứng xong yêu cầu của ứng dụng, hệ thống lại đưa ứng dụng đó trở về User Mode.

Với việc phân chia đặc quyền chặt chẽ giữa Kernel Mode và User Mode sẽ giúp bảo vệ dữ liệu của hệ điều hành khỏi bị lỗi, dẫn tới hệ thống bị treo. Đồng thời, tránh việc hệ thống bị truy cập, chỉnh sửa trái phép dẫn tới hệ thống bị tấn công 1 cách vô ý (do phần mềm chứa bug) hoặc có chủ đích (do nhiễm malware) bởi các ứng dụng người dùng.

–manthang.

Leave a comment