it-swarm-vi.com

Chế độ "Secure Desktop" của Windows hoạt động như thế nào?

Bất cứ ai cũng có thể giải thích (hoặc cung cấp một liên kết đến một lời giải thích đơn giản) về chế độ "Secure Desktop" của Windows là gì và cách thức hoạt động của nó?

Tôi vừa nghe về nó trong tài liệu KeePass ( KeePass - Enter Master Key trên Secure Desktop ) và muốn hiểu rõ hơn về nó.

59
snth

Câu trả lời ngắn

Có ba vấn đề riêng biệt khẳng định tên của "Máy tính để bàn an toàn":

  • Các hàm dựng sẵn của Windows như GINA và Mô hình nhà cung cấp tin cậy .
  • Tách các ứng dụng đặc quyền và không có đặc quyền chạy cùng một người dùng (trên danh nghĩa ngăn chặn sự leo thang đặc quyền), có thể có hoặc không liên quan đến:
  • SwitchDesktop(), đó là những gì KeePass đang sử dụng và có thể hoặc không (tôi không chắc chắn) có khả năng chống lại DLL Tiêm.

Câu trả lời chi tiết

Là một bản tóm tắt nhanh về cách xây dựng GUI Windows, về cơ bản mọi thứ đều chạy qua một hàm gọi là CreateWindow() (Ý tôi là mọi thứ, mọi nút, mọi menu, mọi thứ) và được cung cấp hWnd hoặc Window Xử lý. Sửa đổi những Windows này được thực hiện thông qua một chức năng khác, SendMessage().

Đây là cái bẫy. Là một ứng dụng chế độ người dùng, thực hiện các cuộc gọi API phù hợp, tôi hoàn toàn có thể dễ dàng gửi tin nhắn đến các Windows khác. Nó khá tầm thường để làm cho các nút biến mất khỏi hình thức của người khác. Khó hơn một chút để thực hiện DLL tiêm và móc vòng lặp tin nhắn nhận tin nhắn (HĐH gửi tin nhắn Windows khi có sự cố xảy ra với họ) nhưng không khó hơn nhiều. Nếu tôi có thể móc các sự kiện đó , Tôi có thể tự động gửi biểu mẫu "có/không" của bạn. Hoặc, tôi có thể thay đổi nhãn từ ReallyDodgyVirus.exe Thành Explorer.exe Và bạn sẽ không phải là người khôn ngoan hơn.

Chèn: Một bài viết thực sự hay về các kỹ thuật khác nhau để nhận mã của bạn vào không gian địa chỉ của một quy trình đang chạy.

Bây giờ, KeePass đang làm gì?

Một sự tóm tắt rất ngắn gọn về nguồn cho thấy họ đang sử dụng CreateDesktop(), SwitchDesktop()CloseDesktop() để tạo một máy tính để bàn thứ hai được kết nối với thiết bị xem vật lý mà bạn đang bật. Trong tiếng Anh, họ đang yêu cầu kernel tạo cho họ một máy tính để bàn bị cô lập có các đối tượng hWnd nằm ngoài phạm vi có thể tìm thấy của bất kỳ ứng dụng nào khác SendMessage().

Tôi nên chỉ ra rằng SwitchDesktop đình chỉ việc cập nhật giao diện người dùng của máy tính để bàn mặc định. Tôi không chắc chắn nếu các vòng lặp tin nhắn cũng bị đóng băng - tôi nghi ngờ không phải vì máy tính để bàn được tạo như một luồng mới.

Trong trường hợp này, KeePass is vẽ UI, vì vậy việc thực thi là không, theo tôi hiểu, là NT AUTHORITY/SYSTEM. Thay vào đó, máy tính để bàn mới được tạo ra tách biệt với phần còn lại của máy tính để bàn hiện tại, giúp bảo vệ nó. Tôi sẽ rất vui khi được sửa chữa về điều đó. Tuy nhiên, hãy xem MSDN cho SwitchDesktop :

Chức năng SwitchDesktop không thành công nếu máy tính để bàn thuộc về một cửa sổ vô hình. SwitchDesktop cũng thất bại khi được gọi từ một quá trình được liên kết với máy tính để bàn được bảo mật như máy tính để bàn WinLogon và ScreenSaver. Các quy trình được liên kết với máy tính để bàn được bảo mật bao gồm các quy trình UserInit tùy chỉnh. Các cuộc gọi như vậy thường thất bại với lỗi "truy cập bị từ chối".

