10
TCP and UDP Giao thức TCP và UDP là hai giao thức phổ biến nhất ở lớp transport của chồng giao thức TCP/IP. UDP dùng ít bytes hơn cho phần header và yêu cầu xử lý từ host ít hơn. TCP thì cần nhiều bytes hơn trong phần header và phải xử lý nhiều hơn nhưng cung cấp nhiều chức năng hữu ích hơn, như khả năng khôi phục lỗi. Chức năng TCP UDP Multiplexing dùng nhiều cổng Có. Chỉ số cổng nhận dạng duy nhất một tiến trình trên máy gửi và máy nhận - Giống như TCP Truyền dữ liệu tuần tự Có. TCP tái sắp xếp bất kỳ dữ liệu nào nhận sai thứ tự Không. UDP không có khái niệm sắp xếp dữ liệu Truyền tin cậy Có. TCP công nhận dữ liệu, gửi lại những phân đoạn bị mất. Các trường sequence và ACK trong TCP header. Không hỗ trợ Kiểm soát dòng Có. TCP dùng các cửa sổ trượt để kiểm tra các cửa sổ của máy gửi Không Connection Có. Quá trình bắt tay 3 lần thiết lập quá trình khởi động cổng Phi kết nối Kiểu giao thức của IP 6 17 RFC 793 768

TCP and UDP

Embed Size (px)

DESCRIPTION

TCP and UDP

Citation preview

Page 1: TCP and UDP

TCP and UDPGiao thức TCP và UDP là hai giao thức phổ biến nhất ở lớp transport của chồng giao thức TCP/IP. UDP dùng ít bytes hơn cho phần header và yêu cầu xử lý từ host ít hơn. TCP thì cần nhiều bytes hơn trong phần header và phải xử lý nhiều hơn nhưng cung cấp nhiều chức năng hữu ích hơn, như khả năng khôi phục lỗi. Chức năng TCP UDPMultiplexing dùng nhiều cổng

Có. Chỉ số cổng nhận dạng duy nhất một tiến trình trên máy gửi và máy nhận

- Giống như TCP

Truyền dữ liệu tuần tự Có. TCP tái sắp xếp bất kỳ dữ liệu nào nhận sai thứ tự

Không. UDP không có khái niệm sắp xếp dữ liệu

Truyền tin cậy Có. TCP công nhận dữ liệu, gửi lại những phân đoạn bị mất. Các trường sequence và ACK trong TCP header.

Không hỗ trợ

Kiểm soát dòng Có. TCP dùng các cửa sổ trượt để kiểm tra các cửa sổ của máy gửi

Không

Connection Có. Quá trình bắt tay 3 lần thiết lập quá trình khởi động cổng

Phi kết nối

Kiểu giao thức của IP 6 17RFC 793 768

Các header của TCP và UDP thì khác nhau ở kích thước (20 và 8 bytes), nguyên nhân chủ yếu là do TCP phải hỗ trợ nhiều chức năng hơn.

Page 2: TCP and UDP

Chú ý rằng UDP hoạt động tương tự như TCP trong vấn đề port number và kiểm tra lỗi phần header. Trường UDP length chỉ ra chiều dài của nguyên thông điệp UDP bao gồm cả header và data. Các kết nối TCP và các cổng

Hai ứng dụng dùng TCP phải thiết lập một kết nối TCP trước khi dữ liệu có thể được truyền. Mỗi kết nối sẽ tồn tại giữa một cặp TCP sockets với socket được định nghĩa như là một kết hợp của địa chỉ IP, cổng được dùng, giao thức lớp transport. Quá trình thiết lập kết nối, khởi tạo socket bao gồm giá trị cổng nguồn và cổng đích, chỉ số tuần tự và ACK. Hình 6-2 mô tả tiến trình bắt tay ba lần trong thiết lập TCP và quá trình hủy một kết nối TCP.

Page 3: TCP and UDP

