Sử dụng hệ thống phát hiện xâm nhập của Linux (LIDS)

Một phần của tài liệu Nghiên cứu xây dựng giải pháp phòng chống tấn công, đột nhập vào hệ thống để đảm bảo an toàn thông tin trên hệ điều hành mã nguồn mở (Trang 30)

LIDS (Linux Intrusion Detection System) là một bản vá (patch) vào nhân Linux do Xie Huagang và Philippe Biondi xây dựng. Nó thực hiện một số tính năng an toàn mà bản thân nhân Linux chƣa có. Một trong số các tính năng đó là điều khiển truy cập có tính bắt buộc, trình phát hiện quét cổng, tính năng bảo vệ hệ thống file kể cả với root và bảo vệ các tiến trình.

LIDS thực thi một dang sách điều kiển truy cập (Access Control Lists – ACLs) giúp hạn chế thậm chí cả ngƣời dùng truy cập với quyền root nếu họ có ác ý phá hoại hệ thống. Các ACL cho phép LIDS bảo vệ các file cũng nhƣ các tiến trình theo các quy tắc nhất định. Các ý tƣởng để xây dựng LIDS là nhằm:

 Bảo vệ các file quan trọng. Do các file dễ dàng đƣợc thay đổi bởi root vậy thì tại sao lại không hạn chế việc sử dụng file? LIDS thay đổi lời gọi file hệ thống trong nhân để thực hiện các tính năng an toàn. Bất cứ khi nào ngƣời dùng truy cập vào một file đều phải cần đến mọt lời gọi hệ thống cho nên chúng ta có thể kiểm tra tên file và xem file đó có đƣợc bảo vệ hay không. Nếu nó đƣợc bảo vệ, chúng ta có thể cấm các yêu cầu từ phía ngƣời dùng.

 Bảo vệ các tiến trình quan trọng. Đây là một ý tƣởng hơi khác so với ý tƣởng trên. khi một tiến trình chạy trên hệ thống nó sẽ có một điểm nhập vào hệ thống file /proc với một pid, vì thế nếu gõ “ps -axf” có thể hiển thị các tiến trình đang chạy. Có thể chúng ta đang phân vân rằng phải bảo vệ các tiến trình nhƣ thế nào. Nếu chúng ta muốn dừng một tiến trình trƣớc khi hết phải gõ lệnh “ps” để có đƣợc pid của tiến trình đó, tiếp theo dùng lệnh “kill <pid>” để dừng nó lại. Nếu chúng ta làm cho tiến trình không hiển thị bằng các lệnh dạng nhƣ “ps” thì có thể dừng đƣợc các tiến trình không? Bởi vậy, LIDS thực hiện việc bảo vệ các tiến trình bằng cách ẩn chúng đối với tất cả mọi ngƣời dùng. Một phƣơng pháp quan trọng khác để bảo vệ một số tiến trình quan trọng là làm cho chúng không thể dừng lại bởi bất cứ ai, kể cả root. LIDS có thể bảo vệ một tiến trình có tiến trình cha là init (pid=1).

 Ấn định thời điểm cho việc nạp nhân. Chúng ta muốn chèn một số module cần thiết vào nhân để sử dụng nhƣng không muốn cho phép bất cứ ai, kể cả root,

chèn các module vào nhân. Chúng ta chỉ cho phép hệ thống chèn các module vào nhân khi hệ thống đang khởi động. Sau khi ấn định xong việc nạp nhân chúng ta chúng ta có thể thực hiện việc bảo vệ các file và các tiến trình quan trọng. Chúng ta sẽ thay đổi các file cần thiết và chạy các tiến trình cần thiết khi hệ thống đang trong quá trình nạp nhân, sau khi đã ấn định thời điểm nạp nhân thì chúng ta không thể có bất cứ sự thay đổi nào.

Dựa trên các ý tƣởng trên, LIDS đã đƣợc xây dựng để cho phép ngƣời quản trị hệ thống có thể:

 Bảo vệ các tập tin, thƣ mục trên hệ thống (không phụ thuộc vào kiểu hệ thống tập tin chứa tập tin/thƣ mục đó là ext2, ext3 …) khỏi sự truy cập bất hợp pháp, kể cả ngƣời sử dụng có quyền root.

 Bảo vệ các tiến trình không bị chấm dứt (kill) bởi các tiến trình khác do bất cứ ngƣời dùng nào thực hiện.

 Kiểm soát và ngăn chặn các thao tác vào ra mức thấp do các chƣơng trình không mong muốn thực hiện.

 Phát hiện các tín hiệu quét cổng và ghi lại ở dạng nhật ký sự kiện để giúp cho ngƣời quản trị hệ thống có thể lƣờng trƣớc và đối phó với một đợt tấn công từ bên ngoài.

Hiện tại LIDS đƣợc cung cấp ở dạng bản patch cho nhân. LIDS đã phát triển qua một thời gian khá dài với ba kiểu bản patch dùng cho các phiên bản nhân tƣơng ứng. Một bản dùng cho nhân 2.2.x, một bản dùng cho nhân 2.4.x và một bản dùng cho nhân 2.6.x. Ngƣời dùng phải thực hiện biên dịch lại nhân trƣớc khi có thể sử dụng.

Qua việc nghiên cứu và tìm hiểu về hệ thống phát hiện xâm nhập trên Linux (LIDS) chúng ta thấy rằng đây là một giải pháp an toàn khá hữu hiệu, can thiệp trực tiếp ở mức nhân của hệ điều hành Linux. LIDS cung cấp khá nhiều tính năng an toàn nhƣng chỉ ở mặt thụ động. Nghĩa là nó chỉ đảm trách chức năng ngăn chặn các xâm nhập trái phép còn việc có các phản ứng thích hợp với các xâm nhập thì chƣa thực hiện hiệu quả (chỉ hỗ trợ tính năng cảnh báo cho ngƣời quan trị khi phát hiện các hành động quét cổng mà chƣa có cách đối phó thích hợp để chống lại). Tham khảo thêm các nội dung liên quan về LIDS tại http://www.lids.org

2.2.3. Sử dụng LIBSAFE để bảo vệ ngăn xếp chương trình

Các ngăn xếp của các tiến trình rất dễ bị tràn bộ đệm, việc phát hiện ra các điểm yếu này tạo ra rất nhiều cuộc tấn công về tính bảo mật trong những năm gần đây. Chúng ta có thể chỉ ra vấn đề này bằng cách đƣa vào một thƣ viện có thể tải động có tên là LIBSAFE trong kernel. Chƣơng trình LIBSAFE có các ƣu điểm đặc biệt sau:

- Libsafe không yêu cầu các giới hạn đặc biệt chẳng hạn nhƣ: Các quá trình chuyển đổi của hệ điều hành, truy cập đến mã nguồn của các chƣơng trình còn thiếu sót.

- Biên dịch lại hoặc xử lý ngoại tuyến các file nhị phân.

- Libsafe có thể thi hành trong hệ thống rộng lớn và giữ sự trong suốt đối với ngƣời dùng.

Giải pháp libsafe dựa trên một lớp phần mềm middleware vốn ngăn chặn tất cả các lời gọi hàm thực hiện đến các hàm của thƣ viện đƣợc xem là điểm yếu. Để phản ứng với các lời gọi này, libsafe tạo một phiên bản thay thế của hàm tƣơng ứng để phục vụ tác vụ ban đầu, nhƣng chứa bất kỳ vùng đệm nào bị tràn bên trong khung ngăn xếp hiện hành. Chiến lƣợc này ngăn những ngƣời tấn công ghi đè lên địa chỉ trả về và đoạt quyền điều khiển từ một chƣơng trình đang chạy.

Libsafe có thể phát hiện và ngăn chặn cuộc tấn công mà nó nhận biết, nhƣng lợi ích thật sự của nó là nó có thể ngăn các cuộc tấn công không xác định, và không làm giảm đi hiệu xuất thực thi một cách đáng kể.

