Đồ án Xây dựng chương trình kiểm soát lưu lượng thông tin trao đổi qua hệ thống mạng

MỤC LỤC

CHƯƠNG I. CƠ SỞ LÝ THUYẾT MẠNG MÁY TÍNH 5

1 Tổng Quan Hệ Thống Mạng TCP/IP Ethernet 5

1.1 Khái niệm mạng máy tính 5

1.2 Kiến trúc phân tầng 6

1.3 Mô hình OSI 9

1.3.1 Khái niệm 9

1.3.2 Mục đích 10

1.4 Phương thức hoạt động 11

1.4.1 Có kết nối (Connection Oriented) 11

1.4.2 Không kết nối (Connectionless) 12

1.5 Bộ giao thức TCP/IP 12

1.5.1 Khái niệm 12

1.5.2 Mục đích và nguồn gốc 13

1.5.3 Đặc điểm 14

1.6 So sánh TCP/IP và OSI 15

2 Bộ giao thức TCP/IP – Các giao thức và khuôn dạng dữ liệu chính 16

2.1 Cấu trúc phân tầng của TCP/IP 16

2.2 Đóng gói dữ liệu trong TCP/IP 17

2.3 Sơ lược chức năng các tầng 18

2.3.1 Tầng ứng dụng (Application Layer) 18

2.3.2 Tầng giao vận (Transport Layer) 18

2.3.3 Tầng Internet (Internet Layer) 18

2.3.4 Tầng liên kết (Link Layer) 19

2.4 Các giao thức chính và khuôn dạng dữ liệu tương ứng 19

2.4.1 Ethernet 19

2.4.2 ARP (address resolution protocol) 21

2.4.3 RARP (reserve address resolution protocol) 22

2.4.4 IP (internet protocol) 23

2.4.5 ICMP (internet control message protocol) 26

2.4.6 TCP (Transmission Control Protocol) 27

2.4.7 UDP (User Datagram Protocol) 29

2.4.8 HTTP (Hypertext Transfer Protocol) 30

2.4.9 DNS (Domain Name System) 31

CHƯƠNG II. KỸ THUẬT CHẶN BẮT 33

1 Tổng Quan Về Chặn Bắt Gói Tin (Sniffer) 33

1.1 Các khái niệm liên quan 33

1.2 Ứng dụng của sniffer 34

1.2.1 Khả năng 34

1.2.2 Mục đích 34

1.3 Các chương trình sniffer hiện có 35

2 Cách Thức Hoạt Động 35

2.1 Theo dõi Network Traffic 35

2.2 Phân tích Network Traffic 36

2.3 Các thành phần của một chương trình sniffer 38

2.4 Phòng chống sniffer 39

2.4.1 Phát hiện sniffer trong mạng 39

2.4.2 Ngăn chặn sniffer 40

2.4.3 Một số chương trình phát hiện sniffer 40

3 Các Phương Pháp Xây Dựng 41

3.1 Raw Socket – mức hệ điều hành 41

3.2 Pcap – mức network adapter 42

3.3 So sánh Raw Socket và Pcap 44

CHƯƠNG III. PHÂN TÍCH, LỰA CHỌN VÀ THIẾT KẾ GIẢI THUẬT 46

1 Chi Tiết Các Phương Pháp 46

1.1 Winsock 46

1.1.1 Khái niệm 46

1.1.2 Các sự kiện của Winsock 47

1.1.3 Loại Socket trong Winsock 47

1.1.4 Làm việc với Socket trong Winsock 47

1.2 .NET Socket 49

1.2.1 Khái niệm 49

1.2.2 Làm việc với .NET Socket 49

1.2.3 Demo 51

1.3 Winpcap 51

1.3.1 Khái niệm 51

1.3.2 Làm việc với Winpcap 52

2 Hướng Thực Hiện Chương Trình 54

2.1 Bắt gói tin 55

2.2 Tách phần header 55

2.3 Phân tích, tổng hợp header 55

2.4 Đưa vào cơ sở dữ liệu 56

2.5 Hiển thị, thống kê và báo cáo 57

3 Lựa chọn giải thuật 57

CHƯƠNG IV. XÂY DỰNG CHƯƠNG TRÌNH 59

1 Các Chức Năng Chính 59

2 Phân Tích Xây Dựng Các Chức Năng Chính 62

2.1 Hoạt động tổng quát 62

2.2 Chức năng đo lưu lượng. 63

2.2.1 Đo lưu lượng vào/ra trên máy cài đặt chương trình 63

2.2.2 Báo cáo thông tin lưu lượng 63

2.3 Bắt gói tin 64

2.4 Các thao tác với File 66

2.5 Giao diện (View) 67

2.6 Thống kê (Statistics) 67

2.6.1 Thống kê tích lũy (Cumulative) 67

2.6.2 Thống kê liên tục (Continous) 68

2.7 Quản lý mạng 68

2.7.1 Khóa mạng theo một luật mà người dùng lựa chọn 68

