it-swarm-vi.com

X-Content-Type-Options có thực sự ngăn chặn các cuộc tấn công đánh hơi nội dung không?

Trong Tangled Web Michal Zalewski nói:

Không sử dụng Kiểu nội dung: ứng dụng/octet-stream và sử dụng ứng dụng/nhị phân thay vào đó, đặc biệt là đối với các loại tài liệu không xác định. Không trả về Kiểu nội dung: văn bản/thuần túy.

Ví dụ, bất kỳ nền tảng lưu trữ mã nào cũng phải thận trọng khi trả về các tệp thực thi hoặc lưu trữ nguồn dưới dạng ứng dụng/octet-stream, vì có nguy cơ chúng có thể bị hiểu sai là HTML và được hiển thị nội tuyến.

Logic văn bản/thuần túy sau đó được triển khai trong Internet Explorer và Safari để phát hiện HTML trong trường hợp như vậy thực sự là một tin xấu: Nó cướp đi các nhà phát triển web về khả năng sử dụng loại MIME này một cách an toàn để tạo tài liệu văn bản cụ thể của người dùng và không cung cấp giải pháp thay thế . Điều này đã dẫn đến một số lượng lớn lỗ hổng ứng dụng web, nhưng cho đến ngày nay, các nhà phát triển Internet Explorer dường như không hối tiếc và không thay đổi hành vi mặc định của mã của họ.

Trang web sử dụng X-Content-Type-Options:nosniff. Tác giả nói như sau về tiêu đề này:

Việc sử dụng tiêu đề này [Tùy chọn loại nội dung X] rất được khuyến khích; thật không may, sự hỗ trợ cho nó [...] chỉ có một hỗ trợ hạn chế trong các trình duyệt khác. Nói cách khác, nó không thể được phụ thuộc vào như một sự bảo vệ duy nhất chống lại việc đánh hơi nội dung.

Nội dung đánh hơi tấn công X-Content-Type-Options:nosniff không ngăn cản? Gì Content-Type nên được trả lại cho người dùng thay vì text/plain?

19
Andrei Botalov

Nền. X-Content-Type-Options: là một tiêu đề được thiết kế để phòng thủ chống lại tấn công đánh hơi nội dung MIME . Các cuộc tấn công đánh hơi nội dung MIME là một rủi ro khi bạn cho phép người dùng tải nội dung (ví dụ: hình ảnh, tài liệu, các tệp khác) lên trang web của bạn, nơi người dùng khác có thể tải xuống chúng.

Như @Rook nói, điều này không liên quan gì đến việc nghe lén/bắt lưu lượng mạng.

Những cuộc tấn công nào nó không ngăn chặn? Bởi vì X-Content-Type-Options: chỉ được hỗ trợ trên một số trình duyệt, nó không bảo vệ các cuộc tấn công chống lại người dùng sử dụng các trình duyệt khác. Cụ thể, nó được cho là trên IE, Chrome và Firefox 5 . Xem thêm Rủi ro bảo mật khi cho phép người dùng tải nội dung lên trang web của tôi là gì? đối với một số cuộc tấn công khác mà nó không ngăn chặn, ví dụ: tải lên phần mềm độc hại hoặc nội dung không đáng tin, tải lên nội dung khai thác lỗ hổng trong trình duyệt của người dùng, v.v.

Loại nội dung nào sẽ được trả về? Bạn nên trả về loại nội dung phù hợp cho tệp đó. Bạn không nên cho phép người dùng tải lên nội dung không đáng tin cậy với các loại nội dung nguy hiểm. Để biết thêm chi tiết, xin vui lòng xem câu trả lời cho các câu hỏi sau:

  1. Có an toàn khi phục vụ bất kỳ người dùng nào đã tải lên tệp chỉ trong các loại nội dung MIME được liệt kê trắng không?

  2. Có an toàn để lưu trữ và phát lại các loại mime do người dùng cung cấp không?

  3. Bảo vệ đánh hơi MIME

  4. Tại sao tôi nên hạn chế loại nội dung của tệp được tải lên trang web của mình?

  5. Rủi ro bảo mật của việc cho phép người dùng tải nội dung lên trang web của tôi là gì?

  6. Làm cách nào tôi có thể được bảo vệ khỏi các lỗ hổng hình ảnh?

  7. Sử dụng kết hợp mở rộng tệp và loại MIME (dưới dạng đầu ra theo tệp -i -b) để xác định các tệp không an toàn?

Chủ đề này đã được thảo luận rộng rãi và ghi lại ở những nơi khác trên trang web này, vì vậy tôi sẽ không cố gắng lặp lại tất cả những lời khuyên hữu ích được tìm thấy ở đó.


Cập nhật: Tôi vừa học được rằng thiết lập Content-TypeX-Content-Type-Options tiêu đề thích hợp là không đủ cho bảo mật. Rõ ràng, Flash bỏ qua tiêu đề Kiểu nội dung , có thể cho phép tải SWF độc hại, sau đó có thể thực hiện mọi thứ bạn làm với XSS. (Thở dài, Flash ngu ngốc.) Thật không may, không có số lượng danh sách trắng các loại nội dung tệp có thể ngăn chặn cuộc tấn công này. Do đó, dường như giải pháp an toàn duy nhất là Lưu trữ nội dung do người dùng tải lên trên một tên miền riêng.

23
D.W.

Đây là câu trả lời của Michal Zalewski nhận được qua email:

Câu trả lời ngắn gọn là nó hoạt động trong MSIE, và chỉ trong một số trường hợp cụ thể. Nó sẽ không bảo vệ bạn chống lại (ít nhiệt tình hơn) đánh hơi trong hầu hết các trình duyệt khác; nhưng quan trọng hơn, sẽ không ngăn cản các plugin thực hiện những việc như rủi ro crossdomain.xml đã nêu ở trên; và sẽ không nhất thiết ngăn tải nguồn phụ với các loại MIME không khớp (nghĩa là, tải hình ảnh dưới dạng ứng dụng/x-shockwave-flash qua <embed>).

6
Andrei Botalov

Điều gì đánh hơi các cuộc tấn công X-Content-Type-Options: nosniff không ngăn chặn?

Đánh hơi bằng các công cụ không biết về X-Content-Type-Options: một số trình duyệt và plugin có thể tìm nạp tài nguyên mạng. (Ví dụ: trong lịch sử Java QUÀ TẶNG, Flash loadPolicyFile ...)

Loại nội dung nào sẽ được trả về cho người dùng thay vì văn bản/thuần túy?

Không có câu trả lời tốt cho điều đó, vì vậy nếu bạn cần Lưu trữ các tệp văn bản không đáng tin cậy, bạn nên thực hiện giảm thiểu thông thường về việc lưu trữ chúng trên một tên máy chủ riêng (và địa chỉ IP lý tưởng).

Thay thế: Mã hóa HTML, thêm <pre> và phục vụ như text/html.

3
bobince