Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

MS16-065: Mô tả TLS/SSL giao thức thông tin công bố lỗ hổng (CVE-2016-0149): 10 tháng 5 năm 2016

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch thuật của Microsoft và có thể được Cộng đồng Microsoft chỉnh sửa lại thông qua công nghệ CTF thay vì một biên dịch viên chuyên nghiệp. Microsoft cung cấp các bài viết được cả biên dịch viên và phần mềm dịch thuật thực hiện và cộng đồng chỉnh sửa lại để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng nhiều ngôn ngữ Tuy nhiên, bài viết do máy dịch hoặc thậm chí cộng đồng chỉnh sửa sau không phải lúc nào cũng hoàn hảo. Các bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này: 3155464
Tóm tắt
Thông tin công bố lỗ hổng bảo mật tồn tại trong giao thức Transport Layer Security và giao thức Secure Socket Layer (TLS/SSL) khi thực hiện trong phần mã hóa của Microsoft Khuôn khổ .NET. Kẻ tấn công đã thành công khai thác lỗ hổng này có thể giải mã được mã hoá TLS/SSL lưu lượng.

Khai thác lỗ hổng bảo mật, kẻ nào trước tiên phải đưa điện dữ liệu vào kênh bảo mật và sau đó thực hiện một cuộc tấn công người trong Trung (MiTM) giữa các khách hàng nhắm mục tiêu và máy chủ hợp pháp. Bản cập nhật này giải quyết các lỗ hổng bằng cách thay đổi cách phần mã hóa .NET gửi và nhận được mã hóa mạng gói.

Các bản vá lỗ hổng này là một phần của Microsoft Security Bulletin MS16-065. Bản cập nhật này thay đổi cách phần mã hóa Khuôn khổ .NET gửi và nhận được mã hóa mạng gói.

Bảng sau có chứa liên kết đến các mục tiêu chuẩn cho mỗi lỗ hổng trong danh sách điểm yếu thường gặp và tiếp xúc.

Tiêu đề lỗ hổng bảo mậtCVE sốCông bố công khaiKhai thác
Lỗ hổng bảo mật giả mạo TLS/SSLCVE 2016 0149Không

Giải quyết lỗ hổng bảo mật

Thay đổi giới thiệu trong Microsoft Security Bulletin MS16-065 nguyên nhân đầu tiên TLS ghi lại sau khi bắt tay được chia. Điều này khiến SslStream, WebRequest (HttpWebRequest, FtpWebRequest), SmtpClient và HttpClient (nếu dựa trên HttpWebRequest) dòng trở lại một byte duy nhất để đọc đầu tiên, ngay lập tức theo byte còn lại (n-1) trong đọc tiếp. Thay đổi hành vi này chỉ xảy ra cho các ứng dụng sử dụng TLS 1.0 + mã khối loạt, nhưng khi họ sử dụng TLS 1.1 hoặc TLS 1.2.

Lưu ý: Là điều kiện tiên quyết, bạn phải cài đặt chuyên biệt Microsoft Security Bulletin MS12-006 để bật Cập nhật này.

Thay đổi này có thể gây ra một số ứng dụng dựa trên Khuôn khổ .NET ngắt. Bài viết này mô tả hai phương pháp bạn có thể sử dụng ứng dụng của bạn hoạt động đúng sau khi bạn áp dụng bản Cập Nhật Microsoft Security Bulletin MS16-065.

Mitigations cho vấn đề tương hợp về sau

Tuỳ chọn 1: Chuyển giao thức TLS 1.2

