it-swarm-id.com

Bagaimana cara kerja mode "Desktop Aman" Windows?

Adakah yang bisa menjelaskan (atau memberikan tautan ke penjelasan sederhana) tentang apa mode Windows "Secure Desktop" dan bagaimana cara kerjanya?

Saya baru saja mendengarnya di dokumentasi KeePass ( KeePass - Masukkan Master Key di Desktop Aman ) dan ingin memahaminya dengan lebih baik.

59
snth

Jawaban singkat

Ada tiga masalah terpisah yang mengklaim nama "Secure Desktop":

  • Fungsi bawaan Windows seperti GINA dan Credential Provider Model .
  • Pemisahan aplikasi privilege vs unprivileged yang dijalankan sebagai pengguna yang sama (secara nominal mencegah peningkatan privilege), yang mungkin terkait atau tidak terkait dengan:
  • SwitchDesktop(), yang digunakan oleh KeePass dan mungkin atau mungkin tidak (saya tidak yakin) tahan terhadap DLL Injeksi.

Jawaban terperinci

Sebagai primer cepat bagaimana Windows GUI dibangun, pada dasarnya semuanya berjalan melalui fungsi yang disebut CreateWindow() (maksud saya segalanya, setiap tombol, setiap menu, semuanya) dan diberi hWnd atau Window Handle . Memodifikasi Windows ini dilakukan melalui fungsi lain, SendMessage().

Ini tangkapannya. Sebagai aplikasi mode pengguna, membuat panggilan API yang tepat saya dapat dengan mudah mengirim pesan ke Windows lain. Cukup sepele untuk membuat tombol menghilang dari bentuk orang lain. Agak sulit untuk melakukan DLL injeksi dan kaitkan loop pesan yang menerima pesan (OS mengirimkan pesan Windows ketika sesuatu terjadi pada mereka) tetapi tidak terlalu sulit. Jika saya bisa mengaitkan peristiwa itu , Saya dapat secara otomatis mengirimkan formulir "ya/tidak" Anda. Atau, saya dapat mengubah label dari ReallyDodgyVirus.exe Menjadi Explorer.exe Dan Anda tidak akan menjadi lebih bijak.

Sisipkan: Artikel yang sangat bagus tentang berbagai teknik memasukkan kode Anda ke ruang alamat dari proses yang sedang berjalan.

Sekarang, apa yang dilakukan KeePass?

Pembacaan sumber yang sangat singkat menunjukkan bahwa mereka menggunakan CreateDesktop(), SwitchDesktop() dan CloseDesktop() untuk membuat desktop kedua yang terhubung ke perangkat penglihatan fisik yang Anda gunakan. Dalam bahasa Inggris, mereka meminta kernel untuk membuatkan mereka desktop terisolasi yang objek hWnd berada di luar kisaran yang dapat ditemukan dari SendMessage() aplikasi lain.

Saya harus menunjukkan bahwa SwitchDesktop menangguhkan pembaruan UI desktop default. Saya tidak yakin apakah loop pesan juga dibekukan - Saya kira tidak karena desktop dibuat sebagai utas baru.

Dalam contoh ini, KeePass is menggambar UI, jadi eksekusi adalah bukan, seperti yang saya pahami, seperti NT AUTHORITY/SYSTEM. Sebagai gantinya, desktop baru dibuat secara terpisah dari desktop lainnya saat ini, yang melindunginya. Saya akan senang dikoreksi karenanya. Namun, lihat MSDN untuk SwitchDesktop :

Fungsi SwitchDesktop gagal jika desktop milik stasiun jendela tidak terlihat. SwitchDesktop juga gagal saat dipanggil dari proses yang dikaitkan dengan desktop yang aman seperti desktop WinLogon dan ScreenSaver. Proses yang dikaitkan dengan desktop yang diamankan mencakup proses UserInit kustom. Panggilan seperti itu biasanya gagal dengan kesalahan "akses ditolak".

Saya percaya ini berarti bahwa dialog ini (screensaver, Windows Logon) dibangun lebih dalam ke Windows sehingga mereka selalu mengeksekusi sebagai NT AUTHORITY\SYSTEM Dan proses UserInit menciptakan sub proses otentikasi yang valid pada yang diperlukan tingkat hak istimewa.

Alasan saya mengemukakan ini adalah karena saya percaya ada dua masalah: desktop yang berbeda dan pemisahan hak istimewa. Dari Mark Russinovich's diskusi tentang topik Secure Desktop :

Mekanisme Integritas Windows dan UIPI dirancang untuk membuat penghalang pelindung di sekitar aplikasi yang ditinggikan. Salah satu tujuan awalnya adalah untuk mencegah pengembang perangkat lunak mengambil jalan pintas dan meningkatkan aplikasi yang sudah ditinggikan untuk menyelesaikan tugas administratif. Aplikasi yang berjalan dengan hak pengguna standar tidak dapat mengirim input mouse atau keyboard sintetik ke aplikasi yang ditinggikan untuk membuatnya melakukan penawaran atau menyuntikkan kode ke aplikasi yang ditinggikan untuk melakukan operasi administrasi.

Seperti yang dikatakan SteveS, UAC menjalankan proses desktop terpisah sebagai NT AUTHORITY/SYSTEM. Jika Anda dapat menangkap tindakan UAC (consent.exe) Melalui proses Explorer, tampilannya seperti ini:

UAC under process Explorer

