Hướng Dẫn Sniffing Mạng Với Wireshark Từ A Đến Z
Khi mạng bỗng chậm bất thường, một dịch vụ thất thường, hay bạn cần chứng minh “lỗi không phải do tôi”, chẳng công cụ nào giúp bạn nhìn thấy sự thật rõ ràng như Wireshark. Nó giống một kính hiển vi cho lưu lượng, cho phép bạn “nhìn” vào từng gói tin, bức tranh luồng dữ liệu, và cả “ngữ cảnh” giao tiếp giữa các hệ thống. Bài viết này sẽ đồng hành cùng bạn từ những khái niệm cơ bản đến các kỹ thuật phân tích sâu, kèm quy trình, mẹo thực chiến và cảnh báo đạo đức để đảm bảo bạn dùng Wireshark đúng nơi, đúng cách, đúng pháp luật.
Wireshark là gì và bạn có thể làm gì (một cách hợp pháp)?
Wireshark là trình phân tích gói tin (packet analyzer) mã nguồn mở, đa nền tảng, hỗ trợ hàng trăm giao thức. Với Wireshark, bạn có thể:
- Quan sát gói tin theo thời gian thực hoặc từ tệp pcap đã ghi.
- Phân rã (decode) giao thức từ tầng liên kết (Ethernet) đến tầng ứng dụng (HTTP, DNS, TLS...).
- Tìm lỗi kết nối, trễ bất thường, thất lạc gói, cửa sổ TCP, handshake không trọn vẹn.
- Lập báo cáo bằng thống kê, biểu đồ I/O, flow graph, conversations, endpoints.
- Phục vụ điều tra sự cố bảo mật từ góc nhìn phòng thủ: phát hiện mẫu hành vi lạ, beaconing, bất thường DNS, v.v.
Quan trọng: Sniffing không có nghĩa là “do thám người khác”. Bạn chỉ nên bắt gói trên thiết bị/mạng của chính bạn hoặc nơi bạn có thẩm quyền/được ủy quyền rõ ràng. Tránh truy cập trái phép, tránh tìm cách vượt qua mã hóa, và luôn bảo vệ dữ liệu nhạy cảm (PII, mật khẩu, cookie). Hãy dùng Wireshark để cải thiện độ tin cậy, hiệu năng và an toàn hệ thống – đó mới là giá trị bền vững.
Chuẩn bị: đạo đức, pháp lý và môi trường lab an toàn
Trước khi mở Wireshark, xác định ranh giới pháp lý và đạo đức:
- Quyền hạn: Chỉ phân tích lưu lượng trên hạ tầng bạn sở hữu hoặc được cấp phép bằng văn bản. Tại doanh nghiệp, cần chính sách và chấp thuận từ quản trị/bộ phận pháp chế.
- Dữ liệu nhạy cảm: Tắt/ẩn các trường PII trong báo cáo; lưu trữ pcap an toàn; xóa khi không còn nhu cầu. Cân nhắc mã hóa ổ đĩa và quy trình quản lý truy cập.
- Mã hóa: Tôn trọng mã hóa đầu cuối. Chỉ giải mã TLS cho mục đích kiểm thử/khắc phục sự cố trên hệ thống của chính bạn (ví dụ, máy khách do bạn kiểm soát, dùng file khóa phiên hợp lệ), không được tìm cách phá mã hoặc “lách luật”.
Gợi ý lab an toàn để học:
- Máy ảo (VM) hoặc container riêng biệt. Tạo một subnet lab với 1 client và 1 web server test (ngay cả một container Nginx cũng đủ) để thực hành.
- Dùng bộ pcap mẫu: Wireshark sample captures, tcpreplay trên môi trường lab để “phát lại” lưu lượng vô hại.
- Tài liệu hóa: Sao chép điều kiện, thời điểm, thiết bị, mục tiêu kiểm thử. Điều này giúp tái lập vấn đề và viết báo cáo chuyên nghiệp.
Cài đặt và làm quen giao diện
Cài đặt Wireshark khá đơn giản trên Windows, macOS, Linux. Sau khi cài:
- Chạy Wireshark với quyền đủ để bắt gói ở interface cần thiết. Trên Linux, cấu hình quyền cho dumpcap để không phải chạy toàn bộ Wireshark với đặc quyền cao.
- Chọn card mạng muốn bắt: Ethernet, Wi‑Fi, loopback, v.v.
Làm quen giao diện:
- Danh sách gói (Packet List): Mỗi dòng là một gói, có thời gian, nguồn, đích, giao thức, thông tin tóm tắt. Bạn có thể thêm cột (Preferences -> Appearance -> Columns) như
tcp.stream, tcp.len, tcp.window_size_value, dns.flags.rcode để phân tích nhanh.
- Cửa sổ chi tiết gói (Packet Details): Cây phân cấp từ Ethernet, IP, TCP/UDP đến ứng dụng. Mở từng trường để đọc cờ, mã lỗi, độ dài, v.v.
- Hex view: Xem payload thô để xác minh hoặc trích ký tự, nhưng chỉ dùng khi cần.
- Profiles: Tạo profile riêng cho từng mục đích (troubleshooting web, VoIP, DNS). Mỗi profile gồm màu sắc (Coloring Rules), cột, filter mặc định, layout.
- Coloring Rules: Tô màu theo điều kiện để “nhìn” pattern nhanh (ví dụ SYN, retransmission, RST). Tránh lạm dụng màu quá nhiều gây nhiễu.
Mẹo cấu hình hữu ích:
- Time format: Bật
Seconds Since Beginning of Capture và Time Display Format: Seconds with milliseconds để đo trễ chính xác.
- Name resolution: Tắt DNS resolution trong phần capture để tăng tốc; khi cần, bật trong phân tích offline.
- Packet length/capture length: Hiển thị để phát hiện phân mảnh, MTU/vấn đề PMTUD.
Bắt gói: capture filters vs display filters
Hai khái niệm rất dễ nhầm:
- Capture filter (BPF): Áp dụng ngay khi ghi, giúp giảm kích thước pcap. Cú pháp giống tcpdump, ví dụ
tcp port 443 and host 10.0.0.5. Dùng thận trọng vì đã lọc thì dữ liệu bị loại sẽ mất vĩnh viễn.
- Display filter: Lọc khi hiển thị, không thay đổi tệp gốc. Cú pháp riêng của Wireshark, rất mạnh và chi tiết:
ip.addr == 10.0.0.5 && tls.handshake.
Tình huống dùng:
- Trong khắc phục sự cố, ưu tiên lưu đủ dữ liệu rồi dùng display filter để khoanh vùng. Khi đã hiểu rõ, bạn có thể chuyển sang dùng capture filter để tiết kiệm dung lượng trong ca trực dài.
Ví dụ display filter hữu ích:
- TCP:
tcp.flags.syn == 1 && tcp.flags.ack == 0 (SYN); tcp.analysis.retransmission; tcp.window_size_value < 10000.
- DNS:
dns.flags.response == 1 && dns.a (phản hồi có bản ghi A); dns.qry.name == "example.com".
- HTTP:
http.request hoặc http.response.code >= 400.
- TLS:
tls && tls.handshake để xem ClientHello/ServerHello; tls.handshake.type == 1 (ClientHello).
Đọc một gói tin từ trong ra ngoài
Khi mở một gói, hãy soi từ thấp lên cao:
- Ethernet: Nguồn/đích MAC, EtherType. Nếu thấy VLAN Tag (802.1Q), kiểm tra ID và ưu tiên.
- IP: IPv4/IPv6, TTL/Hop Limit (nhỏ bất thường có thể là dấu hiệu vòng lặp), DF bit (don’t fragment), Total Length, Identification (hữu ích khi theo dõi phân mảnh), DSCP/ECN.
- TCP/UDP: Với TCP, đọc cờ (SYN/ACK/FIN/RST), Window Size, MSS, SACK Permitted, Timestamps, Options. Với UDP, kiểm tra Port, Length, nếu có lỗi checksum.
- Ứng dụng: HTTP headers (Host, User-Agent, status code), DNS (query name/type, rcode), TLS (phiên bản, cipher suites, extensions như SNI, ALPN) – ghi nhớ đây là metadata, payload TLS vẫn được mã hóa.
Nguyên tắc vàng: ghi chú ngữ cảnh – thời điểm, hướng lưu lượng, chuỗi sự kiện. Một gói đơn lẻ hiếm khi nói lên nhiều điều nếu không đặt trong luồng (stream) của nó.
Quy trình phân tích có hệ thống
Tránh “nhảy” vào chi tiết quá sớm. Quy trình gợi ý:
- Xác định câu hỏi: “Cái gì chậm? Chậm ở đâu? Khi nào?”
- Xác minh đầu vào: đúng interface, đúng thời gian, có đủ handshake chưa? Tệp có bị cắt ngắn?
- Vẽ bức tranh tổng quan:
- Statistics -> Endpoints/Conversations để biết ai nói chuyện với ai, top talkers.
- IO Graph để nhìn pattern băng thông, bùng nổ, đợt giảm lưu lượng.
- Follow TCP Stream để xem mạch hội thoại (lưu ý: với TLS bạn chỉ thấy metadata, không nội dung).
- Khoanh vùng: dùng display filter theo đối tượng, cổng, subnet, giao thức.
- Kiểm chứng giả thuyết: đo thời gian giữa sự kiện A và B (ví dụ DNS đáp ứng, TCP handshake, TLS handshake, request/first byte/last byte).
- Kết luận và khuyến nghị: ghi lại bằng số liệu (ms, số gói, tỉ lệ retransmission) và ảnh chụp màn hình biểu đồ.
Mẹo đo thời gian:
- Dùng “Time Reference” (nhấn phím t) để đánh dấu mốc. Sau đó xem delta time giữa mốc và các sự kiện.
- Dùng
tcp.analysis.ack_rtt để ước lượng RTT; hoặc vẽ IO Graph với biểu đồ AVG(tcp.analysis.ack_rtt).
Tình huống thực chiến: từ phổ biến đến chuyên sâu
1) Web “rùa bò” – chậm do đâu?
Cách tiếp cận:
- Kiểm tra DNS: Lọc
dns && dns.flags.response == 1 và đo thời gian từ query đến response. rcode != 0 cho thấy lỗi (NXDOMAIN, SERVFAIL). Nếu DNS chậm, mọi thứ phía sau đều chậm.
- TCP Handshake: Lọc
tcp.flags.syn == 1 theo IP server. Đo thời gian SYN -> SYN/ACK -> ACK. RTT cao? Có SYN retransmission?
- TLS Handshake: Lọc
tls.handshake với cùng stream. Kiểm tra thời gian từ ClientHello đến ServerHello/Certificate. TLSv1.3 thường gọn hơn. Bất thường có thể do kiểm tra OCSP, SNI routing, hoặc CDN edge không tối ưu.
- Request/Response: Với HTTP rõ (lab) có thể xem
http.time. Với HTTPS, quan sát kích thước TLS records, số lượng round-trip.
- Hiệu năng đường truyền:
tcp.analysis.retransmission, tcp.window_size_value nhỏ và ZeroWindow gợi ý nghẽn ở phía đích; Out-Of-Order nhiều có thể do path bất ổn.
Kết luận mẫu:
- “Chậm chủ yếu do DNS: 320 ms/truy vấn, trung bình 2 truy vấn/trang -> ~640 ms đầu kỳ.”
- “TLS handshake kéo dài 400 ms do server trả lời chậm ở giai đoạn chứng chỉ.”
- “Tái truyền chiếm 3.1% gói, giảm tốc độ effective throughput.”
2) Ứng dụng nội bộ rớt kết nối ngẫu nhiên
- Tìm
tcp.flags.reset == 1 (RST). RST từ server thường báo ứng dụng đóng socket đột ngột.
- Kiểm tra Keep-Alive: Thiếu keep-alive có thể khiến thiết bị trung gian (NAT/Firewall) cắt phiên.
- Xem MTU: Nếu có DF bit và không có ICMP Fragmentation Needed, PMTUD có thể thất bại. Lưu lượng lớn bị drop dẫn đến timeouts.
3) DNS bất thường
- Lọc
dns và nhóm theo dns.qry.name. Tìm truy vấn lặp, truy vấn tới domain lạ, hoặc TXT với payload dài (nghi vấn exfiltration trong môi trường doanh nghiệp – chỉ phân tích trên dữ liệu bạn có quyền).
- Kiểm tra fallback UDP -> TCP (trả lời truncated). Điểm đo tốt: latency trung bình/95th percentile.
4) VoIP chập chờn
- Telephony -> RTP -> Show All Streams: kiểm tra jitter, packet loss, skew. MOS/R-Factor ước lượng chất lượng.
- Lọc
rtp và vẽ IO Graph số gói/giây. Xem có burst loss trùng thời gian với các flow dữ liệu lớn khác không.
5) Microservices và HTTP/2
- Với HTTP/2 trên TLS, bạn không xem được nội dung, nhưng có thể nhìn pattern: số lượng stream đồng thời, kích thước frame, thời gian giữa SETTINGS và DATA, dấu hiệu RESET_STREAM.
- Kiểm tra ALPN trong ClientHello/ServerHello (
h2, http/1.1) để xác định giao thức ứng dụng thương thảo.
Phát hiện và ứng phó sự cố bảo mật (góc nhìn phòng thủ)
Tập trung phòng thủ và tuân thủ:
- DNS Indicators: nhiều truy vấn tới domain ngẫu nhiên/độ entropy cao;
NXDOMAIN liên tiếp; TXT/NULL bất thường.
- Beaconing: khoảng thời gian đều đặn (ví dụ 60s) tới cùng IP/Domain. IO Graph hoặc Statistics -> Conversations giúp nhận diện.
- TLS Metadata: SNI lạ, JA3/JA3S fingerprint không khớp baseline (có thể dùng thêm công cụ ngoài). Các cert tự ký không quen thuộc trong mạng doanh nghiệp.
- L7 lỗi thường gặp:
http.response.code >= 400 tăng đột biến có thể do scanning nội bộ.
Khi ghi nhận:
- Gắn cờ (mark) gói quan trọng, lưu display filter mô tả “Indicators” đang theo dõi.
- Không can thiệp trái phép. Thực hiện quy trình ứng phó: cô lập hệ thống trong phạm vi thẩm quyền, thu thập log/pcap bổ sung, và báo cáo đến đội an toàn thông tin.
Thống kê, trực quan và báo cáo
Những bảng và biểu đồ giúp “kể chuyện” dữ liệu:
- Statistics -> Endpoints/Conversations: tổng hợp số gói, bytes, cổng, hướng. Lọc theo IPv4/IPv6, TCP/UDP. Dùng để xác định top talkers, flow lớn.
- Flow Graph: trình bày chuỗi gói theo thời gian giữa hai đầu. Hữu ích để minh họa handshake, retransmission, hoặc đường đi ACK.
- IO Graph: tạo nhiều đường (series) theo filter riêng, ví dụ
COUNT(tcp.analysis.retransmission) và SUM(frame.len) để thấy tương quan mất gói và băng thông.
- Expert Info: điểm danh warnings, notes, errors (TCP previous segment not captured, duplicate ACK...). Dùng như danh sách việc cần kiểm tra.
- Export Objects (khi hợp pháp và trong lab): HTTP/SMB... để kiểm tra tệp được truyền. Trong sản xuất, hành động này phải tuân thủ chính sách dữ liệu nghiêm ngặt và chỉ khi có thẩm quyền.
Báo cáo chuyên nghiệp:
- Tóm tắt vấn đề bằng 3 con số chính (ví dụ: DNS 320 ms, RTT 80 ms, retransmission 3.1%).
- 1–2 biểu đồ then chốt (IO Graph, Flow Graph) với chú thích mốc thời gian.
- Khuyến nghị cụ thể: chỉnh TTL health check, tăng keep-alive, kiểm tra load balancer, tối ưu CDN PoP.
Mẹo nâng cao mà vẫn an toàn pháp lý
- Profiles theo vai trò: “Web-Perf”, “DNS”, “VoIP”, “SecOps”. Mỗi profile có bộ cột riêng (ví dụ với Web-Perf thêm
tcp.analysis.ack_rtt, tcp.time_delta, tls.record.content_type).
- Bookmark & Comment: Nhấn
t để set time reference, click phải -> “Packet Comment” để ghi chú phát hiện. Khi chia sẻ pcap, đồng nghiệp hiểu ngay bối cảnh.
- Tshark cho tự động hóa: Chạy phân tích offline trên chính tệp của bạn hoặc hệ thống kiểm thử bạn kiểm soát. Trích xuất chỉ số (ví dụ trung bình RTT) để đưa vào CI/CD cho kiểm thử hiệu năng.
- Giải mã TLS trong phạm vi hợp pháp: Trên máy khách do bạn quản lý, dùng SSLKEYLOGFILE để Wireshark giải mã lưu lượng bạn tạo ra trong lab/kiểm thử. Không cố gắng phá mã hóa của bên thứ ba hay hệ thống bạn không sở hữu.
- Remote capture có kiểm soát: Chỉ thực hiện trên endpoint/hệ thống bạn quản trị và có sự đồng ý, sử dụng các cơ chế ghi tại chỗ (dumpcap) rồi chuyển tệp an toàn sang máy phân tích. Tránh streaming nhạy cảm qua mạng công cộng.
Bộ lọc hay dùng – “cheat sheet” rút gọn
-
Kết nối TCP:
- SYN:
tcp.flags.syn == 1 && tcp.flags.ack == 0
- Handshake một kết nối:
tcp.stream == N (thay N bằng số stream)
- Tái truyền:
tcp.analysis.retransmission
- Cửa sổ nhỏ:
tcp.window_size_value < 10000
- RST:
tcp.flags.reset == 1
-
DNS:
- Truy vấn domain:
dns.qry.name == "example.com"
- Phản hồi lỗi:
dns.flags.rcode != 0
- TXT bản ghi:
dns.txt
-
HTTP/HTTPS:
- Yêu cầu HTTP:
http.request
- Lỗi HTTP:
http.response.code >= 400
- TLS Handshake:
tls.handshake
-
Phân loại theo IP:
- Một máy:
ip.addr == 10.0.0.5
- Dải subnet:
ip.addr == 10.0.1.0/24
-
Hiệu năng và bất thường:
- Mất gói suy đoán:
tcp.analysis.fast_retransmission || tcp.analysis.retransmission
- Out-of-order:
tcp.analysis.out_of_order
- Zero Window:
tcp.analysis.zero_window
Mẹo: Lưu các filter này thành buttons trong thanh filter để chuyển đổi nhanh.
Checklist nhanh khi mở một pcap
- Bối cảnh tệp: ai cung cấp, thời điểm, giao diện nào, mục tiêu phân tích là gì?
- Thống kê tổng quan: Endpoints, Conversations – có flow nào bất thường vượt trội?
- Thời gian: thiết lập Time Reference tại sự kiện gốc.
- Tầng tên miền: DNS có ổn định, độ trễ trung bình bao nhiêu, có rcode lỗi?
- Handshake: TCP ổn không? Có retransmission, RST, hay handshake kéo dài?
- TLS: ALPN/SNI có đúng mong đợi? Handshake có chậm bất thường?
- Ứng dụng: HTTP code bất thường, pattern request/response có lệch?
- Hiệu năng đường truyền: ACK RTT, cửa sổ, out-of-order, zero window.
- Ghi chú phát hiện và chứng cứ: ảnh chụp đồ thị, filter, số đo cụ thể.
- Khuyến nghị hành động: cấu hình, hạ tầng, ứng dụng – ưu tiên theo tác động.
Hỏi – đáp nhanh các hiểu lầm phổ biến
- “Xem được mọi thứ có nghĩa là tôi có thể đọc nội dung nhạy cảm?” – Không. Với lưu lượng mã hóa (HTTPS/TLS), bạn chỉ thấy metadata. Chỉ giải mã nội dung khi có khóa hợp lệ và quyền hợp pháp trên chính thiết bị của bạn trong bối cảnh kiểm thử/hỗ trợ.
- “Bật bắt gói là nguyên nhân gây chậm?” – Việc ghi pcap có chi phí, nhưng trên máy trạm/hệ thống hiện đại, với cấu hình buffer phù hợp và lọc hợp lý, tác động thường nhỏ. Tránh bắt quá rộng và kéo dài không cần thiết.
- “Chỉ cần nhìn gói là biết lỗi ở đâu?” – Phải kết hợp kiến thức ứng dụng/hạ tầng. Wireshark đưa ra “triệu chứng” và dữ liệu định lượng; quyết định cần thêm log server, metrics APM, và hiểu biết domain.
Lộ trình học và luyện tập hiệu quả
- Bắt đầu với sample pcap: HTTP, DNS, TLS handshake. Nhận diện các mẫu “sạch” khi hệ thống khỏe.
- Tạo bài tập: cố ý cấu hình sai MTU, làm trễ DNS trong lab, giảm cửa sổ TCP, quan sát dấu hiệu trong Wireshark và ghi chép kết luận.
- Mỗi tuần một chủ đề: tuần DNS, tuần TCP Handshake, tuần TLS Metadata, tuần VoIP. Làm lại checklist cho đến khi thành phản xạ.
- Chia sẻ hồ sơ (profile) và báo cáo mẫu trong nhóm để chuẩn hóa cách nhìn và ngôn ngữ chung.
Khi bạn đã quen, Wireshark không còn là một “đồ nghề kỹ thuật khó nhằn” nữa, mà trở thành chiếc kính hiển vi đáng tin cậy: bạn nhìn thấy vấn đề, đo được tác động, và dẫn đường cho quyết định. Hãy nhớ nguyên tắc vàng: chỉ phân tích trên hệ thống bạn sở hữu hoặc có phép, bảo vệ dữ liệu người dùng, và dùng kỹ năng này để làm mạng nhanh hơn, an toàn hơn, minh bạch hơn.