Share via


Strategi Keamanan WPF - Keamanan Platform

Sementara Windows Presentation Foundation (WPF) menyediakan berbagai layanan keamanan, ia juga memanfaatkan fitur keamanan platform yang mendasar, yang mencakup sistem operasi, CLR, dan Internet Explorer. Lapisan-lapisan ini digabungkan untuk memberikan WPF model keamanan yang kuat dan mendalam pertahanan yang mencoba menghindari satu titik kegagalan, seperti yang ditunjukkan pada gambar berikut:

Diagram that shows the WPF security model.

Sisa topik ini membahas fitur di masing-masing lapisan ini yang berkaitan dengan WPF secara khusus.

Keamanan Sistem Operasi

Inti Windows menyediakan beberapa fitur keamanan yang membentuk fondasi keamanan untuk semua aplikasi Windows, termasuk yang dibangun dengan WPF. Topik ini membahas luasnya fitur keamanan ini yang penting bagi WPF, serta bagaimana WPF terintegrasi dengan mereka untuk memberikan pertahanan lebih mendalam.

Microsoft Windows XP Service Pack 2 (SP2)

Selain tinjauan umum dan penguatan Windows, ada tiga fitur utama dari Windows XP SP2 yang akan kita bahas dalam topik ini:

  • Kompilasi /GS

  • Microsoft Windows Update.

Kompilasi /GS

Windows XP SP2 memberikan perlindungan dengan mengkompilasi ulang banyak pustaka sistem inti, termasuk semua dependensi WPF seperti CLR, untuk membantu mengurangi overrun buffer. Ini dicapai dengan menggunakan parameter /GS dengan pengkompilasi baris perintah C/C++. Meskipun overrun buffer harus dihindari secara eksplisit, kompilasi /GS memberikan contoh pertahanan mendalam terhadap potensi kerentanan yang secara tidak sengaja atau berbahaya yang dibuat oleh mereka.

Secara historis, overruns buffer telah menjadi penyebab banyak eksploitasi keamanan berdampak tinggi. Overrun buffer terjadi ketika penyerang memanfaatkan kerentanan kode yang memungkinkan injeksi kode berbahaya yang menulis melewati batas buffer. Ini kemudian memungkinkan penyerang untuk membajak proses di mana kode dijalankan dengan menimpa alamat pengembalian fungsi untuk menyebabkan eksekusi kode penyerang. Hasilnya adalah kode berbahaya yang menjalankan kode arbitrer dengan hak istimewa yang sama dengan proses yang dibajak.

Pada tingkat tinggi, bendera kompilator -GS melindungi dari beberapa buffer potensial overruns dengan menyuntikkan cookie keamanan khusus untuk melindungi alamat pengembalian fungsi yang memiliki buffer string lokal. Setelah fungsi kembali, cookie keamanan dibandingkan dengan nilai sebelumnya. Jika nilai telah berubah, overrun buffer mungkin telah terjadi dan proses dihentikan dengan kondisi kesalahan. Menghentikan proses mencegah eksekusi kode yang berpotensi berbahaya. Lihat -GS (Pemeriksaan Keamanan Buffer) untuk detail selengkapnya.

WPF dikompilasi dengan bendera /GS untuk menambahkan lapisan pertahanan lain ke aplikasi WPF.

Windows Vista

Pengguna WPF di Windows Vista akan mendapat manfaat dari peningkatan keamanan tambahan sistem operasi, termasuk "Akses Pengguna Hak Istimewa Terkecil", pemeriksaan integritas kode, dan isolasi hak istimewa.

Kontrol Akun Pengguna (UAC)

Saat ini, pengguna Windows cenderung berjalan dengan hak istimewa administrator karena banyak aplikasi mengharuskan mereka untuk penginstalan atau eksekusi, atau keduanya. Mampu menulis pengaturan aplikasi default ke Registri adalah salah satu contohnya.

Berjalan dengan hak istimewa administrator benar-benar berarti bahwa aplikasi dijalankan dari proses yang diberikan hak istimewa administrator. Dampak keamanan dari ini adalah bahwa setiap kode berbahaya yang membajak proses yang berjalan dengan hak istimewa administrator akan secara otomatis mewarisi hak istimewa tersebut, termasuk akses ke sumber daya sistem penting.

