STARTTLS có kém an toàn hơn TLS / SSL không?


45

Trong Thunderbird (và tôi cũng giả sử ở nhiều khách hàng khác), tôi có tùy chọn để chọn giữa "SSL / TLS" và "STARTTLS".

Theo như tôi hiểu, "STARTTLS" có nghĩa đơn giản là "mã hóa nếu cả hai đầu đều hỗ trợ TLS, nếu không thì không mã hóa chuyển khoản" . Và "SSL / TLS" có nghĩa là những từ đơn giản "luôn mã hóa hoặc hoàn toàn không kết nối" . Điều này có đúng không?

Hay nói cách khác:

STARTTLS có kém an toàn hơn SSL / TLS không, vì nó có thể chuyển sang bản rõ mà không thông báo cho tôi?

Câu trả lời:


46

Câu trả lời, dựa trên STARTTLS RFC cho SMTP ( RFC 3207 ) là:

STARTTLS kém an toàn hơn TLS.

Thay vì tự nói chuyện, tôi sẽ cho phép RFC tự nói, với bốn bit có liên quan được tô sáng trong BÓNG :

Một cuộc tấn công trung gian có thể được khởi chạy bằng cách xóa phản hồi "250 STARTTLS" khỏi máy chủ. Điều này sẽ khiến khách hàng không cố gắng bắt đầu một phiên TLS. Một cuộc tấn công trung gian khác là cho phép máy chủ thông báo khả năng STARTTLS của mình, nhưng để thay đổi yêu cầu của khách hàng để bắt đầu TLS và phản hồi của máy chủ. Để bảo vệ chống lại các cuộc tấn công như vậy, cả máy khách và máy chủ PHẢI có thể được cấu hình để yêu cầu đàm phán TLS thành công một bộ mật mã thích hợp cho các máy chủ được chọn trước khi tin nhắn có thể được chuyển thành công. Tùy chọn bổ sung sử dụng TLS khi có thể NÊN cũng được cung cấp. Một triển khai CÓ THỂ cung cấp khả năng ghi lại rằng TLS đã được sử dụng trong giao tiếp với một máy ngang hàng nhất định và tạo cảnh báo nếu nó không được sử dụng trong phiên sau đó.

Nếu đàm phán TLS thất bại hoặc nếu khách hàng nhận được phản hồi 454, khách hàng phải quyết định làm gì tiếp theo. Có ba lựa chọn chính: tiếp tục với phần còn lại của phiên SMTP , [...]

Như bạn có thể thấy, chính RFC tuyên bố (không rõ ràng lắm, nhưng đủ rõ ràng) rằng KHÔNG CÓ yêu cầu khách hàng thiết lập kết nối an toàn và thông báo cho người dùng nếu kết nối an toàn không thành công. Nó rõ ràng cung cấp cho khách hàng tùy chọn để âm thầm thiết lập các kết nối văn bản thuần túy .


5
Quan điểm của bạn chắc chắn là hợp lệ, nhưng do không có bất kỳ RFC hoặc thông số kỹ thuật chính thức nào liên quan đến SMTPS (tức là SMTP + "SSL / TLS ẩn" nơi SSL / TLS được thiết lập trước), khách hàng của SMTP / SMTPS cũng có thể quyết định quay lại kết nối đơn giản nếu họ không thể quản lý để bắt đầu kết nối SSL / TLS trên cổng 465. Đó hoàn toàn là một lựa chọn thực hiện.
Bruno

2
Có rất nhiều RFC để thiết lập kết nối TLS. Không nơi nào trong đó "cho phép kết nối văn bản đơn giản" tồn tại như một tùy chọn để tuân thủ RFC (ít nhất đó sẽ là tin tức với nhiều người). Vì vậy, SMTPS không yêu cầu RFC riêng biệt để bảo mật hơn STARTTLS.
Greg

1
Có RFC về TLS (RFC 5246 và người tiền nhiệm), PKI (RFC 5280), xác minh tên (RFC 6125), nhưng không có gì để mô tả sự tương tác giữa SMTP và SSL / TLS trong SMTPS chính thức như AFAIK, không giống như cách bạn nhận được một thông số kỹ thuật cho HTTPS: RFC 2818. Người ta có thể nói "rõ ràng, chỉ cần thiết lập kết nối SSL / TLS trước", nhưng không phải tất cả mọi thứ về nó đều rõ ràng (cụ thể là khía cạnh xác minh danh tính, chỉ được chính thức hóa gần đây trong RFC 6125).
Bruno

