it-swarm-vi.com

SSL / TLS (https) có ẩn các url đang truy cập không

Giả sử tôi gõ cái này trong trình duyệt của tôi

https://www.mysite.com/getsecret?username=alice&password=mysecret

và một kẻ tấn công đang xem tất cả lưu lượng truy cập từ tôi đến ISP của tôi.

Thông tin nào được HTTPS bảo vệ? URL có được tiết lộ không? Là các thông số của yêu cầu nhận được tiết lộ?

Ngoài ra, HTTPS có cung cấp tính toàn vẹn cho url không?

Tôi đã thử xem các bài viết HTTPS khác nhau và thông số kỹ thuật TLS nhưng không thể tìm ra điều này.

[EDIT:] Không sao nếu chỉ có tên miền máy chủ được tiết lộ. Tuy nhiên, không có phần nào của ?username=alice&password=mysecret nên được tiết lộ.

71
Jus12

Giao thức HTTPS tương đương với việc sử dụng HTTP qua kết nối SSL hoặc TLS (qua TCP).

Do đó, đầu tiên một kết nối TCP (trên cổng 443) được mở cho máy chủ. Điều này thường đủ để tiết lộ tên Máy chủ của máy chủ (tức là www.mysite.com trong trường hợp của bạn) cho kẻ tấn công. Địa chỉ IP được quan sát trực tiếp và:

  1. bạn thường làm một truy vấn DNS không được mã hóa trước đó,
  2. nhiều máy chủ HTTPS chỉ phục vụ một tên miền cho mỗi địa chỉ IP,
  3. Chứng chỉ của máy chủ được gửi đơn giản và chứa tên máy chủ (giữa nhiều người, có thể),
  4. trong các phiên bản TLS mới hơn, có chỉ thị tên máy chủ, theo đó máy khách chỉ ra cho máy chủ tên máy chủ mong muốn, do đó máy chủ có thể xuất trình chứng chỉ phù hợp, nếu có nhiều chứng chỉ. (Điều này được thực hiện để có thể đi từ 2.)

Sau đó, một cái bắt tay TLS diễn ra. Điều này bao gồm đàm phán một bộ mật mã và sau đó trao đổi khóa. Giả sử ít nhất một trong số trình duyệt của bạn và máy chủ không bao gồm mật mã NONE trong các bộ được chấp nhận, mọi thứ sau khi trao đổi khóa đều được mã hóa.

Và giả sử không có cuộc tấn công trung gian thành công nào (tức là kẻ tấn công chặn kết nối và xuất trình chứng chỉ máy chủ giả mạo mà trình duyệt của bạn chấp nhận), trao đổi khóa là an toàn và không kẻ nghe trộm nào có thể giải mã bất cứ điều gì sau đó được gửi giữa bạn và máy chủ, và cũng không có kẻ tấn công nào có thể thay đổi bất kỳ phần nào của nội dung mà không bị chú ý. Điều này bao gồm URL và bất kỳ phần nào khác của yêu cầu HTTP, cũng như phản hồi từ máy chủ.

Tất nhiên, như D.W. đề cập, độ dài của cả hai yêu cầu (chứa dữ liệu không thay đổi nhiều hơn URL, có thể một số Cookies) và phản hồi có thể được nhìn thấy từ luồng dữ liệu được mã hóa. Điều này có thể phá vỡ bí mật, đặc biệt nếu chỉ có một số lượng nhỏ tài nguyên khác nhau trên máy chủ. Ngoài ra bất kỳ yêu cầu tài nguyên tiếp theo.

Mật khẩu của bạn trong URL (hoặc bất kỳ phần nào khác của yêu cầu) vẫn phải được bảo mật, mặc dù vậy - nhiều nhất có thể biết được độ dài của nó.

59
Paŭlo Ebermann

Như @ Paŭlo Ebermann và @Jeff Ferland đã nói với bạn, yêu cầu GET được mã hóa theo SSL và vì vậy rất an toàn. Tuy nhiên, đừng quên rằng nhiều máy chủ web ghi lại các yêu cầu và tham số GET, và mọi thông tin xác thực hoặc thông tin nhạy cảm khác mà bạn gửi qua GET có thể được ghi vào nhật ký ở đâu đó. Vì lý do đó, bạn nên sử dụng POST (cũng sẽ được mã hóa theo SSL) khi gửi dữ liệu nhạy cảm.

Điều này rơi vào loại "mã hóa không phải là bảo mật ma thuật giải quyết tất cả các vấn đề của bạn."

26
gowenfawr

Bạn nên cho rằng URL không được bảo vệ, tức là, một kẻ nghe trộm thụ động có thể có thể tìm hiểu URL nào bạn đang truy cập.