Menaikkan hak istimewa sebagai proses yang tidak saya miliki spesifiknya, tetapi inilah yang saya pikir saya mengerti: Saya percaya proses peningkatan hak istimewa di Windows API menyebabkan proses berjalan sebagai NT AUTHORITY/SYSTEM (Karena itu dapat mengeksekusi proses baru di bawah hak istimewa apa pun yang diinginkannya, dalam hal ini Administrator). Saat aplikasi meminta hak yang lebih tinggi, pertanyaan itu ditanyakan kepada Anda di desktop baru secara lokal, yang tidak satu pun aplikasi Anda bisa mendapatkan Gagang Desktop atau salah satu elemen GUI. Ketika Anda menyetujui, consent.exe Membuat proses sebagai pengguna istimewa. Dengan demikian, proses yang berjalan sebagai NT AUTHORITY\SYSTEM Adalah konsekuensi dari kebutuhan untuk membuat proses istimewa baru, bukan sebagai metode membuat desktop yang aman. Faktanya desktop berbeda dengan default adalah apa yang menambah keamanan dalam kedua kasus.

Saya percaya apa yang Mark maksudkan di atas adalah bahwa, selain desktop aman ini, ada dua hal yang terjadi:

  • Desktop administrator default Anda sebenarnya berjalan tidak terjangkau, bertentangan dengan Windows XP dan sebelumnya dan
  • Aplikasi tanpa hak dan istimewa sekarang ada di desktop terpisah (penafian: bisa saja ACL pada objek dalam memori, saya tidak yakin), memastikan bahwa kode tidak pribadi tidak dapat mengakses objek istimewa.

Windows Logon UI berbeda lagi di Vista/7.

Jelas, tidak ada metode ini yang akan melindungi Anda dari rootkit mode kernel, tetapi mereka mencegah eskalasi hak istimewa dan kompromi integritas UI dengan mengisolasi aplikasi yang diistimewakan, atau dalam kasus KeePass, dialog sensitif.

Edit

Setelah melihat lebih keras pada kode KeePass, saya melihat bagian C # yang praktis ini:

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

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

Dari sini Anda dapat melihat bahwa sebenarnya untuk meniru consent.exe, KeePass mengambil screenshot dari latar belakang, meredupkannya, dan menciptakan desktop baru dengan latar belakang desktop lama. Karena itu saya curiga desktop lama terus berjalan walaupun tidak sedang dirender. Saya pikir ini mengonfirmasi bahwa tidak ada tindakan ajaib NT AUTHORITY\SYSTEM Yang terjadi baik dengan KeePass dan consent.exe (Saya curiga consent.exe melakukan hal yang sama dengan UI, hanya kebetulan diluncurkan dalam konteks dari NT AUTHORITY\SYSTEM).

Edit 2

Ketika saya mengatakan DLL Injeksi, saya secara khusus memikirkan injeksi DLL untuk merusak UI. DLL Injeksi masih dimungkinkan pada KeePass sebagai suatu proses, saya hanya tidak yakin apakah itu dapat digunakan untuk mempengaruhi UI yang aman itu. Namun, bisa digunakan untuk mengakses memori proses dan utasnya, dengan demikian mengambil pra-enkripsi kata sandi yang dimasukkan. Sulit, tapi saya pikir mungkin. Saya akan menghargai seseorang yang memberi nasihat tentang ini jika mereka tahu.

63
user2213

"Secure Desktop" adalah desktop yang hanya dapat dijalankan oleh sistem itu sendiri. Kedengarannya agak aneh, dan mungkin tidak banyak menjelaskan.

Di Windows, desktop adalah tampilan yang memungkinkan Anda berinteraksi dengan proses. Ketika Anda masuk ke Windows (log in Prompt) Anda berada di desktop. Ketika Anda masuk, dan melihat menu mulai, Anda berada di desktop terpisah. Saat Anda mengunci PC, Anda berada di desktop lain. Ketika UAC muncul, Anda berada di desktop lain. Ada beberapa desktop berbeda di Windows.

Secure Desktop adalah desktop yang berada di luar jangkauan aksesibilitas aplikasi lain. Desktop Log In adalah desktop yang aman (dibuat oleh winlogon.exe), seperti desktop UAC. Tidak ada proses lain yang dapat berinteraksi dengan desktop, sehingga tidak ada proses lain yang dapat melakukan hal-hal seperti mengaktifkan tombol, atau membaca konten kotak teks. Inilah sebabnya mengapa UAC (secara teori) berguna.

Aplikasi pihak ketiga dapat membuat desktop yang aman untuk meminta informasi (seperti kata sandi utama) dan kemudian meneruskannya ke aplikasi yang dimaksud. Dengan cara ini tidak ada proses lain yang, secara teori, mengintip kata sandi.

Pemula yang baik pada desktop aman adalah paruh pertama artikel ini tentang cara kerja UAC pada desktop aman: http://blogs.msdn.com/b/uac/archive/2006/05/03/589561 .aspx .

16
Steve

desktop aman berjalan di bawah akun sistem lokal dan tidak ada proses lain yang dapat berinteraksi dengannya kecuali OSK, Narrator dll. Dimulai oleh winlogon.exe dan Anda dapat menonaktifkannya di registri HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Kebijakan\Sistem dengan mengubah nilai PromptOnSecureDesktop dari 1 hingga 0 jika Anda menjalankan cmd.exe di bawah akun sistem itu masih tidak akan berinteraksi dengan desktop aman dan desktop redup yang Anda lihat ketika Anda mengklik jalankan sebagai administrator di bawah UAC Prompt adalah desktop aman dan ketika Anda menekan ctrl + Alt + Del dan layar skyblue yang Anda lihat dengan beberapa opsi seperti mengunci compter ini dll juga desktop aman, windows secara default memiliki tiga desktop 1 winlogon 2 screensaver 3 userdesktop

1
Mudasir