CHƯƠNG 6: GIAO THỨC TCP VÀ UDP (PHẦN 1) -

CHƯƠNG 6: GIAO THỨC TCP VÀ UDP (PHẦN 1) -

CHƯƠNG 6: GIAO THỨC TCP VÀ UDP (PHẦN 1) -

CHƯƠNG 6: GIAO THỨC TCP VÀ UDP (PHẦN 1) -

CHƯƠNG 6: GIAO THỨC TCP VÀ UDP (PHẦN 1) -
CHƯƠNG 6: GIAO THỨC TCP VÀ UDP (PHẦN 1) -
(028) 35124257 - 0933 427 079

CHƯƠNG 6: GIAO THỨC TCP VÀ UDP (PHẦN 1)

23-03-2020

CHƯƠNG 6: GIAO THỨC TCP VÀ UDP (PHẦN 1)

I. GIỚI THIỆU

1. Chức năng TCP và UDP

Giao thức TCP và UDP là hai giao thức phổ biến nhất ở lớp vận chuyển (transport layer) của chồng giao thức TCP/IP. UDP dùng ít byte hơn cho phần header và yêu cầu xử lý từ host ít hơn. TCP thì cần nhiều byte 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

Ghép kênh (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

Kết nối (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

Bảng 6.1: Bảng so sánh chức năng của TCP và UDP

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

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

2. 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 socket với socket được định nghĩa như là sự kết hợp của địa chỉ IP, cổng được dùng, giao thức lớp vận chuyển. 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 bước trong thiết lập một kết nối TCP và quá trình hủy một kết nối TCP.

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 bước. Đầu tiên, đối với vấn đề cổng, bên máy chủ (máy chủ) phải lắng nghe các yêu cầu kết nối từ máy yêu cầu (máy khách), trong trường hợp này là cổng 80. Phía máy khách sẽ chọn một cổng chưa dùng làm cổng nguồn, thường là giá trị 1024 hoặc lớn hơn. Lưu ý rằng khi so sánh các phân đoạn (segment) trong tiến trình trên, giá trị cổng là không đổi. Segment là đơn vị mô tả dữ liệu tại lớp vận chuyển được gọi là PDU (Protocol Data Unit).

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.

3. 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 gói tin ACK để báo rằng đã 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 6.3 mô tả tiến trình một máy chủ phục vụ Web gửi ra 1000 byte trong đó khi segment thứ hai bị mất, dữ liệu sẽ được khôi phục lại.

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 chủ phục vụ 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ố byte, chứ không phải chỉ ra segment của TCP. Bên máy gửi sẽ tạo ra một bộ định thời, dựa trên giá trị thời gian tính toán vòng TCP (Measured Round Trip Time - MRTT) sao cho nếu một gói tin ACK là không nhận được, máy gửi sẽ gửi lại tất cả những dữ liệu chưa được xác nhận ACK mà không cần chờ cho bên máy nhận gửi một yêu cầu truyền lại.

4. Cơ chế cửa sổ trượt của giao thức TCP

Cũng giống như nhiều giao thức khác, TCP sẽ dùng cơ chế cửa sổ trượt để kiểm soát dòng lưu lượng. Máy nhận sẽ khai báo kích thước cửa sổ (tính bằng đơn vị byte) dùng trường Windows của tất cả các phân đoạn mạng được gửi trên kết nối TCP. Cửa sổ này còn được gọi là cửa sổ của máy nhận hoặc cửa sổ do máy nhận quảng bá. Máy gửi sau đó chỉ có thể gửi một lượng dữ liệu có kích thước bằng kích thước của một cửa sổ đến máy nhận mà không cần nhận ACK. Mục đích cuối cùng của cơ chế của sổ trượt này là cho phép máy nhận mô tả máy gửi có thể gửi nhanh như thế nào, qua đó giúp bảo vệ máy nhận khỏi việc hết bộ nhớ. Máy nhận có thể tăng hay giảm kích thước cửa sổ của máy gửi bằng cách thay đổi cửa sổ trong các segment của TCP theo sau.

Bên truyền dữ liệu sẽ giới hạn kích thước cửa sổ trượt dựa trên hai thông số khác nhau: cửa sổ quảng cáo và một cơ chế khác cho phép bên truyền phản ứng lại việc mất gói tin bằng cách giảm kích thước của cửa sổ. Cơ chế này được mô tả trong RFC 2581. Bên truyền TCP sẽ dùng một cửa sổ trượt với kích thước cửa sổ trượt sẽ nhỏ hơn hai giá trị có thể. Giá trị đầu tiên là giá trị cửa sổ do bên nhận truyền về và giá trị thứ hai được gọi là cửa sổ nghẽn (Congestion window - CWND). CWND là thành phần quan trọng nhất trong cơ chế tránh nghẽn của TCP.

  • Bước 1: Ở thời điểm thiết lập kết nối, CWND được gán về giá trị thấp, thường là bằng kích thước tối đa của một phân đoạn (MSS).

  • Bước 2: Nếu không có segment nào bị mất, CWND sẽ tăng lên dần, dùng cơ chế bắt đầu chậm (Slow Start). Khi đó sẽ tăng giá trị CWND theo cấp số nhân.

  • Bước 3: Đối với mỗi segment bị mất, CWND sẽ giảm đi một nửa.

  • Bước 4: Nếu segment bị mất đã được truyền lại, CWND sẽ tăng lại một lần nữa, bắt đầu bằng với cơ chế Slow Start.

  • Bước 5: Nếu mất một số segment, trong khi CWND tăng cho đến khi nào đến được giá trị một nửa của giá trị CWND ban đầu. Sau đó CWND sẽ tăng với tốc độ chậm lại dùng một thuật toán tránh nghẽn. Thuật toán này tăng giá trị CWND ở tốc độ tuyến tính.

Tổng quát hơn, thuật toán bắt đầu với một kích thước cửa sổ nhỏ. Kích thước này tăng nhanh nhưng khi nghẽn xảy ra, kích thước cửa sổ truyền bị giới hạn bằng cách giảm bớt giá trị CWND. Khi dữ liệu đã được gửi lại  thành công, CWND sẽ tăng nhanh hơn nhưng sẽ không quá nhanh bởi vì bản thân máy truyền này là nguyên nhân gây nghẽn ban đầu làm mất gói tin. 

Trong bước 1, bên truyền chỉ có thể truyền tối đa một segment trước khi yêu cầu phải có ACK, kích thước cửa sổ truyền ban đầu là khá nhỏ. Giá trị kích cỡ segment tối đa TCP (MSS) định nghĩa kích thước cho phép lớn nhất của trường dữ liệu TCP, không bao gồm phần header của TCP. Với giá trị MTU mặc định trên phần lớn các cổng là 1500 byte (MTU có bao gồm IP header), giá trị MSS tiêu biểu là 1460.

Trong bước 2, giá trị CWND tăng nhanh dùng một thuật toán gọi là TCP slow start. CWND sẽ có thể tăng đến một con số lớn hơn kích thước cửa sổ cho phép trong khoảng thời gian vài giây. Phần lớn việc mất gói diễn ra do nghẽn vì vậy trong bước 3, CWND cũng sẽ giảm rất nhanh. Ý tưởng rất đơn giản đó là làm chậm bên máy truyền khi gói bị mất, điều này giúp cho nghẽn giảm đi. Hành động tương ứng là giảm đi một nửa giá trị CWND cho mỗi segment bị mất, phản ứng diễn ra rất nhanh.

Trong bước 4 và 5, các segment đã được khôi phục và bên truyền có thể giới hạn kích thước cửa sổ dựa trên giá trị CWND đã giảm xuống gần nhất. CWND có thể tăng lên một lần nữa ở thời điểm này nhưng thay vì tăng lên giá trị CWND trước đây, thuật toán chọn một tỉ lệ tăng chậm hơn cho đến khi nào CWND đạt đến giá trị trước khi có mất gói tin.

Hình 6.4 mô tả sự thay đổi giá trị CWND từ khi thiết lập kết nối cho đến khi có nhiều segment bị rớt. Bởi vì có nhiều segment bị mất, bên truyền TCP sẽ giảm giá trị CWND đi một nửa nhiều lần. Trong trường hợp này, CWND sẽ giảm giá trị của nó xuống mức thấp nhất là 1 MSS. Trước khi hạ thấp giá trị CWND, bên truyền sẽ tính toán một biến gọi là ngưỡng bắt đầu chậm (Slow Start Threshold - SSThresh) trong đó một nửa của giá trị CWND ban đầu sẽ bị mất.

Quay trở lại bước 4 và bước 5, trong bước 4, bên truyền đã tăng giá trị CWND dùng thuật toán Slow Start cho đến khi nào CWND đạt đến giá trị SSThresh. Ở giá trị ngưỡng SSThres này, CWND sẽ tăng chậm lại dùng thuật toán tránh nghẽn. Thật ra, giá trị SSThresh sẽ chỉ ra giới hạn mà ở đó bên truyền sẽ ngừng việc dùng thuật toán Slow Start và bắt đầu dùng thuật toán tránh nghẽn để tăng CWND.

5. Các vấn đề khác liên quan đến header của TCP

Trường trong header của TCP

Chức năng

PSH

Có nghĩa là “Push”. Giá trị này được thiết lập bởi bên truyền TCP để làm cho bên nhận ngay lập tức truyền dữ liệu trong segment đến socket của bên máy nhận cùng với tất cả các dữ liệu khác mà máy nhận chưa chuyển đến lớp ứng dụng.

URG

Có nghĩa là “Urgent”. Giá trị này được thiết lập bởi bên gửi TCP để làm cho bên máy nhận truyền dữ liệu bên trong segment để ứng dụng của máy nhận. Bất kỳ dữ liệu nào đã nhận trước đây trên kết nối này nhưng chưa được truyền đến ứng dụng không nhất thiết phải truyền lần này.

Con trỏ Urgent Pointer

Được dùng chỉ khi bit URG được thiết lập. Giá trị này định nghĩa vị trí kết thúc của phần dữ liệu bên trong segment này.

Offset (HLEN)

Định nghĩa chiều dài của header (HLEN) còn được gọi là khoảng cách đến đến vị trí cuối của header. Giá trị này được nhân lên cho 4 sẽ là giá trị header thật của chiều dài header tính bằng byte.

Kiểm tra tổng

Giá trị kiểm tra tổng tính trên header của TCP, không bao gồm phần dữ liệu

Bảng 6.2: Các trường khác bên trong Header của TCP

  • Các ứng dụng TCP/IP

Giao thức

Lớp vận chuyển

Cổng

RFC

Telnet

TCP

23

318

FTP

TCP

20,21

959

TFTP

UDP

69

1350

SMTP

TCP

25

2821

POP3

TCP

110

1939

IMAP

TCP

143

3501

TLS/SSL

TCP

443

2246

LDAP

TCP

389

2251

HTTP

TCP

80

2616

DNS

TCP/UDP

53

1034,1035

NETBIOS NAME SERVICES

UDP

137

1002

NETBIOS DATAGRAM

UDP

138

1002

NETBIOS SESSION SERVICES

TCP

139

1002

SNMP

UDP

161,162

Nhiều

BGP

TCP

179

Nhiều

RIP

UDP

520

Nhiều

Bảng 6.3: Các ứng dụng của TCP/IP

II. CÁC KIỂU TẤN CÔNG ẢNH HƯỞNG ĐẾN TCP/IP

1. Kiểu tấn công Smurf Attack, Directed Broadcast và phép kiểm tra RPF

Kiể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 không rõ ràng trong phần địa chỉ nguồn của gói tin. Địa chỉ đích sẽ là địa chỉ broadcast của subnet hay còn gọi là địa chỉ broadcast trực tiếp (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à gói tin broadcast của LAN, gửi một bản sao chép cho tất cả các host.

Trong hình 6.5, 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ụ). R1 khi nhận được gói tin, kiểm tra địa chỉ đích và sẽ truyền gói tin vào trong LAN như là địa chỉ broadcast của LAN. R1 trả lời với thông điệp ICMP echo reply với gói tin gửi trả về là 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ỉ 1.1.1.2 – là địa chỉ nguồn của gói tin ICMP Echo ở bước 1. Kết quả là máy 1.1.1.2 sẽ bị nhận một số lượng rất lớn các gói tin.

Có 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 cổng của router, giúp ngăn ngừa router truyền lưu lượng vào trong LAN (chặn bước 2).

Ngoài ra, dùng phép kiểm tra RPF (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, router sẽ kiểm tra nếu một tuyến đượ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 thì 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ỳ tuyến 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 hoặc dùng default-route khi kiểm tra bằng cách dùng từ khóa allow-default. Có nghĩa là, trong cơ chế kiểm tra lỏng, chỉ cần có một tuyến đường (kể cả tuyến mặc định) đến được nguồn của gói tin thì gói tin đó được router xem là hợp lệ.

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 6.5, nếu R1 dùng kiểm tra RPF theo kiểu chặt chẽ, nó sẽ chú ý 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ì vậy gói tin sẽ bị loại bỏ. 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ỉ nguồn 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.

Hai website trên mạng có chức năng tìm ra các web đang bị nguy cơ tấn công kiểu smurf attack là http://www.netscan.orghttp://www.powertech.no/smurf/.

Một biến thể của smurf attack là fraggle, trong đó dùng UDP thay cho dùng ICMP. Kiểu tấn công này dùng hai chương trình là CHARGEN và ECHO UDP, chạy tương ứng trên cổng UDP 19 và 7. Cả hai ứng dụng này được thiết kế để hoạt động giống như lệnh ping và nó được thiết kế để trả lời những yêu cầu từ các máy khác về sự tồn tại của nó.

Ta có thể dùng cùng một cách phòng chống trong smurf attack.

2. Kiểu tấn công Ping of Death

Kiểu tấn công Ping of death dùng giao thức ICMP. Bình thường, ping được dùng để kiểm tra xem một host có sống hay không. Một lệnh ping thông thường có hai thông điệp echo request và echo reply.

Tiến trình ping bình thường diễn ra như sau, thực hiện một lệnh ping:

C:\>ping 192.168.10.10

Thông tin hiển thị nếu thành công:

Pinging 192.168.10.10 with 32 byte of data:

Reply from 192.168.10.10: byte=32 time=1ms TTL=150

Reply from 192.168.10.10: byte=32 time=1ms TTL=150

Reply from 192.168.10.10: byte=32 time=1ms TTL=150

Reply from 192.168.10.10: byte=32 time=1ms TTL=150

Ping statistics for 192.168.10.10:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

Minimum = 1ms, Maximum = 1ms, Average = 1ms

Khi tấn công bằng Ping of Death, một gói tin echo được gửi có kích thước lớn hơn kích thước cho phép là 65.536 byte. Gói tin sẽ bị chia ra thành các segment nhỏ hơn, nhưng khi máy đích ráp lại, host đích nhận thấy rằng là gói tin quá lớn đối với bộ đệm bên nhận. Kết quả là, hệ thống không thể quản lý nổi tình trạng bất thường này và sẽ khởi động lại hoặc bị treo.

Bạn có thể thực hiện Ping of Deatch trong linux bằng cách dùng lệnh ping –f –x 65537. Chú ý từ khóa –f. Từ khóa này ra lệnh cho máy gửi ra các gói tin càng nhanh càng tốt. Tấn công từ chối dịch vụ DoS thường không chỉ là tổng lưu lượng hay kích thước lưu lượng mà còn là tốc độ của các gói tin gửi đến máy đích. Bạn có thể thực hiện các công cụ sau để thực hiện tấn công Ping of Death.

  • Jolt

  • Sping

  • ICMP Bug

  • IceNewk

3. Kiểu tấn công LAND

Trong kiểu tấn công này, một gói tin TCP có cờ SYN được bật lên sẽ được gửi với cùng địa chỉ nguồn, địa chỉ đích và số cổng. Khi một host nhận được dạng lưu lượng bất thường này, host thường sẽ hoạt động chậm lại hoặc treo hoàn toàn vì nó cố gắng khởi tạo kết nối với chính nó trong một vòng lặp bất tận. Mặc dù đây là một kiểu tấn công cũ, cả Windows XP với SP2 và Windows máy chủ 2003 đều bị ảnh hưởng với kiểu tấn công này. Bạn có thể dùng chương trình Hping để tạo ra các gói tin có cùng địa chỉ nguồn và địa chỉ đích.

4. Tấn công tràn ngập gói tin TCP SYN, bit được thiết lập

Kiểu tấn công làm tràn ngập các gói tin TCP với cờ SYN được bật lên bằng 1 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ờ SYN. Máy chủ sẽ gửi lại trả lời với gói tin TCP có cờ SYN và ACK được bật lên bằng 1. 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 máy chủ theo tiến trình bắt tay ba chiều. Máy chủ lúc này sẽ tốn bộ nhớ và tài nguyên trong khi chờ các phiên TCP hết hạn hoặc trước khi các kết nối đang thiết lập dang dở được kết thúc.

Máy chủ 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 máy chủ chính (máy chủ farm) lúc này có thể chia tải không cân bằng. Các thiết bị tường lửa có hỗ trợ cơ chế trạng thái đủ (stateful) có thể ngăn ngừa kiểu tấn công TCP SYN này.

Kiểu tấn công SYN flood vẫn hiệu quả ngày nay là nhờ ba nguyên nhân:

  • Các gói tin SYN là một phần của lưu lượng bình thường, hàng ngày. Vì vậy rất khó cho các thiết bị có thể lọc kiểu lưu lượng này.

  • Các gói tin SYN thường không yêu cầu nhiều băng thông để khởi động tấn công bởi vì kích thước khá nhỏ.

  • Các gói tin SYN có thể bị giả mạo bởi vì không cần các thông điệp trả lời gửi ngược về đích. Kết quả là, bạn có thể chọn các địa chỉ IP ngẫu nhiên để khởi động tấn công, làm cho người quản trị khó có thể lọc bỏ các gói tin này.

5. Phát hiện kiểu tấn công DoS

Việc phát hiện kiểu tấn công từ chối dịch vụ (Dinied of Service) thì thường dễ thấy, nhưng các kiểu tấn công này thường khó phát hiện lúc đầu. Các triệu chứng thường là:

  • Các hoạt động mạng tăng cao.

  • CPU của router tăng cao.

  • Không trả lời từ các host.

  • Các máy bị treo ở vài thời điểm.

Một cách để ngăn ngừa kiểu tấn công SYN là đơn giản loại bỏ các gói TCP với header trong đó chỉ 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 máy khách. Trong trường hợp này, việc lọc các segment TCP ban đầu giúp ngăn ngừa các cuộc tấn công SYN.

Chức năng ACL trong IOS của Cisco không thể so trùng trực tiếp cờ SYN trong gói tin TCP. Tuy nhiên một ACL có thể dùng từ khóa establised để tìm ra những segment dạng TCP có cờ ACK được thiết lập. Từ khóa established có thể so trùng tất cả các segment ngoại trừ các segment dạng TCP đầ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.

Dòng ACE đầu tiên sẽ lựa ra các phân đoạn TCP không phải là segment đầu tiên và cho phép các segment này. Dòng ACE thứ hai sẽ lựa ra tất cả các segment dạng TCP, nhưng vì tất các các segment không phải là đầu tiên đã dính với dòng đầu tiên, dòng thứ hai này sẽ chỉ  so trùng với các segment đầu tiên.

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 máy khách 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 bên trong là được phép, ACL này không thể được dùng.

6. Chức năng chặn TCP

Một đặc điểm khác trong IOS của Cisco được gọi là chặn TCP (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 bước trong một khoảng thời gian, TCP intercept sẽ gửi một thông điệp thiết lập lại TCP đến máy chủ để kết thúc kết nối. Nó cũng sẽ đếm 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ề máy chủ. 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à máy chủ. Ở 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 máy chủ.

Các lệnh dưới đây sẽ bật cơ chế TCP intercept cho những gói tin so trùng với ACL match-tcp-from-internet. Ngoài ra, chế độ được thiết lập là chế độ watch, còn chế độ mặc định là intercept. Cuối cùng, lệnh watch timeout đã được đưa về chế độ mặc định là 30 giây. Nếu kết nối TCP vẫn trong tình trạng không hoàn tất, cơ chế TCP intercept sẽ khởi động việc hủy kết nối.

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

ip tcp intercept mode watch

ip tcp intercept watch-timeout 20

ACL sẽ lựa ra tất cả các gói tin gửi đến địa chỉ 1.0.0.0/8 và dùng TCP. ACL này sẽ tham chiếu đến các lệnh ip tcp intercept-list ở trên.

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

permit tcp any 1.0.0.0 0.255.255.255

Chú ý rằng ACL không được áp dụng vào bất kỳ cổng nào.

 

 

 

 

 


FORM ĐĂNG KÝ MUA HÀNG
Đặt hàng
icon-cart
0