DNS là gì?
DNS (Domain Name System) là một hệ cơ sở dữ liệu phân tán dùng để ánh xạ giữa các tên miền và các địa chỉ IP. DNS đưa ra một phương pháp đặc biệt để duy trì và liên kết các ánh xạ này trong một thể thống nhất. Trong phạm vi lớn hơn, các máy tính kết nối với internet sử dụng DNS để tạo địa chỉ liên kết dạng URL (Universal Resource Locators). Theo phương pháp này, mỗi máy tính sẽ không cần sử dụng địa chỉ IP cho kết nối.
Các tên DNS tạo ra theo định dạng sau <TÊN miền>.<TLD>, ví dụ infosec.vasc.com.vn. Trong khi danh sách TLD được thiết kết lại bởi ICANN (Công ty quản lý dịch vụ tên miền), một số TLD thông thường bao gồm: .edu (dạng các website giáo dục), .mil (các website cho quân đội), .org (thuộc dạng các tổ chức phi thương mại) .com (các tổ chức kinh tế),... Và cũng có các kiểu tên miền chỉ định theo tên nước, ví dụ .ie (Ireland), .jp (Japan), .de (Germany).
Bạn có thể tham khảo về TLD tại đây: Tên miền cấp cao nhất (TLD) là gì và chúng hoạt động như thế nào?
Khi một máy tính (một DNS client) muốn tìm kiếm một URL, nó đưa yêu cầu (GetHostByName) tới DNS server của nó. DNS client sử dụng một DNS resolver để định vị DNS server. Nếu DNS server không xác định được tên miền cần tìm, hay DNS server không có chút thông tin gì về URL đó trong vùng nhớ đệm của nó, nó sẽ không thể trả lời yêu cầu của client ngay lập tức. Thay vào đó, DNS server sẽ hoặc sử dụng một DNS forwarder hoặc tạo lại một yêu cầu theo quy tắc đệ quy.
Giả mạo DNS
Việc giả mạo DNS liên quan tới việc bắt buộc một DNS client tạo yêu cầu tới một server mạo danh, và khi đó client sẽ nhận được trả lời sai từ server giả mạo đó. Có 3 cách thực hiện kiểu tấn công giả mạo DNS này, bao gồm:
1. Giả mạo các phản hồi DNS
Kẻ tấn công có thể sử dụng cơ chế đệ quy, giả mạo yêu cầu mà DNS server gửi ra ngoài trong quá trình tìm kiểm một địa chỉ, và phản hồi các thông tin sai trước khi các thông tin thật đến. Mỗi gói tin DNS có một số ID dạng 16 bit mà DNS server dùng để kiểm tra yêu cầu ban đầu gửi đi là gì. Khi sử dụng BIND, một phần mềm thông dụng dạng DNS server, số này tăng lên 1 sau mỗi yêu cầu gửi đến, và việc tạo yêu cầu rất dễ dàng giả mạo. BIND đã được sửa lỗi theo phiên bản gần đây, mà các gói tin DNS được khởi tạo theo các con số ngẫu nhiên (phiên bản BIND v9).
Để kiểm tra liệu một DNS server có thể có lỗ hổng hay không đối với sự tấn công giả mạo địa chỉ DNS, bạn có thể gửi các yêu cầu tới server, thẩm định liệu có thể đoán số ID kế tiếp trong một gói tin yêu cầu gửi tới DNS. Nếu các yêu cầu ID có thể đoán trước được, điều này có nghĩa là vùng nhớ đệm trong DNS có thể ánh xạ không đúng tới địa chỉ IP thật, và đó chính là lỗ hổng bảo mật trong DNS.
2. Giả mạo địa chỉ trong vùng nhớ đệm của DNS
Sau các yêu cầu đệ quy, các ánh xạ địa chỉ nhận được sẽ tồn tại trong DNS cache. DNS server sẽ dựa vào cùng nhớ đệm này để xác định thông tin cho các yêu cầu đến và phản hồi từ client gửi tới, giúp cho việc truy cập thông tin nhanh hơn. Độ dài thời gian mà các kết quả yêu cầu đệ quy được giữ luôn trong DNS cache (kí hiệu là TTL -- time to live) có thể được thiết lập.
Việc các địa chỉ bị giả mạo nằm trong DNS cache kéo theo việc gửi thông tin ánh xạ không đúng với thời gian tồn tại (TTL) dài. Vậy nên, tại thời điểm kế tiếp khi có một yêu cầu gửi tới, nó sẽ nhận được thông tin sai. Việc sai thông tin này cũng có thể bị ảnh hưởng do việc nhận dữ liệu từ một DNS server từ xa nào đó bị giả mạo . Có thể giới hạn sự giả mạo thông tin này bằng cách giảm thời gian thông tin tồn tại trong cache (TTL), nhưng điều này cũng làm giảm hiệu năng của server.
Một ứng dụng thông dụng của DNS dạng phần mềm mã nguồn mở là BIND (Berkeley Internet Name Daemon), mà cung cấp hầu hết các chức năng quan trọng về DNS server. Tuy nhiên, cũng có rất nhiều lỗ hổng bảo mật trong BIND, và vì vậy, việc đảm bảo đang sử dụng phần mềm BIND với phiên bản mới nhất là rất quan trọng. Hiện tại, các chuẩn mới về DNS đã khắc phục được lỗi này trong vùng nhớ đệm của DNS.
3. Phá vỡ mức bảo mật môi trường
Việc tấn công bằng cách giả mạo địa DNS phá vỡ mức bảo mật của môi trường làm việc mạng trong DNS server. Ví dụ: tấn công dựa theo các lỗ hổng dạng tràn vùng đệm đối với các phiên bản BIND cũ, mà cho phép kẻ tấn công đoạt được quyền root truy cập. Khi kẻ tấn công đoạt được quyền truy cập trong môi trường DNS, anh ta có thể điều khiển được môi trường mạng.
Để giúp đỡ trong việc quản lý và gỡ rối, rất hữu ích khi biết rằng việc truyền thông DNS sử dụng cả giao thức TCP (Transmission Control Protocol) và UDP (User Datagram Protocol), và thông thường người ta sử dụng một firewall được cấu hình đứng lọc gói tin trước khi đi qua DNS.
Một cách để ngăn các nguy hiểm không được chứng thực là sử dụng một hệ thống DNS được chia theo vùng quản lý. Điều này liên quan tới cài đặt một DNS server bên trong. Khi đó, mỗi DNS bên ngoài được thiết lập chỉ chứa các thông tin liên quan bởi các host bên ngoài,như SMTP gateway, hay một NS bên ngoài. Hầu hết các mail server hiện tại có thể điều khiển SMTP mail rất tốt (như MS Outlook và Lotus Lote của IBM đều có các SMTP gateway), nó cũng an toàn hơn vì có cơ chế riêng rẽ cho việc nhận SMTP mail. Sau đó, nếu mail bên ngoài chuyển đổi thành công, kẻ tấn công sẽ không thể tự động truy cập tới hệ thống mail bên trong.
Tương lai phát triển của DNS
DNS có thể có lỗ hổng do bị giả mạo gói tin bởi vì thiếu vắng quyền chứng thực khi truy cập. Điều này có thể được khắc phục với DNSSEC. Đây là một cơ chế bảo mật mới bằng cách cho phép các Website kiểm tra các tên miền của họ và chịu trách nhiệm đối với các địa chỉ IP theo các chữ ký điện tử và thuật toán mã hoá công khai. Điều này cũng có nghĩa rằng, khi DNS client nhận một phản hồi từ yêu cầu của nó, nó có thể kiểm tra yêu cầu đó từ một tài nguyên được chứng thực. DNSSEC đã bắt đầu được nhúng trong BIND 9, và trong một số hệ điều hành.
DNSSEC sẽ đòi hỏi nhiều hơn về hiệu năng của phần cứng, băng thông lớn hơn và đòi hỏi phải thay đổi đối với tất cả các DNS server hiện tại. Vì vậy, việc áp dụng công nghệ mới này vẫn còn đang được triển khai và hứa hẹn trong tương lai.
Hôm nay, thông qua bài viết này Bình triệu đề cập tới vấn đề chuyển vùng. Chắc hẳn bạn sẽ quan tâm. Mong bài viết sẽ cho bạn hiểu rõ hơn về nó, cũng như có nhưng kiến thức nhất định về vấn đề này.
Chuyển vùng DNS
(Phần này được sưu tập của tác giả Binh Trieu - vietnam security)
Một trong những cấu hình sai nghiêm trọng mà người quản trị hệ thống có thể mắc phải là cho phép người dùng Internet không đáng tin cậy được tiến hành chuyển vùng DNS.
Chuyển vùng (Zone Transfer)cho phép máy phục vụ phụ cập nhật cơ sỡ dữ liệu từ máy chính. Như vậy là làm dư thừa khi chạy DNS, nhỡ như máy phục vụ tên chính không khả dụng. Nói chung, máy phục vụ DNS phụ chỉ cần chuyển vùng DNS. Thế nhưng,nhiều máy phục vụ DNS bị lập cấu hình sai và cung cấp bản sao vùng cho người nào yêu cầu. Không nhất thiết là xấu nếu thông tin cung cấp liên quan đến hệ thống nối mạng Internet và có tên máy chủ hợp lệ,dẫu tạo điều kiện dễ dàng cho kẻ tấn công tìm thấy đích. Vấn đề thực sự nảy sinh khi tổ chức không áp cụng cơ chế DNS cổng riêng để cách ly thông tin DNS ngoài (công khai) với thông tin DNS trong. Cung cấp thông tin địa chỉ IP trong cho người dùng không đáng tin cậy qua mạng Internet cũng giống như cung cấp bản đồ trong của tổ chức.
Chúng ta hãu xem xét một vài phương pháp chuyển vùng,và các loại thông tin.Tuy có nhiều công cụ chuyển vùng,nhưng tôi giới hạn thào luận ở vài loại phổ biến mà thôi.
Cách đơn giản để chuyển vùng là dùng máy khách “nslookup”thường do thi hành UNIX và NT mang lại.Chúng ta áp dụng “nslookup” trong chế độ tương tác với nhau:
[bash] $ nslookup
Default Server: ns1.example.net
Address:10.10.20.2
>216.182.1.1
Default Server : [10.10.20.2]
Address: 10.10.20.2
Name: gate.tellurian.net
Address:10.10.20.2
>set type=any
>ls –d tellurian.net. >>/tmp/zone_out
Đầu tiên chúng ta chạy “nslookup” trong chế độ tương tác. Một khi khởi động xong, nó sẽ cho biết máy phục vụ tên mặc định,thường là máy phục vụ DNS của tổ chức hoặc máy phục vụ DNS của người cung cấp dịch vụ Internet. Tuy nhiên, máy phục vụ DNS (10.10.20.2)không có thẩm quyềncho vùng đích, nên sẽ không có hết thảy mẫu tin DNS.Bởi vậy,chúng ta cần tự tay cho “nslookup” biết là sẽ truy vấn máy phục vụ DNS nào. Trong ví dụ này,chúng ta dùng máy phục vụ DNS chính cho Tellurian network (10.10.20.2).
Tiếp theo chúng ta định loại mẫu tin là “any”. Tác vụ này cho phép bạn kéo mẫu tin DNS bất kì (man nslookup) cho danh sách hoàn chỉnh.
Sau cùng, liệt kê toàn bộ mẫu tin liên quan đến vùng bằng tuỳ chọn “ls”.”-d” liệt kê tất cả mẩu tin vùng. Chúng ta thêm “.” ở cuối câu để cho biết tên vùng hội đủ điều kiện-song đa phần là để vậy. Hãy đổi hướng kết quả và tập tin “/tmp/zone_out” để có thể thao tác sau này.
Chuyển vùng xong, chúng ta xem trong tập tin coi có thông tin lý thú nào cho phép nhắm đến hệ thống cụ thể không. Hãy xem kết quả sau:
[bash] more zone_out
acct18 1D IN A 192.168.230.3
1D IN HINFO
1D IN MX 0 tellurianadmin-smtp
1D IN RP- bsmith.rci bsmith.who
1D IN TXT “Location:Telephone Room”
ce 1D IN CNAME aesop
au 1D IN A 192.168.230.4
1D IN HINFO “aspect” “MS-DOS”
1D IN MX 0 andromeda
1D IN RP jcoy.erebus jcoy.who
1D IN TXT “Location: Library”
acct21 1D IN A 192.168.230.5
1D IN HINFO “Gateway2000” “WinWKGRPS”
1D IN MX 0 tellurianadmin-smtp
1D IN RP bsmith.rci bsmith.who
1D IN TXT “Location: Acounting”
Chúng ta sẽ không đi chi tiết từng mẫu tin, chỉ lưu ý vài loại quan trọng.Đối với mỗi mục nhập, chúng ta có mẫu tin A cho biết địa chỉ IP của tên hệ thống nằm bên phải. Ngoài ra, mỗi máy chủ đều có mẩu tin HINFO nhận diện nền hoặc hoặc loại hệ điều hành đang chạy (RFC-952). Mẩu tin HINFO tuy không cần thiết song cung cấp nhiều thông tin cho kẻ tấn công. Vì chúng ta đã lưu kết quả chuyển vùng vào tập tin đầu ra nên dễ dàng thao tác kết quả bằng chương trình UNIX như: grep, sed, awk, hoặc Perl.
Giả thiết chúng ta là những chuyên gia trong SunOS hoặc Solaris, có thể tìm ra địa chỉ IP có mẩu tin HINFO liên quan đến SPARC, Sun, hoặc Solaris.
[bash] $ grep -i solaris zone_out |wc -1
388
Chúng ta có 388 mẩu tin tham chiếu "Solaris". Khỏi phải nói, chúng ta có quá nhiều mục tiêu.
Giả sử chúng ta muốn tìm hệ thống thử nghiệm, vô tình là chọn lựa cho kẻ tấn công. Tại sao? Thật đơn giản-chúng thường không kích hoạt nhiều đặc tính bảo mật, mật mã để đoán, nhà quản trị không hay để ý hoặc bận tâm ai đăng nhập chúng. Một chốn lý tưởng cho những kẻ xâm nhập. Do đó, chúng ta tìm hệ thống thử nghiệm như sau:
[bash] $ grep -i test /tmp/zone_out |wc -1
96
Nên có khoảng 96 mục nhập trong tập tin vùng có chứa từ "test". Phải bằng với số hệ thống thử nghiệm thật. Trên đây chỉ là một vài ví dụ đơn giản. Hầu hết kẻ xâm nhập sẽ mổ xẻ dữ liệu này để tập trung vào loại hệ thống cụ thể có chổ yếu đã biết.
Có vài điểm cần ghi nhớ. Phương pháp neu trên chỉ truy cập lần lượt máy phục vụ tên. Tức là bạn phải thực hiện cùng một tác vụ cho tất cả máy phục vụ tên có thẩm quyền đối với vùng đích. Chúng ta chỉ truy vấn vùng Tellurian.net mà thôi. Nếu có vùng con, sẽ phải thực hiện cùng loại truy vấn cho từng vùng con (chẳng hạn như greenhouse.tellurian.net). Sau cùng bạn nhận thông báo không thể liệt kê vùng hoặc từ chối truy vấn. Thường điều này cho thấy máy phục vụ đã được lập cấu hình để vô hiệu hóa chuyển vùng của người dùng bất hợp pháp. Vì vậy, bạn khó lòng chuyển vùng từ máy phục vụ này. Nhưng nếu có nhiều máy phục vụ DNS, bạn sẽ có cơ may tìm được máy cho phép chuyển vùng.
Có rất nhiều công cụ đẩy nhanh tiến trình này, bao gồm: host, Sam Spade, axfr và dig (không đề cập ở đây).
Lệnh "host" mang nhiều hương vị của UNIX. Cách dùng lệnh "host"như sau:
host -1 tellurian.net
hoặc
host -1 -v -t any tellurian.net
Nếu cần mỗi địa chỉ IP để đưa vào kịch bản shell, bạn cut (cắt) địa chỉ IP khỏi lệnh "host":
host -1 tellurian.net |cut -f 4 -d" " >>/tmp/ip_out
Không phải chức năng in dấn chân nào cũng buộc phải thực hiện qua lệnh UNIX. Một số sản phẩm Windows cũng cung cấp thông tin như vậy.
Sau cùng bạn chuyển vùng bằng một trong những công cụ siêu việt, axfr của Gaius. Trình tiện ích này sẽ chuyển thông tin vùng, cơ sở dữ liệu vùng và tập tin máy chủ cho từng vùng được truy vấn dưới dạng nén. Thâm chí bạn có thể chuyển vùng cấp cao như com và edu để lấy tất cả vùng liên quan đến "com" và "edu". Tuy nhiên, không nên làm vậy. Muốn chạy axfr, bạn gõ như sau:
[bash] $ axfr tellurian.net
axfr: Using default directory: /root/axfrdb
Found 2 name servers for domain "Tellurian.net";
Text deleted.
Received xxx answer (xxx records).
Để truy vấn thông tin vừa lấy trong cơ sở dữ liệu "axfr", bạn gõ như sau:
[bash] $ axfr tellurian.net
23/02/2004 09:06