Bài 87. (Lab) Phân tích gói tin bằng Wireshark để phát hiện tấn công
Khóa học CompTIA Security+ SY0-801 · Phần 4: Vận hành bảo mật · Bài 87 · 🎯 Objective 4.8 · ⏱️ Làm khoảng 75 phút · 🧪 Có lab (2 máy ảo) · 📝 5 câu bài tập cuối bài
🎯 Mục tiêu bài học
- Bắt gói tin bằng tcpdump hoặc Wireshark và lưu thành tệp pcap.
- Dùng thống kê (Protocol Hierarchy, Conversations) để có cái nhìn tổng quan trước khi đào sâu.
- Dùng display filter để tìm: quét cổng, mật khẩu gửi dạng rõ, truy vấn DNS bất thường.
- Dựng lại phiên bằng Follow TCP Stream và ghi lại kết luận kèm bằng chứng.
📎 Vị trí trong đề thi: Objective 4.8 về dữ liệu hỗ trợ điều tra. Bài này là lab thực hành của phần packet capture ở Bài 83. Các dấu hiệu quét cổng và mật khẩu rõ liên quan Bài 21 và Bài 30; kết luận cần được ghi nhận theo Bài 84 (giữ nguyên tệp gốc, tính hash). Lab kế tiếp: Bài 88.
⚠️ An toàn: Chỉ bắt và tạo lưu lượng giữa các máy ảo của bạn trong mạng host-only hoặc internal. Bắt gói tin trên mạng của người khác khi chưa được phép có thể vi phạm pháp luật và quy định về quyền riêng tư, vì tệp pcap có thể chứa mật khẩu và dữ liệu cá nhân.
💡 Liên hệ thực tế: "Bằng chứng nằm trong gói tin"
Sau khi kiểm tra log và NetFlow, Nam thấy một máy chủ gửi dữ liệu ra ngoài lúc 2 giờ sáng nhưng không biết gửi gì. May mắn là đoạn mạng đó có bật bắt gói tin có chọn lọc. Nam mở tệp pcap bằng Wireshark và tìm ra hai điều: một địa chỉ nội bộ quét hàng loạt cổng của máy chủ trước đó, và có phiên FTP gửi tài khoản mật khẩu dạng rõ. Hai phát hiện này khớp với dòng thời gian từ log. Đây là tình huống minh họa, không phải vụ việc có thật.
🔬 Hình 87a. Bắt, xem tổng quan, lọc, rồi dựng lại: đi từ rộng đến hẹp.
🧰 Chuẩn bị
| Máy ảo | Hệ điều hành | IP trong lab | Vai trò |
|---|---|---|---|
| kali | Kali Linux (đã có Wireshark, tcpdump, nmap) | 192.168.56.20 | Tạo lưu lượng và bắt gói tin |
| target | Metasploitable 2 hoặc máy Linux có dịch vụ FTP, HTTP | 192.168.56.30 | Máy mục tiêu (cố ý có lỗ hổng) |
- Đặt hai máy trong mạng host-only; không nối máy target ra Internet.
- Nếu không muốn dùng máy mục tiêu cố ý yếu, có thể cài
vsftpdtrên một máy Ubuntu thường, tạo tài khoản thử, và tắt TLS cho FTP chỉ để làm lab. - Wireshark cần quyền bắt gói tin. Trên Kali, chạy
sudo wiresharkhoặc thêm người dùng vào nhómwireshark.
🪜 Các bước thực hiện
Bước 1. Bắt gói tin ra tệp
Bắt bằng dòng lệnh, giữ tệp gốc để sau này tính hash:
bash
mkdir -p ~/lab87 && cd ~/lab87 sudo tcpdump -i eth1 -nn -w lab87.pcap host 192.168.56.30
(Thay eth1 bằng card host-only của bạn; xem bằng ip a.) Giữ cửa sổ này chạy, mở cửa sổ thứ hai để tạo lưu lượng.
Bước 2. Tạo lưu lượng mẫu
Trong cửa sổ thứ hai trên kali, tạo bốn loại lưu lượng, mỗi loại cách nhau vài giây:
bash
# 1. Quét cổng (SYN scan) vào máy target của bạn sudo nmap -sS -p 1-1000 192.168.56.30 # 2. Đăng nhập FTP bằng tài khoản thử (gửi dạng rõ) ftp 192.168.56.30 # nhập user và password của tài khoản thử, rồi gõ: ls, bye # 3. Truy cập web đơn giản curl -s http://192.168.56.30/ -o /dev/null # 4. Vài truy vấn DNS dig example.com dig khong-ton-tai-123456.example.com
Quay lại cửa sổ đầu, nhấn Ctrl+C để dừng bắt. Tính hash tệp gốc rồi làm việc trên bản sao:
bash
sha256sum lab87.pcap | tee lab87.pcap.sha256 cp lab87.pcap work.pcap
Bước 3. Xem tổng quan
Mở work.pcap trong Wireshark. Đừng đọc từng gói; bắt đầu từ thống kê:
| Menu | Cho biết | Câu hỏi bạn tự hỏi |
|---|---|---|
| Statistics → Protocol Hierarchy | Tỷ lệ các giao thức | Có giao thức không mong đợi không? |
| Statistics → Conversations | Cặp IP và cổng nào nói chuyện nhiều nhất | IP nào gửi nhiều gói nhất? |
| Statistics → Endpoints | Các đầu cuối tham gia | Có địa chỉ lạ không? |
Ghi lại IP nguồn gửi nhiều gói nhất và số cổng đích khác nhau nó chạm tới. Một IP chạm hàng trăm cổng trong vài giây là dấu hiệu quét cổng.
🚨 Hình 87b. Quét cổng, mật khẩu rõ, DNS bất thường và kết nối đều đặn.
Bước 4. Dùng display filter
Nhập vào thanh lọc phía trên và nhấn Enter:
| Mục đích | Display filter | Cách đọc |
|---|---|---|
| Chỉ một IP | ip.addr == 192.168.56.20 |
Mọi gói có IP này làm nguồn hoặc đích |
| Gói SYN mở kết nối | tcp.flags.syn == 1 && tcp.flags.ack == 0 |
Nhiều dòng tới nhiều cổng khác nhau là quét cổng |
| Cổng bị từ chối | tcp.flags.reset == 1 |
Máy đích trả RST cho cổng đóng |
| Lệnh FTP | ftp.request.command == "USER" || ftp.request.command == "PASS" |
Tài khoản, mật khẩu gửi dạng rõ |
| Yêu cầu HTTP | http.request |
Phương thức, URL, host |
| DNS | dns |
Tên miền được truy vấn |
| DNS thất bại | dns.flags.rcode == 3 |
NXDOMAIN: tên miền không tồn tại |
| Trừ một IP | !(ip.addr == 192.168.56.1) |
Loại nhiễu để nhìn rõ hơn |
🧠 Lưu ý: Display filter (lọc khi xem) khác capture filter (lọc khi bắt, ví dụ
host 192.168.56.30ở bước 1). Capture filter đã loại gói thì không lấy lại được; display filter chỉ ẩn, gói vẫn còn trong tệp.
Bước 5. Tìm quét cổng
Dùng filter SYN ở trên. Sắp xếp theo cột Destination Port hoặc mở Statistics → Conversations → TCP để thấy cùng một IP nguồn tới hàng trăm cổng đích. Đặc trưng của SYN scan là: gửi SYN, nhận SYN-ACK (cổng mở) hoặc RST (cổng đóng), rồi không hoàn tất bắt tay ba bước.
Ghi lại: IP nguồn, khoảng thời gian, số cổng, danh sách cổng mở (những cổng có SYN-ACK).
Bước 6. Tìm mật khẩu gửi dạng rõ
Dùng filter ftp. Chuột phải vào một gói FTP, chọn Follow → TCP Stream. Bạn sẽ thấy toàn bộ phiên dạng văn bản, gồm USER và PASS. Đây là lý do FTP và Telnet không an toàn và nên thay bằng SFTP, SSH (Bài 49).
Ghi lại: tài khoản thấy được, giao thức, rủi ro, và biện pháp khắc phục (tắt FTP, dùng SFTP, đổi mật khẩu đã lộ). Khi báo cáo trong đời thật, che mật khẩu trong tài liệu, không dán nguyên văn.
Bước 7. Xem DNS và xuất đối tượng
- Lọc
dnsrồi nhìn cột Info: có tên miền lạ, quá dài, hoặc nhiều truy vấn NXDOMAIN liên tiếp không? Đó là dấu hiệu của DGA (tên miền sinh tự động) hoặc DNS tunneling. Trong lab này, truy vấn tên miền không tồn tại ở bước 2 sẽ cho một dòng NXDOMAIN để bạn làm quen. - Với HTTP, vào File → Export Objects → HTTP để xem các tệp đã được tải trong lưu lượng (nếu có). Đây là cách lấy lại tệp bị truyền từ pcap, và cũng là lý do pcap cần bảo quản chặt.
Bước 8. Nhận ra kênh điều khiển (C2) và giới hạn của mã hóa
Beaconing là khi một máy kết nối đều đặn theo chu kỳ tới một IP lạ (ví dụ mỗi 60 giây). Trong Wireshark, bạn có thể dùng Statistics → I/O Graphs để thấy các "nhịp" đều nhau, hoặc lọc theo cặp IP và xem thời điểm từng gói. Lab này không tạo C2 thật, nhưng hãy ghi nhớ cách nhận biết.
Nếu lưu lượng dùng TLS (HTTPS), bạn không thấy nội dung, chỉ thấy metadata: IP, cổng, thời gian, lượng dữ liệu, tên máy chủ trong phần mở đầu bắt tay (SNI, nếu không bị mã hóa), thông tin chứng chỉ. Lọc tls.handshake.type == 1 để xem các gói ClientHello. Đây là lý do NetFlow và log vẫn cần thiết (Bài 83).
Bước 9. Ghi kết luận
Điền bảng ngắn, giống một mục trong báo cáo điều tra:
| Phát hiện | Bằng chứng (filter, số gói) | Mức chắc chắn | Hành động đề xuất |
|---|---|---|---|
| Quét cổng từ 192.168.56.20 | Filter SYN, số cổng chạm tới | Cao | Chặn hoặc điều tra máy nguồn |
| FTP gửi mật khẩu rõ | Follow TCP Stream, gói số... | Cao | Tắt FTP, dùng SFTP, đổi mật khẩu |
| Truy vấn NXDOMAIN | Filter dns.flags.rcode == 3 |
Thấp: có thể do lab | Theo dõi, không kết luận vội |
Phân biệt rõ sự kiện (thấy trong gói) và diễn giải (suy đoán ý đồ), như đã học ở Bài 84.
🛠️ Lỗi thường gặp
| Hiện tượng | Nguyên nhân thường gặp | Cách xử lý |
|---|---|---|
| Không bắt được gói nào | Sai card mạng, thiếu quyền | Kiểm tra ip a, chạy bằng sudo |
| Tệp pcap rất nhỏ hoặc trống | Capture filter sai IP | Kiểm tra lại IP trong lệnh tcpdump |
| Không thấy lệnh FTP | FTP dùng TLS, hoặc dịch vụ ở cổng khác | Dùng FTP thường trong lab, hoặc chọn Decode As |
| Filter bị tô đỏ | Sai cú pháp | Xem gợi ý màu: xanh là hợp lệ, đỏ là lỗi |
| Không đọc được nội dung HTTPS | Lưu lượng đã mã hóa | Chỉ phân tích metadata; không cố giải mã khi không có khóa hợp pháp |
🧹 Dọn dẹp
- Lưu
lab87.pcap,lab87.pcap.sha256và ghi chú; xóa tệp pcap khi không cần vì có thể chứa mật khẩu. - Hoàn nguyên snapshot của máy target; không để máy cố ý có lỗ hổng chạy lâu.
📘 Nối lý thuyết với lab
| Khái niệm | Trong lab |
|---|---|
| Packet capture | tcpdump, Wireshark ghi gói tin ra pcap |
| Capture filter và display filter | host ... khi bắt; ftp, dns khi xem |
| Quét cổng | Nhiều SYN tới nhiều cổng, SYN-ACK và RST |
| Giao thức không an toàn | FTP gửi mật khẩu rõ |
| DNS bất thường | NXDOMAIN, tên miền dài |
| Bảo quản bằng chứng | Hash tệp gốc, làm việc trên bản sao (Bài 84) |
| Hạn chế của mã hóa | TLS chỉ cho thấy metadata |
🎯 Mẹo làm bài
"Xem nội dung gói tin chi tiết" → packet capture (Wireshark, tcpdump). "Nhiều SYN tới nhiều cổng" → quét cổng. "Tài khoản đọc được trong lưu lượng" → giao thức không mã hóa (FTP, Telnet, HTTP). "Lọc khi bắt hay khi xem?" → capture filter là khi bắt, display filter là khi xem. "Kết nối đều đặn tới IP lạ" → beaconing, nghi C2. "Rất nhiều NXDOMAIN, tên miền ngẫu nhiên" → DGA. "Dữ liệu lọt qua DNS" → DNS tunneling. "Bắt gói tin ở đâu thấy lưu lượng?" → SPAN hoặc TAP. "Phân tích pcap thế nào để giữ bằng chứng?" → hash tệp gốc, làm trên bản sao.
📌 Tóm tắt nhanh
- Bắt gói tin ra pcap, hash tệp gốc, phân tích trên bản sao.
- Đi từ tổng quan (Protocol Hierarchy, Conversations) đến chi tiết (display filter, Follow TCP Stream).
- Quét cổng, mật khẩu rõ, DNS bất thường và beaconing là bốn mẫu hình cơ bản.
- TLS che nội dung; vẫn có metadata để phân tích.
- Kết luận cần bằng chứng, mức chắc chắn và hành động đề xuất; pcap có thể chứa dữ liệu nhạy cảm nên phải kiểm soát truy cập.
📝 Bài tập đánh giá
Tự chọn đáp án cho từng câu, rồi đối chiếu với phần đáp án ở cuối bài.
Câu 1. Trong Wireshark thấy một IP gửi gói SYN tới hàng trăm cổng khác nhau của một máy chủ trong vài giây, phần lớn nhận RST. Đây là dấu hiệu của gì?
- A. Sao lưu dữ liệu định kỳ
- B. Quét cổng (port scan)
- C. Cập nhật phần mềm
- D. Đăng nhập VPN
Câu 2. Sự khác nhau giữa capture filter và display filter là gì?
- A. Capture filter chỉ dùng cho HTTPS
- B. Hai loại hoàn toàn giống nhau
- C. Display filter loại bỏ vĩnh viễn gói khỏi tệp
- D. Capture filter quyết định gói nào được ghi lại khi bắt; display filter chỉ ẩn hoặc hiện gói trong tệp đã có
Câu 3. Trong tệp pcap thấy rõ tài khoản và mật khẩu của một phiên đăng nhập. Nhiều khả năng nhất giao thức đó là gì?
- A. SSH
- B. FTP hoặc Telnet không mã hóa
- C. HTTPS với TLS
- D. IPsec
Câu 4. Một máy nội bộ kết nối tới một IP lạ đúng mỗi 60 giây, gửi gói nhỏ và đều đặn suốt nhiều giờ. Nhận định hợp lý nhất?
- A. Có thể là beaconing tới máy chủ điều khiển, cần điều tra thêm
- B. Chắc chắn là lưu lượng bình thường
- C. Do màn hình bị khóa
- D. Do firewall hỏng
Câu 5. Vì sao cần tính hash tệp pcap gốc và phân tích trên bản sao?
- A. Để nén tệp nhỏ hơn
- B. Để Wireshark chạy nhanh hơn
- C. Để chứng minh tệp gốc không bị thay đổi và giữ giá trị bằng chứng
- D. Để giải mã nội dung TLS
👉 Đáp án
Câu 1: B — Nhiều SYN tới nhiều cổng, nhận RST ở cổng đóng, là đặc trưng của quét cổng.
Câu 2: D — Capture filter lọc lúc bắt (gói bị loại không lấy lại được); display filter chỉ ẩn hoặc hiện trong tệp đã có.
Câu 3: B — FTP và Telnet truyền tài khoản, mật khẩu dạng rõ; SSH, HTTPS, IPsec thì mã hóa.
Câu 4: A — Kết nối đều đặn theo chu kỳ tới IP lạ gợi ý beaconing, cần ghép thêm log và NetFlow.
Câu 5: C — Hash chứng minh tệp gốc không đổi; phân tích trên bản sao để bảo toàn bằng chứng.
📚 Bài viết thuộc khóa học CompTIA Security+ của VNExperts
🧭 Điều hướng
| ⬅️ Bài trước | 🏠 Mục lục khóa học | Bài kế tiếp ➡️ |
|---|---|---|
| Bài 86: (Lab) Quét lỗ hổng bằng Greenbone (OpenVAS) và lập báo cáo | Mục lục khóa học CompTIA Security+ | Bài 88: (Lab) Diễn tập ứng phó sự cố ransomware theo tình huống |