2015-02-15 13 views
9

Các 1-bit exploit mới của phiên bản "tất cả" cửa sổ sử dụng một lỗi trong mã hạt nhân xử lý thanh cuộn. Điều đó khiến tôi suy nghĩ. Tại sao các cửa sổ xử lý các thanh cuộn trong nhân, chứ không phải là chế độ người dùng? Lý do lịch sử? Có bất kỳ hệ điều hành khác làm điều này?Tại sao cửa sổ xử lý thanh cuộn trong hạt nhân?

+1

Phía máy chủ của USER32 và GDI32 được sử dụng để chạy ở chế độ người dùng. Nó được lưu trữ trong quá trình hệ thống con máy chủ khách, CSRSS.EXE, chạy dưới dạng tài khoản SYSTEM. NT 4 chuyển chúng sang chế độ hạt nhân (win32k.sys) vì lý do hiệu suất. – eryksun

+1

IIRC, Microsoft cũng tuyên bố nó đơn giản hóa cách chuyển đổi từ chế độ người dùng sang chế độ hạt nhân xảy ra trong quá trình hoạt động GUI. Rõ ràng là hệ thống con đồ họa trước NT 4 đã kết nối đặc biệt chế độ người dùng và chế độ hạt nhân chủ đề và có một số cơ chế tùy chỉnh cho việc chuyển đổi từ một đến khác. Rõ ràng rất khó để chứng minh các thuộc tính bảo mật cho quá trình chuyển đổi này và việc loại bỏ nó đã làm cho quá trình chứng nhận dễ dàng hơn. (Tôi không chắc họ sẽ làm chứng nhận gì vào thời điểm đó; có thể là Sách Cam.) –

Trả lời

6

TL; DR: Microsoft đã hy sinh bảo mật cho hiệu suất.


Thanh cuộn hơi đặc biệt trên Windows. Hầu hết các thanh cuộn không phải là cửa sổ thực nhưng được triển khai dưới dạng decorations trên cửa sổ "cha mẹ". Điều này dẫn chúng ta đến một câu hỏi tổng quát hơn; tại sao các cửa sổ được cài đặt trong chế độ lõi trên Windows?

Cho phép xem xét các lựa chọn thay thế:

  1. mỗi quá trình trong chế độ người dùng.
  2. Quy trình "chính" đơn trong chế độ người dùng.

Phương án 1 có lợi thế lớn khi giao dịch với cửa sổ của riêng bạn; không có chuyển đổi ngữ cảnh/chuyển đổi hạt nhân. Vấn đề là tất nhiên các cửa sổ từ các quá trình khác nhau sống trên cùng một màn hình và ai đó phải chịu trách nhiệm quyết định cửa sổ nào đang hoạt động và điều phối các thay đổi khi người dùng chuyển sang cửa sổ khác. Người này sẽ phải là một quá trình hệ thống đặc biệt hoặc hạt nhân bởi vì thông tin này không thể là một quá trình, nó phải được lưu trữ ở đâu đó toàn cầu. Thiết kế thông tin kép này sẽ phức tạp vì thông tin trên mỗi quá trình không thể được người quản lý cửa sổ toàn cầu tin cậy. Tôi chắc chắn có rất nhiều nhược điểm khác đối với thiết kế lý thuyết này nhưng tôi sẽ không dành nhiều thời gian hơn cho nó ở đây.

Windows NT 3 thực hiện một biến thể của thay thế 2. Người quản lý cửa sổ đã được chuyển sang chế độ hạt nhân trong NT 4 chủ yếu cho performance reasons:

... Manager Window (USER) và Graphics Device Interface (GDI) có được di chuyển từ hệ thống con Win32 sang Windows NT Executive. Win32 trình điều khiển thiết bị chế độ người dùng, bao gồm màn hình đồ họa và trình điều khiển máy in , cũng đã được chuyển đến Executive. Những thay đổi này là được thiết kế để đơn giản hóa việc xử lý đồ họa, giảm yêu cầu bộ nhớ, và cải thiện hiệu suất.

... và tiếp tục xuống trong cùng một tài liệu có những chi tiết kỹ thuật và biện minh:

Khi Windows NT được thiết kế đầu tiên, môi trường hệ thống phụ Win32 được thiết kế như một peer đối với môi trường hệ thống con hỗ trợ ứng dụng trong MS-DOS, POSIX và OS/2. Tuy nhiên, các ứng dụng và các hệ thống con khác cần thiết để sử dụng đồ họa, cửa sổ và nhắn tin các chức năng trong hệ thống con Win32. Để tránh sao chép các hàm này, hệ thống con Win32 được sử dụng làm máy chủ cho các chức năng đồ họa cho tất cả các hệ thống phụ.

Thiết kế này hoạt động đáng kính cho Windows NT 3.5 và 3.51, nhưng nó đã đánh giá thấp khối lượng và tần suất của cuộc gọi đồ họa.Có các chức năng cơ bản như điều khiển nhắn tin và cửa sổ trong quy trình riêng biệt tạo ra chi phí bộ nhớ đáng kể từ máy khách/máy chủ truyền thông báo, thu thập dữ liệu và quản lý nhiều chuỗi. Nó cũng yêu cầu nhiều công tắc ngữ cảnh, tiêu thụ chu kỳ CPU là cũng như bộ nhớ. Khối lượng cuộc gọi hỗ trợ đồ họa trên giây làm giảm hiệu suất của hệ thống. Rõ ràng là một thiết kế lại của khía cạnh này trong Windows NT 4.0 có thể đòi lại các tài nguyên này bị lãng phí tài nguyên và cải thiện hiệu suất.

Các hệ thống con khác không liên quan đến những ngày này nhưng vẫn tồn tại các vấn đề về hiệu suất.

Nếu chúng ta xem xét một hàm đơn giản như IsWindowVisible thì không có nhiều chi phí khi trình quản lý cửa sổ ở chế độ hạt nhân: Hàm sẽ thực hiện một vài hướng dẫn trong chế độ người dùng và sau đó chuyển CPU thành vòng 0 toàn bộ hoạt động (xác nhận xử lý cửa sổ được truyền vào và nếu hợp lệ, truy lục thuộc tính hiển thị) được thực hiện trong chế độ lõi. Sau đó nó chuyển về chế độ người dùng và đó là về nó.

Nếu trình quản lý cửa sổ sống trong quy trình khác thì bạn sẽ ít nhất tăng gấp đôi số lần chuyển đổi hạt nhân và bằng cách nào đó bạn phải chuyển đầu vào và đầu ra của hàm đến và từ trình quản lý cửa sổ. thực thi trong khi bạn đợi kết quả. NT 3 đã làm điều này bằng cách sử dụng kết hợp bộ nhớ dùng chung, LPC và tính năng tối nghĩa được gọi là chuỗi được ghép nối.

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