DNSSEC là gì? Chuẩn bảo mật DNS chống giả mạo tên miền toàn cầu

Sơ đồ kiểm tra bản ghi DNSSEC giữa vùng cha và vùng con: trình phân giải băm DNSKEY để đối chiếu với DS trước khi chấp nhận RRSIG, kết quả trả về là Resolver Key OK và Record OK

DNSSEC là gì? Đó là lớp bảo mật được bổ sung vào hệ thống tên miền DNS, cho phép máy phân giải xác minh rằng dữ liệu trả về đúng là do chính tên miền đó ký chứ không phải do kẻ tấn công chèn vào. Bài viết này giải thích DNSSEC theo đúng đặc tả kỹ thuật: chuỗi tin cậy đi từ đâu, các bản ghi DNSKEY, DS, RRSIG, NSEC nói lên điều gì, và những lỗi cấu hình nào khiến cả tên miền biến thành trạng thái Bogus khiến người dùng không truy cập được.

Sơ đồ minh họa hai chuỗi NSEC và NSEC3 trong DNSSEC: cách máy chủ trả lời truy vấn cho một tên không tồn tại kèm bản ghi chứng minh, và cách chuỗi NSEC3 được dựng từ tên đã băm

DNS vốn dùng UDP không mã hóa và không xác thực, nên một kẻ trung gian có thể sửa câu trả lời của trình phân giải và đưa người dùng tới trang giả mạo mà không đổi lại địa chỉ nào trong thanh địa chỉ. DNSSEC không sửa cách tra cứu tên miền, mà gắn thêm chữ ký số vào dữ liệu trả lời để bên nhận tự kiểm chứng nguồn gốc.

DNSSEC bảo vệ được gì và không bảo vệ được gì

Theo RFC 4033, các mở rộng bảo mật của DNS bổ sung data origin authentication (xác thực nguồn gốc dữ liệu) và data integrity (tính toàn vẹn dữ liệu) cho hệ thống DNS. Đặc tả nhấn mạnh DNSSEC không được thiết kế để cung cấp tính bảo mật nội dung hay phân quyền truy cập.

  • Có bảo vệ: phát hiện dữ liệu DNS bị sửa trên đường truyền, chống giả mạo tên miền bằng cách thay đổi bản ghi trả về.
  • Không bảo vệ: nội dung website sau khi đã tới đúng máy chủ, và cũng không cung cấp tính bảo mật nội dung DNS — vì vậy DNSSEC phải đi cùng HTTPS chứ không thay thế cho nó.
  • Không chống DoS: RFC 4033 ghi rõ DNSSEC không bảo vệ chống từ chối dịch vụ, thậm chí còn tạo ra một lớp tấn công mới dựa trên thao tác mã hóa tốn kém nhắm vào các trình phân giải có xác thực.
  • Không ký dữ liệu glue: các bản ghi không thuộc thẩm quyền tại điểm chuyển vùng (glue và NS trong vùng cha) không được ký, nên không thể xác thực chúng.

Chuỗi tin cậy bắt đầu từ đâu

Sơ đồ trust anchor của DNSSEC: khóa KSK ở vùng com trỏ xuống DNSKEY của example.com, RRSIG và bản ghi DS liên kết chuỗi tin cậy giữa vùng cha và vùng con