Tôi tin rằng điều này có nghĩa là các hộp thoại này (trình bảo vệ màn hình, Đăng nhập Windows) được tích hợp sâu hơn vào Windows để chúng luôn thực thi dưới dạng NT AUTHORITY\SYSTEM Và quy trình UserInit tạo ra các quy trình phụ khi xác thực hợp lệ theo yêu cầu cấp đặc quyền.

Lý do tôi đưa ra điều này là vì tôi tin rằng có hai vấn đề: máy tính để bàn khác nhau và phân tách đặc quyền. Từ Mark Russinovich's thảo luận về chủ đề Secure Desktop :

Cơ chế toàn vẹn của Windows và UIPI được thiết kế để tạo ra một hàng rào bảo vệ xung quanh các ứng dụng nâng cao. Một trong những mục tiêu ban đầu của nó là ngăn chặn các nhà phát triển phần mềm sử dụng các phím tắt và tận dụng các ứng dụng đã nâng cao để hoàn thành các nhiệm vụ quản trị. Một ứng dụng chạy với quyền người dùng tiêu chuẩn không thể gửi đầu vào chuột hoặc bàn phím tổng hợp vào một ứng dụng nâng cao để làm cho nó thực hiện đấu thầu hoặc tiêm mã vào một ứng dụng nâng cao để thực hiện các hoạt động quản trị.

Như SteveS nói, UAC chạy một quy trình máy tính để bàn riêng biệt dưới dạng NT AUTHORITY/SYSTEM. Nếu bạn có thể bắt UAC hoạt động (consent.exe) Thông qua tiến trình Explorer, có vẻ như sau:

UAC under process Explorer

Nâng cao đặc quyền như một quy trình tôi không có chi tiết cụ thể, nhưng đây là điều tôi nghĩ tôi hiểu: Tôi tin rằng quá trình leo thang đặc quyền trong API Windows gây ra một quy trình chạy dưới dạng NT AUTHORITY/SYSTEM (Do đó có thể thực thi quy trình mới theo bất kỳ đặc quyền nào mà nó muốn, trong trường hợp này là Quản trị viên). Khi một ứng dụng yêu cầu các đặc quyền cao hơn, câu hỏi đó sẽ được hỏi cho bạn trên máy tính để bàn mới cục bộ, mà không ứng dụng nào của bạn có thể nhận được Tay cầm máy tính để bàn hoặc bất kỳ phần tử GUI nào xử lý. Khi bạn đồng ý, consent.exe Tạo quy trình với tư cách là người dùng đặc quyền. Do đó, quy trình chạy dưới dạng NT AUTHORITY\SYSTEM Là kết quả của nhu cầu tạo quy trình đặc quyền mới, không phải là phương pháp tạo máy tính để bàn an toàn. Thực tế máy tính để bàn khác với mặc định là những gì thêm bảo mật trong cả hai trường hợp.

Tôi tin rằng những gì Mark có nghĩa ở trên là, ngoài những máy tính để bàn an toàn này, còn có hai điều đang xảy ra:

  • Máy tính để bàn quản trị mặc định của bạn trên thực tế đang chạy không có đặc quyền, trái với Windows XP trở về trước và
  • Các ứng dụng không có đặc quyền và đặc quyền hiện tồn tại trên các máy tính để bàn riêng biệt (từ chối trách nhiệm: có thể chỉ là ACL trên các đối tượng trong bộ nhớ, tôi không chắc chắn), đảm bảo rằng mã không có đặc quyền không thể truy cập các đối tượng đặc quyền.

Giao diện người dùng đăng nhập Windows lại khác trong Vista/7.

Rõ ràng, không có phương pháp nào trong số các phương pháp này sẽ bảo vệ bạn trước các rootkit chế độ kernel, nhưng chúng ngăn chặn sự leo thang đặc quyền và thỏa hiệp toàn vẹn UI bằng cách cách ly các ứng dụng đặc quyền hoặc trong trường hợp của KeePass, hộp thoại nhạy cảm.

Chỉnh sửa

Nhìn kỹ hơn vào mã KeePass, tôi thấy đoạn C # tiện dụng này:

Bitmap bmpBack = UIUtil.CreateScreenshot();
if(bmpBack != null) UIUtil.DimImage(bmpBack);
/* ... */