Trong quá trình thiết lập kết nối, hai host sẽ chọn lựa cổng, chọn lựa chỉ số tuần tự sequence-number và dùng các chỉ số của TCP để nhận ra thông điệp trong quá trình bắt tay ba chiều. Đầu tiên, đối với vấn đề cổng, bên server phải lắng nghe các yêu cầu kết nối từ client, trong trường hợp này là cổng 80. Phía client sẽ chọn một cổng chưa dùng làm source port, thường là giá trị 1024 hoặc lớn hơn. Lưu ý rằng khi so sánh các segment trong tiến trình trên, giá trị port là không đổi. Trong phần header của TCP có bao gồm vài trường có giá trị 1-bit, gọi là các cờ. Các cờ này phục vụ cho các mục đích khác nhau. Các cờ SYN và ACK sẽ chỉ ra một segment có phải là segment đầu tiên hay là thứ hai trong một kết nối TCP mới. Một segment có cờ SYN sẽ là segment đầu tiên trong một kết nối TCP. Một segment có cả SYN và ACK sẽ là segment thứ hai trong một kết nối. Các cờ này cho phép các host dễ dàng nhận ra các yêu cầu kết nối mới. Chỉ số ban đầu có thể được gán về bất kỳ giá trị hợp lệ nào và thường không được gán về 0. Hãy nhớ rằng trong quá trình khôi phục lỗi, việc sử dụng các giá trị này là độc lập trong cả hai chiều.

Quá trình khôi phục lỗiĐể thực hiện quá trình khôi phục lỗi, TCP sẽ gửi các công nhận ACK khi nhận được dữ liệu. Khi dữ liệu gửi đi không được ACK, bên gửi có thể gửi lại dữ liệu. Hình dưới đây mô tả tiến trình một web server gửi ra 1000-bytes trong đó khi segment thứ hai bị mất, dữ liệu sẽ được khôi phục lại.

Page 4: TCP and UDP

Ví dụ trên mô tả một tiến trình khôi phục lỗi trong đó bên gửi (máy web) nhận được một ACK trong đó chỉ ra rằng một segment đã bị mất. Lưu ý rằng trường ACK sẽ chỉ ra byte mong đợi kế tiếp- chứ không phải là byte nhận được cuối cùng. Cũng lưu ý rằng trường ACK và trường sequence chỉ ra số bytes, chứ không phải chỉ ra TCP segment. Bên máy gửi sẽ gửi ra một bộ định thời timers, dựa trên giá trị TCP Measured Round Trip Time (MRTT) sao cho nếu một ACK là không nhận được, máy gửi sẽ gửi lại tất cả nhưng dữ liệu không được công nhận mà không chờ cho bên máy nhận gửi một yêu cầu truyền lại. Smurf Attacks, Directed Broadcasts, and RPF ChecksKiểu tấn công smurf attack diễn ra khi một host gửi một số lượng lớn gói tin ICMP Echo request với vài địa chỉ IP nhập nhằng trong gói tin. Địa chỉ đích sẽ là địa chỉ subnet broadcast hoặc còn gọi là directed broadcast. Router sẽ truyền các gói tin này dựa trên việc so sánh trong bảng định tuyến cho đến khi nào gói tin qua được cổng của router kết nối vào mạng đích. Router sau đó sẽ truyền gói tin vào trong LAN như là LAN broadcast, gửi một bản copy cho tất cả các host.

Page 5: TCP and UDP

1. Kẻ tấn công gửi gói tin về địa chỉ directed-broadcast, địa chỉ nguồn của gói tin là 1.1.1.1 (cho một đợt tấn cống phụ).

2. R1 sẽ truyền gói tin vào trong LAN như là LAN broadcast.3. R1 trả lời với thông điệp ICMP echo reply với gói tin gửi trả về 1.1.1.2.