23

Không có sự khác biệt trong bảo mật giữa hai tùy chọn.

  • SSL / TLS mở kết nối SSL / TLS trước, sau đó bắt đầu giao dịch SMTP. Điều này phải xảy ra trên một cổng không có máy chủ SMTP không SSL / TLS đang chạy; không thể cấu hình một cổng duy nhất để xử lý cả văn bản thuần túy và kết nối được mã hóa do bản chất của các giao thức.

  • STARTTLS bắt đầu giao dịch SMTP và tìm kiếm hỗ trợ từ đầu kia cho TLS để đáp ứng với EHLO. Nếu khách hàng thấy STARTTLS trong danh sách lệnh được hỗ trợ, thì nó sẽ gửi STARTTLS và bắt đầu đàm phán để mã hóa. Tất cả điều này có thể (và thường xảy ra) xảy ra trên cổng SMTP tiêu chuẩn 25, một phần để tương thích ngược, nhưng cũng cho phép mã hóa cơ hội giữa các điểm cuối hỗ trợ cả hai nhưng không nhất thiết phải yêu cầu.

Nói chung, SSL / TLS chỉ được sử dụng giữa máy khách cuối và máy chủ. STARTTLS được sử dụng phổ biến hơn giữa các MTA để bảo đảm vận chuyển giữa các máy chủ.

Với hai triển khai đó, STARTTLS có thể được hiểu là không an toàn nếu người dùng hoặc quản trị viên cho rằng kết nối được mã hóa nhưng thực tế không được cấu hình để yêu cầu mã hóa. Tuy nhiên, mã hóa được sử dụng hoàn toàn giống với SSL / TLS và do đó, không ít nhiều dễ bị tổn thương trước một cuộc tấn công Man-in-the-Middle ngoài loại lỗi cấu hình này.


2
Nếu kết nối được mã hóa, cả SSL / TLS và STARTTLS đều giống nhau, vâng. Nhưng đó không phải là những gì tôi yêu cầu. Ý tôi là: Nếu tôi sử dụng STARTTLS, làm thế nào để tôi (với tư cách là người dùng) biết liệu kết nối của tôi có thực sự được bảo mật hay không? Nếu tôi cố gắng sử dụng SSL / TLS, tôi không thể kết nối nếu máy chủ không hỗ trợ, nhưng ít nhất không có gì được gửi dưới dạng văn bản gốc. Nhưng nếu STARTTLS quay trở lại bản rõ, thì thư của tôi sẽ được gửi trong bản rõ mà tôi không biết rằng nó đã được gửi trong bản rõ (khiến tôi nghĩ rằng tôi an toàn khi tôi không thực sự).
Foo Bar

6
Tôi không biết tại sao câu trả lời này được chọn là chính xác. Nó sai. Như Christopher chỉ ra, STARTTLS kém an toàn hơn TLS vì nó mang lại cảm giác an toàn sai lầm cho khách hàng.
Greg

4
@greg không có gì sai với giao thức. Lỗ hổng là các máy khách không tuân theo rfc và không cảnh báo người dùng khi kết nối không được mã hóa.
longneck

1
@longneck vì vậy ... có thể đây là một điều ngữ nghĩa, nhưng khách hàng không thể "không tuân theo" giao thức TLS và có một email đi qua, theo giai đoạn. Vì vậy, đó là một sự khác biệt có ý nghĩa.
Greg

2
@Bruno "Nó chỉ kém an toàn hơn nếu máy khách được triển khai kém" <= bạn chỉ đang đưa ra quan điểm của tôi cho tôi. Nếu có bất cứ điều gì khách hàng có thể làm để làm cho kết nối không an toàn trong khi vẫn thiết lập kết nối hoạt động, thì STARTTLS kém an toàn hơn TLS rõ ràng (nơi không thể thực hiện được).
Greg

8

Đối với email nói riêng, vào tháng 1 năm 2018, RFC 8314 đã được phát hành, trong đó khuyến nghị rõ ràng rằng "TLS tiềm ẩn" được sử dụng để ưu tiên cho cơ chế STARTTLS cho các lần gửi IMAP, POP3 và SMTP.

