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 .NET Framework. 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.

Lỗ hổng này được khắc phục 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 .NET Framework 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ật

CVE số

Công bố công khai

Khai thác

Lỗ hổng bảo mật giả mạo TLS/SSL

CVE-2016-0149

Không

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

Thay đổi giới thiệu trong Microsoft Security Bulletin MS16-065 khiến TLS ghi đầu tiên 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 Microsoft Security Bulletin MS12-006 cho phép 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 .NET Framework ngắt. Bài viết này mô tả hai phương pháp bạn có thể sử dụng để cập nhật ứng dụng của bạn hoạt động đúng sau khi bạn áp dụng Microsoft Security Bulletin MS16-065.

Mitigations cho vấn đề tương thích

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ổ đăng ký hoặc lập cấu hình Phiên bản giao thức.

  • Sửa đổi đăng ký

    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ổ đăng ký không đúng. Trước khi bạn sửa đổi, sao lưu sổ đăng ký để phục hồi trong trường hợp xảy ra sự cố.

    .NET Framework 4.0 và .NET Framework 4.5.x ứng dụng đang chạy trên .NET Framework 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á đăng ký SchUseStrongCrypto . Khoá đăng ký này được thảo luận trong phần Nên hành động của Microsoft Security 2960358 tư vấn đề trên trang web Microsoft TechNet.

    Quan trọng Thay đổi đăng ký 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 không đặt giá trị ServicePointManager.SecurityProtocol rõ ràng. Ví dụ như lớp bao gồm System.Net.Http.HttpClient, System.Net.FtpWebRequest, System.Net.HttpWebRequest System.Net.Mail.SmtpClient. Thiết lập ServicePointManager.SecurityProtocol mã sẽ ưu tiên trong sổ đăng ký.

    • Ứng dụng sử dụng quá tải SslStream AuthenticateAsClient(String) .


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

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

    Lưu ý .NET Framework 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 Microsoft Security 2960358 tư vấn đề trên trang web 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ẫu mã có sẵn ở đây để tham khảo về cách khắc phục ứng dụng xác thực hiện cuộc gọi đọc .

Đối với một mẫu yêu cầu HTTP 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 cài đặt, xem phần "Thông tin".

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

Giải pháp cho vấn đề tương thích ứ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á đăng ký (có sẵn cho tất cả các phiên bản .NET Framework)

Vô hiệu hoá các cấu trúc SCH_SEND_AUX_RECORD (toàn cầu)

Vô hiệu hoá SCH_SEND_AUX_RECORD cấu trúc cho từng ứng dụng

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 đăng ký 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 đăng ký sau:

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.

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ổ đăng ký.

Đối với các ứng dụng Microsoft .NET Framework 3.5 nhắm mục tiêu:

Download Tải xuống tệp ManualOptOutSchSendAuxRecord20.reg bây giờ.
Đối với các ứng dụng nhắm mục tiêu Microsoft .NET Framework 4.0 và phiên bản mới hơn:

Download Tải xuống tệp ManualOptOutSchSendAuxRecord40.reg bây giờ.
Để 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ổ đăng ký.

Đối với các ứng dụng Microsoft .NET Framework 3.5 nhắm mục tiêu:

Download Tải xuống tệp ManualOptInSchSendAuxRecord20.reg bây giờ.
Đối với các ứng dụng nhắm mục tiêu Microsoft .NET Framework 4.0 và phiên bản mới hơn:

Download Tải xuống tệp ManualOptInSchSendAuxRecord40.reg bây giờ.
Để 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ợ Microsoft từ dịch vụ trực tuyếnMicrosoft đã 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 đăng ký 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 đăng ký sau:

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.

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 .NET Framework 4.6 và các phiên bản)

Bắt đầu với .NET Framework 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 đăng ký.

Trong .NET Framework 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 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á đăng ký (tính chung)

    Vị trí đăng ký: HKEY_LOCAL_MACHINE\Software\Microsoft\. NETFramework\AppContextHKEY_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

Đâ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 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 sửa chữa.

Không có sự giảm thiểu

Vớ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 byte 94: <<< nhận / HTTP/1.0
Host: 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] Trả lời: <<<<< HTTP/1.1 200 OK

>>>>>

[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 >>>
[Server] Nhận 93 byte: <<< ET / HTTP/1.0
Host: 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 >>>>>
[Khách 2: 475 byte] Trả lời: <<<<< TTP/1.1 200 OK

>>>>>


Bạn cần thêm trợ giúp?

Phát triển các kỹ năng của bạn
Khám phá nội dung đào tạo
Sở hữu tính năng mới đầu tiên
Tham gia Microsoft dùng nội bộ

Thông tin này có hữu ích không?

Bạn hài lòng đến đâu với chất lượng dịch thuật?
Điều gì ảnh hưởng đến trải nghiệm của bạn?

Cảm ơn phản hồi của bạn!

×