Wednesday, September 18, 2013

CHROOT Linux

Hiện nay an toàn thông tin đang là một vấn đề được nhiều người quan tâm, đặc biệt là trong lĩnh vực công nghệ thông tin. Trong lĩnh vực quản trị hệ thống nói riêng, công việc bảo mật cho hệ thống là rất quan trọng và cần tiến hành thực thi các chính sách bảo mật được đề ra trong đó có việc bảo mật cho các dịch vụ chạy trên Server như dịch vụ Web, dịch vụ FTP, dịch vụ DNS ... là một trong số các dịch vụ có tính bảo mật không cao.

Chúng ta có thể tưởng tượng toàn bộ hệ thống của chúng ta bị gián đoạn, trường hợp xấu nhất có thể bị sụp đổ hoàn toàn chỉ vì 1 dịch vụ nào đó đang chạy trên hệ thống bị Attacker xâm nhập và tấn công. Nếu Attacker đã giống như người quản trị trực tiếp hệ thống của bạn thì anh ta có quyền thực thi một số công việc rất nguy hiểm như xóa file, stop các dịch vụ đang chạy... Điều này tất cả chúng ta đều không muốn xảy ra với hệ thống của mình.

Bài viết này tôi sẽ giới thiệu với các bạn ý nghĩa của việc sử dụng chroot (nhà tù hóa) các dịch vụ có tính bảo mật kém trên hệ thống.

Chroot trên các hệ điều hành Unix là một công đoạn thay đổi thư mục root cho các tiến trình đang chạy hiện tại và các tiến trình con của nó.

Các chương trình (gói phần mềm) trên hệ thống Unix/Linux muốn chạy được cần phải gọi đến các chương trình khác đã được cài đặt trên hệ thống gọi là các gói dependencies và các thư viện cần thiết (libraries) phục vụ cho việc chạy chương trình đó. Như vậy khi chúng ta thay đổi môi trường làm việc cho một chương trình (thay đổi đường dẫn đến một chương trình) thì chương trình đó chỉ chạy được trong môi trường đã được thay đổi và không thể gọi đến các chương trình khác hoặc các thư viện khác ở ngoài thư mục đang chứa chương trình đó. 

Môi trường đã được thay đổi cho một chương trình được gọi là một nhà tù chroot “chroot jail” hay còn được gọi là “chroot prison”.

Như vậy trước khi chúng ta “giam” một chương trình nào đó chúng ta cần tiến hành kiểm tra xem chương trình đó khi chạy cần gọi đến các chương trình nào khác (trên hệ thống Unix/Linux thường là các file cấu hình cho chương trình) và các thư viện cần thiết để chạy chương trình đó.

Nếu một Attacker tấn công vào một chương trình đã được “giam” (chroot) trên hệ thống (/chroot/<thư mục chứa chương trình>) Attacker chỉ có quyền hạn làm bất kỳ việc gì trong thư mục đã được chroot và không thể vượt ra ngoài thư mục chroot. Như vậy chương trình có thể bị Attacker tấn công nhưng hệ thống của chúng ta không bị ảnh hưởng và vẫn hoạt động bình thường. 

Chroot được giới thiệu trong quá trình phát triển phiên bản thứ 7 của hệ điều hành Unix năm 1969 và sau đó chroot được Bill Joy tích hợp vào hệ thống BSD năm 1982. 

Với những ưu điểm của chroot, các dịch vụ cần tính bảo mật cao chạy trên các máy chủ đều được chạy trong nhà tù chroot. Ví dụ dịch vụ FTP Server và DNS Server là 2 trong một số dịch vụ có tính bảo mật không cao. 

Mô hình mình họa CHROOT trên hệ thống Unix/Linux

Hình ảnh