Tóm lại, bản ghi nhớ này hiện khuyến nghị rằng:

  • TLS phiên bản 1.2 trở lên được sử dụng cho tất cả lưu lượng giữa MUA và Máy chủ gửi thư và cả giữa Máy chủ MUA và Máy chủ truy cập thư.
  • MUA và Nhà cung cấp dịch vụ thư (MSP) (a) không khuyến khích sử dụng các giao thức Cleartext để truy cập thư và gửi thư và (b) không sử dụng các giao thức Cleartext cho các mục đích này càng sớm càng tốt.
  • Kết nối với Máy chủ gửi thư và Máy chủ truy cập thư được thực hiện bằng cách sử dụng "TLS tiềm ẩn" (như được định nghĩa dưới đây), để kết nối với cổng "Cleartext" và đàm phán TLS bằng lệnh STARTTLS hoặc lệnh tương tự.

(nhấn mạnh thêm)


4

Câu trả lời phụ thuộc vào một mức độ nào đó về ý nghĩa của "an toàn".

Đầu tiên, tóm tắt của bạn không nắm bắt được sự khác biệt giữa SSL / TLS và STARTTLS.

  • Với SSL / TLS, máy khách sẽ mở kết nối TCP tới "cổng SSL" được gán cho giao thức ứng dụng mà nó muốn sử dụng và bắt đầu nói TLS ngay lập tức.
  • Với STARTTLS, máy khách sẽ mở kết nối TCP tới "cổng Cleartext" được liên kết với giao thức ứng dụng mà nó muốn sử dụng, sau đó hỏi máy chủ "bạn có hỗ trợ giao thức nào?". Sau đó, máy chủ trả lời với một danh sách các phần mở rộng. Nếu một trong những tiện ích mở rộng đó là "STARTTLS", thì máy khách có thể nói "được, hãy sử dụng TLS" và hai bắt đầu nói TLS.

Nếu máy khách được cấu hình để yêu cầu TLS, hai cách tiếp cận ít nhiều an toàn như nhau. Nhưng có một số sự tinh tế về cách STARTTLS phải được sử dụng để làm cho nó an toàn và việc triển khai STARTTLS khó hơn một chút để có được những chi tiết đó đúng.

Mặt khác, nếu máy khách được cấu hình để chỉ sử dụng TLS khi TLS khả dụng và sử dụng Cleartext khi TLS không khả dụng, trước tiên khách hàng có thể làm gì để thử kết nối với cổng SSL được sử dụng bởi giao thức và nếu điều đó không thành công, sau đó kết nối với cổng Cleartext và thử sử dụng STARTTLS, và cuối cùng quay lại Cleartext nếu TLS không khả dụng trong cả hai trường hợp. Kẻ tấn công khá dễ dàng khiến kết nối cổng SSL bị lỗi (tất cả chỉ là một số gói TCP RST được định thời gian tốt hoặc chặn cổng SSL). Khó hơn một chút - nhưng chỉ một chút thôi - để kẻ tấn công đánh bại cuộc đàm phán STARTTLS và khiến lưu lượng truy cập ở trạng thái rõ ràng. Và sau đó, kẻ tấn công không chỉ được đọc email của bạn mà còn có thể chiếm được tên người dùng / mật khẩu của bạn để sử dụng trong tương lai.

Vì vậy, câu trả lời đơn giản là nếu bạn đang kết nối với máy chủ mà bạn đã biết hỗ trợ TLS (như trường hợp bạn đang gửi hoặc đọc email), bạn nên sử dụng SSL / TLS. Nếu kết nối bị tấn công, nỗ lực kết nối sẽ thất bại, nhưng mật khẩu và email của bạn sẽ không bị xâm phạm.

Mặt khác, nếu bạn đang kết nối với một số dịch vụ mà bạn không biết liệu nó có hỗ trợ TLS hay không, STARTTLS có thể tốt hơn một chút.

Khi STARTTLS được phát minh, các cuộc tấn công chỉ nghe "thụ động" là rất phổ biến, các cuộc tấn công "chủ động" trong đó kẻ tấn công sẽ tiêm lưu lượng để cố gắng bảo mật thấp hơn là ít phổ biến hơn. Trong khoảng 20 năm kể từ đó, các cuộc tấn công tích cực đã trở nên khả thi và phổ biến hơn.

Ví dụ: nếu bạn đang cố gắng sử dụng máy tính xách tay trong sân bay hoặc một nơi công cộng khác và cố gắng đọc thư của bạn qua wifi được cung cấp ở đó, bạn không biết mạng wifi đó đang làm gì với lưu lượng truy cập của mình. Rất phổ biến đối với các mạng wifi để định tuyến một số loại lưu lượng truy cập nhất định đến "proxy" xen kẽ giữa các ứng dụng khách của bạn và các máy chủ mà chúng đang cố gắng nói chuyện. Việc các proxy đó vô hiệu hóa cả STARTTLS và "thử một cổng rồi đến cổng khác" là một nỗ lực để khiến khách hàng của bạn quay trở lại với văn bản rõ ràng. Vâng, điều này xảy ra và đó chỉ là một ví dụ về cách lưu lượng truy cập của bạn có thể được theo dõi bởi một mạng. Và các cuộc tấn công như vậy không giới hạn ở các cơ quan ba nhà nước hỗ trợ,