Salah satu cara untuk melindungi dari ancaman keamanan ini adalah dengan menjalankan aplikasi dengan jumlah hak istimewa paling sedikit yang diperlukan. Ini dikenal sebagai prinsip hak istimewa paling sedikit, dan merupakan fitur inti dari sistem operasi Windows. Fitur ini disebut Kontrol Akun Pengguna (UAC), dan digunakan oleh Windows UAC dengan dua cara utama:

  • Untuk menjalankan sebagian besar aplikasi dengan hak istimewa UAC secara default, bahkan jika pengguna adalah administrator; hanya aplikasi yang membutuhkan hak istimewa administrator yang akan berjalan dengan hak istimewa administrator. Untuk berjalan dengan hak istimewa administratif, aplikasi harus secara eksplisit ditandai dalam manifes aplikasi mereka atau sebagai entri dalam kebijakan keamanan.

  • Untuk memberikan solusi kompatibilitas seperti virtualisasi. Misalnya, banyak aplikasi mencoba menulis ke lokasi terbatas seperti C:\Program Files. Untuk aplikasi yang dijalankan di bawah UAC, ada lokasi per pengguna alternatif yang tidak memerlukan hak istimewa administrator untuk menulis. Untuk aplikasi yang berjalan di bawah UAC, UAC memvirtualisasikan File C:\Program sehingga aplikasi yang berpikir bahwa mereka menulis ke aplikasi tersebut benar-benar menulis ke lokasi alternatif per pengguna. Pekerjaan kompatibilitas semacam ini memungkinkan sistem operasi untuk menjalankan banyak aplikasi yang sebelumnya tidak dapat berjalan di UAC.

Pemeriksaan Integritas Kode

Windows Vista menggabungkan pemeriksaan integritas kode yang lebih dalam untuk membantu mencegah kode berbahaya dimasukkan ke dalam file sistem atau ke kernel pada waktu pemuatan/eksekusi. Ini melampaui perlindungan file sistem.

Proses Hak Terbatas untuk Aplikasi yang Dihosting Browser

Aplikasi WPF yang dihosting browser dijalankan dalam kotak pasir zona Internet. Integrasi WPF dengan Microsoft Internet Explorer memperluas perlindungan ini dengan dukungan tambahan.

Peringatan

XBAP memerlukan browser warisan untuk beroperasi, seperti Internet Explorer dan Firefox. Versi browser lama ini biasanya tidak didukung pada Windows 10 dan Windows 11. Browser modern tidak lagi mendukung teknologi yang diperlukan untuk aplikasi XBAP karena risiko keamanan. Plugin yang mengaktifkan XBAP tidak lagi didukung.

Karena aplikasi browser XAML (XBAP) umumnya dikotak pasir oleh kumpulan izin zona Internet, menghapus hak istimewa ini tidak membahayakan aplikasi browser XAML (XBAP) dari perspektif kompatibilitas. Sebagai gantinya, lapisan pertahanan mendalam tambahan dibuat; jika aplikasi terkotakpasir dapat mengeksploitasi lapisan lain dan membajak proses, prosesnya masih hanya akan memiliki hak istimewa terbatas.

Lihat Menggunakan Akun Pengguna Dengan Hak Istimewa Terkecil.

Keamanan Runtime Bahasa Umum

Runtime bahasa umum (CLR) menawarkan sejumlah manfaat keamanan utama yang mencakup validasi dan verifikasi, Code Access Security (CAS), dan Metodologi Kritis Keamanan.

Validasi dan Verifikasi

Untuk memberikan isolasi dan integritas perakitan, CLR menggunakan proses validasi. Validasi CLR memastikan bahwa rakitan diisolasi dengan memvalidasi format file Portable Executable (PE) mereka untuk alamat yang menunjuk ke luar rakitan. Validasi CLR juga memvalidasi integritas metadata yang disematkan dalam rakitan.

