Visual Studio khởi động bình thường ở nhà, sau đó cùng chiếc laptop đó tham gia đường hầm của công ty và mỗi lần khởi chạy đều đứng ở màn hình khởi động nửa phút. Bỏ chính sách đi thì độ trễ cũng biến mất; bỏ đường hầm đi thì điều tương tự xảy ra. Cả hai quan sát đều đúng, vì vậy hai thành phần liên tục đổ lỗi cho nhau. Câu hỏi quyết định là liệu truy vấn thu hồi chứng chỉ có đang chờ một tuyến chỉ đường hầm cung cấp, hay không tìm thấy tuyến nào cả.

Đo việc tải xuống, không phải khởi chạy

Một chính sách WDAC, được triển khai dưới dạng tệp SiPolicy.p7b đã ký, quyết định những hình ảnh nào được chạy trên máy. Tính toàn vẹn mã xác thực chuỗi chữ ký của một hình ảnh trước khi thực thi, và việc xác thực đó có thể bao gồm câu hỏi về thu hồi. Câu trả lời phụ thuộc vào điểm phân phối CRL hoặc máy phản hồi OCSP mà chứng chỉ nêu bên trong nó.

Đây là những yêu cầu mạng thông thường, nên chi phí phụ thuộc vào vị trí của máy phản hồi. Khi nó chỉ truy cập được qua đường hầm, hoặc tên của nó chỉ được phân giải qua một máy chủ DNS phía sau đường hầm, việc xác thực chờ đường hầm sẵn sàng. Visual Studio tải nhiều assembly và tiện ích mở rộng đã ký khi khởi động, và một độ trễ nhỏ cho mỗi hình ảnh trở thành một điểm dừng thấy được. Không có gì hỏng và chính sách hoạt động đúng như đã cấu hình, vì vậy việc bỏ chính sách có vẻ sửa được vấn đề.

Mỗi hình ảnh đã ký đều có thể kích hoạt một cuộc gọi mạng

Bắt đầu với một tệp nhị phân đã ký đã có trên đĩa và yêu cầu nền tảng xác minh nó với cùng hành vi tải xuống mà một lần khởi chạy sử dụng. Chạy lệnh một lần trên đường hầm và một lần bên ngoài, sau đó so sánh các dòng tải xuống thay vì phán quyết cuối cùng.

certutil -verify -urlfetch C:\Tools\Contoso.Editor.dll
nslookup ocsp.contoso.example
Test-NetConnection ocsp.contoso.example -Port 80

Kết quả liệt kê chuỗi, địa chỉ CRL và OCSP và việc mỗi lần tải xuống có thành công hay không. Một máy phản hồi hết thời gian trên đường hầm và trả lời bên ngoài chính là bằng chứng bạn cần, và nó nặng hơn nhiều so với cảm giác chậm. Nếu việc tải xuống thành công nhưng chậm, hãy ghi lại địa chỉ để bước tiếp theo có thể kiểm tra trực tiếp máy chủ đó.

Phân giải tên máy chủ của máy phản hồi và kiểm tra khả năng truy cập bên ngoài ứng dụng, vì một tên không phân giải được sẽ không bao giờ được sửa bởi bất kỳ cài đặt máy khách nào. Nhật ký vận hành CodeIntegrity cung cấp nửa còn lại của bằng chứng, liên kết một sự kiện xác thực với dấu thời gian của lần khởi chạy chậm.

Rút ngắn độ trễ mà không bỏ kiểm soát

Tắt chính sách hoặc chuyển sang chế độ kiểm toán làm độ trễ biến mất và bỏ đi kiểm soát mà tổ chức đã triển khai, vì vậy hãy coi đó là cách sửa sai. Các lựa chọn hẹp hơn là thay đổi định tuyến để máy phản hồi truy cập được qua đường hầm, một ngoại lệ trong đường hầm chia tách cho các máy chủ phản hồi, sửa DNS khi tên phân giải thành địa chỉ không thể truy cập, hoặc một proxy bộ nhớ đệm được hỗ trợ cho dữ liệu thu hồi. Mỗi lựa chọn có chủ sở hữu khác nhau: nhóm PKI sở hữu khả năng truy cập của máy phản hồi, nhóm mạng sở hữu việc chia đường hầm và nhóm điểm cuối sở hữu chính sách.

Loại trừ mọi máy chủ thu hồi khỏi đường hầm không tự động an toàn, vì một máy phản hồi nội bộ có thể là nội bộ có chủ đích. Xác nhận ngoại lệ với nhóm vận hành PKI trước khi viết một quy tắc âm thầm gửi các kiểm tra chứng chỉ ra internet công cộng. Một thay đổi được thực hiện mà không có xác nhận đó là loại bị hoàn nguyên ở lần làm mới chính sách tiếp theo.

Xác minh khởi động nguội sau thay đổi

Đo một lần khởi động nguội ở cả hai trạng thái và giữ lại các con số, vì khởi động ấm gần như không chứng minh được gì khi các assembly đã nằm trong bộ nhớ đệm. Lặp lại việc khởi chạy từ một phiên mới để đường tải tiện ích mở rộng được thử lại.

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

Một cấu hình đã sửa vẫn liên hệ với máy phản hồi, hoặc dùng một đường bộ nhớ đệm mà nhóm PKI của bạn đã phê duyệt, và nhật ký cho thấy việc xác thực hoàn tất thay vì hết thời gian. Xác nhận rằng một ứng dụng mới được ký vẫn khởi chạy, vì một chính sách cho phép mọi thứ không phải là cách sửa thành công. Kiểm tra cả thư mục chính sách đang hoạt động và trạng thái thực thi, để biết rằng chính sách bạn đang gỡ lỗi chính là chính sách đang chạy. Giữ chuỗi chứng chỉ, địa chỉ máy phản hồi và dấu thời gian khởi chạy trong cùng một phiếu, vì việc gia hạn thường di chuyển máy phản hồi và để quy tắc ngoại lệ hoặc DNS trở nên lỗi thời.

Bài viết liên quan