[Cisco – Other] Bài 12 – TCP – Intercept

Trong bài viết tuần này, chúng ta sẽ cùng tìm hiểu về một tính năng bảo mật được tích  hợp trên Cisco IOS – tính năng TCP Intercept. Tính năng này khi được bật lên có thể sử  dụng để chống lại phương thức tấn công SYN flood trên những kết nối TCP đi ngang qua  router. 

Như thường lệ, chúng ta sẽ cùng tìm hiểu vấn đề cần quan tâm thông qua một bài lab ví  dụ: 

Sơ đồ

 Trên sơ đồ lab là một phần của một mạng doanh nghiệp. Phần này gồm hai chi  nhánh R1 và R2 được đấu nối với nhau bởi một link Ethernet với subnet IP  192.168.12.0/24. Chi nhánh R1 sử dụng cổng F0/0 đấu nối xuống một mạng LAN 1 với subnet 192.168.1.0/24, chi nhánh R2 sử dụng cổng F0/1 đấu nối xuống  mạng LAN 2 với subnet 192.168.2.0/24. 

Giả thiết rằng một số TCP server quan trọng của doanh nghiệp được đặt trong  mạng LAN 1 và các server này đang phải hứng chịu những cuộc tấn công SYN  Flood từ phía bên ngoài vào LAN 1. Ta sẽ thực hiện cấu hình tính năng TCP  Intercept trên router R1 để chống lại những cuộc tấn công này. 

Router R3 được sử dụng cho mục đích kiểm tra cấu hình đã thực hiện.

Các router được sử dụng trong bài lab này là các router 2811 của Cisco với hệ  điều hành được sử dụng là “c2800nm-adventerprisek9-mz.124-15.T1.bin”. 

Thực hiện 

Bước 1: Cấu hình ban đầu cho sơ đồ lab 

Đặt địa chỉ IP trên các cổng của router theo quy hoạch IP được chỉ ra trên hình 1.

Cấu hình định tuyến RIPv2 trên hai router R1 và R2, đảm bảo mọi địa chỉ trên hai  chi nhánh R1 và R2 thấy nhau.

Cấu hình 

Trên R1:

R1(config)#interface f0/0 
R1(config-if)#no shutdown 
R1(config-if)#ip address 192.168.1.1 255.255.255.0 
R1(config-if)#exit 
R1(config)#interface f0/1 
R1(config-if)#no shutdown  
R1(config-if)#ip address 192.168.12.1 255.255.255.0 
R1(config-if)#exit 
R1(config)#router rip 
R1(config-router)#version 2 
R1(config-router)#no auto-summary  
R1(config-router)#network 192.168.12.0 
R1(config-router)#network 192.168.1.0  
R1(config-router)#exit

Trên R2:

R2(config)#interface f0/0 
R2(config-if)#no shutdown  
R2(config-if)#ip address 192.168.12.2 255.255.255.0 
R2(config-if)#exit 
R2(config)#interface f0/1 
R2(config-if)#no shutdown  
R2(config-if)#ip address 192.168.2.1 255.255.255.0 
R2(config-if)#exit 
R2(config)#router rip 
R2(config-router)#version 2 
R2(config-router)#no auto-summary  
R2(config-router)#network 192.168.12.0 
R2(config-router)#network 192.168.2.0  
R2(config-router)#exit

Ta cấu hình R3 đóng vai trò như một host trên LAN 1: 

