Tôi đang cố gắng giảm thiểu lỗ hổng bảo mật của chúng tôi đối với cuộc tấn công Poodle SSL 3.0 Dự phòng . Quản trị viên của chúng tôi đã bắt đầu vô hiệu hóa SSL để hỗ trợ TLS cho các kết nối đến máy chủ của chúng tôi. Và chúng tôi cũng đã khuyên nhóm của mình nên tắt SSL trong trình duyệt web của họ. Bây giờ tôi đang xem xét cơ sở mã .NET của chúng tôi, cơ sở này bắt đầu kết nối HTTPS với các dịch vụ khác nhau thông qua System.Net.HttpWebRequest . Tôi tin rằng các kết nối này có thể dễ bị tấn công MITM nếu chúng cho phép dự phòng từ TLS sang SSL. Đây là những gì tôi đã xác định cho đến nay. Ai đó có thể vui lòng kiểm tra kỹ điều này để xác minh rằng tôi đúng không? Lỗ hổng này là hoàn toàn mới, vì vậy tôi vẫn chưa thấy bất kỳ hướng dẫn nào từ Microsoft về cách giảm thiểu nó trong .NET:
Các giao thức được phép cho lớp System.Net.Security.SslStream, làm nền tảng cho giao tiếp an toàn trong .NET, được đặt toàn cầu cho mỗi AppDomain thông qua thuộc tính System.Net.ServicePointManager.SecurityProtocol .
Giá trị mặc định của thuộc tính này trong .NET 4.5 là
Ssl3 | Tls
(mặc dù tôi không thể tìm thấy tài liệu để sao lưu điều đó.) SecurityProtocolType là một enum có thuộc tính Flags, vì vậy nó hơi HOẶC trong hai giá trị đó. Bạn có thể kiểm tra điều này trong môi trường của mình bằng dòng mã này:Console.WriteLine (System.Net.ServicePointManager.SecurityProtocol.ToString ());
Điều này sẽ được thay đổi thành chỉ
Tls
, hoặc có thểTls12
, trước khi bạn bắt đầu bất kỳ kết nối nào trong ứng dụng của mình:System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;
Quan trọng: Vì thuộc tính hỗ trợ nhiều cờ bitwise, tôi giả sử rằng SslStream sẽ không tự động dự phòng cho các giao thức không xác định khác trong quá trình bắt tay. Nếu không, hỗ trợ nhiều cờ sẽ có ích gì?
Cập nhật về TLS 1.0 so với 1.1 / 1.2:
Theo chuyên gia bảo mật của Google Adam Langley, TLS 1.0 sau đó được phát hiện là có thể bị POODLE tấn công nếu không được triển khai đúng cách , vì vậy bạn nên cân nhắc chuyển sang TLS 1.2 dành riêng.
Cập nhật cho .NET Framework 4.7 trở lên:
Như đã ám chỉ bởi Giáo sư Von Lemongargle bên dưới, bắt đầu từ phiên bản 4.7 của .NET Framework, không cần sử dụng bản hack này vì cài đặt mặc định sẽ cho phép HĐH chọn phiên bản giao thức TLS an toàn nhất. Xem các phương pháp hay nhất về Bảo mật lớp truyền tải (TLS) với .NET Framework để biết thêm thông tin.