Tôi nhận ra điều này mâu thuẫn với những gì một số người khác đang tuyên bố, vì vậy tôi nên giải thích rõ hơn.

Đúng là mọi thứ sau khi tên miền được gửi được mã hóa. Chẳng hạn, nếu url là https://www.example.com/foo/bar.html, sau đó www.example.com hiển thị cho kẻ tấn công, trong khi yêu cầu HTTP (GET /foo/bar.html HTTP/1.0) được mã hóa. Điều này không ngăn kẻ nghe trộm trực tiếp nhìn thấy phần đường dẫn của URL. Tuy nhiên, độ dài của phần đường dẫn của URL có thể hiển thị đối với kẻ nghe trộm. Ngoài ra, các thông tin khác - chẳng hạn như độ dài của trang bạn đã truy cập - cũng có thể hiển thị cho kẻ nghe trộm. Đây là một chân trong cửa cho kẻ tấn công. Đã có một số nghiên cứu sử dụng chân này để tìm hiểu những URL bạn đang truy cập , nếu kẻ tấn công có thể nghe lén lưu lượng https của bạn.

Mặc dù không có gì đảm bảo rằng các cuộc tấn công này sẽ thành công, tôi đề nghị rằng sẽ là khôn ngoan khi cho rằng điều tồi tệ nhất: giả định rằng một kẻ nghe trộm có thể có thể tìm hiểu URL nào bạn đang truy cập. Do đó, bạn nên không giả sử rằng SSL/TLS ẩn từ một kẻ nghe trộm mà trang bạn đang truy cập.

Có, https không cung cấp tính toàn vẹn cho URL bạn đã truy cập.

P.S. Một lưu ý khác: trong thực tế, sslstrip và các cuộc tấn công trung gian khác có thể thành công đối với nhiều hoặc hầu hết người dùng, nếu trang web không sử dụng HSTS . Những cuộc tấn công đó có thể vi phạm cả tính bảo mật và tính toàn vẹn của URL. Do đó, nếu người dùng đang truy cập các trang web không sử dụng HSTS qua mạng không an toàn (ví dụ: mở Wifi), bạn nên cảnh giác rằng kẻ tấn công có thể tìm hiểu những trang nào người dùng đang truy cập. Giảm nhẹ một phần chống lại mối đe dọa sslstrip là cho người dùng sử dụng HTTPS ở mọi nơi và cho các trang web áp dụng HSTS.

25
D.W.

Những điều sau đây sẽ bị rò rỉ trước khi phiên của bạn bắt đầu:

  • Địa chỉ IP của máy chủ
  • Chứng chỉ của máy chủ [.__.]
    • Điều đó sẽ bao gồm tên miền được công bố trên chứng chỉ, mặc dù điều đó không đảm bảo nó sẽ phù hợp với những gì bạn đã sử dụng.
  • Bạn truy vấn DNS

Không có dữ liệu hoặc yêu cầu không liên quan đến việc tạo kết nối SSL (GET ...) được gửi đến máy chủ trước khi phiên SSL bắt đầu. URL được gửi như một phần của yêu cầu trang và được bảo vệ giống như bất kỳ lưu lượng truy cập nào là một phần của phiên.

12
Jeff Ferland

Có và không.

Url được mã hóa chính xác, vì vậy các tham số truy vấn không bao giờ được tiết lộ trực tiếp.

Tuy nhiên, phân tích lưu lượng truy cập có thể nhận được độ dài của URL thường xuyên - và biết máy chủ và độ dài của url thường đủ để nghe lén những trang nào đang được truy cập, đặc biệt nếu giả sử rằng các liên kết trên một trang được nhấp vào. Google cho "phân tích lưu lượng truy cập ssl" hoặc một cái gì đó tương tự nếu chủ đề bạn quan tâm.

Trong trường hợp sử dụng của bạn, điều này có tầm quan trọng cận biên. Việc sử dụng thông minh phân tích lưu lượng có thể tiết lộ độ dài của tên người dùng và/hoặc độ dài của mật khẩu, tùy thuộc vào việc các URL khác được tải cũng có chứa tên người dùng hay không. Nếu bạn đệm tên người dùng/mật khẩu với độ dài không đổi, bạn có thể tránh các cuộc tấn công này, nhưng nó có thể không đáng để gặp rắc rối.

11
Nakedible

Các ngăn xếp TLS đang bắt đầu gửi Chỉ định Tên Máy chủ (SNI, http://en.wikipedia.org/wiki/Server_Name_Indication ; http://www.ietf.org/rfc/rfc3546 .txt ). Điều đó được gửi trong rõ ràng, có nghĩa là kẻ nghe trộm có thể thấy tên máy chủ bạn nhập vào thanh địa chỉ.

9
Steve Dispensa