Visual Studio lambat hanya di VPN? Periksa CRL dan OCSP
Saat kebijakan WDAC diterapkan, satu peluncuran lambat bisa berupa kueri pencabutan, bukan terowongan. Buktikan langkah mana yang menghambat sebelum melonggarkan kebijakan.
Visual Studio mulai normal di rumah, lalu laptop yang sama bergabung ke terowongan perusahaan dan setiap peluncuran tertahan setengah menit di layar pembuka. Lepaskan kebijakannya dan jeda itu ikut hilang; lepaskan terowongannya dan hal yang sama terjadi. Kedua pengamatan benar, karena itu kedua komponen terus saling menyalahkan. Pertanyaan penentunya adalah apakah kueri pencabutan sertifikat menunggu jalur yang hanya disediakan terowongan, atau tidak menemukan jalur sama sekali.
Ukur pengambilannya, bukan peluncurannya
Kebijakan WDAC, yang diterapkan sebagai SiPolicy.p7b bertanda tangan, menentukan gambar mana yang boleh berjalan di mesin. Integritas kode memvalidasi rantai tanda tangan sebuah gambar sebelum eksekusi, dan validasi itu dapat mencakup pertanyaan pencabutan. Jawabannya bergantung pada titik distribusi CRL atau responder OCSP yang disebutkan sertifikat di dalam dirinya.
Ini permintaan jaringan biasa, jadi biayanya bergantung pada lokasi responder. Ketika hanya dapat dijangkau melalui terowongan, atau namanya hanya diselesaikan melalui server DNS di balik terowongan, validasi menunggu terowongan siap. Visual Studio memuat banyak assembly dan ekstensi bertanda tangan saat mulai, dan sedikit keterlambatan per gambar menjadi jeda yang terlihat. Tidak ada yang cacat dan kebijakan berperilaku persis seperti yang dikonfigurasi, karena itu menghapus kebijakan tampak memperbaiki masalahnya.
Setiap gambar bertanda tangan dapat memicu panggilan jaringan
Mulailah dari biner bertanda tangan yang sudah ada di disk dan mintalah platform memverifikasinya dengan perilaku pengambilan yang sama seperti peluncuran. Jalankan perintah sekali di terowongan dan sekali di luarnya, lalu bandingkan baris pengambilan alih-alih putusan akhir.
certutil -verify -urlfetch C:\Tools\Contoso.Editor.dll
nslookup ocsp.contoso.example
Test-NetConnection ocsp.contoso.example -Port 80
Keluarannya mencantumkan rantai, alamat CRL dan OCSP, dan apakah setiap pengambilan berhasil. Responder yang kehabisan waktu di terowongan dan menjawab di luarnya adalah bukti yang Anda butuhkan, dan bobotnya jauh lebih besar daripada kesan lambat. Jika pengambilan berhasil dengan lambat, catat alamatnya agar langkah berikutnya dapat menguji host itu secara langsung.
Selesaikan nama host responder dan uji keterjangkauan di luar aplikasi, karena nama yang gagal diselesaikan tidak akan pernah diperbaiki oleh pengaturan klien. Log operasional CodeIntegrity memasok separuh bukti lainnya, mengaitkan peristiwa validasi dengan stempel waktu peluncuran yang lambat.
Persingkat jeda tanpa menghapus kendali
Menonaktifkan kebijakan atau mengalihkannya ke mode audit membuat jeda hilang dan mencabut kendali yang diterapkan organisasi, jadi anggap itu perbaikan yang salah. Pilihan yang lebih sempit adalah perubahan perutean agar responder dapat dijangkau melalui terowongan, pengecualian terowongan terpisah untuk host responder, koreksi DNS saat nama diselesaikan ke alamat yang tak terjangkau, atau proxy cache yang didukung untuk data pencabutan. Masing-masing punya pemilik berbeda: tim PKI memiliki keterjangkauan responder, tim jaringan memiliki pemisahan terowongan, dan tim titik akhir memiliki kebijakan.
Mengecualikan setiap host pencabutan dari terowongan tidak otomatis aman, karena responder internal bisa saja internal dengan sengaja. Konfirmasikan pengecualian itu dengan tim yang menjalankan PKI sebelum menulis aturan yang diam-diam mengirim pemeriksaan sertifikat ke internet publik. Perubahan yang dibuat tanpa konfirmasi itu adalah jenis yang dikembalikan pada penyegaran kebijakan berikutnya.
Verifikasi cold start setelah perubahan
Ukur cold start di kedua keadaan dan simpan angkanya, karena warm start hampir tidak membuktikan apa pun setelah assembly ada di cache. Ulangi peluncuran dari sesi baru agar jalur pemuatan ekstensi diuji lagi.
Get-WinEvent -LogName Microsoft-Windows-CodeIntegrity/Operational -MaxEvents 40 |
Where-Object { $_.TimeCreated -gt (Get-Date).AddMinutes(-10) }
Get-ChildItem C:\Windows\System32\CodeIntegrity\CiPolicies\Active
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard
Konfigurasi yang diperbaiki tetap menghubungi responder, atau memakai jalur cache yang disetujui tim PKI Anda, dan log menunjukkan validasi selesai alih-alih kehabisan waktu. Pastikan aplikasi yang baru ditandatangani masih dapat diluncurkan, karena kebijakan yang mengizinkan semuanya bukan perbaikan yang berhasil. Periksa juga folder kebijakan aktif dan status penegakannya, agar diketahui bahwa kebijakan yang Anda debug adalah yang berjalan. Simpan rantai sertifikat, alamat responder, dan stempel waktu peluncuran dalam tiket yang sama, karena pembaruan biasanya memindahkan responder dan membiarkan aturan pengecualian atau DNS menjadi usang.