Visual Studio بطيء فقط على VPN؟ افحص CRL وOCSP
عند تفعيل سياسة WDAC، قد يكون الإطلاق البطيء الواحد استعلام إبطال وليس النفق. أثبت أي خطوة تعرقل قبل تخفيف السياسة.
يبدأ Visual Studio بالعمل بشكل طبيعي في المنزل، ثم ينضم الحاسوب المحمول نفسه إلى نفق المؤسسة، فيقف كل إطلاق على شاشة البداية لنصف دقيقة. أزل السياسة فيزول التعطل معها؛ أزل النفق فتحدث الشيء نفسه. الملاحظتان دقيقتان، ولهذا تُلقى اللائمة على المكوّنَين بالتبادل. السؤال الفاصل هو ما إذا كان استعلام إبطال الشهادة ينتظر مسارًا لا يوفره إلا النفق، أم أنه لا يجد أي مسار على الإطلاق.
قِس زمن الجلب لا زمن الإطلاق
تحدِّد سياسة WDAC، المنشورة كملف SiPolicy.p7b موقَّع، أي الصور يُسمح بتشغيلها على الجهاز. يتحقق سلامة الشيفرة من سلسلة توقيع الصورة قبل تنفيذها، وقد يتضمن ذلك التحقق سؤالًا عن الإبطال. وتعتمد الإجابة على نقطة توزيع CRL أو مستجيب OCSP الذي تسميه الشهادة في داخلها.
هذه طلبات شبكة عادية، لذا تعتمد كلفتها على مكان المستجيب. وعندما لا يكون الوصول إليه ممكنًا إلا عبر النفق، أو لا يُحلّ اسمه إلا عبر خادم DNS خلف النفق، ينتظر التحقق جاهزية النفق. يحمّل Visual Studio عند بدء التشغيل عددًا كبيرًا من التجميعات والإضافات الموقَّعة، فيصبح التأخير الصغير لكل صورة تعطلًا مرئيًا. لا شيء مشوّه والسياسة تعمل تمامًا كما هي مضبوطة، ولهذا يبدو إزالة السياسة كأنها تصلح المشكلة.
كل صورة موقَّعة قد تطلق نداء شبكة
ابدأ بملف ثنائي موقَّع موجود بالفعل على القرص واطلب من المنصة التحقق منه بسلوك الجلب نفسه الذي يستخدمه الإطلاق. شغّل الأمر مرة على النفق ومرة خارجه، ثم قارن أسطر الجلب بدلًا من الحكم النهائي.
certutil -verify -urlfetch C:\Tools\Contoso.Editor.dll
nslookup ocsp.contoso.example
Test-NetConnection ocsp.contoso.example -Port 80
تسرد المخرجات السلسلة وعناوين CRL وOCSP وما إذا كان كل جلب قد نجح. المستجيب الذي تنتهي مهلته على النفق ويستجيب خارجه هو الدليل الذي تحتاجه، وهو أثقل وزنًا بكثير من انطباع عن البطء. وإذا نجح الجلب ببطء، فدوّن العنوان كي تختبر الخطوة التالية ذلك المضيف مباشرة.
حلّل اسم مضيف المستجيب واختبر إمكانية الوصول من خارج التطبيق، لأن الاسم الذي يفشل حلّه لن يُصلحه أي إعداد في العميل. ويوفّر سجل CodeIntegrity التشغيلي النصف الآخر من الدليل، بربط حدث التحقق بالطابع الزمني للإطلاق البطيء.
قلّل التأخير دون إزالة الضابط
إزالة السياسة أو تحويلها إلى وضع التدقيق تُذهب التأخير وتزيل الضابط الذي نشرته المؤسسة، فاعتبر ذلك إصلاحًا خاطئًا. الخيارات الأضيق هي تغيير في التوجيه بحيث يصبح المستجيب قابلًا للوصول عبر النفق، أو استثناء من النفق المنقسم لمضيفي المستجيب، أو تصحيح DNS عندما يُحلّ الاسم إلى عنوان لا يمكن الوصول إليه، أو وكيل تخزين مؤقت مدعوم لبيانات الإبطال. ولكل منها مالك مختلف: فريق PKI يملك إمكانية الوصول إلى المستجيب، وفريق الشبكة يملك تقسيم النفق، وفريق الأجهزة الطرفية يملك السياسة.
استبعاد كل مضيف إبطال من النفق ليس آمنًا تلقائيًا، لأن المستجيب الداخلي قد يكون داخليًا عن قصد. أكِّد الاستبعاد مع الفريق الذي يدير PKI قبل كتابة قاعدة ترسل فحوص الشهادات بهدوء إلى الإنترنت العام. والتغيير الذي يُجرى دون ذلك التأكيد هو النوع الذي يُلغى عند تحديث السياسة التالي.
تحقّق من إقلاع بارد بعد التغيير
قِس إقلاعًا باردًا في الحالتين واحتفظ بالأرقام، لأن الإقلاع الدافئ لا يثبت شيئًا تقريبًا بعد تخزين التجميعات مؤقتًا. أعد الإطلاق من جلسة جديدة كي يُمارَس مسار تحميل الإضافات مرة أخرى.
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
الإعداد المُصلح يظل يتصل بالمستجيب، أو يستخدم مسار تخزين مؤقت وافق عليه فريق PKI، ويُظهر السجل أن التحقق يكتمل بدلًا من أن تنتهي مهلته. أكّد أن تطبيقًا موقَّعًا حديثًا ما زال يُطلق، لأن سياسة تسمح بكل شيء ليست إصلاحًا ناجحًا. افحص أيضًا مجلد السياسة النشطة وحالة التنفيذ، حتى تكون السياسة التي تُصحِّح أعطالها معروفة بأنها هي العاملة. احتفظ بسلسلة الشهادات وعنوان المستجيب وأوقات الإطلاق في التذكرة نفسها، لأن التجديد عادةً ينقل المستجيب ويترك قاعدة الاستبعاد أو DNS قديمة.