Untuk memastikan keamanan jenis, membantu mencegah masalah keamanan umum (misalnya buffer overruns), dan mengaktifkan sandboxing melalui isolasi sub-proses, keamanan CLR menggunakan konsep verifikasi.

Aplikasi terkelola dikompilasi ke dalam Microsoft Intermediate Language (MSIL). Ketika metode dalam aplikasi terkelola dijalankan, MSIL-nya dikompilasi ke dalam kode asli melalui kompilasi Just-In-Time (JIT). Kompilasi JIT mencakup proses verifikasi yang menerapkan banyak aturan keamanan dan ketahanan yang memastikan kode tidak:

  • Melanggar jenis kontrak

  • Memperkenalkan overruns buffer

  • Memori akses liar.

Kode terkelola yang tidak sesuai dengan aturan verifikasi tidak diizinkan untuk dijalankan, kecuali jika dianggap sebagai kode tepercaya.

Keuntungan dari kode yang dapat diverifikasi adalah alasan utama mengapa WPF dibangun pada .NET Framework. Sejauh kode yang dapat diverifikasi digunakan, kemungkinan mengeksploitasi kemungkinan kerentanan sangat diturunkan.

Keamanan Akses Kode

Komputer klien mengekspos berbagai sumber daya yang dapat diakses oleh aplikasi terkelola, termasuk sistem file, Registri, layanan pencetakan, antarmuka pengguna, refleksi, dan variabel lingkungan. Sebelum aplikasi terkelola dapat mengakses salah satu sumber daya pada komputer klien, aplikasi harus memiliki izin .NET Framework untuk melakukannya. Izin dalam CAS adalah subkelas dari CodeAccessPermission; CAS menerapkan satu subkelas untuk setiap sumber daya yang dapat diakses aplikasi terkelola.

Sekumpulan izin yang diberikan oleh APLIKASI terkelola oleh CAS ketika mulai dieksekusi dikenal sebagai set izin dan ditentukan oleh bukti yang disediakan oleh aplikasi. Untuk aplikasi WPF, bukti yang disediakan adalah lokasi, atau zona, tempat aplikasi diluncurkan. CAS mengidentifikasi zona berikut:

  • Komputerku. Aplikasi yang diluncurkan dari komputer klien (Sepenuhnya Tepercaya).

  • Intranet Lokal. Aplikasi yang diluncurkan dari intranet. (Agak Tepercaya).

  • Internet. Aplikasi yang diluncurkan dari Internet. (Paling Tidak Tepercaya).

  • Situs Tepercaya. Aplikasi yang diidentifikasi oleh pengguna sebagai tepercaya. (Paling Tidak Tepercaya).

  • Situs Tidak Tepercaya. Aplikasi yang diidentifikasi oleh pengguna sebagai tidak tepercaya. (Tidak tepercaya).

Untuk masing-masing zona ini, CAS menyediakan set izin yang telah ditentukan sebelumnya yang mencakup izin yang cocok dengan tingkat kepercayaan yang terkait dengan masing-masing. Ini termasuk:

  • FullTrust. Untuk aplikasi yang diluncurkan dari zona Komputer Saya. Semua izin yang mungkin diberikan.

  • LocalIntranet. Untuk aplikasi yang diluncurkan dari zona Intranet Lokal. Subset izin diberikan untuk menyediakan akses moderat ke sumber daya komputer klien, termasuk penyimpanan terisolasi, akses UI yang tidak dibatasi, dialog file yang tidak dibatasi, refleksi terbatas, akses terbatas ke variabel lingkungan. Izin untuk sumber daya penting seperti Registri tidak disediakan.

  • Internet. Untuk aplikasi yang diluncurkan dari zona Internet atau Situs Tepercaya. Subset izin diberikan untuk menyediakan akses terbatas ke sumber daya komputer klien, termasuk penyimpanan terisolasi, hanya buka file, dan UI terbatas. Pada dasarnya, set izin ini mengisolasi aplikasi dari komputer klien.

Aplikasi yang diidentifikasi berasal dari zona Situs Tidak Tepercaya tidak diberikan izin oleh CAS sama sekali. Akibatnya, set izin yang telah ditentukan sebelumnya tidak ada untuk mereka.