Tuỳ chọn này làm cho ứng dụng sử dụng giao thức TLS 1.2 bằng cách sửa đổi sổ kiểm nhập hoặc lập cấu hình Phiên bản giao thức.
  • Sửa đổi kiểm nhập

    Quan trọng Làm theo các bước trong phần này một cách cẩn thận. Vấn đề nghiêm trọng có thể xảy ra nếu bạn sửa đổi sổ kiểm nhập không đúng. Trước khi bạn sửa đổi sao lưu sổ kiểm nhập để khôi phục trong trường hợp xảy ra sự cố.

    Khuôn khổ .NET 4.0 và Khuôn khổ .NET 4.5.x ứng dụng đang chạy trên Khuôn khổ .NET 4.5 và các phiên bản có thể chuyển đổi giao thức mặc định TLS 1.2, TLS 1.1 và TLS 1.0 cho phép khoá kiểm nhập SchUseStrongCrypto . Khoá kiểm nhập này được đề cập trong phần Nên hoạt động của các Microsoft Security 2960358 tư vấn chủ đề trên web site Microsoft TechNet.

    Quan trọng Thay đổi kiểm nhập này sẽ chỉ hoạt động nếu các điều kiện sau là đúng:
    • Sử dụng API ServicePointManager dựa trên các ứng dụng là cài đặt chuyên biệt không vào ServicePointManager.SecurityProtocol giá trị rõ ràng. Ví dụ như lớp bao gồm System.Net.Http.HttpClient, System.Net.FtpWebRequest, System.Net.HttpWebRequestSystem.Net.Mail.SmtpClient. Thiết lập ServicePointManager.SecurityProtocol mã sẽ ưu tiên trong sổ kiểm nhập.
    • Ứng dụng đang sử dụng SslStream AuthenticateAsClient(String) quá tải.

  • Lập cấu hình Phiên bản giao thức

    Khuôn khổ .NET 4.0 và các ứng dụng 4.5 có đang chạy trên các phiên bản Khuôn khổ .NET 4.5 và sử dụng các SslStream AuthenticateAsClient(String,X509CertificateCollection,SslProtocols,Boolean) quá tải phải được biên, xác định SslProtocols.Tls12, SslProtocols.Tls11SslProtocols.Tls với tham số thứ ba. Mô tả đầy đủ về cách sử dụng lớp SslStream, hãy xem phần Lớp SslStream chủ đề trên Trang dành cho Nhà phát triển Microsoft (MSDN).

    Lưu ý: Khuôn khổ .NET 4.6 và các phiên bản sử dụng TLS 1.2, TLS 1.1 và TLS 1.0 là giao thức mặc định. Điều này được thảo luận trong phần Microsoft Security 2960358 tư vấn chủ đề trên web site Microsoft TechNet.

Tuỳ chọn 2: Xử lý chia gói

Bản cập nhật này gây ra một hồ sơ duy nhất được chia thành nhiều hồ sơ. Vì vậy, nếu một ứng dụng đang chờ ghi đầy đủ có sẵn trong một đơn đọc , các ứng dụng có thể phá vỡ. Để đảm bảo rằng các ứng dụng hoạt động bình thường, kiểm tra các ứng dụng xử lý chia gói bằng cách thực hiện cuộc gọi Stream.Read bình thường. Bạn có thể sử dụng mã mẫu có sẵn ở đây tham khảo cách khắc phục ứng dụng xác thực hiện đọc gọi.

Một yêu cầu HTTP mẫu cho thấy sự khác biệt trong chế độ trước (với thiểu) và sau (không có thiểu) Cập Nhật 31474613147458 cài đặt chuyên biệt, hãy xem phần "Thông tin".

Ví dụ: hoàn thành phương pháp Stream.Read xem các Phương pháp Stream.Read (Byte[],Int32,Int32) chủ đề trên Trang dành cho Nhà phát triển Microsoft (MSDN).

Giải pháp cho vấn đề tương hợp về sau ứng dụng

Cảnh báo Các giải pháp có thể khiến máy tính hoặc mạng dễ bị tấn công bởi những người dùng nguy hiểm hoặc bởi phần mềm nguy hiểm như vi-rút. Chúng tôi không khuyên bạn nên các giải pháp nhưng cung cấp thông tin này để bạn có thể thực hiện các giải pháp theo cách riêng của bạn. Sử dụng các giải pháp rủi ro của riêng bạn.

Phương pháp 1: Cập Nhật khoá kiểm nhập (có sẵn cho tất cả các phiên bản .NET Framework)



