TCP Intercept
### TCP Intercept
-TCP Syn Flooding으로 인한 DoS(Denial of Service)공격을 차단하는 기능
-TCP Syn Flooding은 특정 사용자가 Server에게 도달 불가능한 IP 주소를 출발지하여
TCP Syn Mesage를 전송하여 Server가 TCP SYN/ACK를 다른 사용자에게 전송하게하여
Server가 무한정 ACK를 기다리므로써 TCP Session을 Half-open상태로 유지하도록만드는 기능이다.
사용자가 Syn Mesage만 계속 전송하게되면 Server는 모든 Session이 Half-open상태가 되기때문에
해당 Service를 수행하지 못하게된다.
-Intercept mode
(정상적인 사용자인 환경)
: Default mode이며 Client가 Server에게 전송하는 TCP Syn Message를 Router가 중간에 가로채어 수신한다.
Router가 Server의 IP 주소를 출발지로해서 Client에게 TCP Syn + Ack Message를 송신한다.
TCP Client는 TCP Ack Message를 Server에게 전송하게되면 Router가 중간에 가로채어 수신한다.
TCP 3way단계가 정상적으로 연결시 Router가 Server에게 Client의 IP 주소를 출발지로하여 Syn message를 송신한다.
Server는 TCP Syn + Ack Message를 Client에게 송신하게되면 Router는 해당 Message를 Client에게 전송하지 않고
Client의 IP 주소를 출발지로 하여 TCP Ack Message를 Server에게 송신한다.
Router는 TCP Client와 Server에게 연결된 TCP Session을 연결하여 통신하게한다.
(공격으로 간주되는 경우)
: Client가 Server에게 전송하는 TCP Syn Message를 Router가 중간에 가로채어 수신한다.
Router가 Server의 IP 주소를 출발지로해서 Client에게 TCP Syn + Ack Message를 송신한다.
(정상적인 환경이라면 TCP Ack message가 송신되어야한다.)
TCP Ack message가 수신되지 않으면 Router는 Server의 IP주소를 출발지로하여
RST Message를 전송후 TCP 연결을 해제한다.
-Watch mode
: Watch mode로 동작하는 해당 장비는 Server와 Client간에 TCP Session을 감시하며
만약 30초 (Default로 30초로 동작)내에 TCP Session이 연결되지 못하게되면
Server에게 Reset Packet를 전송하여 TCP Session을 강제 종료한다.
-Drop mode
: DOS공격으로 받고있는 상태에서 1분안에 1100개의 TCP 불완전 연결되면 순차적으로 TCP Session을 삭제한다.
[설정 방법]
ip tcp intercept list [ACL Number]
ip tcp intercept mode intercept
ip tcp intercept connection-timeout [Sec]
ip tcp intercept list [ACL Number]
ip tcp intercept mode watch
ip tcp intercept watch-timeout [Sec]
ip tcp intercept list [ACL Number]
ip tcp intercept mode drop
=========================================================================================================================
## Intercept Mode
-R2 = Server
-R1 = Gateway
-R4 = Internet 망
-Intercept mode
: TCP Intercept 기능의 Default mode이며 Server로 향하는 정상적인 TCP 트래픽을
Gateway가 가로채어 Server에게 전송하지 않고 TCP Syn/ACK 생성하여 Client에게 전송한다.
Client는 Syn/ACK를 수신한후 Server에게 Ack를 송신하게되면 Gateway는 해당 Ack를
Srever에게 전송하지 않고 바로자신이 처리한다.
만약 Client로부터 30초간 ACK를 수신하지 못하게되면 Client에게 RST을 전송한후
강제로 TCP Session을 강제 종료한다.
EX1) R1은 R4가 연결된 외부 네트워크 환경에서 TCP Syn Flooding에 의한 공격에의해서
내부 Server인 211.241.228.2가 Service되지 못하는 문제를 해결해야한다.
(Gateway인 R1이 TCP 연결에 직접 관여하여 문제를 해결해야한다.)
# R1
access-list 101 permit tcp any host 211.241.228.2
!
ip tcp intercept list 101
ip tcp intercept mode intercept
ip tcp intercept connection-timeout 30
!
[정상 적인 환경에서 TCP 동작 과정]
(Server) Gateway 외부 네트워크
211.241.228.2 R2-----------------------------------R1-----------------------------------R4 (150.1.13.254)
<---------- Syn ----------
-------- Syn , Ack -------->
<---------- Ack ----------
<---------- Syn ----------
-------- Syn , Ack -------->
<---------- Ack ----------
정보 확인
R4# telnet 211.241.228.2
Trying 211.241.228.2 ... Open
User Access Verification
Password:
R1# debug ip tcp intercept
TCP intercept debugging is on
*Mar 1 00:18:57.063: INTERCEPT: new connection (150.1.13.254:64608 SYN -> 211.241.228.2:23)
*Mar 1 00:18:57.071: INTERCEPT(*): (150.1.13.254:64608 <- ACK+SYN 211.241.228.2:23)
*Mar 1 00:18:57.099: INTERCEPT: 1st half of connection is established (150.1.13.254:64608 ACK -> 211.241.228.2:23)
*Mar 1 00:18:57.103: INTERCEPT(*): (150.1.13.254:64608 SYN -> 211.241.228.2:23)
*Mar 1 00:18:57.139: INTERCEPT: 2nd half of connection established (150.1.13.254:64608 <- ACK+SYN 211.241.228.2:23)
*Mar 1 00:18:57.143: INTERCEPT(*): (150.1.13.254:64608 ACK -> 211.241.228.2:23)
*Mar 1 00:18:57.147: INTERCEPT(*): (150.1.13.254:64608 <- WINDOW 211.241.228.2:23)
[비 정상 적인 환경에서 TCP 동작 과정]
(Server) Gateway 외부 네트워크
211.241.228.2 R2-----------------------------------R1-----------------------------------R4 (150.3.13.254)
<---------- Syn ----------
-------- Syn , Ack -------->
----------- RST ---------->
# R1
access-list 102 deny tcp any host 211.241.228.2 ack
access-list 102 permit ip any any
!
interface fastethernet 0/0
ip access-group 102 in
!
정보 확인
R4# telnet 211.241.228.2
Trying 211.241.228.2 ... Open
[Connection to 211.241.228.2 closed by foreign host]
R1# debug ip tcp intercept
TCP intercept debugging is on
*Mar 1 00:28:53.523: INTERCEPT: new connection (150.1.13.254:64752 SYN -> 211.241.228.2:23)
*Mar 1 00:28:53.531: INTERCEPT(*): (150.1.13.254:64752 <- ACK+SYN 211.241.228.2:23)
*Mar 1 00:28:54.531: INTERCEPT(*): SYNRCVD retransmit 1 (150.1.13.254:64752 <- ACK+SYN 211.241.228.2:23)
*Mar 1 00:28:56.531: INTERCEPT(*): SYNRCVD retransmit 2 (150.1.13.254:64752 <- ACK+SYN 211.241.228.2:23)
*Mar 1 00:29:00.531: INTERCEPT(*): SYNRCVD retransmit 3 (150.1.13.254:64752 <- ACK+SYN 211.241.228.2:23)
*Mar 1 00:29:08.531: INTERCEPT(*): SYNRCVD retransmit 4 (150.1.13.254:64752 <- ACK+SYN 211.241.228.2:23)
*Mar 1 00:29:24.531: INTERCEPT: SYNRCVD retransmitting too long (150.1.13.254:64752 <-> 211.241.228.2:23)
*Mar 1 00:29:24.535: INTERCEPT(*): (150.1.13.254:64752 <- RST 211.241.228.2:23)
=========================================================================================================================
-Watch mode
: Watch mode로 동작하는 해당 장비는 Server와 Client간에 TCP Session을 감시하며
만약 30초 (Default로 30초로 동작)내에 TCP Session이 연결되지 못하게되면
Server에게 Reset Packet를 전송하여 TCP Session을 강제 종료한다.
EX2) R3은 R5가 연결된 외부 네트워크 환경에서 TCP Syn Flooding에 의한 공격에의해서
내부 Server인 211.241.228.2가 Service되지 못하는 문제를 해결해야한다.
(Gateway인 R3이 TCP 연결에 직접 관여하지 않고 문제를 해결해야한다.)
# R3
ip access-list extended TCP_SYN_FLOODING
permit tcp any host 211.241.228.2
!
ip tcp intercept list TCP_SYN_FLOODING
ip tcp intercept mode watch
ip tcp intercept watch-timeout 15
!
[정상 적인 환경에서 TCP 동작 과정]
(Server) Gateway 외부 네트워크
211.241.228.2 R2-----------------------------------R3-----------------------------------R5 (150.3.13.254)
<--------------------------- Syn ---------------------------
-------------------------- Syn , Ack ----------------------->
<--------------------------- Ack ---------------------------
정보 확인
R5# telnet 211.241.228.2
Trying 211.241.228.2 ... Open
User Access Verification
Password:
R3# debug ip tcp intercept
TCP intercept debugging is on
*Mar 1 00:33:14.187: INTERCEPT: new connection (150.3.13.254:13838 SYN -> 211.241.228.2:23)
*Mar 1 00:33:14.223: INTERCEPT: (150.3.13.254:13838 <- ACK+SYN 211.241.228.2:23)
*Mar 1 00:33:14.259: INTERCEPT: (150.3.13.254:13838 ACK -> 211.241.228.2:23)
[비정상 적인 환경에서 TCP 동작 과정]
(Server) Gateway 외부 네트워크
211.241.228.2 R2-----------------------------------R3-----------------------------------R5 (150.3.13.254)
<--------------------------- Syn ---------------------------
-------------------------- Syn , Ack ----------------------->
<---------- RST ----------
# R3
access-list 101 deny tcp any host 211.241.228.2 ack
access-list 101 permit ip any any
!
interface fastethernet 0/0
ip access-group 101 in
!
정보 확인
R5# telnet 211.241.228.2
Trying 211.241.228.2 ... Open
[Connection to 211.241.228.2 closed by foreign host]
R3# debug ip tcp intercept
TCP intercept debugging is on
*Mar 1 00:36:16.955: INTERCEPT: new connection (150.3.13.254:36773 SYN -> 211.241.228.2:23)
*Mar 1 00:36:17.003: INTERCEPT: (150.3.13.254:36773 <- ACK+SYN 211.241.228.2:23)
*Mar 1 00:36:19.155: INTERCEPT: server packet passed in SYNRCVD (150.3.13.254:36773 <- 211.241.228.2:23)
*Mar 1 00:36:23.303: INTERCEPT: server packet passed in SYNRCVD (150.3.13.254:36773 <- 211.241.228.2:23)
*Mar 1 00:36:31.959: INTERCEPT: SYNRCVD timing out (150.3.13.254:36773 <-> 211.241.228.2:23)
*Mar 1 00:36:31.963: INTERCEPT(*): (150.3.13.254:36773 RST -> 211.241.228.2:23)