Hầu hết các chuyên gia về bảo mật hệ thống đều thừa nhận việc sửa chữa các chƣơng trình yếu điểm là giải pháp tốt nhất đối với các cuộc tấn công tràn bộ đệm, nếu chúng ta biết một chƣơng trình cụ thể có một nhƣợc điểm. Lợi ích chính trong việc sử dụng libsafe và các đánh giá bảo mật khác là bảo vệ hệ thống chống lại cuộc tấn công tràn bộ đệm xảy ra sau này trên các chƣơng trình.

2.3 Giải pháp đảm bảo an toàn file

2.3.1 Quản lý file, thư mục và quyền sử dụng của người dùng

Trƣớc khi tìm hiểu các tính năng bảo mật cho hệ thống tập tin (file) và thƣ mục, chúng ta tìm hiểu sơ qua về tổ chức hệ thống tập tin và thƣ mục trong các hệ điều hành mã nguồn mở nói chung và trong hệ thống Linux nói riêng. Hệ thống tập tin của Linux và Unix đƣợc tổ chức theo một hệ thống phân bậc tƣơng tự cấu trúc của một cây phân cấp. Bậc cao nhất của hệ thống tập tin là thƣ mục gốc, đƣợc ký hiệu bằng vạch chéo “/” (root directory). Đối với các hệ điều hành Unix và Linux tất các thiết bị kết nối vào máy tính đều đƣợc nhận dạng nhƣ các tập tin, kể cả những linh kiện nhƣ ổ đĩa cứng, các phân vùng đĩa cứng và các ổ USB. Điều này có nghĩa là tất cả các tập tin và thƣ mục đều nằm dƣới thƣ mục gốc, ngay cả những tập tin biểu tƣợng cho các ổ đĩa cứng.

Ví dụ, /home/dangnam/luanvan/huongdancaidat.doc chỉ toàn bộ đƣờng dẫn đến tập tin huongdancaidat.doc có trong thƣ mục dangnam là thƣ mục phụ nằm trong thƣ mục home, ngay dƣới thƣ mục gốc (/).

Nằm dƣới thƣ mục gốc (/) có một loạt các thƣ mục quan trọng của hệ thống tập tin đƣợc công nhận ở tất cả các bản phân phối Linux khác nhau. Sau đây là danh sách các thƣ mục thông thƣờng đƣợc nhìn thấy dƣới thƣ mục gốc (/) :

/bin – chứa các ứng dụng quan trọng (binary applications),

/boot – các tập tin cấu hình cho quá trình khởi động hệ thống (boot configuration files),

/dev – chứa các tập tin là chứng nhận cho các thiết bị của hệ thống (device files) /etc – chứa các tập tin cấu hình của hệ thống, các tập tin lệnh để khởi động các dịch vụ của hệ thống...

