Cải thiện tính bảo mật và quyền riêng tư bằng cách cập nhật Bộ nhớ đệm HTTP

Việc quên hoặc sử dụng sai tiêu đề Cache-Control có thể ảnh hưởng tiêu cực đến tính bảo mật của trang web và quyền riêng tư của người dùng.

Arthur Sonzogni
Arthur Sonzogni

Theo mặc định, mọi loại bộ nhớ đệm đều được phép lưu tài nguyên vào bộ nhớ đệm. Việc không sử dụng hoặc sử dụng sai tiêu đề Cache-Control có thể ảnh hưởng tiêu cực đến tính bảo mật của trang web và quyền riêng tư của người dùng.

Đối với những câu trả lời được cá nhân hoá mà bạn muốn giữ riêng tư, bạn nên:

  • Ngăn các bên trung gian lưu tài nguyên vào bộ nhớ đệm. Đặt Cache-Control: private.
  • Đặt khoá bộ nhớ đệm phụ thích hợp. Nếu phản hồi thay đổi do cookie (có thể xảy ra khi cookie lưu trữ thông tin xác thực), hãy đặt Vary: Cookie.

Hãy đọc tiếp để tìm hiểu lý do điều này quan trọng và khám phá:

  1. Các vấn đề về bảo mật và quyền riêng tư mà bạn có thể không biết
  2. Các loại bộ nhớ đệm HTTP và những quan niệm sai lầm phổ biến
  3. Việc nên làm đối với trang web có giá trị cao

Tài nguyên bị rò rỉ từ các lỗ hổng Spectre

Lỗ hổng Spectre cho phép một trang đọc bộ nhớ của một quy trình hệ điều hành. Điều này có nghĩa là kẻ tấn công có thể truy cập trái phép vào dữ liệu trên nhiều nguồn gốc. Do đó, các trình duyệt web hiện đại đã hạn chế việc sử dụng một số tính năng của chúng (chẳng hạn như SharedArrayBuffer hoặc trình hẹn giờ có độ phân giải cao) đối với các trang có chế độ tách biệt nguồn gốc.

Các trình duyệt web hiện đại thực thi Chính sách đối với trình nhúng trên nhiều nguồn gốc (COEP). Điều này đảm bảo rằng các tài nguyên trên nhiều nguồn gốc là:

  • Tài nguyên công khai, được yêu cầu mà không cần cookie
  • Các tài nguyên được phép chia sẻ trên nhiều nguồn gốc một cách rõ ràng, thông qua CORS hoặc tiêu đề CORP

Việc thiết lập COEP không ngăn kẻ tấn công khai thác Spectre. Tuy nhiên, điều này đảm bảo rằng các tài nguyên trên nhiều nguồn gốc không có giá trị đối với kẻ tấn công (khi trình duyệt tải dưới dạng tài nguyên công khai) hoặc không được phép chia sẻ với kẻ tấn công (khi được chia sẻ với CORP: cross-origin).

Việc lưu vào bộ nhớ đệm HTTP ảnh hưởng như thế nào đến Spectre?

Nếu tiêu đề Cache-Control không được đặt đúng cách, kẻ tấn công có thể thực hiện một cuộc tấn công. Ví dụ:

  1. Tài nguyên có thông tin xác thực được lưu vào bộ nhớ đệm.
  2. Kẻ tấn công tải một trang được tách biệt trên nhiều nguồn gốc.
  3. Kẻ tấn công yêu cầu lại tài nguyên.
  4. COEP:credentialless do trình duyệt đặt, vì vậy tài nguyên được tìm nạp mà không cần cookie. Tuy nhiên, bộ nhớ đệm có thể trả về phản hồi có thông tin xác thực.
  5. Sau đó, kẻ tấn công có thể đọc tài nguyên được cá nhân hoá bằng cách sử dụng một cuộc tấn công Spectre.

Mặc dù bộ nhớ đệm HTTP của trình duyệt web không cho phép loại hình tấn công này xảy ra trong thực tế, nhưng các bộ nhớ đệm bổ sung tồn tại bên ngoài phạm vi kiểm soát ngay lập tức của trình duyệt. Điều này có thể dẫn đến việc cuộc tấn công này thành công.

Quan niệm sai lầm thường gặp về bộ nhớ đệm HTTP

1. Tài nguyên chỉ được lưu vào bộ nhớ đệm của trình duyệt