Vô hiệu hoá cấu trúc SCH_SEND_AUX_RECORD (toàn cầu)
Đối với tất cả ứng dụng, thêm vào khoá con kiểm nhập sau:
Vị trí đăng ký:
HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\<version_number>

Tên DWORD: SchSendAuxRecord
Dữ liệu giá trị: 0

Lưu ý: Giữ chỗ <version_number>là v4.0.30319 hoặc v2.0.50727, tuỳ thuộc vào phiên bản.

Đối với ứng dụng 32-bit chạy trên máy tính 64-bit, cũng thêm vào khoá con kiểm nhập sau:
</version_number>
Vị trí đăng ký:
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\.NETFramework\<version_number>

Tên DWORD: SchSendAuxRecord
Dữ liệu giá trị: 0

Lưu ý: Giữ chỗ <version_number>là v4.0.30319 hoặc v2.0.50727, tuỳ thuộc vào phiên bản.

</version_number>
Giải pháp
Tạm thời vô hiệu hoá chế độ bảo mật được mô tả trong bài viết này, bấm vào liên kết thích hợp để tải xuống tệp .reg, và sau đó bấm đúp vào tệp .reg tải xuống để thực hiện thay đổi sổ kiểm nhập.

Đối với các ứng dụng Microsoft Khuôn khổ .NET 3.5 nhắm mục tiêu:

Đối với các ứng dụng nhắm mục tiêu Microsoft Khuôn khổ .NET 4.0 và phiên bản mới hơn:

Để kích hoạt lại chế độ bảo mật được mô tả trong bài viết này, bấm vào liên kết thích hợp để tải xuống tệp .reg, và sau đó bấm đúp vào tệp .reg tải xuống để thực hiện thay đổi sổ kiểm nhập.

Đối với các ứng dụng Microsoft Khuôn khổ .NET 3.5 nhắm mục tiêu:

Đối với các ứng dụng nhắm mục tiêu Microsoft Khuôn khổ .NET 4.0 và phiên bản mới hơn:

Để biết thêm thông tin về cách tải xuống tệp hỗ trợ của Microsoft, hãy bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức của Microsoft:
119591 Cách tải xuống các tệp hỗ trợ của Microsoft từ bản ghi dịch vụ trực tuyến
Microsoft đã quét vi-rút tệp này. Microsoft đã sử dụng phần mềm phát hiện vi-rút mới nhất đã có vào ngày tệp được đăng. Tệp được lưu trữ trên máy chủ được tăng cường bảo mật giúp ngăn chặn mọi thay đổi trái phép đối với tệp.


Vô hiệu hoá SCH_SEND_AUX_RECORD cấu trúc cho từng ứng dụng
Đối với tất cả ứng dụng, thêm vào khoá con kiểm nhập sau:
Vị trí đăng ký:
HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\<version_number>\System.Net.ServicePointManager.SchSendAuxRecord

Tên DWORD: Đường dẫn đầy đủ cho ứng dụng .exe (ví dụ: C:\MyApp\MyApp.exe)
Dữ liệu giá trị: 0

Lưu ý: Giữ chỗ <version_number>là v4.0.30319 hoặc v2.0.50727, tuỳ thuộc vào phiên bản.

Đối với ứng dụng 32-bit chạy trên máy tính 64-bit, cũng thêm vào khoá con kiểm nhập sau:
</version_number>
Vị trí đăng ký:
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\.NETFramework\<version_number>\System.Net.ServicePointManager.SchSendAuxRecord

Tên DWORD: Đường dẫn đầy đủ cho ứng dụng .exe (ví dụ: C:\MyApp\MyApp.exe)
Dữ liệu giá trị: 0 (giá trị chỉ có giá trị là 0. Bất kỳ giá trị nào khác sẽ bị bỏ qua.)

Lưu ý: Giữ chỗ <version_number>là v4.0.30319 hoặc v2.0.50727, tuỳ thuộc vào phiên bản.

</version_number>