SecureThreadParams stp = new SecureThreadParams();
stp.BackgroundBitmap = bmpBack;
stp.ThreadDesktop = pNewDesktop;

Từ điều này, bạn có thể thấy rằng trên thực tế để bắt chước sự đồng ý, KeePass chụp ảnh màn hình nền, làm mờ nó và tạo màn hình mới với nền của màn hình cũ. Do đó, tôi nghi ngờ máy tính để bàn cũ tiếp tục chạy ngay cả khi nó không được hiển thị. Điều này tôi nghĩ xác nhận rằng không có hành động ma thuật NT AUTHORITY\SYSTEM Xảy ra cả với KeePass và consent.exe trong số NT AUTHORITY\SYSTEM).

Chỉnh sửa 2

Khi tôi nói DLL Tiêm, tôi đặc biệt nghĩ đến DLL tiêm để làm hỏng giao diện người dùng. DLL Tiêm vẫn có thể trên KeePass là một quá trình, tôi chỉ không chắc liệu nó có thể được sử dụng để ảnh hưởng đến giao diện người dùng an toàn đó hay không. Tuy nhiên, nó có thể được sử dụng để truy cập vào bộ nhớ của tiến trình và các luồng của nó, do đó lấy mã hóa mật khẩu đã nhập. Khó, nhưng tôi nghĩ là có thể. Tôi đánh giá cao ai đó khuyên về điều này nếu họ biết.

63
user2213

"Máy tính để bàn an toàn" là máy tính để bàn chỉ có thể được chạy bởi chính hệ thống. Nghe có vẻ hơi lạ và có lẽ không giải thích được nhiều.

Trong Windows, máy tính để bàn là chế độ xem cho phép bạn tương tác với các quy trình. Khi bạn đăng nhập vào Windows (đăng nhập Nhắc) bạn đang ở trên máy tính để bàn. Khi bạn đã đăng nhập và thấy menu bắt đầu, bạn đang ở trên một màn hình riêng biệt. Khi bạn khóa PC, bạn đang ở trên một máy tính để bàn khác. Khi UAC bật lên, bạn đang ở trên một máy tính để bàn khác. Có khá nhiều máy tính để bàn khác nhau trong Windows.

Secure Desktop là một máy tính để bàn nằm ngoài phạm vi của các ứng dụng khác. Máy tính để bàn Đăng nhập là một máy tính để bàn an toàn (được tạo bởi winlogon.exe), cũng như máy tính để bàn UAC. Không có quy trình nào khác có thể tương tác với máy tính để bàn, do đó, không có quy trình nào khác có thể thực hiện những việc như kích hoạt nút hoặc đọc nội dung của hộp văn bản. Đây là lý do tại sao UAC là (về lý thuyết) hữu ích.

Các ứng dụng của bên thứ ba có thể tạo một máy tính để bàn an toàn để yêu cầu thông tin (chẳng hạn như mật khẩu chính) và sau đó chuyển nó vào ứng dụng được đề cập. Theo cách này, theo lý thuyết, không có quy trình nào khác có thể rình mò mật khẩu.

Một khởi đầu tốt trên máy tính để bàn an toàn là nửa đầu của bài viết này về cách UAC hoạt động với máy tính để bàn an toàn: http://bloss.msdn.com/b/uac/archive/2006/05/03/589561 .aspx .

16
Steve

máy tính để bàn an toàn chạy trong tài khoản hệ thống cục bộ và không có quá trình nào khác có thể tương tác với nó ngoại trừ OSK, Người kể chuyện, v.v., nó được khởi động bởi winlogon.exe và bạn có thể vô hiệu hóa nó trong sổ đăng ký HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Chính sách\Hệ thống bằng cách thay đổi giá trị của PromptOnSecureDesktop từ 1 đến 0 nếu bạn chạy cmd.exe trong tài khoản hệ thống, nó vẫn không tương tác với máy tính để bàn an toàn và máy tính để bàn mờ mà bạn thấy khi bạn nhấp vào khi quản trị viên bên dưới UAC Prompt là máy tính để bàn an toàn và khi bạn nhấn ctrl + Alt + Del và màn hình skyblue mà bạn thấy với một vài tùy chọn như khóa máy tính này, v.v. cũng là máy tính để bàn an toàn, cửa sổ theo mặc định có ba máy tính để bàn 1 winlogon 2 bảo vệ màn hình 3 userdesktop

1
Mudasir