Trong thế giới công nghệ hiện đại, bảo mật là một trong những yếu tố quan trọng nhất để bảo vệ dữ liệu và hệ thống khỏi các cuộc tấn công mạng. Một trong những công cụ mạnh mẽ giúp tăng cường bảo mật trên hệ điều hành Linux chính là SELinux (Security-Enhanced Linux). Nhưng SELinux thực sự là gì, nó hoạt động ra sao, và tại sao nó lại quan trọng đến vậy? Hãy cùng tìm hiểu chi tiết qua bài viết dưới đây, kèm theo ví dụ minh họa để dễ hiểu hơn.
1. SELinux là gì?
SELinux là một mô-đun bảo mật được tích hợp vào nhân Linux, được thiết kế để kiểm soát quyền truy cập vào các tài nguyên hệ thống dựa trên chính sách bảo mật bắt buộc (Mandatory Access Control - MAC). Nó được phát triển bởi Cơ quan An ninh Quốc gia Hoa Kỳ (NSA) với mục tiêu ban đầu là bảo vệ hệ thống khỏi các cuộc tấn công và lạm dụng tài nguyên.
1.1. Mục tiêu thiết kế ban đầu: Tránh lạm dụng tài nguyên
Một trong những vấn đề lớn nhất mà các hệ thống máy tính phải đối mặt là lạm dụng tài nguyên. Điều này có thể xảy ra khi một tiến trình hoặc người dùng không được kiểm soát chặt chẽ truy cập vào các tệp, thư mục, hoặc tài nguyên hệ thống. Ví dụ:
- Một ứng dụng bị tấn công (ví dụ: trình duyệt web bị khai thác lỗ hổng) có thể cố gắng truy cập vào tệp cấu hình hệ thống hoặc dữ liệu nhạy cảm.
- Một tiến trình độc hại có thể chiếm dụng CPU hoặc bộ nhớ, gây ảnh hưởng đến hiệu suất hệ thống.
- SELinux được thiết kế để ngăn chặn những tình huống như vậy bằng cách áp dụng các chính sách bảo mật nghiêm ngặt, đảm bảo rằng chỉ những tiến trình và người dùng được phép mới có thể truy cập vào tài nguyên hệ thống.
1.2. Kiểm soát Truy cập Tùy ý (DAC) và hạn chế của nó
Trước khi SELinux xuất hiện, hệ thống Linux chủ yếu sử dụng mô hình Kiểm soát Truy cập Tùy ý (Discretionary Access Control - DAC) để quản lý quyền truy cập. DAC hoạt động dựa trên quyền sở hữu tệp và các quyền cơ bản như đọc (read), ghi (write), thực thi (execute).
- Giả sử bạn đang phát triển một ứng dụng web và bạn có một thư mục trên máy chủ để lưu trữ các tệp tải lên từ người dùng, chẳng hạn như hình ảnh hoặc tài liệu. Thư mục này có tên là /uploads.
- Vì muốn nhanh chóng và dễ dàng trong quá trình phát triển, bạn thiết lập quyền truy cập cho thư mục /uploads là 777 (tức là drwxrwxrwx), cho phép tất cả mọi người đọc, ghi và thực thi trong thư mục này. Điều này có nghĩa là bất kỳ ai cũng có thể tải lên hoặc chỉnh sửa các tệp trong thư mục này mà không cần bất kỳ kiểm tra nào về quyền.
- Nếu ai đó phát hiện ra rằng thư mục này có quyền 777, họ có thể tải lên các tập tin độc hại hoặc thậm chí là các mã thực thi, dẫn đến việc hệ thống của bạn bị xâm nhập hoặc dữ liệu bị đánh cắp.
1.3. Kiểm soát Truy cập Bắt buộc (MAC) và cách SELinux giải quyết vấn đề
Để khắc phục hạn chế của DAC, SELinux sử dụng mô hình Kiểm soát Truy cập Bắt buộc (Mandatory Access Control - MAC). Với MAC, quyền truy cập không chỉ dựa trên quyền sở hữu tệp mà còn dựa trên chính sách bảo mật được thiết lập bởi quản trị viên hệ thống. Các chính sách này không thể bị thay đổi bởi người dùng thông thường.
- Ngữ cảnh bảo mật (Security Contexts): SELinux gán ngữ cảnh bảo mật cho mỗi tệp và tiến trình trong hệ thống. Ngữ cảnh này bao gồm thông tin về người dùng, vai trò, và loại (type) của tệp hoặc tiến trình. Điều này cho phép SELinux kiểm soát quyền truy cập dựa trên ngữ cảnh bảo mật, thay vì chỉ dựa vào quyền truy cập truyền thống của hệ thống tệp (như 777).
- Chính sách bảo mật (Security Policies): SELinux sử dụng các chính sách bảo mật để xác định quyền truy cập giữa các tiến trình và tệp. Chính sách này quy định rõ ràng tiến trình nào có thể truy cập tệp nào, và theo cách nào (đọc, ghi, thực thi).
- Kiểm soát chi tiết: Với SELinux, ngay cả khi thư mục /uploads có quyền 777, các tiến trình không có ngữ cảnh bảo mật phù hợp sẽ không thể truy cập hoặc thực thi các tệp trong thư mục này. Ví dụ, một tiến trình web server như httpd có thể được cấu hình chỉ để đọc và ghi các tệp trong /uploads mà không có quyền thực thi, nhằm ngăn chặn việc tải lên và thực thi mã độc.
- Giới hạn quyền truy cập theo tiến trình: SELinux có thể giới hạn quyền truy cập không chỉ dựa trên người dùng mà còn dựa trên tiến trình đang chạy. Điều này có nghĩa là ngay cả khi một người dùng có quyền truy cập vào một tệp, tiến trình mà họ khởi chạy có thể không có quyền tương tự nếu chính sách SELinux không cho phép.
- Nhật ký và giám sát: SELinux ghi lại các sự kiện từ chối truy cập trong nhật ký, giúp quản trị viên hệ thống phát hiện và phân tích các nỗ lực truy cập trái phép.
- Nhờ vào các cơ chế trên, SELinux cung cấp một lớp bảo mật bổ sung, giúp bảo vệ hệ thống khỏi các mối đe dọa tiềm ẩn do thiết lập quyền truy cập không chặt chẽ của DAC.
Nhờ vào các cơ chế trên, SELinux cung cấp một lớp bảo mật bổ sung, giúp bảo vệ hệ thống khỏi các mối đe dọa tiềm ẩn do thiết lập quyền truy cập không chặt chẽ của DAC.
2. Các thành phần và cách SELinux hoạt động
2.1. Các thành phần trong SELinux
2.1.1. Security Context với Subject và Target
Security Context trong SELinux là một thành phần quan trọng giúp xác định và kiểm soát quyền truy cập của các tiến trình và tệp trong hệ thống. Mỗi đối tượng (tệp, tiến trình, socket, v.v.) trong hệ thống được gán một Security Context.
Security Context format: [user]: [role]: [type]:[level]
2.1.1.1. Ví dụ: Security Context
Giả sử bạn có một hệ thống Linux với SELinux được kích hoạt, và bạn đang chạy một tiến trình helloworld, tiến trình này sẽ ghi nội dung "hello SELinux" vào file selinux.txt.
Security Context của helloworld và selinux.txt: u:object_r:system_data_file:s0
-
User: u thường là system_u (người dùng hệ thống), biểu thị các đối tượng không thuộc về người dùng cụ thể nào.
-
Role: object_r thường được dùng cho các đối tượng như file, thư mục, socket, hoặc các thiết bị hệ thống.
-
Type: system_data_file xác định rằng đây là một file dữ liệu được sử dụng bởi hệ thống.
-
Level: s0 (security level), ở mức cơ bản nhất.
-
Tiến trình helloworld được coi là một Subject vì nó thực hiện hành động ghi nội dung "hello SELinux" xuống file (sử dụng tài nguyên là file - chủ động).
-
Tệp selinux.txt là một Target vì nó là đối tượng của hành động ghi (ghi bởi helloworld).
2.1.1.1. Cách tra cứu Security Context
Loại tra cứu |
Cú pháp |
Mô tả |
Ví dụ |
Tra cứu Process (Tiến trình) |
ps -Z |
Hiển thị security context của tất cả tiến trình đang chạy. |
ps -Z |
|
ps -Z [PID] |
Hiển thị security context của một tiến trình cụ thể với ID tiến trình (PID). |
ps -Z 1234 |
|
id -Z |
Hiển thị security context của người dùng hiện tại (subject). |
id -Z |
Tra cứu User (Người dùng) |
id -Z |
Hiển thị security context của người dùng hiện tại. |
id -Z |
Tra cứu File hoặc Thư mục |
ls -Z [file_or_directory] |
Hiển thị security context của tệp hoặc thư mục. |
ls -Z /etc/passwd |
2.1.2. SELinux Security Server
Đây là thành phần chịu trách nhiệm phân tích và xử lý các yêu cầu truy cập dựa trên các chính sách bảo mật đã được định nghĩa.
2.1.3. Policy Database
SELinux Security Server tham chiếu đến Policy Database (cơ sở dữ liệu chính sách) để xác định xem yêu cầu truy cập có phù hợp với các quy tắc bảo mật hay không. Policy Database chứa các quy tắc chi tiết về quyền truy cập, xác định những gì các đối tượng có thể làm với các tài nguyên.
2.2. Cách hoạt động (YES/NO)
- Mỗi khi một tiến trình hoặc ứng dụng (đối tượng) cần truy cập vào một tài nguyên hệ thống, nó sẽ tạo ra một yêu cầu truy cập. Yêu cầu này chứa thông tin về đối tượng (ai đang yêu cầu) và mục tiêu (tài nguyên nào đang được yêu cầu).
- Dựa trên thông tin từ Policy Database, Security Server đưa ra quyết định cho phép (YES) hoặc từ chối (NO) yêu cầu truy cập. Quyết định này dựa trên việc yêu cầu có tuân thủ các chính sách bảo mật đã được định nghĩa hay không.
- Nếu quyết định là YES, đối tượng được phép truy cập vào tài nguyên mục tiêu và thực hiện hành động mong muốn.
- Nếu quyết định là NO, truy cập bị từ chối. Thông báo từ chối (AVC Access Denied) được tạo ra và ghi lại trong nhật ký hệ thống. Điều này giúp quản trị viên theo dõi các hoạt động bị từ chối và phân tích các vấn đề bảo mật tiềm ẩn.
- Mọi quyết định từ chối đều được ghi lại trong nhật ký hệ thống (audit log). Nhật ký này cung cấp thông tin chi tiết về lý do từ chối, giúp quản trị viên có cái nhìn rõ ràng về các sự cố bảo mật.
- SELinux đảm bảo rằng chỉ những hành động hợp lệ mới được thực hiện trên hệ thống, bảo vệ tài nguyên khỏi các hành vi truy cập trái phép và các cuộc tấn công tiềm ẩn.
devlinux
0 Bình luận