Phương pháp 2: Thay đổi cấu hình ở mức ứng dụng (chỉ có sẵn cho phiên bản Khuôn khổ .NET 4.6 và các phiên bản)

Bắt đầu với Khuôn khổ .NET 4.6, bạn có thể thay đổi cấu hình ở cấp độ ứng dụng thông qua mã hoặc ứng dụng thay đổi cấu hình hoặc kiểm nhập.

Trong Khuôn khổ .NET 4.6, bạn có thể đặt chuyển đổi bằng cách sử dụng những phương pháp sau. Các ví dụ vô hiệu hoá tính năng bảo mật.
  • Lập trình

    Lần đầu tiên ứng dụng sẽ làm chạy mã sau. Điều này là do quản lý điểm bản ghi dịch vụ sẽ khởi chạy chỉ một lần.
    private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching"; private const string DontEnableSchSendAuxRecordName = @"Switch.System.Net.DontEnableSchSendAuxRecord"; AppContext.SetSwitch(DisableCachingName, true); AppContext.SetSwitch(DontEnableSchSendAuxRecordName , true);
  • Cấu hình ứng dụng

    Để thay đổi cấu hình ứng dụng, thêm các mục sau đây:
    <runtime><AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchSendAuxRecord=true"/></runtime>
  • Khoá kiểm nhập (tính chung)

    Vị trí đăng ký:
    HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\AppContext
    HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\AppContext

    Giá trị: Switch.System.Net.DontEnableSchSendAuxRecord
    Loại: Chuỗi
    Giá trị: Đúng

    Lưu ý: Switch.System.Net.DontEnableSchSendAuxRecord = False cho tất cả các ứng dụng.
Thông tin thêm
Đây là một mẫu máy khách/máy chủ Mô hình giao tiếp trước và sau khi cài đặt chuyên biệt bản cập nhật này. Thông tin này được cung cấp cho minh để xác định bất kỳ ứng dụng vỡ vì cài đặt chuyên biệt sửa chữa.

Không có sự giảm thiểuVới sự giảm thiểu
[Server] chờ kết nối (127.0.0.1:4431)
[Khách] Kết nối với localhost:4431
[Server] Khách hàng được kết nối.
[Khách] Kết nối. Xác thực.
[Server] Khách hàng xác thực.
[Khách] Gửi yêu cầu (94 byte)
[Khách] Chờ phản hồi.

[Server] Nhận 94 byte:<GET></GET>
Lưu trữ: contoso.com
Tác nhân người dùng: Kiểm tra ứng dụng

>>>
[Server] Trả lời với 476 byte.

[Khách 1: 476 byte] Phản hồi:<HTTP .1="" 200=""></HTTP>

>>>>>
[Server] chờ kết nối (127.0.0.1:4431)
[Khách] Kết nối với localhost:4431
[Server] Khách hàng được kết nối.
[Khách] Kết nối. Xác thực.
[Server] Khách hàng xác thực.
[Khách] Gửi yêu cầu (94 byte)
[Khách] Chờ phản hồi.
[Server] Nhận 1 byte: <G>>><b00> </b00> </G>
[Server] Nhận 93 byte:<ET></ET>
Lưu trữ: contoso.com
Tác nhân người dùng: Kiểm tra ứng dụng

>>>
[Server] Trả lời với 476 byte.
[Khách 1: 1 byte] Trả lời: <H>>>><b00> </b00> </H>
[Khách 2: 475 byte] Phản hồi:<TTP .1="" 200=""></TTP>

>>>>>

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 3155464 - Xem lại Lần cuối: 05/10/2016 17:10:00 - Bản sửa đổi: 1.0

Microsoft .NET Framework 4.6.1, Microsoft .NET Framework 4.6, Microsoft .NET Framework 4.5.2, Microsoft .NET Framework 3.5.1, Microsoft .NET Framework 3.5, Microsoft .NET Framework 2.0 Service Pack 2

  • kbsecvulnerability kbsecurity kbsecbulletin kbfix kbexpertiseinter kbbug atdownload kbmt KB3155464 KbMtvi
Phản hồi
>