1

Vâng, bạn có những điều cơ bản đúng. Và vâng, STARTTLS chắc chắn là kém an toàn. Nó không chỉ có thể chuyển sang bản rõ mà không cần thông báo, mà bởi vì nó phải chịu các cuộc tấn công trung gian. Vì kết nối bắt đầu rõ ràng, một MitM có thể loại bỏ lệnh STARTTLS và ngăn chặn việc mã hóa không bao giờ xảy ra. Tuy nhiên, tôi tin rằng người gửi thư có thể chỉ định rằng việc chuyển tiền chỉ xảy ra sau khi đường hầm được mã hóa được thiết lập. Vì vậy, bạn có thể làm việc xung quanh này.

Vậy tại sao một thứ như vậy thậm chí còn tồn tại? Vì lý do tương thích. Nếu một trong hai bên không hỗ trợ mã hóa, bạn vẫn có thể muốn kết nối hoàn tất đúng cách.


Vì vậy, một máy chủ có khả năng STARTTLS cũng sẽ luôn có khả năng SSL / TLS, phải không? Vì vậy, luôn luôn tốt hơn để thử SSL / TLS trước và xem nó có hoạt động không?
Foo Bar

2
@FooBar không, cái này không ngụ ý cái kia có sẵn. thực tế, chúng có thể được cấu hình với các miền xác thực hoàn toàn khác nhau.
longneck

3
STARTTLS không dễ bị tổn thương bởi MitM trừ khi bạn không xác nhận chứng chỉ hoặc sử dụng chứng chỉ yếu. Chứng chỉ vẫn được trình bày giống như mọi khi và khách hàng có thể yêu cầu nâng cấp TLS thành công trước khi tiếp tục. Điều đáng chú ý là đây chính xác là tình huống tương tự như SSL / TLS.
Falcon Momot

1
Không biết tại sao mọi người lại hạ thấp bạn, đây là câu trả lời chính xác, STARTTLS kém an toàn hơn TLS và nó mang lại cảm giác an toàn sai lầm. Các ISP chỉ có thể quy định nó: arstechnica.com/tech-policy/2014/11/ trên
Greg

1
Theo như giao thức, STARTTLS kém an toàn hơn TLS vì nó cho phép giao tiếp văn bản đơn giản mà không cảnh báo người dùng: serverfault.com/a/648282/207987
Greg

1

Đồng ý với @Greg. Những cuộc tấn công là có thể. Tuy nhiên, các MTA có thể được cấu hình (tùy thuộc vào MTA) để sử dụng "TLS bắt buộc", chứ không phải "TLS cơ hội". Điều này có nghĩa là TLS và chỉ TLS được sử dụng (điều này cũng bao gồm STARTTLS) cho các giao dịch email. Nếu MTA từ xa không hỗ trợ STARTTLS, email sẽ bị trả về.


0

Không, nó không kém an toàn, khi ứng dụng của bạn xử lý chính xác.

Có bốn cách để xử lý TLS và nhiều chương trình cho phép bạn chọn:

  • Không có TLS
  • TLS trên cổng chuyên dụng (chỉ thử TLS)
  • Sử dụng TLS nếu có sẵn (Đã thử starttls, sử dụng kết nối không được mã hóa khi không thành công)
  • Luôn sử dụng TLS (Sử dụng starttlsvà không thành công nếu nó không hoạt động)

Ưu điểm của TLS trên một cổng chuyên dụng là, bạn có thể chắc chắn rằng không có dự phòng khi bạn sử dụng chương trình mà bạn chưa biết hoặc không hiển thị các cài đặt chi tiết để xử lý lỗi trong trình hướng dẫn khởi động đầu tiên.

Nhưng nói chung, bảo mật phụ thuộc vào việc xử lý các lỗi bảo mật. Một chương trình có thể quyết định chuyển sang cổng plaintext khi TLS trên TLS-Port cũng bị lỗi. Bạn cần biết những gì nó sẽ làm và chọn cài đặt an toàn. Và các chương trình nên sử dụng mặc định an toàn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.