Gambar berikut mengilustrasikan hubungan antara zona, set izin, izin, dan sumber daya:

Diagram that shows CAS permission sets.

Pembatasan kotak pasir keamanan zona Internet berlaku sama untuk kode apa pun yang diimpor XBAP dari pustaka sistem, termasuk WPF. Ini memastikan bahwa setiap bit kode dikunci, bahkan WPF. Sayangnya, untuk dapat mengeksekusi, XBAP perlu menjalankan fungsionalitas yang memerlukan lebih banyak izin daripada yang diaktifkan oleh kotak pasir keamanan zona Internet.

Peringatan

XBAP memerlukan browser warisan untuk beroperasi, seperti Internet Explorer dan Firefox. Versi browser lama ini biasanya tidak didukung pada Windows 10 dan Windows 11. Browser modern tidak lagi mendukung teknologi yang diperlukan untuk aplikasi XBAP karena risiko keamanan. Plugin yang mengaktifkan XBAP tidak lagi didukung.

Pertimbangkan aplikasi XBAP yang menyertakan halaman berikut:

FileIOPermission fp = new FileIOPermission(PermissionState.Unrestricted);
fp.Assert();

// Perform operation that uses the assert

// Revert the assert when operation is completed
CodeAccessPermission.RevertAssert();
Dim fp As New FileIOPermission(PermissionState.Unrestricted)
fp.Assert()

' Perform operation that uses the assert

' Revert the assert when operation is completed
CodeAccessPermission.RevertAssert()

Untuk menjalankan XBAP ini, kode WPF yang mendasar harus menjalankan lebih banyak fungsionalitas daripada yang tersedia untuk XBAP panggilan, termasuk:

  • Membuat handel jendela (HWND) untuk penyajian

  • Mengirim pesan

  • Memuat font Tahoma

Dari sudut pandang keamanan, memungkinkan akses langsung ke salah satu operasi ini dari aplikasi terkotakpasir akan menjadi bencana.

Untungnya, WPF melayani situasi ini dengan memungkinkan operasi ini dijalankan dengan hak istimewa yang ditingkatkan atas nama aplikasi terkotakpasir. Sementara semua operasi WPF diperiksa terhadap izin keamanan zona Internet terbatas dari domain aplikasi XBAP, WPF (seperti halnya pustaka sistem lainnya) diberikan set izin yang mencakup semua izin yang mungkin.

Ini mengharuskan WPF menerima hak istimewa yang ditinggikan sambil mencegah hak istimewa tersebut diatur oleh kumpulan izin zona Internet dari domain aplikasi host.

WPF melakukan ini dengan menggunakan metode Assert dari izin. Kode berikut menunjukkan bagaimana hal ini terjadi.

FileIOPermission fp = new FileIOPermission(PermissionState.Unrestricted);
fp.Assert();

// Perform operation that uses the assert

// Revert the assert when operation is completed
CodeAccessPermission.RevertAssert();
Dim fp As New FileIOPermission(PermissionState.Unrestricted)
fp.Assert()

' Perform operation that uses the assert

' Revert the assert when operation is completed
CodeAccessPermission.RevertAssert()

Pernyataan pada dasarnya mencegah izin tidak terbatas yang diperlukan oleh WPF agar tidak dibatasi oleh izin zona Internet XBAP.

Dari perspektif platform, WPF bertanggung jawab untuk menggunakan Assert dengan benar; penggunaan Assert yang salah dapat memungkinkan kode berbahaya untuk meningkatkan hak istimewa. Akibatnya, penting untuk hanya memanggil Assert saat diperlukan, dan untuk memastikan bahwa pembatasan kotak pasir tetap utuh. Misalnya, kode terkotakpasir tidak diizinkan untuk membuka file acak, tetapi diizinkan untuk menggunakan font. WPF memungkinkan aplikasi terkotakpasir untuk menggunakan fungsionalitas font dengan memanggil Assert, dan agar WPF membaca file yang diketahui berisi font tersebut atas nama aplikasi terkotakpasir.