R3(config)#interface f0/0 
R3(config-if)#no shutdown  
R3(config-if)#ip address 192.168.1.3 255.255.255.0 
R3(config-if)#exit 
R3(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.1

Kiểm tra 

Ta kiểm tra rằng định tuyến đã hội tụ trên hai router R1 và R2: 

R1#show ip route rip
R    192.168.2.0/24 [120/1] via 192.168.12.2, 00:00:08, FastEthernet0/1

R2#show ip route rip
R    192.168.1.0/24 [120/1] via 192.168.12.1, 00:00:10, FastEthernet0/0

Các địa chỉ đã đi đến được nhau:

R1#ping 192.168.2.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.2.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/35/64 ms

R2#ping 192.168.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/40/48 ms

R2#ping 192.168.1.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 52/70/88 ms

Bước 2: Cấu hình TCP Intercept 

Giả sử rằng trên subnet 192.168.1.0/24 có đặt một số TCP server quan trọng của  doanh nghiệp (ví dụ: FTP, HTTP server,…). Cấu hình R1 bảo vệ các TCP server này chống lại các cuộc tấn công SYN Flood từ hướng R2. 

Kiểm tra các kết nối đi đến các server và đóng các kết nối này nếu trong 30s  không có hoạt động nào cả (inactivity). 

Cấu hình 

Trên R1:

R1(config)#access-list 100 permit ip any 192.168.1.0 0.0.0.255
R1(config)#ip tcp intercept list 100
R1(config)#ip tcp intercept connection-timeout 30

Lưu ý: Trong quá trình cấu hình TCP Intercept ta sẽ gặp thông báo “command  accepted, interfaces with mls configured might cause inconsistent  behavior”; ta có thể bỏ qua thông báo này vì đây là cảnh báo cho biết sẽ có những hoạt  

động không ổn định khi ta thực hiện tính năng này trên switch lớp 3 có cấu hình QoS; trong khi ta đang thực hiện cấu hình tính năng này trên router. 

Ghi chú 

Tấn công SYN Flood là loại tấn công mà kẻ tấn công gửi một số lượng lớn các gói SYN  đến TCP server mà không gửi ACK để hoàn thành tiến trình bắt tay 3 bước. Server sẽ  nhanh chóng bị hao tốn tài nguyên và sẽ không còn có thể tiếp nhận các kết nối đến từ  các client hợp lệ. Tính năng TCP Intercept cho phép chúng ta sử dụng router đứng trung  gian giữa client và server bảo vệ server chống lại các cuộc tấn công SYN Flood. 

Có hai mode hoạt đông cho tính năng TCP Intercept: 

Intercept mode: Ở mode này router hoạt động như một “TCP proxy” đứng giữa  router và client. Đầu tiên khi nhận được gói SYN từ client, router ngay lập tức gửi  SYN + ACK cho client. Khi router nhận được ACK từ client (hoàn thành một nửa 

kết nối), nó tiếp tục gửi SYN đến server, nhận SYN + ACK từ server, trả lời ACK  cho server (hoàn thành nửa còn lại của kết nối). Khi hai nửa đã hoàn thành, router  “ghép” hai nửa này lại với nhau một cách trong suốt với cả client và server và  giám sát kết nối này. 

Watch mode: Ở mode này router không làm proxy mà chỉ theo dõi kết nối TCP  giữa client và server mà đi ngang qua nó. 

Khi router gửi đi SYN + ACK về phía client mà không nhận được hổi đáp (ACK từ  client), router sẽ tiếp tục truyền lại gói đã gửi (SYN + ACK) thêm 4 lần: chờ 1s rồi gửi  gói thứ 2, chờ tiếp 2s rồi gửi gói thứ 3, chờ tiếp 4s rồi gửi gói thứ 4, chờ tiếp 8s rồi gửi  gói thứ 5 và chờ tiếp 16s nữa. Mất tổng cộng là 31s kể từ khi gửi đi gói đầu tiên. Sau  khoảng thời gian này, router gửi RST về cả hai phía xóa bỏ kết nối. 

Ta có thể cấu hình một số thiết lập cho TCP Intercept:

Chọn mode cho hoạt động TCP Intercept:

R(config)#ip tcp intercept mode {intercept | watch}

Trong đó “intercept” là mode mặc định. Nếu sử dụng mode này, ta không cần  phải cấu hình. Trong bài lab này, ta sử dụng Intercept mode.

Chọn kết nối theo dõi:

R(config)#ip tcp intercept list ACL

Chỉ những kết nối nào được permit trong access – list ACL mới được theo dõi. Các  kết nối không được permit trong access – list này sẽ được bypass. Trong bài lab  này, ta chỉ theo dõi mọi kết nối TCP đi đến subnet 192.168.1.0/24. 

Khoảng thời gian timeout cho các kết nối inactive: là khoảng thời gian mà tính năng TCP Intercept duy trì một kết nối không hoạt động gì cả (inactive). Sau  khoảng thời gian này, router sẽ gửi RST cho cả server và client để xóa bỏ kết nối  inactive. 

R(config)#ip tcp intercept connection-timeout seconds

Kiểm tra 

Ta thực hiện cấu hình Telnet trên router R3 và thực hiện telnet từ R2 vào R3 đi ngang  qua R1 để khảo sát hoạt động TCP Intercept (Telnet chạy trên nền TCP sử dụng port 23). 

Cấu hình telnet trên R3: 

R3(config)#line vty 0 4 
R3(config-line)#password cisco 
R3(config-line)#login 
R3(config-line)#exit 
R3(config)#enable password cisco

Thực hiện debug trên R1:

R1#debug ip tcp intercept 
TCP intercept debugging is on

Từ R2, ta thực hiện telnet đến R3:

R2#telnet 192.168.1.3 
Trying 192.168.1.3 ... Open 
User Access Verification 
Password: <- Password là “cisco” 
R3>enable 
Password: <- Password là “cisco” 
R3#

R1 sẽ thực hiện theo dõi kết nối TCP này, chen vào giữa, xây dựng hai nửa kết nối đến  client R2 và server R3 rồi ghép hai nửa này lại với nhau. Hoạt động này trong suốt với  R2 và R3: 

*Mar  1 00:21:02.271: INTERCEPT: new connection (192.168.12.2:33140 SYN -> 192.168.1.3:23)
*Mar  1 00:21:02.279: INTERCEPT(*): (192.168.12.2:33140 <- ACK+SYN 192.168.1.3:23)
*Mar  1 00:21:02.363: INTERCEPT: 1st half of connection is established (192.168.12.2:33140 ACK -> 192.168.1.3:23)
*Mar  1 00:21:02.363: INTERCEPT(*): (192.168.12.2:33140 SYN -> 192.168.1.3:23)
*Mar  1 00:21:02.407: INTERCEPT: 2nd half of connection established (192.168.12.2:33140 <- ACK+SYN 192.168.1.3:23)
*Mar  1 00:21:02.415: INTERCEPT(*): (192.168.12.2:33140 ACK -> 192.168.1.3:23)
*Mar  1 00:21:02.419: INTERCEPT(*): (192.168.12.2:33140 <- WINDOW 192.168.1.3:23)

Nếu ta không thực hiện hoạt động gì thêm sau khi khởi tạo kết nối telnet, kết nối này sẽ  được R1 giải phóng sau khoảng thời gian inactivity 30s bằng cách gửi thông điệp RST về  cả hai phía client R2 và server R3:

*Mar  1 00:21:39.975: INTERCEPT: ESTAB timing out (192.168.12.2:33140 <-> 192.168.1.3:23)
*Mar  1 00:21:39.979: INTERCEPT(*): (192.168.12.2:33140 <- RST 192.168.1.3:23)
*Mar  1 00:21:39.983: INTERCEPT(*): (192.168.12.2:33140 RST -> 192.168.1.3:23)

Ta tiếp tục kiểm tra rằng tính năng TCP Intercept có thể chống được tấn công SYN flood.  Để thực hiện điều này, ta giả lập hoạt động SYN flood bằng cách chặn thông điệp ACK  gửi đến từ R2 trên cổng F0/1 của R1. Ta sử dụng một access – list cho hoạt động này:

R1(config)#ip access-list extended DENY_ACK 
R1(config-ext-nacl)#deny tcp any any established 
R1(config-ext-nacl)#permit ip any any 
R1(config-ext-nacl)#exit 
R1(config)#interface f0/1 
R1(config-if)#ip access-group DENY_ACK in 
R1(config-if)#exit

Ta thực hiện telnet từ R2 đến R3:

R2#telnet 192.168.1.3 
Trying 192.168.1.3 ...

Kết quả debug trên R1:

*Mar  1 00:33:25.015: INTERCEPT: new connection (192.168.12.2:12276 SYN -> 192.168.1.3:23)
*Mar  1 00:33:25.023: INTERCEPT(*): (192.168.12.2:12276 <- ACK+SYN 192.168.1.3:23)
R1#
*Mar  1 00:33:26.023: INTERCEPT(*): SYNRCVD retransmit 1 (192.168.12.2:12276 <- ACK+SYN 192.168.1.3:23)
R1#
*Mar  1 00:33:28.023: INTERCEPT(*): SYNRCVD retransmit 2 (192.168.12.2:12276 <- ACK+SYN 192.168.1.3:23)
R1#
*Mar  1 00:33:32.023: INTERCEPT(*): SYNRCVD retransmit 3 (192.168.12.2:12276 <- ACK+SYN 192.168.1.3:23)
R1#
*Mar  1 00:33:40.023: INTERCEPT(*): SYNRCVD retransmit 4 (192.168.12.2:12276 <- ACK+SYN 192.168.1.3:23)
R1#
*Mar  1 00:33:56.023: INTERCEPT: SYNRCVD retransmitting too long (192.168.12.2:12276 <-> 192.168.1.3:23)
*Mar  1 00:33:56.027: INTERCEPT(*): (192.168.12.2:12276 <- RST 192.168.1.3:23)

Ta thấy R1 theo dõi kết nối này và nhận thấy rằng SYN + ACK mà nó trả về cho client  R2 không nhận được ACK hồi âm. R1 tiếp tục thử lại thêm 4 lần nữa không có kết quả và  cuối cùng thực hiện gửi RST cho client R2 ngắt kết nối TCP không hoàn tất. Ta thấy, R1 đã thực hiện tốt tính năng TCP Intercept. 

Trên đây, chúng ta đã cùng trao đổi về tính năng TCP Intercept trên router dùng để chống  lại kiểu tấn công SYN Flood. 

Cảm ơn các bạn! 

Hẹn gặp lại các bạn trong các bài viết tiếp theo!

Bài viết gần đây

spot_img

Related Stories

Leave A Reply

Please enter your comment!
Please enter your name here

Đăng ký nhận thông tin bài viết qua email