Để phần nào hiểu được cách phát hiện sự cố và giải quyết những vấn đề phát sinh của một hệ thống mạng chúng ta sẽ đi tìm hiểu về Tcpdump, một trong những công cụ phân tích lưu lượng
Trang 1MỤC LỤC
Phần 1: Mở đầu 1 Phần II Giới thiệu công cụ TCPdump 2
“Nghe” trong mạng sử dụng Router 10
Phần 1: Mở đầu
Ngày nay, việc xây dựng một hệ thống mạng đáp ứng các nhu cầu cơ bản của người dùng không còn quá khó đối với hầu hết những người quản trị mạng Xây dựng một hệ thống đáp ứng được nhu cầu người dùng rất quan trọng tuy nhiên việc duy trì và kiểm soát để hệ thống hoạt động ổn định cũng quan trọng không kém Trong quá trình vận hành hệ thống, không thể tránh khỏi những sự cố, việc phát hiện và kịp thời sửa chữa là vấn đề đầu tiên được đặt ra cho người quản trị hệ thống mạng
Trang 2_ Ngày nay, Có rất nhiều công cụ được viết ra nhằm hỗ trợ người quản trị trong việc theo dõi
và giám sát hệ thống Để phần nào hiểu được cách phát hiện sự cố và giải quyết những vấn
đề phát sinh của một hệ thống mạng chúng ta sẽ đi tìm hiểu về Tcpdump, một trong những công cụ phân tích lưu lượng mạng được những người quản trị hệ thống sử dụng nhiều nhất
Đây cũng là đề tài nghiên cứu của nhóm trong môn học: Quản trị hệ thống mạng do GV:
Vũ Trí Dũng hướng dẫn thực hiện Xin gởi lời cám ơn sâu sắc nhất tới thầy!
Ngày 30 tháng11 năm 2010
Nhóm sinh viên thực hiện
Phần II Giới thiệu công cụ TCPdump
1 Giới thiệu tổng quan
Với mục đích giới thiệu một công cụ kiểm tra, bảo mật, gỡ rối đơn giản cho những người đang tìm hiểu về vấn đề quản trị hệ thống mạng, bài viết sẽ trình bày một cách đơn giản và
dễ hiểu nhất về cách sử dụng, ưu khuyết điểm mục đích giúp người đọc dễ dàng tiếp thu và nắm bắt được vấn đề
2 Công cụ quản lý mạng
Trang 32.1 Giới thiệu về công cụ quản lý mạng
Tcpdump được viết vào năm 1987 bởi Van Jacobson, Craig Leres và Steven McCanne làm việc tại University of California.(1) Tcpdump được tích hợp sẵn trong một số dòng Linux,
nó có vai trò trụ cột trong việc gỡ rối và kiểm tra vấn đề kết nối mạng và bảo mật trong một hệ thống mạng, nó là công cụ đã được các chuyên gia trên khắp thế giới tín nhiệm về
sự hữu dụng Tcpdump là một công cụ dòng lệnh không có các họa tiết đẹp mắt so với các công phân tích lưu lượng khác như Ettercap và Wireshark, tuy nhiên vì tính đơn giản và hiệu quả nên nó được sử dụng rộng rãi
2.2 Các chức năng của tcpdump
Tcpdump cung cấp khả năng phân tích các hành vi trong mạng, hiệu suất và các ứng dụng tạo ra hoặc nhận được trong mạng Nó cũng có thể được sử dụng để phân tích các cơ sở hạ tầng mạng bằng cách xác định liệu tất cả các kết nối và nút mạng
Nó cũng có thể sử dụng để lấy các thông tin liên lạc của một người hoặc máy tính trong mạng bằng cách bắt và đọc các gói tin được gởi qua các giao thức không được mã hóa như: Telnet, HTTP… có thể sử dụng tcpdump để xem ID đăng nhập, mật khẩu, các URL và nội dung của các trang web đang xem, hay bất kỳ thông tin khác không được mã hóa
Trước khi đi vào các chức năng cụ thể của tcpdump chúng ta sẽ tìm hiểu về cấu trúc câu lệnh và cách thức vận hành của tcpdump
Cú pháp của tcpdump
Trang 4_ Các miêu tả:
Hình 1: Cú pháp và các miêu tả tùy chọn của tcpdump ( 2 )
Hình 2: Môi trường làm việc của tcpdump.
Để biết rõ hơn cú pháp và các tùy chọn của tcpdump ta có thể dùng lệnh “man tcpdump”
Cấu trúc dòng lệnh tcpdump: #tcpdump tùy chọn + biểu thức
Để lọc và hiển thị các kết quả đầu ra, tcpdump hỗ trợ các tùy chọn và biểu thức:
A Các tùy chọn (3)
• -A: In các gói theo mã ASCII
• -B : Định kích cỡ buffer_size.
Trang 5• -c N: Ký tự N ở đây là số, tùy chọn này thông báo cho tcpdump biết để thoát sau gói N
• -C: Kiểm tra kích thước của file trước khi ghi file
• -d : Dump các gói dưới dạng chuẩn
• -dd: Dump các gói dưới dạng code giống giống 1 chương trình C
• -ddd: Dump các gói dưới dạng code như các số thập phân
• -D : Cho biết tổng số giao diện mạng
• -e: In link-level header trên mỗi dòng
• -E: Dùng giải mã các gói IPsec
• -f: In số lượng địa chỉ IPV4
• -F: Sử dụng tùy chọn này để mở file được ghi bởi tcpdump
• -G: Bắt số gói trong một đơn vị thời gian
• -i: interface: Capturre các gói trên giao diện mạng nào đó
• -I: Đặt các giao diện ở chế độ theo dõi, chỉ hỗ trợ cho các giao diện IEEE 802.11 Wi-Fi và một số hệ điều hành
• -K: Không xác minh các IP, TCP, UDP
• -l: Chọn lọc đầu ra
• -L: In danh sách các kiểu dữ liệu liên kết
• -m: Load module SMI MIB
• -n: Phân giải địa chỉ thành tên miền
• -N: Không in tiền tố của tên miền
• -O: Không tối ưu hóa các gói bắt được
• -p: Không đặt giao diện mạng dưới chế độ promiscuous
• -q: Cung cấp đầu ra đã được lược bớt để các dòng đầu ra ngắn hơn
Trang 6• -r filename: Đọc các gói từ một file cụ thể thay cho một giao diện mạng, thường được sử dụng sau khi các gói dữ liệu thô đã được ghi vào một file với tùy chọn –w
• -S: In toàn bộ gói cùng các giao thức liên quan
• -s: Snarf snaplen từ mỗi gói tin.
• -T: Bỏ qua các gói tin được chỉ định
• -t: Không in nhãn thời gian trên mỗi dòng đầu ra
• -tt: In một nhãn thời gian không được định dạng trên mỗi dòng đầu ra
• -ttt: Thêm một khoảng trống giữa các dòng đầu ra
• -tttt: In nhãn thời gian được đặt mặc định theo ngày trên mỗi dòng
• -ttttt: In nhãn thời gian được đặt mặc định theo ngày trên dòng hiện tại
và dòng đầu tiên trên đầu ra
• -u: In NFS chưa được xử lý
• -U: Kết hợp với –w để tạo ra các tập tin đầu ra khi bộ đệm đầy
• -v: Cung cấp đầu ra dài hơn Dài hơn nữa với -vv, vào thậm chí còn cả -vvv
• -w filename: Ghi các gói dữ liệu thô vào một file nào đó
• -W: Sử dụng với tùy chọn C để hạn chế số lượng tập tin được tạo ra
• -x : In header và các dữ liệu của gói dưới dạng hex, xx sẽ in ra cả cấp liên kết
• -X: In header và các dữ liệu của gói dưới dạng hex và ASCII
• -y: Thiết lập các kiểu dữ liệu liên kết khi bắt các gói dữ liệu liên kết
• -z: Kết hợp với –C hoặc –G để chạy các lệnh khác của hệ thống
B Các biểu thức(4)
primitive (mẫu), các thuật ngữ
Trang 7o dst foo (*): Chỉ định một địa chỉ hoặc một hostname nhằm hạn chế các gói
được capture về mặt lưu lượng gửi đến
o host foo: Chỉ định một địa chỉ hoặc một hostname nhằm hạn chế các gói đã
được capture về mặt lưu lượng đến và đi
o net foo: Chỉ định một mạng hoặc một đoạn mạng sử dụng ghi chú CIDR để
hạn chế sự capture gói
o proto foo: Chỉ định một giao thức nhằm hạn chế các gói đã được capturre
về mặt lưu lượng mạng đang sử dụng giao thức đó
o src foo: Chỉ định một địa chỉ hoặc một hostname nhằm hạn chế các gói
được capture đối với lưu lượng được gửi bởi một host
(*): Đại diện cho một địa chỉ IP hoặc một host
Modifier (từ bổ nghĩa)
o and: Sử dụng modifier này nhằm ràng buộc các mẫu cùng nhau khi muốn
hạn chế các gói đã được capture để có được các yêu cầu cần thiết của các biểu thức trên cả hai phía của and
o not: Sử dụng modifier này trước một mẫu khi muốn hạn chế các gói đã
được capturre để không có được các yêu cầu của biểu thức theo sau
o or: Sử dụng modifier này nhằm trói buộc các mẫu cùng nhau khi muốn hạn
chế các gói đã được capture để có được các yêu cầu cần thiết của một hoặc nhiều biểu thức trên phía của or
Kết hợp các tùy chọn và biểu thức, người quản trị có thể bắt được chính xác các gói tin cần thiết Qua đó dễ dàng phát hiện và khắc phục sự cố
Trang 8_ Cấu trúc đầu ra của một dòng trong tcpdump tùy thuộc vào việc sử dụng các tùy chọn và biểu thức Sau đây là các dòng đầu ra khi sử dụng tùy chọn: #tcpdump -nne
Trong đó:
[1] TimeStamp [8] Destination IP
[2] SourceMac [9] Destination Port
[3] DestinationMac [10] TCP Flags
[4] Network Protocol [11] TCP Sequence Number
[5] IP Packet Length [12] TCP Last Sequence Number
[6] Source IP [13] TCP Length
[7] Source Port [14] ACK flag
Vậy tcpdump bắt gói tin bằng cách nào? Và sử dụng tcpdump để lắng nghe ở vị trí nào trong mạng thì hiệu quả nhất? Để trả lời câu hỏi trên chúng ta sẽ tìm hiểu các cách thức nghe gói tin trên một số mạng
Các cách thức nghe gói tin trên mạng:
Living Promiscuously (chế độ bắt tất cả các gói tin đi qua)
Chế độ Promiscuous cho phép card mạng nhìn thấy thất cả các gói tin đi qua hệ thống dây mạng Khi một card mạng không ở chế độ này, nó nhìn thấy một số lượng lớn các gói tin
Trang 9_ trên mạng nhưng không gửi cho nó, nó sẽ huỷ (drop) các gói tin này Khi nó ở chế độ Promiscuous, nó bắt tất cả các gói tin và gửi toàn bộ tới CPU
“Nghe” trong mạng có Hub
Cơ chế hoạt động của Hub cho phép gói tin được gửi tất cả các cổng của hub Hơn nữa, để phân tích một máy tinh trên một hub, tất cả các công việc cần làm là cắm máy nghe vào một cổng còn trống trên hub Chúng ta có thể nhìn thấy tất cả các thông tin truyền và nhận
từ tất cả các máy đang kết nối với hub đó, của sổ tầm nhìn không bị hạn chế khi mà máy nghe được kết nối với một mạng hub
“Nghe” trong mạng Switched
Một môi trường switched là kiểu mạng phổ biến mà chúng ta làm việc Switch cung cấp một phương thức hiệu quả để vận chuyển dữ liệu thông qua broadcast, unicast, multicast Switch cho phép kết nối song công (full-duplex), có nghĩa là máy trạm có thể truyền và nhận dữ liệu đồng thời từ switch Khi cắm một máy nghe vào một cổng của switch, chúng
ta chỉ có thể nhìn thấy các broadcast traffic và những gói tin gửi và nhận của máy tính đang
sử dụng Trong trường hợp này chúng ta có 3 cách để bắt được các gói tin từ một thiết bị mục tiêu trong mạng switch đó là:
o Port Mirroring:
Port mirroring hay còn gọi là port spanning có thể là cách đơn giản nhất để bắt các lưu lượng từ thiết bị mục tiêu trên mạng switch Khi ánh xạ cổng, chúng ta sẽ có toàn bộ lưu lượng đi qua các cổng được copy sang port Mirroring
o Hubbing Out:
Một cách đơn giản khác để bắt các lưu lượng của thiết bị mục tiêu trong một mạng switch là hubbing out Hubbing out là kỹ thuật mà trong đó đặt
Trang 10thiết bị mục tiêu và máy nghe vào cùng một phân mạng bằng cách đặt chúng trực tiếp vào một hub
o ARP Cache Poisoning
ARP cache poisoning là một kỹ thuật nâng cao trong việc nghe đường truyền trong một mạng switch ARP cache poisoning là quá trình gửi một thông điệp ARP với địa chỉ MAC giả mạo tới switch hoặc router nhằm mục đích nghe lưu lượng của thiết bị mục tiêu
“Nghe” trong mạng sử dụng Router
Tất cả các kỹ thuật nghe trong mạng switch đều có thể được sử dụng trong mạng router Chỉ có một việc cần quan tâm khi mà thực hiện với mạng router là
sự quan trọng của việc đặt máy nghe khi mà thực hiện xử lý một vấn đề liên quan đến nhiều phân mạng Broadcast domain của một thiết bị được mở rộng cho đến khi nó gặp router Khi đó, lưu lượng sẽ được chuyển giao sang dòng dữ liệu router tiếp theo và chúng ta sẽ mất liên lạc với các gói tin đó cho đến khi nhận được một ACK của các máy nhận trả về Trong tình huống này, dữ liệu sẽ lưu chuyển qua nhiều router, vì vậy rất quan trọng để thực hiện phân tích tất cả lưu lượng trên các giao diện của router
Một vài ví dụ về tcpdump:
#tcpdump -c 50 dst uit.edu.vn
Trang 11Hình 3: Lệnh #tcpdump -c 50 dst uit.edu.vn Cho biết các thông tin có thể nhận ra được nguồn của một lưu lượng nặng gửi đến và rất
có thể làm quá tải máy chủ với hostname “uit.edu.vn”, lấy 50 gói đầu tiên
#tcpdump -c 500 -w 'date +"%Y%j%T"'.log
Hình 4: Lệnh #tcpdump -c 500 -w 'date +"%Y%j%T"'.log Ghi 500 gói vào một file có tên time/date hiện hành (ví dụ 2010111915:16:31.log) Ở đây date là hàm hệ thống Bằng cách kết hợp các tùy chọn, Primitive , Modifiers ta sẽ bắt được các gói tin như mong muốn
#tcpdump -w test.pcap -i eth1 tcp port 80
Trang 12Hình 5: Lệnh #tcpdump -w test.pcap -i eth1 tcp port 80 Trong ví dụ này ta sẽ bắt các gói tin TCP tại giao tiếp eth1 ở port 80 và ghi vào file có tên
“test.pcap”
#tcpdump dst 192.168.1.22 and tcp port 21
Trang 13Hình 6: Lệnh #tcpdump dst 192.168.1.22 and tcp port 21 Bắt các gói có địa chỉ đích là 192.168.1.22 và đi qua port 21 với giao thức TCP
#tcpdump tcp portrange 20-24
Hình 7: Lệnh #tcpdump tcp portrange 20-24 Chỉ lắng nghe các kết nối TCP trên dãy port được chỉ định
2.3 Đánh giá công cụ
2.3.1 Điểm mạnh
Trang 14• Là một công cụ nhỏ gọn
• Là công cụ mạnh, khả năng tùy biến cao
• Chiếm ít tài nguyên của hệ thống
• Miễn phí
Tuy không hỗ trợ giao diện đồ họa, xong tcpdump có thể kết hợp với các ngôn ngữ lập trình để tạo các biểu đồ qua đó tạo thuận lợi cho người quản trị hệ thống có cái nhìn khái quát và đánh giá chính xác hơn tình hình hệ thống đang quản lý
Hình 8: Thống kê truy cập kết hợp tcpdump + Perl.
Một điểm đáng chú ý nữa là tcpdump có thể được dùng để đánh cắp các tài khoản của người dùng
Sau đây là bảng so sánh tcpdump với một số phần mềm khác tương tự
Trang 15+Là cơ sở cho các phần mềm sniff
+Nhẹ, tích hợp sẵn trong OS
+Miễn phí
+Không có giao diện trực quan
+Thao tác trên dòng lệnh +Thân thiện với người dùng
+Miễn phí
+Hỗ trợ nhiều giao thức
+Chạy trên nhiều hệ điều hành
+Chưa hỗ trợ một số giao thức
+Hỗ trợ nhiều giao thức
+Có khả năng giả dạng các gói tin
+Miễn phí
+Giao diện sử dụng gây khó khăn cho người dùng
2.3.2 Điểm yếu
• Không hỗ trợ giao diện đồ họa gây khó khăn cho người sử dụng
• Gây khó khăn cho người sử dụng khi phải nhớ số lượng lớn các tùy chọn và biểu thức
• Đòi hỏi người sử dụng phải có kiến thức cơ sở và thời gian để nghiên cứu
2.4 Lời khuyên
Để sử dụng hiệu quả công cụ tcpdump, chúng ta cần phải:
• Hiểu rõ về hệ thống
Trang 16• Hiểu rõ về các tùy chọn và biểu thức của tcpdump
• Có khả năng phân tích và đòi hỏi kiến thức lập trình
Cách khắc phục các điểm yếu của công cụ:
Để phát huy hết sức mạnh của công cụ này và khắc phục khó khăn về mặt giao diện chúng
ta nên kết hợp với các chương trình hỗ trợ đồ họa hoặc kết hợp với các ngôn ngữ lập trình
để tạo nên những bản đồ phân tích qua đó có được cái nhìn khái quát hơn về tình hình hệ thống Thực tế người ta sử dụng tcpdump để bắt các gói tin sau đó dùng các phần mềm có
hỗ trợ đồ họa để phân tích Điều này làm tăng tính hiệu quả của công việc
Lưu ý: Để sử dụng được công cụ tcpdump thì người dùng hiện tại phải có quyền cao nhất trên hệ thống(root) hoặc thuộc nhóm super users
Phần III: Kết luận
Tcpdump là một công cụ mạnh hỗ trợ tốt cho người quản trị hệ thống mạng, phục vụ đắc lực trong hoạt động theo dõi, giám sát và khắc phục sự cố của các hệ thống, song để sử dụng hiệu quả công cụ này đòi hỏi người sử dụng phải có được kiến thức và kinh nghiệm
Trang 17Từ quá trình ra đời và tồn tại của công cụ này, ta cũng thấy được rằng đây là một công cụ rất hay để sử dụng, học tập và nghiên cứu
Qua quá trình tìm hiểu về công cụ này chúng em đã có thêm nhiều kiến thức bổ ích phục
vụ cho việc học tập và làm việc sau này
Phần IV: Tài liệu tham khảo
(1): (Monitoring with tcpdump, http://slac.stanford.edu/monitoring/passive/tcpdump.html )
(Revised 17 August 1999, Ngày xem: 27/11/2010)
(2): TCPDUMP - The Easy Tutorial http://ope nmaniak.com/tcpdump.php