kernel: vô hiệu hóa / dev / kmem và / dev / mem


8

Tôi hiểu điều đó /dev/kmem/dev/memcung cấp quyền truy cập vào bộ nhớ (tức là RAM thô) của hệ thống. Tôi cũng biết rằng điều đó /dev/kmemcó thể bị vô hiệu hóa hoàn toàn trong kernel và quyền truy cập đó có thể bị hạn chế /dev/mem.

Dường như với tôi, có quyền truy cập thô vào bộ nhớ có thể hữu ích cho các nhà phát triển và tin tặc, nhưng tại sao tôi cần truy cập vào bộ nhớ thông qua /dev/mem. AFAIK nó không thể bị vô hiệu hóa trong kernel (không giống như /dev/kmem). Có quyền truy cập vào bộ nhớ thô có thể bị lạm dụng / khai thác dường như chỉ là vấn đề rắc rối.

Có một số sử dụng thực tế cho nó? Có chương trình người dùng nào yêu cầu nó hoạt động đúng không?


1
lwn.net/Articles/147901 gợi ý rằng máy chủ X có thể sử dụng /dev/mem. Không chắc điều đó vẫn có liên quan.
Mat

Bài viết LJ này cho thấy điều tương tự: linuxjournal.com/magazine/anthony-lineberry-devmem-rootkits
slm

Bạn cũng đã tắt các mô-đun có thể tải? Bởi vì điều đó thậm chí còn nguy hiểm hơn /dev/mem. Tải một mô-đun, chạy mã trong chế độ kernel. Và trên hết, việc cứng rắn chống lại những kẻ tấn công có quyền truy cập root chỉ đáng giá nếu có những điều mà root không thể làm được, điều này có xu hướng không xảy ra trong các cài đặt thông thường.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles - Tôi đang sử dụng các mô-đun được ký mã hóa. Chỉ các mô-đun được ký với khóa riêng của tôi có thể được tải.
dùng1968963

Bổ sung cho STRICT_DEVMEM được mô tả trong man mem, quyền truy cập ghi vào / dev / mem bị vô hiệu hóa bởi các bản vá khóa hạt nhân được sử dụng để hỗ trợ "khởi động an toàn" (có thể bật khóa mà không cần khởi động an toàn). phoronix.com/...
sourcejedi

Câu trả lời:


6

Có một bản trình chiếu từ Quy mô 7x 2009 có tiêu đề: Làm suy yếu hạt nhân Linux: Tiêm mã độc hại thông qua / dev / mem có chứa 2 viên đạn này.

Ai cần cái này?

  • Máy chủ X (Thanh ghi bộ nhớ & điều khiển video)
  • DOSEmu

Từ tất cả mọi thứ tôi tìm thấy từ tìm kiếm cho đến nay, có vẻ như 2 viên đạn này là những người đi đầu cho việc sử dụng hợp pháp.

Người giới thiệu


Điều gì xảy ra nếu tôi không chạy X servertrên máy chủ của mình và do đó không cần /dev/mem. Có cách nào để vô hiệu hóa /dev/memhoàn toàn trong kernel không? Tôi chỉ có thể tìm thấy "Bộ lọc truy cập vào / dev / mem" ( CONFIG_STRICT_DEVMEM).
dùng1968963

1
Một máy chủ X hiện đại, dưới Linux, có thể sống mà không có / dev / mem, vì các card đồ họa có nút thiết bị riêng. Đó là trường hợp của i915 chẳng hạn.
jørgensen

3

Điều đáng chú ý là ngay cả khi bạn vô hiệu hóa /dev/mem/dev/kmembộ nhớ đó vẫn có thể bị hủy bỏ; hãy xem man procđể tiết lộ /proc/kcore; nó là bộ nhớ vật lý của hệ thống. Một bộ công cụ pháp y thực sự tốt rekall đã có một công cụ thực hiện điều này rồi ; nó kết xuất bộ nhớ (và /boottập tin) để có thể phân tích chúng.

Thực tế, Ubuntu mặc định vô hiệu hóa/dev/kmem :

Không có việc sử dụng hiện đại /dev/kmemnào nữa ngoài những kẻ tấn công sử dụng nó để tải kernel rootkit. CONFIG_DEVKMEMđược đặt thành "n". Mặc dù /dev/kmemnút thiết bị vẫn tồn tại trong Ubuntu 8.04 LTS cho đến Ubuntu 9.04, nhưng nó không thực sự được gắn vào bất cứ thứ gì trong kernel.

Ubuntu không vô hiệu hóa /dev/membởi vì nó cần bởi các ứng dụng .

Một số ứng dụng (Xorg) cần truy cập trực tiếp vào bộ nhớ vật lý từ không gian người dùng. Các tập tin đặc biệt /dev/memtồn tại để cung cấp quyền truy cập này. Trước đây, có thể xem và thay đổi bộ nhớ kernel từ tệp này nếu kẻ tấn công có quyền truy cập root. Các CONFIG_STRICT_DEVMEMtùy chọn hạt nhân đã được giới thiệu để chặn truy cập bộ nhớ non-thiết bị (ban đầu có tên CONFIG_NONPROMISC_DEVMEM).

Làm thế nào để vô hiệu hóa /proc/kcore?

Không kích hoạt CONFIG_PROC_KCOREkhi xây dựng kernel.

Làm thế nào để bạn vô hiệu hóa /dev/mem?

Chà, nhìn qua man memcho chúng tôi một số chi tiết về cách nó được tạo ra:

mknod -m 660 /dev/mem c 1 1
chown root:kmem /dev/mem

Bạn sẽ có thể chỉ rm -rf /dev/mem; bạn có thể vô hiệu hóa trong giai đoạn xây dựng kernel bằng cách không bật CONFIG_STRICT_DEVMEM.

Làm thế nào để vô hiệu hóa /dev/kmem?

Đảm bảo rằng CONFIG_DEVKMEMkhông được kích hoạt khi xây dựng kernel.

Làm thế nào để ngăn chặn các cuộc tấn công khởi động lạnh?

Nếu tôi đã có thể vô hiệu hóa /proc/kcore, /dev/mem, /dev/kmemvà sau đó sử dụng một phân vùng swap mã hóa hay không sử dụng hoán đổi ở tất cả? Chà, bộ nhớ của bạn có thể bị đóng băng và truy cập theo cách đó. Làm thế nào để bạn ngăn chặn cuộc tấn công này? Bạn mã hóa RAM của bạn; Làm thế nào để bạn mã hóa RAM của bạn? Bạn không thể. Xem TRESOR để biết chi tiết .


Tôi đã vô hiệu hóa /dev/kmemkernel của mình và tôi không thấy bất kỳ /proc/kcorehệ thống nào trong hệ thống của mình. Nhưng tôi có /dev/mem, và tôi muốn vô hiệu hóa nó.
Martin Vegter

Có lỗi chính tả trong câu trả lời này. /proc/memnên /dev/mem, tương tự cho /proc/kmem.
rlf

@ bbb31 đẹp một cái. Tôi nghĩ có thể có khả năng là tôi đã thiếu thứ gì đó. Nếu đó là trường hợp thì tôi muốn cho bạn một cơ hội để làm rõ.
rlf

"Làm thế nào để bạn ngăn chặn cuộc tấn công này? Bạn mã hóa RAM của mình; làm thế nào để bạn mã hóa RAM của mình? Bạn không thể." Lưu ý: Trong tương lai, bạn sẽ có thể làm điều đó (ít nhất là trên một số loại phần cứng) - sắp ra mắt! lwn.net/Articles/776688
比尔

1