Penyebaran ClickOnce

ClickOnce adalah teknologi penyebaran komprehensif yang disertakan dengan .NET Framework, dan terintegrasi dengan Visual Studio (lihat Keamanan dan penyebaran ClickOnce untuk informasi terperinci). Aplikasi WPF mandiri dapat disebarkan menggunakan ClickOnce, sementara aplikasi yang dihosting browser harus disebarkan dengan ClickOnce.

Aplikasi yang disebarkan menggunakan ClickOnce diberi lapisan keamanan tambahan melalui Code Access Security (CAS); pada dasarnya, aplikasi yang disebarkan ClickOnce meminta izin yang mereka butuhkan. Mereka hanya diberikan izin tersebut jika tidak melebihi serangkaian izin untuk zona tempat aplikasi disebarkan. Dengan mengurangi sekumpulan izin hanya untuk yang diperlukan, bahkan jika kurang dari yang disediakan oleh set izin zona peluncuran, jumlah sumber daya yang dapat diakses aplikasi dikurangi menjadi minimum. Akibatnya, jika aplikasi dibajak, potensi kerusakan pada komputer klien berkurang.

Metodologi Kritis Keamanan

Kode WPF yang menggunakan izin untuk mengaktifkan kotak pasir zona Internet untuk aplikasi XBAP harus dipegang ke tingkat audit dan kontrol keamanan setingkat mungkin. Untuk memfasilitasi persyaratan ini, .NET Framework menyediakan dukungan baru untuk mengelola kode yang meningkatkan hak istimewa. Secara khusus, CLR memungkinkan Anda mengidentifikasi kode yang meningkatkan hak istimewa dan menandainya dengan SecurityCriticalAttribute; kode apa pun yang tidak ditandai dengan SecurityCriticalAttribute menjadi transparan menggunakan metodologi ini. Sebaliknya, kode terkelola yang tidak ditandai dengan SecurityCriticalAttribute dicegah meningkatkan hak istimewa.

Peringatan

XBAP memerlukan browser warisan untuk beroperasi, seperti Internet Explorer dan Firefox. Versi browser lama ini biasanya tidak didukung pada Windows 10 dan Windows 11. Browser modern tidak lagi mendukung teknologi yang diperlukan untuk aplikasi XBAP karena risiko keamanan. Plugin yang mengaktifkan XBAP tidak lagi didukung.

Metodologi Keamanan-Kritis memungkinkan organisasi kode WPF yang meningkatkan hak istimewa menjadi kernel kritis keamanan, dengan sisanya transparan. Mengisolasi kode keamanan-kritis memungkinkan tim teknik WPF memfokuskan analisis keamanan tambahan dan kontrol sumber pada kernel kritis keamanan di atas dan di luar praktik keamanan standar (lihat Strategi Keamanan WPF - Rekayasa Keamanan).

Perhatikan bahwa .NET Framework mengizinkan kode tepercaya untuk memperluas kotak pasir zona Internet XBAP dengan memungkinkan pengembang menulis rakitan terkelola yang ditandai dengan AllowPartiallyTrustedCallersAttribute (APTCA) dan disebarkan ke Global Assembly Cache (GAC) pengguna. Menandai rakitan dengan APTCA adalah operasi keamanan yang sangat sensitif karena memungkinkan kode apa pun untuk memanggil rakitan tersebut, termasuk kode berbahaya dari Internet. Peringatan ekstrem dan praktik terbaik harus digunakan saat melakukan ini dan pengguna harus memilih untuk mempercayai perangkat lunak tersebut agar dapat diinstal.

Keamanan Microsoft Internet Explorer

Selain mengurangi masalah keamanan dan menyederhanakan konfigurasi keamanan, Microsoft Internet Explorer 6 (SP2) berisi beberapa fitur yang meningkatkan keamanan untuk pengguna aplikasi browser XAML (XBAP). Dorong fitur-fitur ini mencoba untuk memungkinkan pengguna kontrol yang lebih besar atas pengalaman penjelajahan mereka.

Peringatan

