QUIC (Quick UDP Internet Connections) được Google phát triển vào năm 2012, là giao thức lớp vận chuyển dựa trên phiên bản ghép kênh (multiplex) của các kết nối UDP. Không giống như TCP, UDP không tuân theo bắt tay ba bước mà sử dụng một roundtrip UDP duy nhất. Ngoài ra, QUIC dựa vào ghép kênh để quản lý liền mạch nhiều tương tác giữa người dùng và máy chủ thông qua một kết nối duy nhất mà không có bất kỳ kết nối chặn nào khác, vì các gói tin bị thất lạc chỉ ảnh hưởng đến luồng dữ liệu trực tiếp chứa gói tin đó, những luồng khác vẫn hoạt động bình thường từ đó giúp cải thiện hiệu suất so với những phiên bản trước đó.
CÁC TÍNH NĂNG VÀ LỢI ÍCH VỀ BẢO MẬT
Mã hóa đầu cuối
Giao thức TCP được thiết kế để đảm bảo dữ liệu được mã hóa trong quá trình truyền, nhưng thông tin cụ thể về đường truyền chưa được mã hóa, gây ra nhiều vấn đề về bảo mật và quyền riêng tư. Trong giao thức QUIC, ngoại trừ các trường bắt buộc trong phân đoạn mạng, các phần còn lại của thông tin đều được mã hóa theo mặc định, ví dụ như các trường Packet NR, ACK NR, Window. Mã hóa được đề xuất trong QUIC giúp ngăn chặn các tấn công giám sát phổ biến trong các phiên bản trước của HTTP/3, cũng như thu thập thông tin các thành phần giao thức, metadata hay dữ liệu ứng dụng. Hình 1 minh họa kết quả phân tích gói tin QUIC bởi công cụ phân tích mạng Wireshark.
Kết nối an toàn TLS
Để hỗ trợ mã hóa đầu cuối trong quá trình kết nối, QUIC chủ yếu dựa vào sự bắt tay của lớp vận chuyển và mật mã. Vì QUIC tương tác trực tiếp với TLS 1.3, nó thực thi mã hóa cho tất cả các kết nối ban đầu và không có tùy chọn để tắt TLS. QUIC cũng chịu trách nhiệm đảm bảo rằng các kết nối an toàn được thiết lập, đồng thời cân nhắc các biện pháp bảo vệ tính bảo mật và tính toàn vẹn của tất cả các kết nối ban đầu. Không giống như triển khai HTTP/2 với TLS, QUIC xử lý cơ chế bắt tay và cảnh báo TLS trong lớp truyền tải, giúp thiết lập các biện pháp bảo vệ mật mã bằng cách sử dụng các khóa được trao đổi từ quá trình bắt tay.
Hình 1. Đoạn mã Wireshark hiển thị các phân đoạn mạng của giao thức QUIC
Không giống như HTTP/2, sử dụng các bản ghi “application_data” của TLS, QUIC sử dụng khung STREAM ở dạng gói QUIC. Bắt tay TLS xảy ra ở dạng khung CRYPTO, chủ yếu bao gồm dữ liệu bắt tay trong một luồng liên tục. QUIC được thiết kế để gửi các gói tin song song, đôi khi là đóng gói các thông báo khác nhau thành một và mã hóa chúng với điều kiện các thông báo có cùng mức độ mã hóa. Tính năng này mang lại lợi ích to lớn cho hiệu suất mạng trong khi vẫn đảm bảo chế độ mã hóa chính xác được áp dụng trong quá trình truyền.
Bảo mật phía trước đầy đủ
Bảo mật phía trước đầy đủ (PFS) trong một giao thức khi các khóa riêng tạm thời được trao đổi giữa người dùng và máy chủ. Mỗi phiên do người dùng bắt đầu sử dụng một khóa phiên mới duy nhất và không liên quan đến khóa phiên trước đó. Bằng cách sử dụng khóa phiên riêng biệt cho mỗi trao đổi, khi có khóa phiên bất kỳ bị xâm phạm, không có thông tin nào từ các phiên trước đó hoặc trong tương lai bị xâm phạm. Từ góc độ mật mã, không có trao đổi khóa nào có thể cung cấp PFS.
QUIC sử dụng TLS 1.3, hỗ trợ trao đổi khóa Diffie-Hellman (DH) và Khóa chia sẻ trước (PSK) trên các đường cong Elliptic hoặc trên các trường hữu hạn. Trao đổi khóa 0-RTT cung cấp bảo mật phía trước đầy đủ, vì mã hóa chỉ chấp nhận các kết nối chuyển tiếp an toàn thông qua bắt tay 0-RTT. Giao thức cũng cung cấp bảo mật phía trước đầy đủ cho các thông báo ban đầu giữa người dùng và máy chủ. Ngoài ra, vì không hỗ trợ khóa bí mật dài hạn, với sự trợ giúp của TLS 1.3, QUIC cung cấp khả năng bảo mật phía trước đầy đủ cho các ứng dụng sử dụng lớp giao thức.
Chống tấn công phát lại
Việc triển khai QUIC được thiết kế để lưu trữ các giá trị máy khách của dẫn xuất khóa, ngoài các giá trị nonce. Bất kỳ yêu cầu trùng lặp có cùng giá trị dẫn xuất khóa và các giá trị nonce đều được máy chủ phát hiện và loại bỏ. Thiết kế này giúp ngăn bất kỳ máy chủ nào chấp nhận cùng một khóa nhiều lần từ cấp giao thức. Vì các thành phần web có thể sử dụng khóa dẫn xuất từ khóa phiên, các cuộc tấn công phát lại có thể xảy ra ở giai đoạn này; tuy vậy, các biện pháp phòng ngừa có thể được sử dụng ở cấp ứng dụng để giảm thiểu điều đó.
Bảo vệ chống giả mạo IP
Để loại bỏ mọi tấn công giả mạo IP, QUIC hỗ trợ xác minh địa chỉ trong quá trình bắt tay và yêu cầu bằng chứng địa chỉ đã ký thông qua việc sử dụng “mã thông báo địa chỉ nguồn”. Đó là các khối được xác thực, mã hóa của máy chủ, chứa địa chỉ IP của người dùng và dấu thời gian của máy chủ. Vì máy chủ chỉ phản hồi địa chỉ IP trong mã thông báo, ngay cả một cookie hoặc mã thông báo bị đánh cắp cũng có thể không giúp việc giả mạo IP thành công. Hơn nữa, do QUIC thiết lập mã thông báo địa chỉ nguồn tồn tại trong thời gian ngắn, khoảng thời gian cho một tấn công giả mạo IP thành công trong thực tế là gần như không thể.
Ngăn chặn hạ cấp SSL
Theo thiết kế, TLS 1.3 có khả năng bảo vệ chống lại các tấn công hạ cấp TLS vì giao thức yêu cầu mã băm khóa cho tất cả các giao tiếp bắt tay và yêu cầu bên nhận bắt tay xác minh các mã băm khóa đã gửi. Ngoài ra, các thông báo CertificateVerify giữa người dùng và máy chủ bao gồm chữ ký băm PKCS RSA của tất cả các thông báo trước đó về kết nối cụ thể. Việc triển khai các kiểm tra này trong QUIC sẽ ngăn chặn các tấn công hạ cấp TLS.
THÁCH THỨC VỀ BẢO MẬT CỦA HTTP/3
Lỗ hổng với 0-RTT
Một trong những tính năng nổi bật nhất của HTTP/3 là nối lại phiên 0-RTT, giúp cải thiện tốc độ kết nối và giảm độ trễ. Tuy nhiên, quá trình này chỉ hoạt động nếu kết nối đã được thiết lập thành công trước đó và trao đổi hiện tại sử dụng khóa chia sẻ trước được thiết lập trong lần kết nối cuối cùng. Một trong những vectơ tấn công phổ biến nhất là tấn công phát lại có thể diễn ra khi tin tặc gửi lại gói tin ban đầu; trong những trường hợp cụ thể, điều này khiến máy chủ tin rằng yêu cầu đến từ một máy khách đã biết trước đó. Một nhược điểm bảo mật khác của nối lại phiên 0-RTT là phần thiếu sót của Bảo mật phía trước đầy đủ. Tin tặc có thể giải mã thông tin liên lạc 0-RTT do người dùng gửi khi xâm phạm mã thông báo.
Tấn công thao túng Connection ID
Khi ở giữa người dùng với máy chủ, tin tặc có thể thao tác với Connection ID trong quá trình bắt tay ban đầu. Quá trình bắt tay diễn ra bình thường, máy chủ sẽ cho rằng kết nối đã được thiết lập, nhưng người dùng sẽ không thể giải mã được vì Connection ID là đầu vào cho quá trình dẫn xuất khóa mã hóa, do đó người dùng và máy chủ sẽ tính toán khóa mã hóa khác nhau. Người dùng cuối cùng hết thời gian chờ và gửi thông báo lỗi tới máy chủ cho biết kết nối đã bị ngắt. Vì máy khách mã hóa thông báo lỗi đến máy chủ bằng khóa mã hóa ban đầu, máy chủ sẽ không thể giải mã và duy trì trạng thái kết nối cho đến khi hết thời gian chờ (thường là 10 phút). Điều này khi được thực hiện ở quy mô lớn hơn có thể gây ra một cuộc tấn công DDoS trên một máy chủ giữ nhiều kết nối cho đến khi trạng thái kết nối hết hạn. Một phương pháp tấn công khác để giữ kết nối tồn tại là thay đổi các tham số, chẳng hạn như mã thông báo địa chỉ nguồn, từ đó ngăn không cho máy khách thiết lập bất kỳ kết nối nào.
Tấn công khuếch đại UDP
Trong QUIC, tấn công khuếch đại UDP xảy ra khi tin tặc nhận mã thông báo xác minh địa chỉ từ mục tiêu và giải phóng địa chỉ IP ban đầu sử dụng để tạo mã thông báo, sau đó, gửi kết nối 0-RTT trở lại máy chủ có cùng địa chỉ IP, địa chỉ này có thể được thay đổi để trỏ đến một điểm cuối khác. Sau khi thực hiện thành công thiết lập này, tin tặc có thể điều hướng máy chủ gửi một lượng lớn lưu lượng truy cập đến máy nạn nhân. Để ngăn chặn tấn công này, HTTP/3 có các khả năng giới hạn tốc độ và thời gian tồn tại của mã thông báo xác minh như các biện pháp kiểm soát bổ sung cho các tấn công DDOS, đồng thời giảm thiểu một phần các kịch bản tấn công.
Tấn công cạn kiệt luồng
Tấn công cạn kiệt luồng xảy ra khi tin tặc khởi tạo nhiều luồng kết nối, có thể dẫn đến cạn kiệt điểm cuối. Tin tặc có thể liên tục làm tràn ngập các yêu cầu, trong khi các tham số truyền tải cụ thể có thể giới hạn số lượng luồng hoạt động đồng thời, trong một số trường hợp, cấu hình máy chủ có thể được cố ý đặt thành số lượng cao hơn. Máy chủ nạn nhân có thể là mục tiêu của một tấn công như vậy do cấu hình giao thức của máy chủ để tăng hiệu suất giao thức.
Tấn công thiết lập lại kết nối
Tấn công thiết lập lại kết nối gửi các thiết lập lại không trạng thái cho nạn nhân, tạo ra khả năng xảy ra tấn công DDoS tương tự như tấn công TCP Reset Injection. Vectơ tấn công tiềm ẩn có thể xảy ra nếu tin tặc lấy mã thông báo thiết lập lại được tạo cho kết nối với Connection ID cụ thể, tin tặc có thể sử dụng mã thông báo đã tạo để thiết lập lại kết nối đang hoạt động với cùng một Connection ID, khiến máy chủ phải đợi kết nối cho đến khi hết thời gian chờ. Khi thực hiện tấn công này trên quy mô lớn, máy chủ sẽ phải tiêu tốn rất nhiều tài nguyên chỉ để chờ các kết nối hoàn tất.
Tấn công hạ cấp phiên bản QUIC
Cơ chế bảo vệ gói QUIC cung cấp xác thực và mã hóa cho tất cả các gói trong giao tiếp, ngoại trừ các gói thỏa thuận phiên bản. Tính năng này có thể cho phép tin tặc hạ cấp xuống các phiên bản QUIC không an toàn. Tuy hiện nay chỉ có một phiên bản QUIC, nhưng là điều cần lưu ý trong tương lai.
Thiếu hỗ trợ giám sát
Mặc dù một số người dùng, máy chủ và trang web uy tín hỗ trợ HTTP3/QUIC, vẫn còn nhiều thiết bị mạng như proxy ngược/chuyển tiếp, bộ cân bằng tải, tường lửa ứng dụng web và các công cụ giám sát sự kiện bảo mật không hỗ trợ đầy đủ HTTP/3. Không giống như TCP, các socket không bắt buộc trong kết nối QUIC khiến việc phát hiện máy chủ và các kết nối độc hại khó hơn. Tin tặc có thể chuyển tiếp các nội dung độc hại và thực hiện các tấn công xâm nhập dữ liệu qua QUIC một cách lén lút mà không bị hầu hết các công cụ giám sát phát hiện.
KẾT LUẬN
QUIC và HTTP/3 được thiết kế để đáp ứng các mục tiêu ngày nay về hiệu suất, độ tin cậy và bảo mật của mạng Internet. Việc sử dụng mã hóa đầu cuối trong quá trình chuyển tiếp trong HTTP/3 giúp bảo vệ chống lại một số vấn đề về quyền riêng tư. Mặc dù còn một số điểm yếu, tuy nhiên HTTP/3 vẫn sẽ tiếp tục phát triển và là một cải tiến đáng kể so với HTTP/2 và các phiên bản trước của HTTP, cả về hiệu suất và yếu tố bảo mật.