3 Giới Thiệu Chương Trình 69

3.1 Khởi động chương trình 69

3.2 Chức năng báo cáo 70

3.3 Chức năng bắt gói tin 70

3.4 Các thao tác với file 75

3.5 Chức năng di chuyển trên bảng dư liệu 76

3.6 Chức năng thống kê 76

3.6.1 Thống kê tích lũy (Cumulative Statistics) 77

3.6.2 Thống kê liên tục (Continous Statistics) 78

3.7 Ngăn chặn thông tin 79

3.8 Một số tính năng phụ 80

4 Nhược điểm và hướng phát triển 81

4.1 Nhược điểm 81

4.2 Hướng phát triển 82

Kết Luận 84

TÀI LIỆU THAM KHẢO 85

 

 

doc83 trang | Chia sẻ: maiphuongdc | Lượt xem: 3108 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đồ án Xây dựng chương trình kiểm soát lưu lượng thông tin trao đổi qua hệ thống mạng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
đúng đắn và chính xác. Đơn vị dữ liệu của TCP được gọi là segment (đoạn dữ liệu) bao gồm 2 phần: Header và Data, được miêu tả dưới hình sau: Bit 0 – 3 4 – 9 10 – 15 16 – 31 0 Source Port Destination Port 32 Sequence Number 64 Acknowledgement Number 96 Data Offset Reserved Flags Window 128 Checksum Urgent Pointer 160 Options + Padding 160/192+ Data Cấu trúc đơn vị dữ liệu TCP Trong đó: Source port (16 bit): Số hiệu của cổng của trạm nguồn Destination port (16 bit): Số hiệu của cổng của trạm đích. Sequence number (32 bit): Trường này có 2 nhiệm vụ. Nếu cờ SYN bật thì nó là số hiệu tuần tự khởi đầu (ISN) và byte dữ liệu đầu tiên là ISN + 1. Nếu không có cờ SYN thì đây là số hiệu byte đầu tiên của segment. Acknowledgement number (32 bit): Số hiệu của segment tiếp theo mà trạm nguồn đang chờ để nhận. Ngầm ý báo nhận tốt (các) segment mà trạm đích đã gửi cho trạm nguồn. Data offset (4 bit): Qui định độ dài của phần header (tính theo đơn vị từ 32 bit). Phần header có độ dài tối thiểu là 5 từ (160 bit) và tối đa là 15 từ (480 bit). Reserved (6 bit): Dành cho tương lai và có giá trị là 0. Flags (hay Control bits): Bao gồm 6 cờ từ trái sang phải như sau: URG: Cờ cho trường Urgent pointer ACK: Cờ cho trường Acknowledgement PSH: Hàm Push RST: Thiết lập lại đường truyền SYN: Đồng bộ lại số hiệu tuần tự (sequene number). FIN: Không còn dữ liệu từ trạm nguồn. Window (16 bit): Số byte trạm nguồn có thể nhận bắt đầu từ giá trị của trường báo nhận (ACK). Checksum: 16 bit kiểm tra cho cả phần header và dữ liệu. Urgent pointer (16 bit): Trỏ tới số hiệu tuần tự của byte đi theo sau dữ liệu khẩn, cho phép bên nhận biết được độ dài của vùng dữ liệu khẩn. Vùng này chỉ có hiệu lực khi cờ URG được thiết lập. Options (độ dài thay đổi): Đây là trường tùy chọn. Padding (độ dài thay đổi): Phần chèn thêm vào header để bảo đảm phần header luôn kết thúc ở một mốc 32 bit. Phần thêm này gồm toàn số 0. TCP data (độ dài thay đổi): Chưa dữ liệu của tầng trên, có độ dài ngầm định là 536 byte. Giá trị này có thể điều chỉnh bằng cách khai báo trong vùng options. UDP (User Datagram Protocol) Đây là một giao thức “không liên kết” được sử dụng thay thế trên IP theo yêu cầu của các ứng dụng. Khác với TCP, UDP không có các chức năng thiết lập và giải phóng liên kết. Nó cũng không cung cấp các cơ chế báo nhận, không sắp xếp tuần tự các đơn vị dữ liệu đến và có thể dẫn tới tình trạng dữ liệu mất hoặc trùng mà không hề có thông báo lỗi cho người gửi. Tóm lại nó cung cấp các dịch vụ giao vận không tin cậy như trong TCP. Do ít chức năng phức tạp nên UDP có xu thế hoạt động nhanh hơn so với TCP. Nó thường được dùng cho các ứng dụng không đòi hỏi độ tin cậy cao trong giao vận. Cấu trúc của một đơn vị dữ liệu UDP như sau: Bit 0 - 15 16 – 31 0 Source Port Destination Port 32 Length Checksum 64 Data Cấu trúc đơn vị dữ liệu UDP Trong đó: Source port (16 bit): Trường này xác định cổng của trạm gửi và có ý nghĩa nếu muốn nhận thông tin phản hồi từ người nhận. Nếu không dùng đến thì đặt nó bằng 0. Destination port (16 bit): Trường xác định cổng của trạm nhận thông tin, và trường này là cần thiết. Length (16 bit): Xác định chiều dài của toàn bộ datagram: phần header và dữ liệu. Chiều dài tối thiểu là 8 byte khi gói tin không có dữ liệu, chỉ có header. Checksum (16 bit): Trường checksum 16 bit dùng cho việc kiểm tra lỗi của phần header và dữ liệu. HTTP (Hypertext Transfer Protocol) Là một giao thức tầng ứng dụng dựa trên giao thức TCP của tầng giao vận trên cổng số 80 hỗ trợ Web. Trong giao thức này mỗi đối tượng dữ liệu (trang web, ảnh, audio...) được truyền trong những phiên (HTTP session) riêng biệt. Phần dữ liệu được đưa xuống tầng giao vận và được chuyển thành các TCP packet để gửi cho trạm nhận. Để bắt đầu một phiên, client thiết lập kết nối tới server bằng cách gửi một TCP packet với cờ SYN được bật tới cổng 80. Server gửi trả lại packet đó với cờ ACK được bật. Cuối cùng, client gửi packet với cờ ACK và tiếp tục là request đối tượng mình cần. Ví dụ như GET /index.html HTTP/1.1 Server sẽ phản hồi cho client với mã trạng thái, ví dụ như “200 OK”, “403 Forbbiden”, “404 Not Found”... Sau đó server sẽ gửi packet đóng kết nối. DNS (Domain Name System) Là một giao thức cho phép ánh xạ giữa tên miền và địa chỉ IP và làm việc trên giao thức UDP của tầng giao vận (hầu hết trên cổng 53). Cấu trúc dữ liệu phần header của DNS message như sau: bit 0 – 15 16 17 – 20 21 22 23 24 25 – 27 29 – 31 ID Q Query A T R V B Rcode Question count Answer count Authority count Additional count Cấu trúc header của gói tin DNS Trong đó: ID: Là một trường 16 bits, chứa mã nhận dạng, nó được tạo ra bởi một chương trình để thay cho truy vấn. Gói tin hồi đáp sẽ dựa vào mã nhận dạng này để hồi đáp lại. Chính vì vậy mà truy vấn và hồi đáp có thể phù hợp với nhau. QR: Là một trường 1 bit. Bít này sẽ được thiết lập là 0 nếu là gói tin truy vấn, được thiết lập là một nếu là gói tin hồi đáp. Opcode: Là một trường 4 bits, được thiết lập là 0 cho cờ hiệu truy vấn, được thiết lập là 1 cho truy vấn ngược, và được thiết lập là 2 cho tình trạng truy vấn. AA: Là trường 1 bit, nếu gói tin hồi đáp được thiết lập là 1, sau đó nó sẽ đi đến một server có thẩm quyền giải quyết truy vấn. TC: Là trường 1 bit, trường này sẽ cho biết là gói tin có bị cắt khúc ra do kích thước gói tin vượt quá băng thông cho phép hay không. RD: Là trường 1 bit, trường này sẽ cho biết là truy vấn muốn server tiếp tục truy vấn một cách đệ qui. RA: Trường 1 bit này sẽ cho biết truy vấn đệ qui có được thực thi trên server không . Z: Là trường 1 bit. Đây là một trường dự trữ, và được thiết lập là 0. Rcode: Là trường 4 bits, gói tin hồi đáp sẽ có thể nhận các giá trị sau : 0: Cho biết là không có lỗi trong quá trình truy vấn. 1: Cho biết định dạng gói tin bị lỗi, server không hiểu được truy vấn. 2: Server bị trục trặc, không thực hiện hồi đáp được. 3: Tên bị lỗi. Chỉ có server có đủ thẩm quyền mới có thể thiết lập giá trị náy. 4: Không thi hành. Server không thể thực hiện chức năng này . 5: Server từ chối thực thi truy vấn. QDcount: Số lần truy vấn của gói tin trong một vấn đề. ANcount: Số lượng tài nguyên tham gia trong phần trả lời. NScount: Chỉ ra số lượng tài nguyên được ghi lại trong các phẩn có thẩm quyền của gói tin. ARcount: Chỉ ra số lượng tài nguyên ghi lại trong phần thêm vào của gói tin. CHƯƠNG II. KỸ THUẬT CHẶN BẮT Tổng Quan Về Chặn Bắt Gói Tin (Sniffer) Các khái niệm liên quan Packet là một đơn vị dữ liệu được định dạng để lưu chuyển trên mạng. Network Traffic là lưu lượng thông tin vào/ra hệ thống mạng. Để có thể đo đạc, kiểm soát Network Traffic ta cần phải chặn bắt các gói tin (Packet capture). Packet capture là hành động chặn bắt các packet dữ liệu được lưu chuyển trên mạng. Packet capture gồm có: Deep Packet Capture (DPC): là hành động chặn bắt toàn bộ các gói tin trên mạng (bao gồm cả phần header và payload). Các gói tin chặn bắt được sẽ được lưu trữ lại trong bộ nhớ tạm thời hoặc lâu dài. Deep Packet Inspection (DPI): là quá trình kiểm tra, đánh giá để tìm ra nguyên nhân của những vấn đề của mạng, xác định nguy cơ an toàn bảo mật, chắc chắn mạng hoạt động chính xác về kỹ thuật và luật pháp. DPC và DPI được kết hợp với nhau nhằm quản lý, đánh giá, phân tích sự luân chuyển các gói tin trên mạng đồng thời lưu giữ lại những thông tin đó cho các mục đích khác sau này. Trong thực tế packet capture có thể ghi lại được header mà không cần lưu giữ toàn bộ phần nội dung payload. Nhờ vậy, ta có thể giảm được yêu cầu bộ nhớ dùng để lưu trữ, tránh các vấn đề pháp luật trong khi vẫn có đầy đủ những thông tin cần thiết nhất. Packet Analyzer (Sniffer) là phần mềm hoặc phần cứng máy tính được gắn vào trong 1 mạng máy tính để có thể theo dõi thông tin lưu chuyển (network traffic) trên 1 mạng hay một phần của mạng. Sniffer sẽ có nhiệm vụ chặn bắt các gói tin (packet), sau đó giải mã, phân tích nội dung của nó nhằm thực hiện các mục đích khác nhau. Ứng dụng của sniffer Khả năng Đối với mạng LAN có dây thì phụ thuộc vào cấu trúc của mạng (sử dụng hub hay switch) ta có thể chặn bắt toàn bộ hay một phần các thông tin trên mạng từ một nút duy nhất nằm trong mạng. Đối với hub ta có thể chặn bắt tất cả các gói tin truyền tải qua mạng, nhưng đối với switch cần phải có một số phương thức đặc biệt như ARP snoofing. Đối với mạng LAN không dây thì các gói tin được chặn bắt trên các kênh riêng biệt. Để một máy có thể chặn bắt thông tin trong mạng của nó, network adapter phải được đặt ở promiscuous mode. Mục đích Thường có 2 dạng chính: dùng để kiểm tra bảo trì mạng và dạng kia dùng để xâm nhập mạng. Chúng được sử dụng cho các mục đích: Phân tích hiệu năng làm việc hoặc sự cố mạng. Nhận biết sự xâm nhập mạng, rò rỉ thông tin, ... lấy về thông tin liên quan tới quá trình xâm nhập. Quản lý sử dụng mạng. Tập hợp thông tin báo cáo về trạng thái mạng. Sửa lỗi, bảo trì các hình thái, giao thức mạng. Lọc lấy thông tin cần thiết được lưu chuyển trên mạng, đưa về dạng phù hợp để con người có thể đọc. Chặn bắt các thông tin nhạy cảm như mật khẩu, username của người dùng khác trên mạng nhằm xâm nhập hệ thống của họ. Các chương trình sniffer hiện có Hiện nay có rất nhiều chương trình miễn phí cũng như thương mại thực hiện việc chặn bắt và phân tích gói tin. Một số chương trình trong đó như: Tcpdump ( đối với Unix và Windump ( đối với Window. Wireshark ( Etherpeek ( Triticom LANdecoder32 ( Snort ( Kismet ( dành cho 802.11 wireless LANs. Cain & Anbel ( Cách Thức Hoạt Động Theo dõi Network Traffic Trong phạm vi của báo cáo thực tập tốt nghiệp chỉ xét tới môi trường mạng có dây trong WindowXP, hay chính xác hơn là trong phạm vi chuẩn Ethernet. Ethernet được xây dựng dựa trên khái niệm chia sẻ. Tất cả các máy trong một mạng nội bộ đều được chia sẻ chung một đường dây. Điều đó chỉ ra rằng tất cả các máy trong mạng đều có thể “nhìn thấy” traffic trong đường dây đó. Do đó, phần cứng Ethernet sẽ có một bộ lọc (“filter”) bỏ qua tất cả nhưng traffic không phải dành cho nó (bằng cách bỏ qua tất cả các frame có địa chỉ MAC không phù hợp). Để khắc phục, sniffer phải có cơ chế tắt “filter” ở trên, đưa phần cứng Ethernet vào chế độ hỗn tạp (“promiscuous mode)” Phân tích Network Traffic Khi dữ liệu được gửi trên đường dây, nó sẽ được chia nhỏ, đóng gói thành nhiều packet và được gửi đi một cách riêng biệt. Sniffer là chương trình sẽ chặn bắt các packet này. Sau khi đã tiến hành chặn bắt thành công các gói tin, chúng ta sẽ có được các packet mang thông tin. Tuy nhiên, để lấy được thông tin cần thiết phục vụ cho các mục đích khác nhau, chúng ta phải thực hiện việc phân tích các gói tin đó (Packet Analysis). Các giao thức có thể sniffing như: Ethernet, IPv4, IPv6, ARP/RARP, TCP, UDP, hoặc ICMPv4, telnet, rlogin, http, SMNP, NNTP, POP, FTP, IMAP... Ví dụ về phân tích một gói tin: Dưới đây là 512 byte đầu tiên dữ liệu của một gói tin Ethernet dưới dạng Hex khi ta sử dụng trình duyệt để duyệt trang web 000 00 00 BA 5E BA 11 00 A0 C9 B0 5E BD 08 00 45 00 ...^......^...E. 010 05 DC 1D E4 40 00 7F 06 C2 6D 0A 00 00 02 0A 00 ....@....m...... 020 01 C9 00 50 07 75 05 D0 00 C0 04 AE 7D F5 50 10 ...P.u......}.P. 030 70 79 8F 27 00 00 48 54 54 50 2F 31 2E 31 20 32 py.'..HTTP/1.1.2 040 30 30 20 4F 4B 0D 0A 56 69 61 3A 20 31 2E 30 20 00.OK..Via:.1.0. 050 53 54 52 49 44 45 52 0D 0A 50 72 6F 78 79 2D 43 STRIDER..Proxy-C 060 6F 6E 6E 65 63 74 69 6F 6E 3A 20 4B 65 65 70 2D onnection:.Keep- 070 41 6C 69 76 65 0D 0A 43 6F 6E 74 65 6E 74 2D 4C Alive..Content-L 080 65 6E 67 74 68 3A 20 32 39 36 37 34 0D 0A 43 6F ength:.29674..Co 090 6E 74 65 6E 74 2D 54 79 70 65 3A 20 74 65 78 74 ntent-Type:.text 0A0 2F 68 74 6D 6C 0D 0A 53 65 72 76 65 72 3A 20 4D /html..Server:.M 0B0 69 63 72 6F 73 6F 66 74 2D 49 49 53 2F 34 2E 30 icrosoft-IIS/4.0 0C0 0D 0A 44 61 74 65 3A 20 53 75 6E 2C 20 32 35 20 ..Date:.Sun,.25. 0D0 4A 75 6C 20 31 39 39 39 20 32 31 3A 34 35 3A 35 Jul.1999.21:45:5 0E0 31 20 47 4D 54 0D 0A 41 63 63 65 70 74 2D 52 61 1.GMT..Accept-Ra 0F0 6E 67 65 73 3A 20 62 79 74 65 73 0D 0A 4C 61 73 nges:.bytes..Las 100 74 2D 4D 6F 64 69 66 69 65 64 3A 20 4D 6F 6E 2C t-Modified:.Mon, 110 20 31 39 20 4A 75 6C 20 31 39 39 39 20 30 37 3A .19.Jul.1999.07: 120 33 39 3A 32 36 20 47 4D 54 0D 0A 45 54 61 67 3A 39:26.GMT..ETag: 130 20 22 30 38 62 37 38 64 33 62 39 64 31 62 65 31 ."08b78d3b9d1be1 140 3A 61 34 61 22 0D 0A 0D 0A 3C 74 69 74 6C 65 3E :a4a".... 150 53 6E 69 66 66 69 6E 67 20 28 6E 65 74 77 6F 72 Sniffing.(networ 160 6B 20 77 69 72 65 74 61 70 2C 20 73 6E 69 66 66 k.wiretap,.sniff 170 65 72 29 20 46 41 51 3C 2F 74 69 74 6C 65 3E 0D er).FAQ. 180 0A 0D 0A 3C 68 31 3E 53 6E 69 66 66 69 6E 67 20 ...Sniffing. 190 28 6E 65 74 77 6F 72 6B 20 77 69 72 65 74 61 70 (network.wiretap 1A0 2C 20 73 6E 69 66 66 65 72 29 20 46 41 51 3C 2F ,.sniffer).FAQ</ 1B0 68 31 3E 0D 0A 0D 0A 54 68 69 73 20 64 6F 63 75 h1>....This.docu 1C0 6D 65 6E 74 20 61 6E 73 77 65 72 73 20 71 75 65 ment.answers.que 1D0 73 74 69 6F 6E 73 20 61 62 6F 75 74 20 74 61 70 stions.about.tap 1E0 70 69 6E 67 20 69 6E 74 6F 20 0D 0A 63 6F 6D 70 ping.into...comp 1F0 75 74 65 72 20 6E 65 74 77 6F 72 6B 73 20 61 6E uter.networks.an Ví dụ phân tích Network Traffic Ta nhận thấy trong packet trên chứa 14-byte Ethernet header, 20-byte IP header, 20-byte TCP header, HTTP header có dấu hiệu kết thúc là (0D 0A 0D 0A) và cuối cùng là phần dữ liệu. Dữ liệu thu được như sau: Ethernet header: 00 00 BA 5E BA 11 00 A0 C9 B0 5E BD 08 00 IP header: 45 0005 DC 1D E4 40 00 7F 06 C2 6D 0A 00 00 020A 0001 C9 TCP header: 00 50 07 75 05 D0 00 C0 04 AE 7D F5 50 1070 79 8F 27 00 00 HTTP header: 48 54 54 50 2F 31 2E 31 20 32... . ... 3A 61 34 61 22 0D 0A 0D 0A Một “Protocol Analyzer” sẽ nhận vào những dữ liệu ở trên và phân tích chúng, trích xuất thông tin và chuyển thành các trường thông tin có thể dễ dàng đọc bởi con người, ví dụ đối với packet ở trên sau khi thực hiện phân tích thông tin ta sẽ có: ETHER: Destination address : 0000BA5EBA11 ETHER: Source address : 00A0C9B05EBD ETHER: Frame Length : 1514 (0x05EA) ETHER: Ethernet Type : 0x0800 (IP) IP: Version = 4 (0x4) IP: Header Length = 20 (0x14) IP: Service Type = 0 (0x0) IP: Precedence = Routine IP: ...0.... = Normal Delay IP: ....0... = Normal Throughput IP: .....0.. = Normal Reliability IP: Total Length = 1500 (0x5DC) IP: Identification = 7652 (0x1DE4) IP: Flags Summary = 2 (0x2) IP: .......0 = Last fragment in datagram IP: ......1. = Cannot fragment datagram IP: Fragment Offset = 0 (0x0) bytes IP: Time to Live = 127 (0x7F) IP: Protocol = TCP - Transmission Control IP: Checksum = 0xC26D IP: Source Address = 10.0.0.2 IP: Destination Address = 10.0.1.201 TCP: Source Port = Hypertext Transfer Protocol TCP: Destination Port = 0x0775 TCP: Sequence Number = 97517760 (0x5D000C0) TCP: Acknowledgement Number = 78544373 (0x4AE7DF5) TCP: Data Offset = 20 (0x14) TCP: Reserved = 0 (0x0000) TCP: Flags = 0x10 : .A.... TCP: ..0..... = No urgent data TCP: ...1.... = Acknowledgement field significant TCP: ....0... = No Push function TCP: .....0.. = No Reset TCP: ......0. = No Synchronize TCP: .......0 = No Fin TCP: Window = 28793 (0x7079) TCP: Checksum = 0x8F27 TCP: Urgent Pointer = 0 (0x0) HTTP: Response (to client using port 1909) HTTP: Protocol Version = HTTP/1.1 HTTP: Status Code = OK HTTP: Reason = OK Các thành phần của một chương trình sniffer Hardware Phần cứng thỏa mãn các tiêu chuẩn của network adapter. Ngoài ra có thể có các tính năng đặc biệt bổ sung để kiểm tra lỗi CRC, lỗi điện thế, lỗi cáp... Chú ý: Để có thể chặn bắt các gói tin vào/ra một mạng gián tiếp từ một nút mạng thì card mạng của nút mạng đó phải hỗ trợ chế độ đa hỗn tạp (promiscuous mode). Hầu hết các card mạng hiện nay đều hỗ trợ chế độ này. Tuy nhiên, các mạng hiện nay đang dần chuyển sang sử dụng switch thay vì broadcast gói tin như hub, vậy nên để chặn bắt gói tin trong một mạng không còn đơn giản như trước đây nữa. Capture driver Là phần quan trọng nhất. Nó có nhiệm vụ bắt lấy network traffic trên đường dây, lưu trữ dữ liệu vào buffer và lọc lấy thông tin cần thiết. Buffer Dữ liệu sau khi được lấy về sẽ được lưu trữ tạm thời tại buffer. Thường có 2 phương pháp sử dụng buffer: ghi vào cho tới khi buffer đầy, hoặc ghi theo phương pháp vòng tròn khi mà dữ liệu mới nhất sẽ thay thế dữ liệu cũ nhất. Real-time analysis Phân tích traffic về protocol, kiểm tra lỗi khi capture packet. Decode Giải mã và hiển thị nội dung của network traffic dưới dạng phù hợp tùy thuộc vào yêu cầu. Packet editting/transmission Một vài chương trình cho phép chúng ta tự tạo cho mình những packet và đưa chúng lên mạng. Phòng chống sniffer Trước tiên, chắc chắn rằng không một máy riêng biệt nào có thể lắng nghe hay chặn bắt toàn bộ mạng Internet. Thứ hai, để có thể lắng nghe một liên kết, cần phải truy nhập được vào dây nối vật lý của liên kết đó (hay có thể tham gia vào giữa đường truyền vật lý của các gói tin). Vậy nên trước hết để phòng chống sniffer là ngăn chặn không để sniffer được cài đặt hay chạy trên bất kì máy nào trong mạng cũng như kiểm tra cẩn thận dây nối trong mạng (đối với mạng có dây). Ngoài ra để phòng chống sniffer ta cần: Phát hiện sniffer trong mạng Một số phương thức đơn giản nhất để phát hiện chương trình sniffer: Phương thức Ping: gửi một gói tin ping tới địa chỉ IP mà không phải là Ethernet Adapter, gồm những bước như sau: Giả sử máy nghi ngờ có địa chỉ IP 10.0.0.1 và MAC là 00-40-05-A4-79-32 Gửi một gói tin “ICMP Echo Request” (ping) có IP của máy nghi ngờ và địa chỉ MAC thay đổi (ví dụ 00-40-05-A4-79-31). Nếu như ta nhận được phản hồi tức là máy nghi ngờ đã bỏ chức năng Ethernet Filter, do đó nó đang lắng nghe trên đường dây. Phương thức ARP Tương tự như phương thức Ping nhưng sử dụng gói tin ARP thay cho ICMP Phương thức DNS Rất nhiều chương trình sniffer sẽ tự động chuyển đổi địa chỉ IP thông qua DNS. Ta có thể phát hiện promiscuous mode của một máy dựa vào DNS traffic mà nó tạo ra (yêu cầu cần phải thiết đặt máy nghi ngờ request tại DNS server mà ta có thể kiểm soát, sau đó dựa vào traffic để kiểm tra). Ngăn chặn sniffer Chống sniffing dữ liệu SSL – Sercure Socket Layer SSH – Sercure Shell VPNs – Virtual Private Networks Cài đặt mạng để sniffing khó khăn hơn Kiểm tra đường dây và các máy trong mạng. Sử dụng Switch thay vì Hub. Sử dụng Adapter không hỗ trợ sniffing Một vài loại Adapter cũ không hỗ trợ promiscuous mode. Một số chương trình phát hiện sniffer AntiSniff CPM (Check Promiscuous Mode) ftp://coast.cs.purdue.edu/pub/tools/unix/cpm/ Dành cho UNIX. neped sentinel cpm (Check Promiscuous Mode) ftp://ftp.cerias.purdue.edu/pub/tools/unix/sysutils/cpm/ Các Phương Pháp Xây Dựng Để xây dựng chương trình sniffer, chúng ta có các lựa chọn chính: Chặn bắt ở mức ứng dụng, mức hệ điều hành và mức network adapter. Raw Socket – mức hệ điều hành Socket là một phương pháp để thiết lập kết nối truyền thông giữa một chương trình yêu cầu dịch vụ ( client) và một chương trình cung cấp dịch vụ (server) trên mạng LAN, WAN hay Internet và đôi lúc là giữa những quá trình ngay bên trong máy tính. Mỗi socket có thể được xem như một điểm cuối trong một kết nối. Một socket trên máy yêu cầu dịch vụ có địa chỉ mạng được cấp sẵn để “gọi” một socket trên máy cung cấp dịch vụ. Một khi socket đã được thiết lập phù hợp, hai máy tính có thể trao đổi dịch vụ và dữ liệu. Các đặc tính của Socket bao gồm: Giao thức (TDP, UDP hay raw IP). Số hiệu cổng. Địa chỉ IP. Phân loại: Có vài loại Socket thông dụng như: Datagram Socket hay còn gọi là connectionless socket sử dụng UDP. Stream Socket hay còn gọi là connection – oriented socket sử dụng TCP. Raw Socket (hay là Raw IP Socket). Với socket dạng này tầng giao vận được bỏ qua và ứng dụng có thể truy nhập trực tiếp vào dữ liệu của gói tin IP. Tóm lại, sử dụng Socket ta có thể chặn bắt và truy nhập các thông tin từ tầng giao vận trở lên (TCP và UDP) và có thể truy nhập tới tầng Internet ( IP) nếu sử dụng raw socket. Tuy nhiên hiện nay trên hệ điều hành window chỉ có thư viện winsock dành cho Visual C++ và Socket trong .Net hỗ trợ raw socket. Thư viện lập trình mạng của Java không cho phép người phát triển được sử dụng tới raw socket. Raw socket là một socket cho phép truy nhập trực tiếp tới header của một packet. Nói một cách khác, raw socket là một cách bỏ qua toàn bộ network stack và đưa packet tới thẳng tầng ứng dụng. Raw socket có thể thực hiện một trong hai tác vụ: Packet Sniffing: nhận các packet từ raw socket. Packet Injection: gửi các packet tới raw socket. Raw socket không nằm ở tầng ngôn ngữ lập trình mà là một phần networking API của hệ điều hành. Sử dụng raw socket chúng ta có thể lấy về header của packet khác với socket thông thường chỉ lấy về payload của packet. Raw socket được sử dụng trong transport layer và network layer. Khi Window XP được phát hành năm 2001, raw socket được cài đặt trong thư viện Winsock, tuy nhiên Microsoft tuyên bố raw socket chỉ được hacket dùng trong việc thực hiện TCP reset attacks. Do vậy sau 3 năm sau trong bản hotfix, Mircrosoft đã hạn chế hỗ trợ raw socket trong winsock cũng như không hỗ trợ cho ứng dụng nào sử dụng chúng nữa. Pcap – mức network adapter Pcap (packet capture) bao gồm những giao diện lập trình ứng dụng (API) dùng để chặn bắt network traffic. Đối với các hệ thống thuộc họ Unix ta có thư viện libpcap, còn đối với Window ta có thư viện được port từ libpcap là winpcap. Pcap thường có hai thành phần cơ bản: Driver: packet capture driver không thể được viết bằng các ngôn ngữ bậc cao mà thường viết bằng C hoặc assembly. Hai driver được sử dụng rộng rãi nhất hiện nay là driver thương mại nằm trong PCAUSA và driver miễn phí nằm trong Windump package. Interface: là giao diện thực hiện packet capture. Libpcap và Winpcap được sử dụng từ link layer trở lên. Chúng cung cấp cơ chế packet capture và packet filter, có thể lưu trữ packet thu được vào file hay đọc file đó... Ngoài ra chúng còn cho phép tạo các custom packet và injection chúng trên mạng. Rất nhiều ứng dụng đã sử dụng libpcap hay winpcap vào các mục đích khác nhau như packet sniffer, network monitor, network tester hay network intrusion detection system... Tuy nhiên nhược điểm của việc sử dụng các thư viện này là chúng chỉ có thể sử dụng để chặn bắt gói tin mà không thể block một địa chỉ hay một cổng hay một tiến trình truy nhập mạng như socket. API của libpcap và winpcap được viết bằng C hoặc C++ nên để có thể xây dựng ứng dụng bằng các ngôn ngữ khác như .NET, Java ta cần có wrapper. Danh sách các wrapper để sử dụng libpcap/winpcap với ngôn ngữ khác C/C++: Net::Pcap, a Perl wrapper for pcap python-libpcap, a Python wrapper for pcap pcapy, another Python wrapper for pcap PacketFu, a Ruby wrapper for pcap tclpcap, a Tcl wrapper for pcap jpcap, a Java wrapper for pcap jNetPcap, another Java wrapper for pcap WinPcapNET, SharpPcap, Pcap.Net, .NET wrappers for WinPcap pcap, Haskell bindings for pcap mlpcap, Objective Caml bindings for pcap pcap, Chicken Scheme wrapper for pcap So sánh Raw Socket và Pcap Tương ứng giữa Socket và Pcap Raw socket và pcap đều có thể được sử dụng để viết chương trình sniffer. Tuy nhiên socket chỉ có thể làm việc từ tầng thứ 4 trong mô hình OSI trở lên (transport layer trong TCP/IP) và raw socket có thể làm việc được với tầng thứ 3 trong mô hình OSI trở lên (network layer trong TCP/IP) còn pcap có thể làm việc với tầng thứ 2 trở lên trong mô hình OSI (link layer trong TCP/IP) (nguồn). Ngoài ra raw socket trên window đã không còn được Microsoft hỗ trợ cũng như tính năng bị giới hạn như: Dữ liệu TCP không thể được gửi qua raw socket. UDP datagram với địa chỉ nguồn không hợp lệ sẽ không thể gửi qua raw socket. Do vậy, nếu sử dụng Socket để đo đạc toàn bộ lưu lượng thông tin vào/ra một hệ thống hay một trạm thì sẽ dẫn tới kết quả có thể không chính xác do nó chỉ có thể chặn bắt một số loại packet nhất định (TCP và UDP) (IP nếu như sử dụng raw IP socket). Các giao thức với các gói dữ liệu khác như ARP, RARP, ICMP ta sẽ không thể chặn bắt khi sử dụng socket. Nếu sử dụng thư viện pcap để chặn bắt ở mức network adapter thì ta sẽ có thể chặn bắt được toàn bộ thông tin do mức chặn bắt ở đây tầng thứ 2 trong mô hình OSI (link layer trong TCP/IP). Tuy nhiên, độ sai lệch là rất nhỏ do các gói tin ngoài TCP và UDP có rất nhỏ và không thường xuyên. Sử dụng Raw Socket ta có thể block một ứng dụng, một tiến trình sử dụng mạng bằng cách có thể chặn cổng hay chặn địa chỉ IP của nó. Tuy nhiên, khi sử dụng thư viện pcap, ta không thể làm việc này mà chỉ có thể chặn bắt và trích xuất thông tin. Kết luận: Để xây dựng một ứng dụng sniffer, ta hoàn toàn có thể sử dụng bất kỳ một trong hai phương pháp trên. Tuy nhiên, tùy vào nhiều yếu tố khác nhau mà ta có thể chọn một trong hai phương pháp hay kết hợp cả hai phương pháp. CHƯƠNG III. PHÂN TÍCH,

Các file đính kèm theo tài liệu này:

  • docbaocao_8533.doc