/home – thƣ mục này chứa các thƣ mục cá nhân của những ngƣời có quyền truy cập vào hệ thống (local users' home directories),

/lib – thƣ mục này lƣu các thƣ viện chia sẻ của hệ thống (system libraries) (adsbygoogle = window.adsbygoogle || []).push({});

/lost+found – thƣ mục này đƣợc dùng để lƣu các tập tin không có thƣ mục mẹ mà đƣợc tìm thấy dƣới thƣ mục gốc (/) sau khi thực hiện lệnh kiểm tra hệ thống tập tin (fsck).

/media – thƣ mục này đƣợc dùng để tạo ra các tập tin gắn (loaded) tạm thời đƣợc hệ thống tạo ra khi một thiết bị lƣu động (removable media) đƣợc cắm vào nhƣ đĩa CDs, máy ảnh kỹ thuật số...

/mnt – thƣ mục này đƣợc dùng để gắn các hệ thống tập tin tạm thời (mounted filesystems),

/opt – thƣ mục dùng dể chứa các phần mềm ứng dụng (optional applications) đã đƣợc cài đặt thêm,

/proc – đây là một thƣ mục đặc biệt linh động để lƣu các thông tin về tình trạng của hệ thống, đặc biệt về các tiến trình (processes) đang hoạt động,

/root – đây là thƣ mục nhà của ngƣời quản trị hệ thống (root),

/sbin – thƣ mục này lƣu lại các tập tin thực thi của hệ thống (system binaries) /sys – thƣ mục này lƣu các tập tin của hệ thống (system files),

/tmp – thƣ mục này lƣu lại các tập tin đƣợc tạo ra tạm thời (temporary files),

/usr – thƣ mục này lƣu và chứa những tập tin của các ứng dụng chính đã đƣợc cài đặt cho mọi ngƣời dùng (all users),

/var – thƣ mục này lƣu lại tập tin ghi các số liệu biến đổi (variable files) nhƣ các tập tin dữ liệu và tập tin bản ghi (logs and databases).[2]

Trong hệ thống Unix\Linux có rất nhiều kiểu file khác nhau, nhƣng bao giờ cũng tồn tại một số kiểu file cần thiết cho hệ điều hành và ngƣời dùng, dƣới đây giƣới thiệu một số kiểu file cơ bản:

 File ngƣời dùng (file user): là các file tạo ra do hoạt động của ngƣời dùng khi kích hoạt các chƣơng trình ứng dụng tƣơng ứng. Ví dụ các file thuần văn bản, các file cơ sở dữ liệu hay các file bảng tính…

 File hệ thống (file system): là các file lƣu trữ thông tin của hệ thống nhƣ : cấu hình cho khởi động, tài khoản ngƣời dùng, thông tin thiết bị… thƣờng đƣợc cất trong các tệp dạng văn bản để ngƣời dùng có thể can thiệp, sửa đổi theo ý mình.

 File thực thi (file executable): là các file chứa mã lệnh hay chỉ thị cho máy tính thực hiện. File thực thi lƣu trữ dƣới dạng mã máy mà ta khó có thể tìm hiểu đƣợc ý nghĩa của nó, nhƣng tồn tại một số công cụ để hiểu đƣợc các file đó.

 File thiết bị (file device): là file mô tả thiết bị, dùng nhƣ định danh để chỉ ra các thiết bị cần thao tác. Theo quy ƣớc, file thiết bị đƣợc lƣu trữ trong thƣ mục /dev.  File liên kết (file linked): là những file chứa tham chiếu đến các file khác trong hệ

thống tệp tin của Linux. Tham chiếu này cho phép ngƣời dùng tìm nhanh file thay vì tới vị trí nguyên thủy của nó. Hơn nữa, ngƣời ta có thể gắn vào đó các thông tin phụ trợ làm cho file này có tính năng trội hơn so với tính năng nguyên thủy của nó.

Mỗi file và thƣ mục trong Unix\Linux đều có một chủ sở hữu và một nhóm sở hữu, cũng nhƣ một tập các quyền truy nhập. Do hệ thống Unix\Linux là một hệ điều hành đa ngƣời dùng và đa nhiệm, nhiều ngƣời cùng có thể sử dụng một máy và một ngƣời có thể chạy nhiều chƣơng trình khác nhau. Có hai vấn đề lớn đƣợc đặt ra đó là quyền sở hữu các dữ liệu trên đĩa và phân chia tài nguyên hệ thống nhƣ CPU, RAM…giữa các tiến trình. Để có thể hiểu rõ hơn về cơ chế bảo mật trên hệ thống file và thƣ mục của Unix\Linux phần tiếp theo sẽ trình bày về sở hữu tập tin và các quyền truy xuất tập tin.

Tất cả các tập tin và thƣ mục của Linux đề có ngƣời sở hữu và quyền truy nhập. Có thể thay đổi các tính chất này cho phép nhiều hay ít quyền truy nhập hơn đối với một tập tin hay thƣ mục. Thuộc tính truy nhập file bao gồm: Đọc (R - Read), ghi (W - Write), thực thi (X - Execute). Nhƣ vậy, một file có 9 thuộc tính truy nhập, ngoài ra có thêm thuộc tính chỉ định đó là file hay thƣ mục.

1 2 3 4 5 6 7 8 9 10

Trong đó:

1 : Kiểu file (đƣợc mô tả nhƣ trong bảng 2.1 dƣới đây) 2,3,4 : Quyền truy nhập của User

5,6,7 : Quyền truy nhập của Group 8,9,10: Quyền truy nhập của Other

Bảng 2.1: Các kiểu file trong Linux

Ký hiệu Kiểu file

- Tệp thông thƣờng

b Thiết bị với chế độ truy nhập theo khối c Thiết bị với chế độ truy nhập theo kí tự

d Thƣ mục

l Liên kết (link)

Tất cả các tập tin của hệ thống Linux đƣợc gắn các quyền truy nhập khác nhau theo từng ngƣời dùng của hệ thống, liên quan đến các phép đọc, viết và thực thi. Ngƣời quản trị hệ thống ("root") đƣợc phép truy nhập vào bất kỳ tập tin nào của hệ thống. Mỗi tập tin là sở hữu của một ngƣời nhất định và đƣợc gắn những hạn chế truy nhập tùy theo ngƣời dùng và nhóm ngƣời dùng nhất định.

Mỗi tập tin đƣợc bảo đảm an toàn bởi 3 bộ quyền truy nhập đƣợc gắn theo 3 nhóm ngƣời dùng nhƣ sau, theo thứ tự từ cao đến thấp: (adsbygoogle = window.adsbygoogle || []).push({});

 user (ngƣời dùng) những quyền truy nhập của nhóm này áp dụng cho ngƣời sở hữu tập tin.

 group (nhóm ngƣời dùng) những quyền truy nhập của nhóm này áp dụng cho nhóm đã đƣợc gắn với tập tin.

 other (những ngƣời khác) những quyền truy nhập của nhóm này áp dụng cho tất cả những ngƣời còn lại.

Mỗi bộ quyền truy nhập sẽ xác định cụ thể các quyền truy nhập thực tế đối với các tập tin và các thƣ mục nhƣ sau:

 read (đọc): quyền xem nội dung tập hay thƣ mục.

 write (ghi, viết): quyền ghi và sửa lại nội dung tập tin hay thƣ mục, quyền này cũng cho phép xoá tập tin hay thƣ mục.

 execute (thực thi): quyền này đƣợc gắn với các tập tin lệnh, nhóm ngƣời dùng đã nhận đƣợc quyền này có thể thực hiện các tập tin lệnh (quyền thực thi tệp) Các quyền trên hệ thống Linux có thể đƣợc mô tả qua các số từ 0 đến 7 trong hệ thập phân. Ví dụ một user hay group có quyền R (read), W (write), X (execute) đối với 1 file hoặc thƣ mục thì đƣợc kí hiệu là 1, ngƣợc lại là 0 nếu không có quyền tƣơng ứng (-). Bảng mô tả sau thể hiện các quyền của user hay group đối với tập tin hoặc một thƣ mục tƣơng ứng:

Bảng 2.2 Bảng mã thiết lập quyền thao tác với tệp tin trên hệ thống Linux

Mã hệ thập phân Mã hệ nhị phân Quyền hạn Ý nghĩa

1 001 --x Chỉ thực thi 2 010 -w- Chỉ ghi 3 011 -wx Chỉ ghi và thực thi 4 100 r-- Chỉ đọc 5 101 r-x Chỉ đọc và thực thi 6 110 rw- Chỉ đọc và ghi 7 111 rwx Đọc, ghi và thực thi

Qua việc nghiên cứu hệ thống tập tin và thƣ mục trên Linux, cùng với việc thiết lập các quyền truy nhập vào tập tin hay thƣ mục của từng đối tƣợng ngƣời dùng mà ta

Một phần của tài liệu Nghiên cứu xây dựng giải pháp phòng chống tấn công, đột nhập vào hệ thống để đảm bảo an toàn thông tin trên hệ điều hành mã nguồn mở (Trang 30)