Định dạng phổ biến nhất của dữ liệu FPC là PCAP (Hình 2.8). Định dạng PCAP được hỗ trợ bởi hầu hết các công cụ thu thập dữ liệu, phát hiện xâm nhập và phân tích dữ liệu mã nguồn mở và là "chuẩn vàng" cho dữ liệu FPC trong một khoảng thời gian. Có một số thư viện hiện có giúp tạo phần mềm sinh và tương tác với các tệp tin PCAP, nhưng phổ biến nhất là Libpcap. Đây là thư viện bắt gói tin mã nguồn mở cho phép ứng dụng tương tác với card giao diện mạng để bắt gói tin. Nhiều ứng dụng được dùng trong việc thu thập và phân tích gói tin sử dụng libpcap, như Dumpcap, Tcpdump, Wireshark,...
Hình 2.8 Ví dụ dữ liệu PCAP được nhìn thấy trong Wireshark 2.4.1.1 Dumpcap
Một trong những cách dễ nhất để có được dữ liệu gói tin đầy đủ là sử dụng Dumpcap. Công cụ Dumpcap cũng đi kèm với Wireshark. Dumpcap là một công cụ đơn giản được thiết kế chỉ với mục đích bắt gói tin từ một giao diện mạng và ghi chúng vào đĩa. Dumpcap sử dụng thư viện libpcap để bắt các gói tin và viết chúng ở định dạng PCAP-NG.
Khi đã cài đặt Wireshark (cùng với trình điều khiển libpcap đi kèm), có thể bắt các gói tin bằng cách gọi công cụ Dumpcap và chọn một giao diện mạng:
dumpcap -i eth1
Lệnh này sẽ bắt đầu bắt gói tin và ghi chúng vào một tệp tin có tên ngẫu nhiên trong thư mục làm việc hiện tại, và sẽ tiếp tục làm như vậy cho đến khi dừng lại. Dumpcap cung cấp một số tùy chọn hữu ích khác trong việc lưu trữ và bắt gói tin:
-a <value>: Chỉ ra khi nào cần dừng ghi gói tin bắt được vào tệp tin.
-b <options>: Yêu cầu Dumpcap ghi vào nhiều tệp tin theo các tiêu chí nhất định. -B <value>: Chỉ định kích thước bộ đệm, là dữ liệu được lưu trữ trước khi ghi vào đĩa.
-f <filter>: các lệnh Berkeley Packet Filter (BPF) để lọc các tệp tin ghi các gói tin bắt được.
-i <interface>: Bắt các gói tin từ giao diện mạng xác định
-P: Lưu tệp tin định dạng PCAP thay vì PCAP-NG. Hữu ích khi yêu cầu khả năng tương thích ngược với các công cụ không hỗ trợ PCAP-NG.
-w <filename>: Được sử dụng để xác định tên tệp tin đầu ra.
Dumpcap đơn giản và có những hạn chế. Đầu tiên, nó không phù hợp trong tình huống cần hiệu suất cao khi mức thông lượng cao, có thể dẫn đến các gói tin bị mất. Ngoài ra, sự đơn giản của công cụ này làm hạn chế tính linh hoạt của nó. Điều này là hiển nhiên do các tùy chọn cấu hình của công cụ tương đối ít.
Dumpcap là một giải pháp FPC khá tốt nếu chỉ cần một công cụ chạy nhanh chóng và ít mất công. Tuy nhiên, nếu yêu cầu mức độ linh hoạt cao hơn hoặc bắt gói tin trong trường hợp kết nối thông lượng cao, nên tìm một công cụ khác.
2.4.1.2 Daemonlogger
Daemonlogger được thiết kế bởi Marty Roesch, và cũng là nhà phát triển ban đầu của Snort IDS. Đây là một ứng dụng ghi log gói tin được thiết kế đặc biệt để sử dụng trong môi trường NSM. Công cụ này sử dụng libpcap để bắt gói tin từ mạng, gồm có hai chế độ hoạt động. Chế độ hoạt động chính là để bắt các gói tin từ mạng và ghi chúng trực tiếp vào đĩa. Chế độ còn lại cho phép bắt gói tin từ mạng và ghi vào một giao diện mạng thứ hai.
Lợi ích lớn nhất Daemonlogger cung cấp là sự đơn giản trong việc bắt gói tin, giống như Dumpcap. Để bắt đầu, chỉ cần gọi lệnh và chỉ định một giao diện.
daemonlogger -i eth1
Tùy chọn này, theo mặc định, sẽ bắt gói tin và ghi chúng vào thư mục làm việc hiện tại. Các gói tin sẽ được thu thập cho đến khi kích thước tệp tin đạt đến 2 GB, và sau đó một tệp tin mới sẽ được tạo ra. Việc này sẽ tiếp tục vô thời hạn cho đến khi quá trình này phải dừng lại.
Daemonlogger cung cấp một vài tùy chọn hữu ích để tùy biến cách lưu trữ gói tin. Một số tùy chọn này là:
-d: Chạy như một daemon
-f <filename>: Nạp Packet Filters Berkeley (BPF) từ các tệp tin xác định -g <group>: Chạy dưới quyền nhóm xác định
-i <interface>: Bắt các gói tin từ giao diện xác định -l <thư mục>: Ghi dữ liệu vào một thư mục xác định
-M <pct>: Trong chế độ đệm vòng (ring buffer), ghi dữ liệu với tỷ lệ phần trăm công suất nhất định. Để kích hoạt chế độ đệm vòng, cũng sẽ cần xác định tùy chọn -r.
-n <prefix>: Thiết lập một tiền tố đặt tên cho các tệp tin đầu ra (hữu ích cho việc xác định tên cảm biến)
-r: Kích hoạt chế độ đệm vòng
-t <value>: chuyển qua các tệp tin log khác theo khoảng thời gian quy định -u <user>: Chạy với quyền của một người dùng xác định
Ví dụ:
daemonlogger –i eth1 –d –f filter.bpf –l /data/pcap/ -n NYC01
Khi lệnh này được gọi, Daemonlogger sẽ được thực thi như một daemon (-d) mà các bản ghi của các gói tin được bắt từ giao diện eth1 (-i eth1) được ghi lại trong tệp tin trong thư mục /data/pcap (-l /data/pcap). Những tập tin này sẽ được thêm vào phía trước với chuỗi NYC01 để chỉ ra các cảm biến chúng được thu thập (-n NYC01). Dữ liệu thu thập được sẽ được lọc dựa trên các mô tả BPF chứa trong tệp tin filter.bpf (-f filter.bpf).
Daemonlogger cũng có thiếu sót như Dumpcap khi nói đến hiệu suất. Trong khi Daemonlogger thực hiện tốt hơn so với Dumpcap tại mức thông lượng cao, nó vẫn có thể bị hạn chế trong một số môi trường doanh nghiệp lớn hơn.
Daemonlogger hiện lại nổi trội hơn do cung cấp một chế độ đệm vòng để loại bỏ sự cần thiết trong việc bảo trì các tệp tin PCAP một cách thủ công. Bằng cách xác định -r -M <pct> trong Daemonlogger, có thể yêu cầu công cụ này tự động loại bỏ các dữ liệu cũ khi việc lưu trữ PCAP vượt quá tỷ lệ quy định. Trong một số trường hợp tính năng này là rất cần thiết.
2.4.1.3 Netsniff-NG
Netsniff-NG là một công cụ bắt gói hiệu suất cao được thiết kế bởi Daniel Borkmann. Trong khi các tiện ích đã thảo luận trên đây đều dựa trên libpcap để bắt gói tin, thì Netsniff-NG sử dụng cơ chế zero-copy để làm việc này. Điều này được thực hiện với mục đích hỗ trợ bắt gói tin đầy đủ trên các liên kết thông lượng cao.
Một trong những tính năng thú vị của Netsniff-NG là nó không chỉ cho phép bắt gói với cơ chế RX_RING zero-copy, mà còn truyền gói tin với TX_RING. Điều này có nghĩa là nó có khả năng đọc các gói tin từ một giao diện và chuyển hướng chúng vào một giao diện khác. Tính năng này được thực hiện mạnh mẽ hơn với khả năng lọc các gói tin bị bắt giữa các giao diện.
Để bắt gói tin với Netsniff-NG, cần phải xác định một đầu vào và một đầu ra. Trong hầu hết các trường hợp, đầu vào sẽ là một giao diện mạng, và đầu ra sẽ là một tệp tin hoặc thư mục trên đĩa.
Lệnh này sẽ bắt gói tin từ giao diện eth0 (-i eth1) và ghi vào tệp tin data.pcap trong thư mục hiện tại (-o data.pcap) cho đến khi ứng dụng dừng. Nếu thực hiện lệnh này, cũng sẽ nhận thấy là màn hình bị lấp đầy với các nội dung của gói tin đang bắt. Để ngăn chặn việc này, cần đặt Netsniff-NG ở chế độ im lặng với cờ -s.
Khi chấm dứt quá trình bắt gói tin (có thể được thực hiện bằng cách nhấn tổ hợp phím Ctrl + C), Netsniff-NG sẽ tạo ra một số số liệu thống kê cơ bản liên quan đến dữ liệu bắt được. Những thống kê này được trình bày trong Hình 2.9.
Hình 2.9 Đầu ra tiến trình Netsniff-NG
Netsniff-NG cung cấp rất nhiều tính năng. Một số tùy chọn của Netsniff-NG: -g <group>: Chạy với quyền nhóm xác định
-f <tên file>: Nạp Packet Filters Berkeley (BPF) từ một tệp tin xác định
-F <value>: Kích thước hoặc khoảng thời gian sử dụng để xác định thời điểm kết thúc bắt gói tin ở chế độ một tệp tin, hoặc chuyển qua các tệp tin kế tiếp trong chế độ đệm vòng. -H: Thiết lập tiến trình với độ ưu tiên cao
-i <interface>: bắt gói tin từ giao diện xác định -o <file>: dữ liệu đầu ra ghi vào một tệp tin
-t <type>: Chỉ xử lý các gói tin có kiểu được định nghĩa (host, host, multicast, outgoing) -P <tiền tố>: Thiết lập một tiền tố đặt tên cho các tệp tin đầu ra (hữu ích cho việc xác
định tên cảm biến)
-s: Chạy âm thầm. Không in các gói đã bắt ra màn hình. -u <user>: Chạy với quyền người dùng xác định
Ví dụ một lệnh như sau:
netsniff-ng -i eth1 -o / data / -F 60 -P "NYC01"
Lệnh này sẽ chạy Netsniff-NG ở chế độ đệm vòng, được ghi vào thư mục đầu ra thay vì một tệp tin trong tham số -o (-o /data/). Từ đó sẽ tạo ra một tệp tin PCAP mới mỗi chu kỳ 60 giây (-F 60), và tất cả các tệp tin sẽ được bắt đầu bằng tên cảm biến NYC01 (-P "NYC01").
Trong nhiều thử nghiệm, Netsniff-NG là công cụ FPC tốt nhất trong các công cụ được giới thiệu ở đây trong trường hợp liên kết có thông lượng cao. Netsniff-NG thực hiện rất tốt, là công cụ FPC chuẩn mực, và được kèm mặc định trong bộ công cụ SO.