Kedalaman virtualisasi Windows (Bagian 2) — Memori yang bahkan kernel pun tidak bisa lihat: cara kerja VBS, HVCI, dan Credential Guard

· · Windows, Virtualisasi, Keamanan, VBS, HVCI, Credential Guard

Ada masa ketika hak administrator adalah “tujuan” bagi penyerang di Windows. Muat driver kernel sebagai administrator, dump memori proses LSASS, dan Anda punya hash kata sandi serta tiket Kerberos. Dari situ tinggal berjalan ke mesin lain dengan hash yang dicuri.

Di Windows 11 terkini dengan Credential Guard berjalan — keadaan bawaan dari 22H2 ke atas pada perangkat yang memenuhi syarat lisensi seperti Enterprise dan Education, plus syarat perangkat keras — playbook itu tidak bekerja. Penyerang yang telah sepenuhnya mengambil kernel dapat mencari memori sesuka hati, dan hash sungguhan kredensial domain yang dilindungi tidak ditemukan “di dalam OS itu”. Jika ia tidak berjalan, bahaya lama tetap ada, jadi baca ini bersama metode konfirmasi di kemudian hari di artikel.

Jadi di mana mereka? Jawabannya adalah “dunia lain, yang dibuat di dalam PC yang sama”. Seperti kita lihat di Bagian 1, Windows host berjalan di root partition di atas hypervisor (“Di mana Windows Anda sebenarnya berjalan?”). Artikel ini berlanjut dari situ dan mengikuti satu garis batas lagi yang digambar hypervisor di dalam partisi yang sama.

Pertanyaan yang dijawab Bagian 2 hanya satu.

Di mana Windows menaruh rahasia yang tidak dapat dibaca administrator maupun kernel?

Pembaca sasaran adalah pengembang dan operator yang telah melihat kata-kata seperti Core isolation, Memory integrity, dan Credential Guard di layar pengaturan atau dalam kasus pemecahan masalah, dan ingin memahami hal yang sesungguhnya dari mekanismenya. Prasyarat adalah Windows 10/11 x64 atau Windows Server terkini (seperti di Bagian 1, pembahasan ring dan SLAT mengasumsikan x64; Arm64 memakai mekanisme berbeda seperti exception level). Latar belakang yang dibutuhkan adalah konsep partisi dan SLAT yang dibahas di Bagian 1. Tingkat kesulitannya menengah. Tujuannya adalah penjelasan struktur, bukan how-to mengonfigurasi fitur keamanan.

1. Kesimpulan lebih dulu

Windows menambahkan sumbu hak yang disebut VTL (Virtual Trust Level) dan menaruh rahasia di VTL1. Memori di VTL1 tidak dapat dibaca dari kernel biasa yang berjalan di VTL0. Yang menjaga batasnya bukan kernel sendiri, melainkan hypervisor yang menahan tabel terjemahan SLAT.

Itu kerangka virtualization-based security (VBS). VBS memakai hypervisor untuk membuat lingkungan terisolasi dan menampung fitur keamanan di sana. Ia dirancang dengan asumsi bahwa lingkungan terisolasi tetap terlindungi bahkan jika kernel dikompromikan.1

Dua dunia yang dibuat VBSVTL0 dan VTL1 duduk di dalam partisi yang sama; VTL0 menahan kernel biasa dan aplikasi, VTL1 menahan Secure Kernel dan fitur keamanan terisolasi, dan hypervisor menjaga batasnyaVTL1 (dunia terisolasi)VTL0 (dunia biasa)Tidak bisa bacaFitur keamanan terisolasiSecure KernelAplikasi (ring 3)Kernel NT dan driver (ring 0)Hypervisor (menegakkan batas lewat SLAT)

Gambar 1: Ada dua dunia di dalam satu Windows, dan kernel VTL0 tidak dapat mengakses memori VTL1.

Poin pentingnya adalah bahwa ini bukan “mendirikan VM lain”. VTL0 dan VTL1 berada di dalam partisi yang sama, di dalam Windows yang sama. Kita akan melihat bergiliran bagaimana pemisahan ini diwujudkan.

2. Batas model ring — penjaga dan yang dijaga duduk di ketinggian yang sama

Keamanan Windows tradisional dibangun di atas tangga ring (tingkat hak). Mode pengguna (ring 3) dijaga oleh mode kernel (ring 0). Jadi siapa yang menjaga ring 0 — tidak ada yang bisa. Ring 0 adalah hak tertinggi.

Struktur ini punya dua kelemahan struktural.

  • Kernel bukan monolit. Di ring 0, bukan hanya Windows sendiri tetapi sejumlah besar driver pihak ketiga berjalan. Jika salah satu punya kerentanan, penyerang memperoleh eksekusi kode di ring 0.
  • Dari ring 0, semuanya terlihat. Sebanyak apa pun proses mode pengguna seperti LSASS membela diri, memorinya bebas dibaca bagi penyerang yang telah mengambil kernel. Atribut perlindungan dan page table sama-sama dikelola oleh kernel sendiri.