Một đặc điểm khác của smurf attack là địa chỉ nguồn IP của gói tin được gửi từ máy tấn công là địa chỉ IP của máy bị tấn công. Ví dụ trong hình trên, nhiều host sẽ nhận gói tin ICMP Echo request ở bước 2. Sau đó các host này trả lời lại với Echo reply về địa chỉ 10.1.1.2 – là địa chỉ nguồn của gói tin ICMP Echo ở bước 1. Máy 10.1.1.2 nhận một số lượng lớn gói tin. Vài giải pháp cho vấn đề. Đầu tiên là, nếu dùng Cisco IOS 12.0, đặt lệnh no ip directed-broadcast trong interface, giúp ngăn ngừa router truyền traffic vào trong LAN (chặn bước 2). Ngoài ra, dùng phép kiểm tra reverse-path-forwarding )RPF check) bằng cách dùng lệnh ip verify unicast source reachable-via {rx | any} [allow-default] [allowself-ping] [list] ở chế độ interface. Lệnh này có hai tác dụng:Kiểm tra RPF chặt chẽ: Dùng từ khóa rx routers sẽ kiểm tra nếu một route được so trùng trong bảng định tuyến dùng một cổng đi ra (outgoing interface) mà cổng này đúng bằng cổng nhận gói tin. Nếu không trùng, gói tin bị loại bỏ.Kiểm tra RPF lỏng lẻo: Dùng từ khóa any, router sẽ kiểm tra bất kỳ route nào có thể được dùng để đến được nguồn của gói tin IP. Lệnh này cũng có thể bỏ qua các tuyến đuờng mặc định default-route khi nó thực hiện kiểm tra (mặc định) hoặc dùng default route khi kiểm tra bằng cách dùng từ khóa allow-default. Ngoài ra mặc dù không được khuyến cáo lệnh này có thể kích hoạt lệnh ping về địa chỉ nguồn để kiểm tra kết nối. Cuối cùng, những địa chỉ mà RPF kiểm tra có thể được giới hạn bởi một ACL. Ví dụ trong hình trên, nếu R1 dùng kiểm tra RPF theo kiểu chặt chẽ, nó sẽ lưu ý rằng đường đi của nó để đến 1.1.1.2 (là nguồn của gói tin ở bước 1) không chỉ đến cổng s0/0 như cổng ra, vì

Page 6: TCP and UDP

vậy gói tin sẽ bị drop. Nếu dùng kiểm tra RPF lỏng lẻo, R1 sẽ tìm thấy một route kết nối trực tiếp đúng bằng 1.1.1.2. Vì vậy router sẽ cho phép gói tin đi qua. Sau cùng, giả sử rằng AS1 sẽ không bao giờ nhận được gói tin với địa chỉ ngùon 1.0.0.0, R1 có thể dùng một inbound ACL để loại bỏ bất kỳ gói tin nào đến từ 1.0.0.0/8 khi nó đi vào s0/0 từ Internet. Kiểu tấn công fraggle thì dùng cơ chế tương tự như smurf attack, nhưng thay vì gửI ICMP, fraggle dùng UDP echo. Kiểu tấn công này có thể dùng cùng các cách phòng chống.

TCP SYN Flood, the Established Bit, and TCP InterceptKiểu tấn công TCP SYN flood là một kiểu tấn công trực tiếp vào máy chủ bằng cách tạo ra một số lượng lớn các kết nối TCP nhưng không hoàn thành các kết nối này. Phía kẻ tấn công sẽ khởi tạo nhiều TCP, trong mỗi kết nối chỉ để cờ TCP SYN. Máy chủ sẽ gửi lại trả lời với TCP SYN và ACK. Nhưng sau đó máy tấn công đơn giản là không trả lời thông điệp thứ ba như mong đợi của server theo tiến trình bắt tay ba chiều. Server lúc này sẽ tốn bộ nhớ và tài nguyên trong khi chờ các phiên TCP timeouts hoặc trước khi các kết nối đang thiết lập dang dở được dọn dẹp. Máy server lúc này có thể từ chối các kết nối TCP khác và các thiết bị cân bằng tải trong các server farm lúc này có thể chia tải không cân bằng. Các firewall có hỗ trợ cơ chế stateful có thể ngăn ngừa kiểu tấn công TCP SYN attack này.

