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 را کهنه می‌گذارد.

مقالات مرتبط