Jalur pencurian kredensial di model ring tradisionalPenyerang yang mengambil ring 0 lewat driver yang rentan dapat membaca memori proses LSASS dengan wewenang penuh kernel dan memperoleh hash kata sandiMengeksploitasi driver yang rentanKode penyerangMengambil kendali ring 0Dapat membaca semua memori fisikMemperoleh hash dari memori LSASSDisalahgunakan untuk gerakan lateral ke mesin lain

Gambar 2: Karena penjaga (kernel) dan yang dijaga (rahasia) duduk di ketinggian yang sama, kelemahan mendasarnya adalah jika ring 0 jatuh, semuanya jatuh.

Yang dibutuhkan, maka, adalah “tempat yang lebih tinggi dari ring 0”. Tempat itu sudah muncul di Bagian 1. Hypervisor berjalan pada hak yang lebih tinggi dari kernel dan memonopoli kendali izin akses memori CPU (SLAT) sejak awal. Wilayah terisolasi yang dijaga hypervisor dilindungi bahkan terhadap akses dari perangkat lunak OS ring-0 (mode supervisor).2

3. VSM dan VTL — menambahkan satu sumbu hak lagi

3.1. Virtual Trust Levels (VTL)

Keluarga fitur hypervisor yang menyediakan isolasi ini disebut VSM (Virtual Secure Mode). VSM adalah fondasi untuk Device Guard, Credential Guard, TPM virtual, dan sejenisnya.2

Konsep pusat VSM adalah VTL (Virtual Trust Level). Poin kuncinya sebagai berikut.2

  • VTL bersifat hierarkis, dan semakin tinggi angkanya, semakin tinggi haknya. VTL0 adalah yang terendah; VTL1 lebih berhak daripada VTL0.
  • Secara arsitektur hingga 16 tingkat didefinisikan, tetapi yang saat ini diimplementasikan adalah dua: VTL0 dan VTL1.
  • Setiap VTL punya perlindungan akses memori independen. Perlindungan ini dikelola oleh hypervisor terhadap ruang alamat fisik partisi, jadi perangkat lunak sistem di dalam partisi tidak dapat mengubahnya.
  • Prosesor virtual punya keadaan register dan mesin interrupt terpisah per VTL, dan VTL yang lebih rendah tidak dapat mengintip keadaan VTL yang lebih tinggi.
Tiga independensi yang menyusun isolasi VTLPerlindungan akses memori, keadaan register prosesor virtual, dan mesin interrupt independen per VTL, dan VTL yang lebih rendah tidak dapat menyentuh salah satunya di VTL yang lebih tinggiYang independen per VTLPerlindungan akses memoriKeadaan register prosesor virtualMesin interruptVTL lebih rendah tidak bisa sentuh VTL lebih tinggi

Gambar 3: Membuat bukan hanya memori tetapi juga keadaan CPU dan interrupt menjadi dunia terpisah adalah set tiga bagian yang tidak meninggalkan lubang intip.

Jika ring (0 dan 3) adalah sumbu yang memisahkan “OS dan aplikasi”, VTL adalah sumbu kedua yang memisahkan “dunia biasa dan dunia terisolasi”. Kedua sumbu ortogonal, dan di dalam VTL1 ada mode kernel dan mode pengguna juga.

Empat wilayah yang dibuat dua sumbu ring dan VTLSumbu ring memisahkan mode kernel dan mode pengguna, sumbu VTL memisahkan dunia biasa dan dunia terisolasi, dan kombinasinya menghasilkan empat wilayah: aplikasi biasa, kernel NT, trustlet IUM, dan Secure KernelVTL1 (dunia terisolasi)VTL0 (dunia biasa)Ring 3: IUM (trustlet)Ring 0: Secure KernelRing 3: aplikasi biasaRing 0: kernel NT dan driver

Gambar 4: Kini ada dua sumbu hak, dan “apakah ini kernel?” serta “apakah ini dunia terisolasi?” menjadi pertanyaan terpisah.

3.2. Substansi batasnya adalah SLAT

Di Bagian 1 kita katakan bahwa tabel terjemahan tingkat kedua yang memetakan alamat fisik tamu (GPA) ke RAM sungguhan (SPA) — SLAT — dipegang oleh hypervisor. VSM memakai tepat sifat ini. Isolasi VTL dibuat memakai Hyper-V hypervisor dan SLAT.3

Ketika VTL1 menyatakan “memori ini tidak boleh ditunjukkan ke VTL0”, hypervisor menjatuhkan izin akses ke halaman itu dari tabel terjemahan VTL0. Sejak itu, bahkan jika kernel VTL0 mencoba menyentuh alamat itu, ia ditolak pada tahap terjemahan alamat CPU. Tidak berguna bagi kernel untuk menulis ulang page table sendiri sesuka hati. Page table (GVA→GPA) mungkin milik kernel, tetapi terjemahan di luar itu (GPA→SPA) dan izin akses akhir milik hypervisor.