Một cách để ngăn ngừa kiểu tấn công SYN attack là đơn giản loại bỏ các gói TCP header trong đó cỉ có cờ SYN được thiết lập. Nói cách khác, loại bỏ tất cả các gói tin đầu tiên trong một kết nối TCP mới. Trong nhiều trường hợp, một router không nên cho phép các kết nối TCP được thiết lập bởi client. Trong trường hợp này, việc lọc các TCP segment ban đầu giúp ngăn ngừa SYN attack.

Page 7: TCP and UDP

Cisco IOS ACLs không thể match trực tiếp cờ TCP SYN. Tuy nhiên một ACL có thể dùng từ khóa establised để tìm ra những tcp segment có cờ ACK được thiết lập. Từ khóa established có thể match tất cả các TCP segment ngoại trừ TCP segment đầu tiên trong một kết nối mới. Cấu hình dưới đây sẽ dùng trên R1 để từ chối những yêu cầu kết nối mới từ Internet đi vào mạng bên trong ASN1.

! The first ACE matches TCP segments that are not the first segment, and permits

! them. The second ACE matches all TCP segment between the same set of IP

! addresses, but because all non-initial segments have already been matched, the

! second ACE only matches the initial segments.

ip access-list extended prevent-syn

permit tcp any 1.0.0.0 0.255.255.255 established

deny tcp any 1.0.0.0 0.255.255.255

permit (whatever)

!

interface s0/0

ip access-group prevent-syn in

ACL hoạt động tốt khi client nằm bên ngoài mạng không được phép tạo kết nối TCP vào mạng bên trong. Tuy nhiên trong những trường hợp các kết nối TCP vào

Page 8: TCP and UDP

bên trong là được phép, ACL này không thể được dùng. Một đặc điểm khác của CiscoIOS được gọi là TCP intercept cho phép các kết nối TCP đi vào mạng nhưng giám sát các kết nối này để chống kiểu tấn công TCP SYN. TCP Intercept hoạt động trong hai chế độ. Trong chế độ watch, nó theo dõi thông tin trạng thái của kết nốI TCP match với một ACL. Nếu kết nối TCP không hoàn bắt tay hai chiều trong một khoảng thời gian, TCP intercepts sẽ gửi một thông điệp TCP reset đến máy server, dọn dẹp kết nối. Nó cũng sẽ đến số kết nối mới trong một khoảng thời gian và nếu có một số lớn kết nối trong một giây (“lớn” có giá trị mặc định là 1100), router sẽ tạm thời lọc các yêu cầu thiết lập TCP mới. Trong chế độ intercept, router sẽ trả lời đến các yêu cầu thiết lập TCP thay vì chuyển các yêu cầu này về server. Sau đó, nếu quá trình bắt tay 3 lần hoàn thành, router sẽ tạo ra một kết nối giữa nó và server. Ở thời điểm này, router đã nối chặt hai kết nối với nhau. Chế độ này làm tốn nhiều tải nhưng bảo vệ tốt hơn cho server.

! The following command enables TCP intercept for packets matching ACL

! match-tcp-from-internet. Also, the mode is set to watch, rather than the

! default of intercept. Finally, the watch timeout has been reset from the

! default of 30 seconds; if the TCP connection remains incomplete as of the

! 20-second mark, TCP intercept resets the connection.

ip tcp intercept-list match-tcp-from-internet

ip tcp intercept mode watch

ip tcp intercept watch-timeout 20

! The ACL matches packets sent into 1.0.0.0/8 that are TCP. It is referenced by

! the ip tcp intercept-list command listed above.

ip access-list extended match-tcp-from-internet

permit tcp any 1.0.0.0 0.255.255.255

! Note below that the ACL is not enabled on any interfaces.

interface s0/0

! Note: there is no ACL enabled on the interface!