Toàn bộ cơ chế dựa trên một ý tưởng đơn giản: mỗi vùng cha ký một bản ghi chứng thực (DS) trỏ tới khóa của vùng con. Bắt đầu từ khóa gốc được cài sẵn trong trình phân giải, mỗi bước xuống vùng con lại lặp lại nguyên tắc ký rồi chuyển khóa, tạo thành một chuỗi tin cậy không cần chứng thư trung ương.

  1. Khóa gốc từ IANA. Danh sách khóa công khai hiện hành nằm trong tệp root-anchors.xml của IANA. Tệp này liệt kê nhiều mục theo dõi để hỗ trợ quá trình chuyển khóa; khóa KSK đang hoạt động có KeyTag 38696, hiệu lực từ ngày 18-07-2024, thay cho KeyTag 20326 dùng từ năm 2017.
  2. Bản ghi DS ở vùng cha. Theo RFC 4034, bản ghi DS (mã loại 43) tham chiếu một bản ghi DNSKEY bằng cách lưu key tag, số thuật toán và một giá trị băm của chính DNSKEY. DS cho example.com được lưu trong vùng com, tức là phía cha.
  3. Vùng con chứng minh mình đúng. Vùng con công bố bản ghi DNSKEY tương ứng; trình phân giải băm nó và so với giá trị trong DS. Khớp thì chuỗi tin cậy được nối tiếp.
  4. Kiểm tra chữ ký trên dữ liệu. Mỗi tập bản ghi được bảo vệ bằng một bản ghi RRSIG (mã loại 46) chứa chữ ký số cho tên, lớp và loại của tập bản ghi đó.

Bốn loại bản ghi cốt lõi của DNSSEC

Sơ đồ kiểm tra bản ghi DNSSEC giữa vùng cha và vùng con: trình phân giải băm DNSKEY để đối chiếu với DS trước khi chấp nhận RRSIG, kết quả trả về là Resolver Key OK và Record OK

Đọc hiểu DNSSEC gần như không cần thuật toán mật mã, chỉ cần biết bốn loại bản ghi sau và vai trò của từng loại trong chuỗi xác thực.

Bản ghi Mã loại Vai trò Điều kiện cần nhớ
DNSKEY 48 Công bố khóa công khai của vùng, kèm cờ Zone Key và cờ SEP Trường Protocol phải bằng 3
DS 43 Liên kết vùng cha với khóa của vùng con Chỉ tồn tại ở phía cha
RRSIG 46 Chữ ký số của một tập bản ghi TTL phải khớp tập bản ghi được phủ
NSEC / NSEC3 47 / 50 Chứng minh có chủ đích rằng một tên không tồn tại NSEC3 băm tên để chống dò tên miền

Cờ SEP (Secure Entry Point) là gợi ý cho phần mềm ký vùng: bản ghi DNSKEY mang cờ SEP nhưng không có cờ Zone Key thì không được dùng để xác minh RRSIG. Riêng cơ chế chứng minh sự vắng mặt, RFC 5155 bổ sung NSEC3 với tên được băm nhằm chống việc kẻ xấu lần theo chuỗi NSEC để dựng lại toàn bộ danh sách tên miền trong vùng.

Quyền kiểm chứng nằm ở trình phân giải, không nằm ở trình duyệt

Một chi tiết gây hiểu nhầm nhiều người: trình duyệt của bạn thường không tự kiểm tra chữ ký. Trình phân giải đệ quy (recursive resolver) của nhà mạng hoặc dịch vụ DNS công cộng là nơi thực hiện xác thực, rồi gắn cờ Authenticated Data (AD) vào câu trả lời. Ứng dụng chạy trên máy bạn chỉ đọc cờ AD để biết kết quả đó có được kiểm chứng hay không, theo đúng mô tả stub resolver trong RFC 4033.

Hệ quả thực tế: nếu bạn dùng một trình phân giải không xác thực, việc bật DNSSEC trên tên miền không tạo ra khác biệt nào với bạn, dù nó vẫn bảo vệ người dùng đi qua cùng đường mạng đó. Nếu bạn muốn kiểm tra thực tế thay vì tin lời kết quả tra cứu, hãy dùng một trình phân giải có xác thực, ví dụ chương trình DNSSEC của ICANN có công cụ kiểm tra theo tên miền.

Những lỗi cấu hình gây giảm tiếp truy cập