Alur di mana akses dari VTL0 ke memori VTL1 ditolakKetika kernel VTL0 mencoba membaca memori VTL1, ia dapat lolos page table sendiri tetapi ditolak oleh perlindungan akses SLAT, dan kendali pindah ke hypervisorTidak diizinkanDiizinkanKernel VTL0 coba baca halaman VTL1Lolos page table kernel sendiriPerlindungan akses SLAT mengizinkan?Hypervisor campur tangan dan menolak aksesAkses memori biasaDilindungi di lapisan yang kernel tidak bisa ubah

Gambar 5: Penghalang duduk di luar kernel, dan perlindungan SLAT tidak dapat diubah oleh perangkat lunak di dalam partisi.

Di Bagian 1 seri memori kita menulis bahwa “VAD, PTE, dan atribut perlindungan memutuskan apakah akses diizinkan”. Di lingkungan VBS Anda dapat menatanya sebagai: setelah semuanya dilalui, pos pemeriksaan SLAT masih menunggu.

3.3. Secure Kernel dan IUM

Yang berjalan di dalam VTL1 bukan kernel NT biasa melainkan kernel kecil yang disebut Secure Kernel. Mode pengguna di VTL1 disebut IUM (Isolated User Mode), dan program yang berjalan di sana disebut trustlet (proses tepercaya).3

Trustlet tidak dapat melakukan segala yang dapat dilakukan proses biasa. Sebagian besar system call di-marshal ke kernel NT di sisi VTL0 dan pekerjaan diminta di sana.3 VTL1 bukan “dunia atas yang dapat melakukan apa pun”; ia dibangun kecil dengan sengaja, sebagai brankas yang menahan rahasia. Semakin sedikit kode yang dapat Anda bawa ke brankas, semakin kecil permukaan serangan.

Alur system call trustletTrustlet di VTL1 tidak menangani sebagian besar system call sendiri; ia me-marshal mereka ke kernel NT VTL0 dan menerima hanya hasilnya, yang menjaga VTL1 tetap kecilDalam sebagian besar kasusTrustlet (IUM di VTL1)System call dibutuhkanPermintaan di-marshal ke kernel NT VTL0Hanya hasil yang kembaliVTL1 tetap kecil, mengecilkan permukaan serangan

Gambar 6: Brankas tidak punya fasilitas sendiri; ia menyerahkan pekerjaan rutin dan terus menjaga hanya rahasia.

4. HVCI — memverifikasi integritas kode kernel di brankas

4.1. Apa yang diverifikasi

Fitur representatif pertama yang duduk di VBS adalah Memory integrity — HVCI (hypervisor-protected code integrity). Windows punya mekanisme integritas kode yang memeriksa driver dan biner mode kernel sebelum mereka start dan tidak memuat yang tanpa tanda tangan atau tidak tepercaya. HVCI menjalankan verifikasi ini di dalam lingkungan terisolasi VBS.1

Alasan memindahkan logika verifikasi sendiri ke VTL1 justru kelemahan di Bagian 2. Jika kode verifikasi duduk di dalam kernel VTL0, penyerang yang telah mengambil kernel dapat menukar verifikasi itu. Jika ia di VTL1, tangan yang menukar tidak dapat menjangkaunya.

Perbedaan yang dibuat oleh di mana kode verifikasi tinggalJika kode verifikasi duduk di dalam kernel VTL0 ia dapat dinonaktifkan dengan mengambil kernel, tetapi jika di VTL1 bahkan penyerang yang telah mengambil kernel tidak dapat menjangkaunya dan verifikasi terlindungiDi dalam kernel VTL0 (klasik)Lingkungan terisolasi di VTL1 (HVCI)Penyerang yang telah mengambil kernelDi mana verifikasi integritas kode tinggal?Logika verifikasi dapat ditukarPenukaran di luar jangkauanKode tanpa tanda tangan dapat berjalan di kernelVerifikasi terus bekerja setelah kernel dikompromikan

Gambar 7: Jangan taruh pos pemeriksaan di dalam sisi yang mungkin ditembus — relokasi logika verifikasi itulah esensi HVCI.

4.2. Aturan untuk halaman yang dapat dieksekusi

Efek HVCI tidak terbatas pada “pemeriksaan saat start”. Ia juga membatasi alokasi memori kernel.4

  • Halaman kernel menjadi dapat dieksekusi hanya setelah lulus verifikasi integritas kode.
  • Halaman yang dapat dieksekusi tidak menjadi dapat ditulis (yang disebut W^X).

Ketika keduanya ada, bahkan jika kerentanan seperti buffer overflow membiarkan Anda menulis ulang memori kernel, Anda tidak dapat menaruh isi yang ditulis ulang itu ke eksekusi. Halaman yang dapat dieksekusi tidak dapat ditulis ulang, dan halaman yang dapat ditulis ulang tidak dapat dieksekusi.4 Landasan akhir izin eksekusi adalah hak eksekusi di sisi SLAT, yang tidak dapat dimanipulasi kernel VTL0.

Sampai halaman kernel menjadi dapat dieksekusi di lingkungan HVCIPermintaan memuat driver menerima verifikasi integritas kode di lingkungan terisolasi VBS; jika lulus ia diizinkan sebagai halaman yang dapat dieksekusi, tidak dapat ditulis, dan jika gagal ia diblokir dan dicatat di log CodeIntegrityLulusGagalPermintaan memuat dan mengeksekusi kode kernelVerifikasi integritas kode di lingkungan terisolasiDiizinkan sebagai halaman dapat dieksekusi (tulis dilarang)Pemuatan diblokirDicatat di log CodeIntegrity Operational (event ID 3087)Halaman yang dapat ditulis tetap tidak dapat dieksekusi

Gambar 8: Verifikasi aturan yang tidak membiarkan eksekusi dan penulisan hidup berdampingan dilakukan di sisi VTL1, dan kernel VTL0 tidak dapat membalikkannya.

Menelusuri ini dari sudut pandang penyerang membuat jelas bagaimana aturan itu berlaku.

Alur di mana injeksi kode gagal di lingkungan HVCIBahkan jika kerentanan membiarkan Anda menulis ulang memori kernel, halaman yang dapat Anda tulis tidak dapat dieksekusi, dan halaman yang dapat dieksekusi tidak dapat ditulis ulang sejak awal, jadi kode yang diinjeksikan tidak dapat dimasukkan ke eksekusiHalaman yang dapat ditulisHalaman yang dapat dieksekusiCoba rusak memori kernel lewat kerentananHalaman mana sasarannya?Penulisan berhasilPenulisan sendiri mustahilTetapi halaman itu tidak dapat dieksekusiKode yang diinjeksikan tidak dapat dieksekusi

Gambar 9: Makna tidak menyilangkan halaman yang dapat ditulis dengan halaman yang dapat dijalankan adalah bahwa pintu masuk mana pun yang Anda ambil, Anda menabrak jalan buntu.

4.3. Harga dalam kompatibilitas driver

Aturan ini bertabrakan dengan driver desain lama. Yang menulis ulang kodenya sendiri saat berjalan, tidak punya tanda tangan, atau menuntut memori yang sekaligus dapat dieksekusi dan dapat ditulis — driver semacam itu tidak dapat dimuat di lingkungan HVCI. Fakta pemblokiran dapat dikonfirmasi di Event Viewer di bawah Applications and Services Logs\Microsoft\Windows\CodeIntegrity\Operational (event ID 3087 representatif).5

“Setelah saya mengaktifkan Memory integrity, periferal berhenti bekerja” — dalam banyak kasus, itu identitas sungguhan gangguan. Respons yang tepat adalah memperbarui ke driver yang kompatibel HVCI; menonaktifkan Memory integrity harus dipikirkan sebagai pilihan terakhir yang menyerahkan perlindungan secara keseluruhan. Jika Anda terlibat dalam verifikasi ini dari sudut pengembangan driver, lihat juga artikel filter driver (“Driver minifilter Windows”).

Mengisolasi kasus periferal berhenti bekerja di bawah Memory integrityIdentifikasi driver yang diblokir di log CodeIntegrity Operational; respons yang tepat adalah memperbarui ke versi yang kompatibel HVCI, meminta vendor jika tidak ada, dan memperlakukan penonaktifan sebagai pilihan terakhir yang tidak Anda buat permanenYaTidakPerangkat berhenti bekerja setelah Memory integrity diaktifkanIdentifikasi driver yang diblokir di log CodeIntegrityAda driver yang kompatibel HVCI?Perbarui dan selesaikan sambil membiarkan HVCI nyalaMinta vendor versi yang kompatibelMenonaktifkan adalah pilihan terakhir, bukan pengaturan permanen

Gambar 10: Hal pertama yang harus dilihat bukan layar pengaturan melainkan log, dan event ID 3087 tahu siapa yang memblokir pemuatan.

5. Credential Guard — hash-nya ada di dalam LSAIso

5.1. LSASS dan LSAIso

Fitur representatif kedua yang duduk di VBS adalah jawaban atas misteri pembukaan: Credential Guard.

Windows tradisional menyimpan hash NTLM dan tiket Kerberos di memori proses LSA (lsass.exe). Ketika Credential Guard diaktifkan, penyimpanan rahasia yang dilindungi di antara ini — hash NTLM kredensial domain dan TGT Kerberos (Ticket Granting Ticket) — pindah ke LSAIso.exe, trustlet yang berjalan di IUM di VTL1.6

  • lsass.exe (VTL0) terus berjalan sebagai meja depan pemrosesan autentikasi, seperti semula.
  • Rahasia sungguhan dipegang oleh LSAIso.exe (VTL1) dan tidak dapat diakses dari VTL0.
  • Keduanya berkomunikasi lewat RPC (Remote Procedure Call).
  • LSAIso tidak menampung driver perangkat sama sekali, dan hanya menampung minimum biner bertanda tangan. Tanda tangan diverifikasi dengan sertifikat yang dipercaya VBS.6
Di mana kredensial duduk ketika Credential Guard diaktifkanlsass di VTL0 berkomunikasi dengan LSAIso di VTL1 lewat RPC sebagai meja depan autentikasi; hash dan TGT sungguhan kredensial domain yang dilindungi dipegang LSAIso, jadi penyerang yang memperoleh hak administrator di VTL0 dan dump lsass tetap tidak mendapat substansi yang dilindungiVTL1VTL0RPCDump memoriTidak bisa jangkauLSAIso.exe (brankas rahasia)lsass.exe (meja depan autentikasi)Penyerang (hak administrator)

Gambar 11: Karena meja depan dan brankas dipisahkan, dump lsass tidak lagi menghasilkan hash sungguhan kredensial domain yang dilindungi.

Dari Windows 11 versi 22H2 ke atas, pada perangkat yang memenuhi syarat lisensi (Enterprise E3/E5, Education A3/A5) dan syarat perangkat keras, VBS dan Credential Guard diaktifkan secara bawaan. Di edisi seperti Pro, Credential Guard tidak diaktifkan secara otomatis (ada pengecualian, seperti ketika mesin yang diaktifkan di bawah lisensi yang memenuhi syarat kemudian diturunkan).7 “Playbook tidak lagi bekerja” di pembukaan bukan cerita tentang produk tambahan khusus; itu keadaan standar Windows terkini pada edisi sasaran.

Alur kredensial dari masuk ke autentikasiSetelah masuk rahasia sungguhan disimpan di LSAIso di VTL1; setiap kali autentikasi dibutuhkan, lsass di VTL0 meminta komputasi lewat RPC, dan hanya hasil pemrosesan autentikasi yang kembali ke VTL0 tanpa rahasia jangka panjang yang dilindungi sendiri dikembalikanMinta komputasi lewat RPCMengembalikan hasil (tidak mengembalikan rahasia)Pengguna masuklsass menanganinya sebagai meja depanRahasia sungguhan disimpan di LSAIsoPermintaan autentikasi berikutnya

Gambar 12: Rahasia jangka panjang yang dilindungi sendiri tidak pernah meninggalkan brankas; yang kembali ke VTL0 adalah hasil pemrosesan autentikasi, seperti tiket.

5.2. Ketahui dengan tepat apa yang tidak dilindungi

Credential Guard bukan perisai serba guna. Yang dilindungi adalah hash NTLM kredensial domain, TGT Kerberos (Ticket Granting Ticket), dan hal yang disimpan sebagai kredensial domain. Berikut berada di luar cakupan.8

  • Tiket layanan Kerberos (TGT dilindungi)
  • Kredensial akun lokal dan akun Microsoft
  • Pencurian masukan oleh keylogger, dan serangan fisik
  • Kredensial pada jalur yang memakai NTLMv1, MS-CHAPv2, Digest, atau CredSSP
  • Bagian dalam perangkat lunak pihak ketiga yang mengelola kredensial sendiri

Juga, ketika Credential Guard diaktifkan, NTLMv1, delegasi Kerberos tanpa batasan, dan sejenisnya menjadi tidak dapat dipakai, jadi sistem bisnis yang bergantung pada autentikasi legacy membutuhkan pemeriksaan kompatibilitas.8 Bukan “aktifkan dan selesai”, melainkan pahami apa yang di dalam dan di luar jangkauan pertahanan dan isi sisanya dengan kontrol lain — itu cara yang benar memakainya dalam praktik.

Jangkauan pertahanan Credential GuardHash NTLM domain dan TGT, serta kredensial domain yang disimpan, dilindungi, sementara tiket layanan, akun lokal, keylogger, serangan fisik, dan kredensial yang disimpan secara privat oleh aplikasi berada di luar cakupanDi sisi mana batas perlindungan rahasia ini berada?Hash NTLM domain dan TGTTiket layanan dan akun lokalDilindungi di LSAIsoTidak dilindungi (kontrol lain dibutuhkan)Ketukan tombol, serangan fisik, dan penyimpanan privat aplikasi juga di luar cakupan

Gambar 13: Jangkauan pertahanan digambar dengan garis yang jelas, dan bagian luar garis diisi dengan autentikasi multifaktor dan desain sisi aplikasi.

6. Lihat sendiri

