Cách sử dụng Bộ lọc Wireshark trên Linux

Wireshark là một trình phân tích gói đẳng cấp thế giới có sẵn trên Linux, Windows và macOS. Các bộ lọc của nó rất linh hoạt và phức tạp, nhưng đôi khi, phản trực giác. Chúng tôi sẽ giải thích những “vấn đề cần làm” mà bạn cần đề phòng.
Mục lục
Phân tích gói với Real Bite
Wireshark là một trong những viên ngọc quý của thế giới mã nguồn mở. Đó là một công cụ phần mềm đẳng cấp thế giới, được các chuyên gia cũng như nghiệp dư sử dụng để điều tra và chẩn đoán các sự cố mạng. Các nhà phát triển phần mềm sử dụng nó để xác định và xác định đặc điểm của các lỗi trong quy trình giao tiếp. Các nhà nghiên cứu bảo mật sử dụng nó để nắm bắt và bỏ chọn hoạt động độc hại trên mạng.
Quy trình làm việc điển hình là chạy Wireshark ở chế độ Capture, do đó, nó ghi lại lưu lượng mạng thông qua một trong các giao diện mạng trên máy tính. Các gói mạng được hiển thị trong thời gian thực, khi chúng được bắt. Tuy nhiên, trong phân tích sau nắm bắt, chi tiết cụ thể về những gì đang diễn ra trong mạng được tiết lộ.
Các gói được bắt được gọi là dấu vết. Khi quá trình chụp hoàn tất, dấu vết có thể được thực hiện từng bước, từng gói. Bạn có thể kiểm tra bất kỳ gói nào đến từng chi tiết nhỏ nhất, vạch ra các “cuộc trò chuyện” mạng giữa các thiết bị và sử dụng các bộ lọc để bao gồm (hoặc loại trừ) các gói khỏi phân tích của bạn.
Khả năng lọc của Wireshark không ai sánh kịp, với tính linh hoạt và khả năng phân giải cao. Có những nét tinh tế trong cú pháp của chúng giúp bạn dễ dàng viết một bộ lọc và nhận được kết quả không đáp ứng được mong đợi của bạn.
Nếu bạn không hiểu cách các bộ lọc hoạt động trong Wireshark, bạn sẽ không bao giờ thoát khỏi thiết bị đầu tiên và điều chỉnh các khả năng của phần mềm.
Cài đặt Wireshark
Khi bạn cài đặt Wireshark, bạn sẽ được hỏi liệu có ai sử dụng tài khoản không phải root có thể ghi lại dấu vết mạng hay không. Nói không với điều này có thể là một ý tưởng hấp dẫn. Bạn có thể không muốn mọi người có thể nhìn thấy những gì đang xảy ra trên mạng. Tuy nhiên, cài đặt Wireshark để chỉ những người có đặc quyền root mới có thể sử dụng nó có nghĩa là tất cả các thành phần của nó sẽ chạy với quyền cao hơn.
Wireshark chứa hơn 2 triệu dòng mã phức tạp và nó tương tác với máy tính của bạn ở mức thấp nhất. Các phương pháp bảo mật tốt nhất khuyên rằng càng ít mã càng tốt nên chạy với các đặc quyền nâng cao — đặc biệt là khi mã hoạt động ở mức thấp như vậy.
Sẽ an toàn hơn nhiều khi chạy Wireshark bằng tài khoản người dùng thông thường. Chúng tôi vẫn có thể hạn chế những người có khả năng chạy Wireshark. Điều này yêu cầu một vài bước thiết lập bổ sung, nhưng đó là cách an toàn nhất để tiếp tục. Các phần tử thu thập dữ liệu của Wireshark sẽ vẫn chạy với các đặc quyền nâng cao, nhưng phần còn lại của Wireshark chạy như một quy trình bình thường.
Để bắt đầu cài đặt trên Ubuntu, hãy nhập:
sudo apt-get install wireshark
Trên Fedora, nhập:
sudo dnf install wireshark
Trên Manjaro, sử dụng lệnh này:
sudo pacman -Syu wireshark-qt
Trong quá trình cài đặt, bạn sẽ thấy màn hình bên dưới, khuyến nghị rằng bạn không nên chạy Wireshark dưới dạng root. Nhấn Tab để di chuyển phần đánh dấu màu đỏ đến “
Trên màn hình tiếp theo, nhấn Tab để di chuyển phần đánh dấu màu đỏ đến “
Để chạy Wireshark, bạn phải là thành viên của nhóm “Wirehark”, được tạo trong quá trình cài đặt. Điều này cho phép bạn kiểm soát những người có thể chạy Wireshark. Bất kỳ ai không thuộc nhóm “Wirehark” đều không thể chạy Wireshark.
Để thêm chính bạn vào nhóm “Wireshark”, hãy sử dụng lệnh sau:
sudo usermod -a -G wireshark $USER
Để tư cách thành viên nhóm mới của bạn có hiệu lực, bạn có thể đăng xuất và đăng nhập lại hoặc sử dụng lệnh sau:
newgrp wireshark
Để xem bạn có thuộc nhóm mới hay không, hãy sử dụng lệnh nhóm:
groups
Bạn sẽ thấy “Wirehark” trong danh sách các nhóm.
Khởi động Wireshark
Bạn có thể khởi chạy Wireshark bằng lệnh bên dưới. Dấu và (&) khởi chạy Wireshark như một tác vụ nền, nghĩa là bạn có thể tiếp tục bằng cách sử dụng cửa sổ đầu cuối. Bạn thậm chí có thể đóng cửa sổ đầu cuối và Wireshark sẽ tiếp tục chạy.
Nhập nội dung sau:
Wireshark &
Giao diện Wireshark xuất hiện. Các thiết bị giao diện mạng có trong máy tính của bạn được liệt kê, cùng với một số thiết bị giả tích hợp.
Một đường lượn sóng bên cạnh một giao diện có nghĩa là nó đang hoạt động và lưu lượng mạng đang đi qua nó. Một đường phẳng có nghĩa là không có hoạt động nào trên giao diện. Mục hàng đầu trong danh sách này là “enp0s3”, kết nối có dây cho máy tính này và như mong đợi, nó hiển thị hoạt động.
Để bắt đầu chụp các gói, chúng tôi nhấp chuột phải vào “enp0s3”, sau đó chọn “Bắt đầu chụp” trong menu ngữ cảnh.
Bạn có thể đặt bộ lọc để giảm lượng truy cập mà Wireshark bắt được. Chúng tôi thích nắm bắt mọi thứ và lọc ra bất kỳ thứ gì chúng tôi không muốn thấy khi thực hiện phân tích. Bằng cách này, chúng tôi biết mọi thứ đã xảy ra đều nằm trong dấu vết. Bạn không muốn vô tình bỏ lỡ một sự kiện mạng giải thích tình huống bạn đang điều tra do bộ lọc chụp của bạn.
Tất nhiên, đối với các mạng có lưu lượng truy cập cao, các dấu vết có thể nhanh chóng trở nên rất lớn, vì vậy việc lọc khi bắt giữ có ý nghĩa trong trường hợp này. Hoặc, có lẽ bạn chỉ thích nó theo cách đó.
Lưu ý rằng cú pháp cho bộ lọc chụp hơi khác một chút hơn thế đối với màn hình.
Các biểu tượng được đánh dấu trong hình trên cho biết những điều sau, từ trái sang phải:
Vây cá mập: Nếu màu xanh lam, nhấp vào nó sẽ bắt đầu chụp gói. Nếu Wireshark đang bắt các gói, biểu tượng này sẽ có màu xám.
Hình vuông: Nếu màu đỏ, nhấp vào nó sẽ dừng quá trình chụp gói đang chạy. Nếu Wireshark không bắt các gói, biểu tượng này sẽ có màu xám.
Vây cá mập với mũi tên hình tròn: Nếu màu xanh lục, nhấp vào nó sẽ dừng dấu vết hiện đang chạy. Điều này mang lại cho bạn cơ hội để lưu hoặc loại bỏ các gói đã bắt và khởi động lại theo dõi. Nếu Wireshark không bắt các gói, biểu tượng này sẽ có màu xám.
Phân tích dấu vết
Nhấp vào biểu tượng hình vuông màu đỏ sẽ dừng việc thu thập dữ liệu để bạn có thể phân tích các gói tin được ghi lại trong dấu vết. Các gói được trình bày theo thứ tự thời gian và được mã hóa màu sắc theo giao thức của gói. Chi tiết của gói được đánh dấu được hiển thị ở hai khung dưới trong giao diện Wireshark.
Một cách đơn giản để làm cho việc đọc dấu vết dễ dàng hơn là yêu cầu Wireshark cung cấp các tên có ý nghĩa cho địa chỉ IP nguồn và đích của các gói tin. Để thực hiện việc này, hãy nhấp vào Xem> Độ phân giải tên và chọn “Phân giải địa chỉ mạng”.
Wireshark sẽ cố gắng phân giải tên của các thiết bị đã gửi và nhận từng gói tin. Nó sẽ không thể xác định mọi thiết bị, nhưng những thiết bị nó có thể sẽ giúp bạn đọc dấu vết.
Cuộn màn hình sang trái sẽ hiển thị nhiều cột hơn ở bên phải. Cột thông tin hiển thị bất kỳ thông tin nào mà Wireshark có thể phát hiện từ gói tin. Trong ví dụ dưới đây, chúng tôi thấy một số yêu cầu và phản hồi ping.
Theo mặc định, Wireshark hiển thị tất cả các gói theo thứ tự mà chúng được truy tìm. Nhiều thiết bị gửi các gói qua lại đồng thời. Điều này có nghĩa là một cuộc trò chuyện giữa hai thiết bị có khả năng có các gói từ những người khác xen kẽ giữa chúng.
Để kiểm tra một cuộc hội thoại, bạn có thể tách nó ra theo giao thức. Giao thức cho mỗi gói được hiển thị trong cột giao thức. Hầu hết các giao thức bạn sẽ thấy đều thuộc họ TCP / IP. Bạn có thể chỉ định giao thức chính xác hoặc sử dụng Ethernet như một loại catchall.
Bấm chuột phải vào bất kỳ gói nào trong trình tự bạn muốn kiểm tra, sau đó bấm Bộ lọc hội thoại> Ethernet. Trong ví dụ dưới đây, chúng tôi đã chọn một gói yêu cầu ping.
Chuỗi các gói được hiển thị mà không có các gói khác giữa chúng, vì Wireshark đã tự động tạo một bộ lọc để thực hiện việc này. Nó được hiển thị trong thanh bộ lọc và được đánh dấu bằng màu xanh lục, cho biết cú pháp của bộ lọc là chính xác.
Để xóa bộ lọc, hãy nhấp vào “X” trên thanh bộ lọc.
Tạo bộ lọc của riêng bạn
Hãy đặt một bộ lọc đơn giản vào thanh bộ lọc:
ip.addr == 192.168.4.20
Thao tác này sẽ chọn tất cả các gói đã được gửi từ hoặc nhận bởi thiết bị có địa chỉ IP 192.168.4.20. Lưu ý rằng các dấu bằng kép (==) không có khoảng cách giữa chúng.
Để xem các gói được gửi bởi một thiết bị (nguồn), bạn có thể sử dụng ip.src; để xem các gói đã đến một thiết bị (đích), bạn có thể sử dụng ip.dst, như hình dưới đây:
ip.dst == 192.168.4.20 && ip.src == 192.168.4.28
Lưu ý việc sử dụng dấu kép và (&&) để biểu thị “và” hợp lý. Bộ lọc này tìm kiếm các gói đến 192.168.4.20 từ 192.168.4.28.
Những người mới sử dụng bộ lọc Wireshark thường nghĩ rằng một bộ lọc như thế này sẽ nắm bắt tất cả các gói giữa hai địa chỉ IP, nhưng không phải vậy.
Những gì nó thực sự làm là lọc tất cả các gói đến hoặc từ địa chỉ IP 192.168.4.20, bất kể chúng đến từ đâu hoặc đến nơi chúng được gửi. Nó làm tương tự với tất cả các gói từ địa chỉ IP 192.168.4.28. Nói một cách đơn giản hơn, nó lọc tất cả lưu lượng truy cập đến hoặc từ một trong hai địa chỉ IP.
Bạn cũng có thể tìm kiếm hoạt động trên các giao thức khác. Ví dụ: bạn có thể nhập bộ lọc này để tìm kiếm các yêu cầu HTTP:
http.request
Để loại trừ các gói đến từ hoặc được gửi đến một thiết bị, hãy sử dụng dấu chấm than (!) Và đặt bộ lọc trong dấu ngoặc đơn [()]:
!(ip.addr == 192.168.4.14)
Bộ lọc này loại trừ tất cả các gói được gửi đến hoặc từ 192.168.4.14.
Nó phản trực giác vì bộ lọc chứa toán tử bình đẳng (==). Bạn có thể mong đợi rằng bạn sẽ nhập bộ lọc này như vậy:
ip.addr !=192.168.4.14
Tuy nhiên, điều này sẽ không hoạt động.
Bạn cũng có thể tìm kiếm các chuỗi trong gói theo giao thức. Bộ lọc này tìm kiếm Giao thức điều khiển truyền dẫn (TCP) gói chứa chuỗi “youtube”:
tcp contains youtube
Bộ lọc tìm kiếm sự truyền lại hữu ích như một cách để kiểm tra xem có sự cố kết nối hay không. Truyền lại là các gói được gửi lại vì chúng bị hỏng hoặc bị mất trong quá trình truyền đầu tiên. Quá nhiều lần truyền lại cho thấy kết nối chậm hoặc thiết bị phản hồi chậm.
Nhập nội dung sau:
tcp.analysis.retransmission
Sự ra đời, Sự sống, Cái chết và Mã hóa
Kết nối mạng giữa hai thiết bị được bắt đầu bất cứ khi nào một thiết bị liên lạc với thiết bị kia và gửi gói SYN (đồng bộ hóa). Sau đó thiết bị nhận sẽ gửi một gói ACK (báo nhận). Nó cho biết liệu nó có chấp nhận kết nối bằng cách gửi gói SYN hay không.
SYN và ACK thực sự là hai cờ trong cùng một gói. Thiết bị gốc xác nhận SYN bằng cách gửi ACK, sau đó thiết bị thiết lập kết nối mạng.
Đây được gọi là cái bắt tay ba bước:
A -> SYN -> B A ACK -> B
Trong ảnh chụp màn hình bên dưới, ai đó trên máy tính “nostromo.local” tạo Vỏ an toàn (SSH) kết nối với máy tính “ubuntu20-04.local.” Bắt tay ba bước là phần đầu tiên của giao tiếp giữa hai máy tính. Lưu ý rằng hai dòng chứa gói SYN có màu mã là màu xám đậm.
Cuộn màn hình để hiển thị các cột bên phải sẽ hiển thị các gói bắt tay SYN, SYN / ACK và ACK.
Bạn sẽ nhận thấy rằng sự trao đổi gói giữa hai máy tính xen kẽ giữa các giao thức TCP và SSH. Các gói dữ liệu được chuyển qua kết nối SSH được mã hóa, nhưng các gói tin (như ACK) được gửi qua TCP. Chúng tôi sẽ sớm lọc ra các gói TCP.
Khi kết nối mạng không còn cần thiết, nó sẽ bị hủy. Chuỗi gói để ngắt kết nối mạng là một sự bắt tay bốn chiều.
Một bên gửi gói FIN (kết thúc). Đầu bên kia gửi một ACK để xác nhận FIN, và sau đó cũng gửi một FIN để cho biết nó đồng ý kết nối sẽ bị ngắt. Mặt đầu tiên gửi ACK cho FIN mà nó vừa nhận được, và kết nối mạng sau đó sẽ bị ngắt.
Đây là cách bắt tay bốn chiều trông như thế nào:
A -> FIN -> B A ACK -> B
Đôi khi, FIN ban đầu cõng trên một gói ACK vẫn sẽ được gửi đi, như được hiển thị bên dưới:
A -> FIN, ACK -> B A ACK -> B
Đây là những gì xảy ra trong ví dụ này.
Nếu chúng ta chỉ muốn xem lưu lượng SSH cho cuộc hội thoại này, chúng ta có thể sử dụng bộ lọc chỉ định giao thức đó. Chúng tôi nhập thông tin sau để xem tất cả lưu lượng sử dụng giao thức SSH đến và đi từ máy tính từ xa:
ip.addr == 192.168.4.25 && ssh
Điều này lọc ra mọi thứ ngoại trừ lưu lượng SSH đến và đi từ 192.168.4.25.
Các mẫu bộ lọc hữu ích khác
Khi bạn nhập một bộ lọc vào thanh bộ lọc, nó sẽ vẫn có màu đỏ cho đến khi bộ lọc chính xác về mặt cú pháp. Nó sẽ chuyển sang màu xanh lục khi bộ lọc chính xác và hoàn chỉnh.
Nếu bạn nhập một giao thức, chẳng hạn như tcp, ip, udp hoặc shh, theo sau là dấu chấm (.), Một menu sẽ xuất hiện. Nó sẽ liệt kê các bộ lọc gần đây có chứa giao thức đó và tất cả các trường có thể được sử dụng trong các bộ lọc cho tên giao thức đó.
Ví dụ: với ip, bạn có thể sử dụng ip.addr, ip.checksum, ip.src, ip.dst, ip.id, ip.host và hàng chục cái khác.
Sử dụng các mẫu bộ lọc sau làm cơ sở cho bộ lọc của bạn:
Để chỉ hiển thị các gói giao thức HTTP: http
Để chỉ hiển thị các gói giao thức DNS: dns
Để chỉ hiển thị các gói TCP có 4000 làm cổng nguồn hoặc cổng đích: tcp.port == 4000
Để hiển thị tất cả các gói đặt lại TCP: http.request
Để lọc ra các gói ARP, ICMP và DNS:! (Arp hoặc icmp hoặc dns)
Để hiển thị tất cả các lần truyền lại trong một dấu vết: tcp.analysis.retransmission
Để lọc các cờ (như SYN hoặc FIN): Bạn phải đặt giá trị so sánh cho các giá trị này: 1 có nghĩa là cờ được đặt và 0 có nghĩa là chưa đặt. Vì vậy, một ví dụ sẽ là: tcp.flags.syn == 1.
Chúng tôi đã đề cập đến một số nguyên tắc hướng dẫn và cách sử dụng cơ bản của bộ lọc hiển thị ở đây, nhưng tất nhiên, còn nhiều điều khác nữa.
Để đánh giá cao toàn bộ phạm vi và sức mạnh của bộ lọc Wireshark, hãy nhớ kiểm tra tài liệu tham khảo trực tuyến của nó.