Như bạn đã biết, /dev/memcung cấp quyền truy cập vào bộ nhớ vật lý của một hệ thống đang chạy. /dev/kmemcung cấp quyền truy cập vào bộ nhớ ảo kernel. Cả hai thiết bị ký tự này đều có thể bị vô hiệu hóa liên tục thông qua các tùy chọn cấu hình kernel (mã là nguồn thông tin có thẩm quyền nhất vì vậy nó được sử dụng để tham khảo). Bỏ đặt hai tùy chọn đầu tiên bên dưới sẽ vô hiệu hóa các thiết bị tương ứng.

  • CONFIG_DEVKMEM: xác định xem có /dev/kmemđược tạo khi khởi động không
  • CONFIG_DEVMEM: xác định xem có /dev/memđược tạo khi khởi động không
  • CONFIG_STRICT_DEVMEM: nếu /dev/memtồn tại, xác định xem quyền truy cập vào nó có bị hạn chế không

Tùy thuộc vào bản phân phối của bạn, cấu hình kernel hiện tại của bạn có thể được nhìn thấy bằng cách sử dụng cái gì đó như zless /proc/config.gzhoặc less /boot/config-$(uname -r).

Tôi nghĩ mục đích ban đầu /dev/memlà hỗ trợ tương tác với các thiết bị ngoại vi được ánh xạ bộ nhớ . Ý nghĩa bảo mật tiêu cực rõ ràng của việc có sẵn các thiết bị ảo này (ví dụ kẻ tấn công có thể đang bay nhanh vá bộ nhớ của một quá trình khác hoặc thậm chí là hạt nhân) đã được biết đến trong ít nhất một thập kỷ. Hạn chế quyền truy cập /dev/memđã được hỗ trợ trong kernel dòng chính từ đầu năm 2008 , /dev/kmemcũng đã được tùy chọn kể từ đó .

Một thập kỷ trước có vẻ như Xđã dựa vào /dev/mem, tôi không nghĩ điều này vẫn đúng. Để kiểm tra các tuyên bố về việc Xcần /dev/memtôi đã xóa thiết bị ảo khỏi máy tính xách tay của tôi ngày hôm qua và nó đã hoạt động có vẻ hoàn hảo kể từ đó. Trong năm 2017 dường như không có sử dụng thực tế cho các thiết bị này ngoài nghiên cứu và phát triển.

Từ góc độ bảo mật, nên loại bỏ các thiết bị này. Điều đáng chú ý là một kẻ tấn công từ xa , với các đặc quyền nâng cao, có thể đọc bộ nhớ bên ngoài không gian địa chỉ của nó. Bộ nhớ của các ứng dụng không gian người dùng khác có thể được truy cập bằng cách sử dụng /proc/<pid>/mem. Bộ nhớ kernel có thể được truy cập bằng cách sử dụng /proc/kcore.


0

Tôi đã không bao gồm /dev/memtrên hệ thống của tôi từ đầu. Tôi sử dụng Gentoo Linux, vì vậy điều này có thể không gây ngạc nhiên, vì với bản phân phối Linux này, bạn thực tế tự xây dựng mọi gói, bao gồm cả nhân Linux.

Tôi không bao giờ nhận thấy bất kỳ vấn đề nào do thiếu /dev/mem, ngay cả khi sử dụng X.org X11. Mới hôm nay tôi nhận thấy rằng một gói xuất hiệnx11-drivers/xf86-video-vesa in một thông báo nói rằng nó yêu cầu /dev/mem, như thế này:

* This driver requires /dev/mem support in your kernel
*   Device Drivers --->
*     Character devices  --->
*       [*] /dev/mem virtual device support

Vì tôi đã không cài đặt trình điều khiển VESA cho XServer một cách có chủ ý hoặc thậm chí nếu chỉ là một dự phòng, tôi thực sự không bao giờ phải sử dụng và do đó không nhận thấy điều đó - cho đến bây giờ.

Nhưng điều này chứng tỏ rằng a) X11 không cần /dev/memnữa và b) rằng một số trình điều khiển video X11 vẫn có thể làm được.

Trình điều khiển video mới hơn cho phần cứng cụ thể rất có thể sẽ hoạt động mà không có nó. Giống như X.org-X11 hiện đại (trên Gentoo, x11-base/xorg-server) thậm chí không phải là gốc tự do nữa, đó là tiến trình trông giống như ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.