Anda dapat mengonfirmasi keadaan berjalan VBS dan setiap fitur di mesin sendiri.

Get-CimInstance -Namespace root/Microsoft/Windows/DeviceGuard `
    -ClassName Win32_DeviceGuard |
    Select-Object VirtualizationBasedSecurityStatus,
                  SecurityServicesConfigured,
                  SecurityServicesRunning

Cara membacanya sebagai berikut.9

  • Jika VirtualizationBasedSecurityStatus adalah 2, VBS diaktifkan dan berjalan.
  • Jika SecurityServicesRunning berisi 1, Credential Guard sedang berjalan; jika berisi 2, Memory integrity (HVCI) sedang berjalan.

Untuk mengonfirmasi keadaan berjalan di GUI, lihat bidang “Virtualization-based security” di msinfo32 (layanan yang berjalan tercantum, seperti “Hypervisor enforced Code Integrity”). Toggle “Memory integrity” di bawah “Device security > Core isolation” di aplikasi Windows Security adalah layar yang mencerminkan pengaturan; ia dapat tampak nyala bahkan sementara HVCI tidak benar-benar berjalan — menunggu reboot tepat setelah pengaktifan, atau masalah kompatibilitas saat start — jadi nilai apakah ia berjalan dari msinfo32 atau dari SecurityServicesRunning milik Win32_DeviceGuard.5

Ada juga jejak di tab Details Task Manager. Pada mesin di mana VBS berjalan Anda akan melihat proses yang disebut “Secure System”. LsaIso.exe adalah proses yang muncul ketika layanan Isolated LSA di-host di VTL1, dan ia biasanya tidak muncul dalam konfigurasi di mana hanya HVCI yang diaktifkan. Ada atau tidaknya proses hanyalah jejak, walaupun, jadi nilai apakah Credential Guard berjalan dari SecurityServicesRunning (apakah berisi 1), seperti di atas. Keduanya adalah jendela yang terlihat dari VTL0 yang sesuai dengan dunia sisi VTL1.

Cara memeriksa bahwa fitur terkait VBS sedang berjalanKonfirmasikan bahwa VBS berjalan dengan mengkueri Win32_DeviceGuard, nilai Credential Guard dan HVCI dari nilai SecurityServicesRunning, dan lihat log CodeIntegrity untuk masalah driverTidakYa12Win32_DeviceGuardStatus VBS 2?VBS tidak berjalanBerisi 1 atau 2?Credential Guard nyalaHVCI nyalaCodeIntegrity 3087

Gambar 14: Konfirmasi keadaan berjalan dalam tiga tahap: VBS sendiri, setiap layanan di atasnya, dan log ketika masalah terjadi.

7. Tiga salah baca yang harus dihindari dalam praktik

7.1. “Melindungi hak administrator sudah cukup. VBS adalah cerita sisi server”

Yang dicegah Credential Guard adalah kerusakan yang menyebar setelah hak administrator diambil (ekfiltrasi hash dan gerakan lateral). Dengan kata lain VBS adalah satu lapisan pertahanan berlapis yang mengasumsikan kompromi, dan justru di PC klien ia efektif. Di Windows 11 yang memenuhi syarat, diaktifkan-secara-bawaan adalah standar, jadi postur yang tepat bukan “ini tidak ada hubungannya dengan kami” melainkan “kelola kompatibilitas dengan asumsi ia sudah berjalan”.

Tahap kompromi dan di mana VBS berlakuAkses awal dicakup kontrol lain seperti autentikasi multifaktor dan pelatihan; HVCI memblokir injeksi kode ke kernel setelah eskalasi hak; Credential Guard memblokir pencurian rahasia domain yang dilindungi dan gerakan lateral, tetapi tidak menjangkau rahasia di luar cakupannyaAkses awal (phishing dan sejenisnya)Eskalasi hakInjeksi kode ke kernelPencurian rahasia domain yang dilindungi dan gerakan lateralMFA, pelatihan, dan EDR mencakup iniHVCI memblokir langkah iniCredential Guard memblokir ini (rahasia yang dilindungi saja)

Gambar 15: VBS bukan teknologi “jangan biarkan mereka masuk”; ia teknologi “jangan biarkan mereka menang setelah mereka masuk”, dan tahap yang dijaganya berbeda.

7.2. “Jika Memory integrity menimbulkan masalah, tinggal matikan saja”

Mematikannya akan membuat segala berjalan untuk sementara, tetapi ia meruntuhkan penghalang terhadap injeksi kode ke kernel secara keseluruhan. Respons yang tepat adalah pertama-tama mengidentifikasi driver yang diblokir di log CodeIntegrity dan menerapkan versi yang diperbarui vendor. Bahkan jika Anda menonaktifkannya sementara untuk validasi, kami merekomendasikan operasi yang tidak membuat itu pengaturan permanen.

7.3. “Dengan Credential Guard, kata sandi tidak dapat dicuri”

Itu kelebihan percaya diri dari mencampuradukkan jangkauan pertahanan. Tiket layanan, akun lokal, ketukan tombol sendiri, dan kredensial yang disimpan secara privat oleh aplikasi berada di luar cakupan.8 Phishing dan keylogger membutuhkan kontrol lain (autentikasi multifaktor, Windows Hello, dan tinjauan manajemen kredensial di sisi aplikasi).

8. Ringkasan

  • VBS memakai hypervisor untuk membuat lingkungan terisolasi dan melindungi fitur keamanan dengan asumsi kernel dapat dikompromikan.1
  • Satuan isolasi adalah VTL; saat ini dua tingkat diimplementasikan, VTL0 (dunia biasa) dan VTL1 (Secure Kernel dan IUM).2
  • Substansi batasnya adalah perlindungan akses memori SLAT, yang perangkat lunak di dalam partisi — termasuk kernel — tidak dapat ubah.2
  • HVCI menjalankan verifikasi integritas kode di lingkungan terisolasi dan menegakkan “tidak dapat dieksekusi sampai verifikasi lulus” serta “halaman yang dapat dieksekusi tidak dapat ditulis”.4 Harganya adalah Anda harus mengelola kompatibilitas driver.5
  • Credential Guard mengisolasi hash NTLM kredensial domain dan TGT ke LSAIso di VTL1. Dari Windows 11 22H2 ke atas ia diaktifkan secara bawaan pada perangkat yang memenuhi syarat lisensi (Enterprise, Education) dan syarat perangkat keras (pakai ini bersama pemeriksaan keadaan berjalan).67
  • Anda dapat mengonfirmasi keadaan berjalan dari SecurityServicesRunning milik Win32_DeviceGuard (1 = Credential Guard, 2 = HVCI).9

Bersambung di Bagian 3, “Mesin virtual yang boot dalam hitungan detik — WSL2, Windows Sandbox, dan kontainer.

Sejauh ini kita telah melihat virtualisasi dari sisi “kekuatan isolasi”. Edisi terakhir melihat dari sisi sebaliknya, “keringanan”, dan mengikuti di mana VM ringan yang membuang bobot VM penuh sedang memotong sudut.

Artikel terkait

Area konsultasi terkait

KomuraSoft LLC menangani investigasi kompatibilitas antara aplikasi Windows dan fitur keamanan, analisis kegagalan yang disebabkan driver, dan validasi teknis lingkungan PC internal.

Tautan referensi

  1. Microsoft Learn, Virtualization-based Security (VBS). Tentang VBS yang memakai virtualisasi perangkat keras dan Windows hypervisor untuk membuat lingkungan terisolasi dan memperlakukannya sebagai root of trust OS dengan asumsi kernel dapat dikompromikan; Memory integrity yang menjalankan verifikasi integritas kode mode kernel di dalam lingkungan terisolasi itu; dan SLAT sebagai syarat keras untuk VBS.  2 3

  2. Microsoft Learn, Virtual Secure Mode. Tentang VSM sebagai fondasi untuk Device Guard, Credential Guard, TPM virtual, dan sejenisnya; akses ke wilayah terisolasi yang dikendalikan hanya lewat hypervisor dan dilindungi bahkan dari perangkat lunak OS ring-0; VTL yang hierarkis dengan 2 dari maksimum 16 tingkat diimplementasikan; dan perlindungan akses memori per-VTL yang tidak dapat diubah oleh perangkat lunak sistem di dalam partisi.  2 3 4 5

  3. Microsoft Learn, Isolated User Mode (IUM) Processes. Tentang VSM yang membuat VTL memakai Hyper-V hypervisor dan SLAT; Secure Kernel dan IUM yang berjalan di VTL1; trustlet yang me-marshal system call ke kernel VTL0; dan LSAIso yang berjalan di VTL1 serta berkomunikasi dengan lsass lewat RPC.  2 3

  4. Microsoft Learn, Memory integrity and virtualization-based security. Tentang Memory integrity (HVCI) yang menjalankan verifikasi integritas kode di lingkungan terisolasi, dan tentang halaman memori kernel yang menjadi dapat dieksekusi hanya setelah lulus verifikasi serta halaman yang dapat dieksekusi yang tidak menjadi dapat ditulis.  2 3

  5. Microsoft Learn, Memory integrity and VBS enablement. Tentang Memory integrity yang diaktifkan secara bawaan pada instalasi bersih Windows 11 jika perangkat keras kompatibel; mengonfirmasi keadaan di msinfo32 dan aplikasi Windows Security; dan mengonfirmasi driver yang diblokir lewat event ID 3087 di log CodeIntegrity Operational.  2 3

  6. Microsoft Learn, How Credential Guard works. Tentang LSA yang berkomunikasi dengan proses Isolated LSA (LSAIso.exe) untuk menyimpan rahasia ketika Credential Guard diaktifkan; data yang disimpan dilindungi oleh VBS dan tidak dapat diakses dari sisa OS; dan proses Isolated LSA yang tidak menampung driver perangkat serta hanya menampung minimum biner yang diverifikasi tanda tangannya.  2 3

  7. Microsoft Learn, Credential Guard overview. Tentang Credential Guard yang diaktifkan secara bawaan dari Windows 11 versi 22H2 ke atas pada perangkat yang memenuhi syarat lisensi, perangkat keras, dan perangkat lunak serta belum dinonaktifkan secara eksplisit; edisi/lisensi yang memenuhi syarat adalah Enterprise (E3/E5) dan Education (A3/A5), dengan Pro di luar cakupan; dan mesin Pro yang sebelumnya diaktifkan di bawah lisensi yang memenuhi syarat tetap menjadi sasaran yang diaktifkan secara bawaan setelah penurunan.  2

  8. Microsoft Learn, Credential Guard protection limits. Tentang tiket layanan, akun lokal, keylogger, serangan fisik, dan sejenisnya yang berada di luar cakupan perlindungan Credential Guard; TGT yang dilindungi sementara tiket layanan tidak; dan NTLMv1 serta delegasi tanpa batasan yang menjadi tidak dapat dipakai ketika diaktifkan.  2 3

  9. Microsoft Learn, Enable virtualization-based protection of code integrity. Tentang cara mengonfirmasi keadaan VBS dan Memory integrity lewat kelas Win32_DeviceGuard, dan tentang makna nilai SecurityServicesRunning (1 adalah Credential Guard, 2 adalah Memory integrity).  2

Artikel terbaru dengan tag yang sama untuk mendalami topik-topik terdekat.

Halaman-halaman ini menempatkan topik dalam konteks layanan dan keputusan yang lebih luas.

Artikel ini berkaitan langsung dengan layanan berikut.

Pertanyaan yang sering diajukan

Pertanyaan yang sering muncul dalam konsultasi tentang topik artikel ini.

Apakah VBS (virtualization-based security) dan Core isolation hal yang sama?
Secara ketat, mereka berbeda. VBS adalah teknologi fondasi yang membuat lingkungan terisolasi dengan hypervisor, dan "Core isolation" di aplikasi Windows Security adalah nama layar yang mengelompokkan beberapa perlindungan yang dibangun di atas VBS. Yang representatif adalah "Memory integrity", yang merujuk pada HVCI (hypervisor-protected code integrity). Konfirmasikan keadaan berjalan setiap layanan dengan mengkueri Win32_DeviceGuard, bukan dari tampilan layar.
Bisakah memori VTL1 benar-benar tidak dibaca, bahkan dengan hak administrator atau dari driver kernel?
Tidak bisa. Perlindungan akses memori per-VTL dikelola oleh hypervisor terhadap ruang alamat fisik partisi, dan perangkat lunak yang berjalan di dalam partisi tidak dapat mengubahnya. Bahkan kode yang berjalan di kernel (ring 0) tidak diizinkan mengakses memori VTL1 dari VTL0.
Mengapa mengaktifkan Memory integrity (HVCI) dapat menghentikan driver bekerja?
Di lingkungan HVCI, halaman kernel menjadi dapat dieksekusi hanya setelah lulus verifikasi integritas, dan penulisan ke halaman yang dapat dieksekusi tidak diizinkan. Driver tanpa tanda tangan, atau driver desain lama yang menulis ulang memori yang dapat dieksekusi, tidak dapat memenuhi kendala ini dan pemuatannya diblokir. Anda dapat mengonfirmasi pemblokiran di log CodeIntegrity Operational (event ID 3087 dan sejenisnya).
Apa yang dilindungi Credential Guard, dan apa yang tidak dilindunginya?
Ia melindungi hash kata sandi NTLM kredensial domain, TGT Kerberos, dan hal yang disimpan aplikasi sebagai kredensial domain, di lingkungan terisolasi. Tiket layanan Kerberos, kredensial akun lokal dan akun Microsoft, pencurian masukan oleh keylogger, dan serangan fisik berada di luar cakupan.
Di mana saya dapat memeriksa apakah VBS sedang berjalan?
Lihat bidang "Virtualization-based security" di msinfo32, atau kueri kelas Win32_DeviceGuard di namespace root/Microsoft/Windows/DeviceGuard dari PowerShell. Jika SecurityServicesRunning berisi 1, Credential Guard sedang berjalan; jika berisi 2, Memory integrity (HVCI) sedang berjalan.

Profil penulis

Halaman perkenalan penulis artikel.

Go Komura

Direktur KomuraSoft LLC

Berspesialisasi dalam pengembangan perangkat lunak Windows, konsultasi teknis, dan investigasi bug, terutama pada proyek dengan sistem yang sudah ada dan bug yang sulit direproduksi.

Kembali ke blog