Thường có nhiều lớp bộ nhớ đệm. Một số bộ nhớ đệm dành riêng cho một người dùng, một số khác dành cho nhiều người dùng. Một số được máy chủ kiểm soát, một số do người dùng kiểm soát và một số do bên trung gian kiểm soát.

  • Bộ nhớ đệm của trình duyệt. Các bộ nhớ đệm này thuộc sở hữu và dành riêng cho một người dùng, được triển khai trong trình duyệt web của họ. Các phương thức này cải thiện hiệu suất bằng cách tránh tìm nạp cùng một phản hồi nhiều lần.
  • Proxy cục bộ. Ứng dụng này có thể do người dùng cài đặt, nhưng cũng có thể do các bên trung gian quản lý: công ty, tổ chức hoặc nhà cung cấp dịch vụ Internet của họ. Proxy cục bộ thường lưu một phản hồi vào bộ nhớ đệm cho nhiều người dùng, tạo thành bộ nhớ đệm "công khai". Proxy cục bộ có nhiều vai trò.
  • Bộ nhớ đệm máy chủ gốc / CDN. Điều này do máy chủ kiểm soát. Mục tiêu của bộ nhớ đệm máy chủ gốc là giảm tải trên máy chủ gốc bằng cách lưu cùng một phản hồi vào bộ nhớ đệm cho nhiều người dùng. Mục tiêu của CDN cũng tương tự, nhưng được phân bổ trên toàn cầu và được chỉ định cho nhóm người dùng gần nhất để giảm độ trễ.
Thường có nhiều lớp bộ nhớ đệm giữa trình duyệt và máy chủ.
Có thể có nhiều lớp bộ nhớ đệm giữa trình duyệt và máy chủ. Ví dụ: bạn có thể gặp bộ nhớ đệm máy chủ, sau đó là CDN và bộ nhớ đệm trình duyệt. Ngoài ra, có thể có một proxy cục bộ được thiết lập giữa CDN và bộ nhớ đệm của trình duyệt.

2. SSL ngăn các bên trung gian lưu các tài nguyên HTTPS vào bộ nhớ đệm

Nhiều người dùng thường xuyên sử dụng proxy được định cấu hình cục bộ, cho dù là cho mục đích truy cập (chẳng hạn như chia sẻ kết nối có đo lượng dữ liệu), kiểm tra vi-rút hay cho mục đích ngăn chặn mất dữ liệu (DLP). Bộ nhớ đệm trung gian đang thực hiện can thiệp TLS.

Bộ nhớ đệm trung gian thường được cài đặt trên máy trạm của nhân viên công ty. Trình duyệt web được định cấu hình để tin cậy chứng chỉ của proxy cục bộ.

Cuối cùng, một số tài nguyên HTTPS có thể được các proxy cục bộ này lưu vào bộ nhớ đệm.

Cách hoạt động của bộ nhớ đệm HTTP

  • Theo mặc định, các tài nguyên được phép lưu vào bộ nhớ đệm ngầm ẩn.
  • Khoá bộ nhớ đệm chính bao gồm URL và phương thức. (URL, phương thức)
  • khoá bộ nhớ đệm phụ là các tiêu đề có trong tiêu đề Vary. Vary: Cookie cho biết phản hồi phụ thuộc vào Cookie.
  • Tiêu đề Cache-Control cung cấp khả năng kiểm soát chi tiết hơn.

Nhà phát triển của các trang web có giá trị cao, bao gồm cả trang web có lưu lượng truy cập cao và trang web tương tác với thông tin nhận dạng cá nhân, nên hành động ngay để cải thiện tính bảo mật.

Rủi ro lớn nhất xảy ra khi quyền truy cập vào một tài nguyên thay đổi tuỳ thuộc vào cookie. Bộ nhớ đệm trung gian có thể trả về phản hồi được yêu cầu bằng cookie cho một yêu cầu không được yêu cầu nếu không có hành động phòng ngừa nào được thực hiện.

Bạn nên thực hiện một trong các bước sau:

  • Ngăn các bên trung gian lưu tài nguyên vào bộ nhớ đệm. Đặt Cache-Control: private.
  • Đặt khoá bộ nhớ đệm phụ thích hợp. Nếu phản hồi thay đổi do cookie (có thể xảy ra khi cookie lưu trữ thông tin xác thực), hãy đặt Vary: Cookie.

Cụ thể, hãy thay đổi hành vi mặc định: luôn xác định Cache-Control hoặc Vary.

Các yếu tố cần cân nhắc khác

Có các loại tấn công tương tự khác sử dụng bộ nhớ đệm HTTP, nhưng các loại tấn công đó dựa vào một cơ chế khác với cơ chế tách biệt nhiều nguồn gốc. Ví dụ: Jake Archibald mô tả một số cuộc tấn công trong bài viết Cách chiến thắng trong CORS.

Một số trình duyệt web có thể giảm thiểu các cuộc tấn công này bằng cách phân tách bộ nhớ đệm HTTP tuỳ thuộc vào việc phản hồi tài nguyên có được yêu cầu bằng thông tin xác thực hay không. Kể từ năm 2022, Firefox sẽ phân tách bộ nhớ đệm, còn Chrome và Safari thì không. Chrome có thể phân tách bộ nhớ đệm trong tương lai. Xin lưu ý rằng các cuộc tấn công này khác nhau và bổ sung cho việc phân tách theo nguồn cấp cao nhất.

Ngay cả khi có thể giảm thiểu vấn đề này cho trình duyệt web, vấn đề này vẫn sẽ tồn tại trong bộ nhớ đệm proxy cục bộ. Do đó, bạn vẫn nên làm theo các đề xuất ở trên.


Ảnh đầu trang của Ben Pattinson trên Unsplash.