XBAP memerlukan browser warisan untuk beroperasi, seperti Internet Explorer dan Firefox. Versi browser lama ini biasanya tidak didukung pada Windows 10 dan Windows 11. Browser modern tidak lagi mendukung teknologi yang diperlukan untuk aplikasi XBAP karena risiko keamanan. Plugin yang mengaktifkan XBAP tidak lagi didukung.

Sebelum IE6 SP2, pengguna dapat tunduk pada salah satu hal berikut:

  • Jendela popup acak.

  • Pengalihan skrip yang membingungkan.

  • Banyak dialog keamanan pada beberapa situs Web.

Dalam beberapa kasus, situs Web yang tidak dapat dipercaya akan mencoba mengelabui pengguna dengan melakukan spoofing antarmuka pengguna penginstalan (UI) atau berulang kali menampilkan kotak dialog penginstalan Microsoft ActiveX, meskipun pengguna mungkin telah membatalkannya. Dengan menggunakan teknik ini, ada kemungkinan bahwa sejumlah besar pengguna telah ditipu untuk membuat keputusan buruk yang dihasilkan dengan penginstalan aplikasi spyware.

IE6 SP2 mencakup beberapa fitur untuk mengurangi jenis masalah ini, yang berputar di sekitar konsep inisiasi pengguna. IE6 SP2 mendeteksi ketika pengguna telah mengklik tautan atau elemen halaman sebelum tindakan, yang dikenal sebagai inisiasi pengguna, dan memperlakukannya secara berbeda dari ketika tindakan serupa dipicu oleh skrip di halaman. Sebagai contoh, IE6 SP2 menggabungkan Pemblokir Pop-Up yang mendeteksi saat pengguna mengklik tombol sebelum halaman membuat pop-up. Ini memungkinkan IE6 SP2 untuk memungkinkan sebagian besar pop-up yang tidak berbahaya sekaligus mencegah pop-up yang tidak diminta pengguna atau tidak diinginkan. Pop-up yang diblokir terperangkap di bawah Bilah Informasi baru, yang memungkinkan pengguna untuk mengambil alih blok secara manual dan melihat pop-up.

Logika inisiasi pengguna yang sama juga diterapkan ke Perintah keamanan Buka/Simpan. Kotak dialog penginstalan ActiveX selalu terperangkap di bawah Bilah Informasi kecuali jika mewakili peningkatan dari kontrol yang diinstal sebelumnya. Langkah-langkah ini digabungkan untuk memberi pengguna pengalaman pengguna yang lebih aman dan lebih terkontrol karena mereka dilindungi terhadap situs yang melecehkan mereka untuk menginstal perangkat lunak yang tidak diinginkan atau berbahaya.

Fitur-fitur ini juga melindungi pelanggan yang menggunakan IE6 SP2 untuk menelusuri situs web yang memungkinkan mereka mengunduh dan menginstal aplikasi WPF. Secara khusus, ini karena IE6 SP2 menawarkan pengalaman pengguna yang lebih baik yang mengurangi kesempatan bagi pengguna untuk menginstal aplikasi berbahaya atau berbahaya terlepas dari teknologi apa yang digunakan untuk membangunnya, termasuk WPF. WPF menambahkan perlindungan ini dengan menggunakan ClickOnce untuk memfasilitasi pengunduhan aplikasinya melalui Internet. Karena aplikasi browser XAML (XBAP) dijalankan dalam kotak pasir keamanan zona Internet, aplikasi tersebut dapat diluncurkan dengan mulus. Di sisi lain, aplikasi WPF mandiri memerlukan kepercayaan penuh untuk dijalankan. Untuk aplikasi ini, ClickOnce akan menampilkan kotak dialog keamanan selama proses peluncuran untuk memberi tahu penggunaan persyaratan keamanan tambahan aplikasi. Namun, ini harus dimulai pengguna, juga akan diatur oleh logika yang dimulai pengguna, dan dapat dibatalkan.

Internet Explorer 7 menggabungkan dan memperluas kemampuan keamanan IE6 SP2 sebagai bagian dari komitmen berkelanjutan terhadap keamanan.

Lihat juga