Nguy hiểm nhất của DNSSEC không phải là thiếu ký, mà là ký sai. RFC 6781 định nghĩa trạng thái security lameness: vùng cha có bản ghi DS trỏ tới một DNSKEY không tồn tại, khiến vùng con bị đánh dấu là Bogus. Khi chữ ký hết hạn vì máy chủ thẩm quyền không tới được máy chủ chính để gia hạn, trình phân giải thường trả lỗi SERVFAIL cho người dùng trong khi bạn vẫn thấy website mở bình thường trên máy tính của mình.

  • DS không khớp DNSKEY: hay do nhầm khi chuyển khóa KSK mà không đợi đủ thời gian cache quay vòng.
  • Chữ ký hết hạn: ký theo lịch không đều hoặc máy chủ mất liên kết tới máy chủ chính làm chuỗi ký đứt.
  • Chuỗi ký quá phức tạp: tạo tải bất thường lên trình phân giải có xác thực, biến DNSSEC thành điểm nghẽn.
  • Chuyển KSK sai quy trình: RFC 6781 nói rõ việc xoay khóa KSK bắt buộc phải có tương tác với vùng cha, khác hẳn việc xoay ZSK chỉ nằm trong nội bộ vùng.
  • NSEC3 dùng tham số không chuẩn: RFC 9276 khuyến nghị không dùng opt-out cho vùng nhỏ và chọn NSEC3PARAM dạng 1 0 0 -, tức SHA-1, không lặp thêm, không salt.

Triển khai DNSSEC theo đúng thứ tự

  1. Chuẩn bị khóa. Tạo cặp KSK và ZSK cho vùng, lưu khoá riêng tư ngoài máy chủ. KSK là khóa chỉ dùng để ký các bản ghi DNSKEY, ZSK ký toàn bộ dữ liệu còn lại.
  2. Ký vùng và công bố DNSKEY. Dùng chữ ký có thời hạn ngắn để giảm thiểu rủi ro nếu chuỗi bị đứt, thường vài ngày thay vì vài tháng.
  3. Bàn giao DS cho vùng cha. Gửi key tag, thuật toán và giá trị băm tới nhà đăng ký tên miền, rồi chờ DS xuất hiện ở vùng cha.
  4. Theo dõi tình trạng xác thực. Dùng công cụ kiểm tra để xác nhận chuỗi từ gốc tới tên miền của bạn đều hợp lệ, và cài giám sát cảnh báo khi chữ ký sắp hết hạn.
  5. Có kế hoạch thu hồi. Trước khi xoay khóa, giữ chữ ký chồng lấn trong một khoảng thời gian đủ dài để trình phân giải ở xa cập nhật hết, rồi mới gỡ khóa cũ.

Nguồn tham khảo: đặc tả gốc RFC 4033, RFC 4034, RFC 5155, RFC 9276, RFC 6781, khóa gốc công khai tại IANA và tài liệu triển khai của ICANN.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Yêu cầu AI đáng tin cậy: giám sát người, an toàn kỹ thuật, quyền riêng tư, quản trị dữ liệu, minh bạch, đa dạng, phi phân biệt

Luật AI EU là gì? Bốn mức rủi ro và nghĩa vụ cho hệ thống AI

Luật AI EU là bộ quy định của Liên minh châu Âu có hiệu lực từ tháng 8 năm 2024, nhằm đặt ra khung pháp lý thống nhất cho mọi…

Xem thêm

GPS là gì? Nguyên lý định vị vệ tinh và độ chính xác thực tế

GPS là gì? Nguyên lý định vị vệ tinh và độ chính xác thực tế GPS (Global Positioning System) là hệ thống định vị vệ tinh toàn cầu do quân…

Xem thêm

QUIC là gì? Giao thức truyền tải mới thay thế TCP trên Internet

QUIC là gì? Giao thức truyền tải thế hệ mới bỏ hẳn TCP QUIC là gì? QUIC là giao thức truyền tải (transport protocol) chạy trên lớp UDP, do Google…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất