네트워크

TCP/IP와 취약점

화이트해커 Luna 🌙 2023. 2. 20. 00:20
728x90
반응형

TCP/IP와 취약점

TCP(Transmission Control Protocol)와 IP(Internet Protocol)는 네트워크 통신에 사용되는 프로토콜로, TCP는 장치 간의 안정적인 데이터 전송을 담당하는 전송 계층 프로토콜이고, IP는 데이터 패킷을 목적지로 라우팅하는 역할을 하는 네트워크 계층 프로토콜이다. 

 

-목차-
1. TCP/IP 계층과 취약점
2. TCP 헤더와 취약점
3.  IP 헤더와 취약점
4. TCP/IP 관계
5.  TCP/IP 연결과 취약점

1. TCP/IP 계층과 취약점

 

tcp/ip 4계층과 osi7계층

 

 

TCP/IP 계층은 Application(애플리케이션) 계층, Transport(전송) 계층, Internet(IP계층)계층 및 Link(네트워크 액세스) 계층의 4개 계층으로 나뉜다.

각 계층에는 네트워크를 통해 데이터를 전송하는 특정 기능과 그에 따른 취약점이 존재한다. 

 

Application(애플리케이션) 계층

애플리케이션 계층은 TCP/IP 모델의 최상위 계층으로, 이 계층은 이메일, 웹 브라우징, 파일 공유와 같은 네트워크 서비스를 애플리케이션에 제공하는 역할을 한다. 애플리케이션 계층 프로토콜의 예로는 HTTP, FTP, SMTP 및 DNS가 있다. 

 

애플리케이션 계층 취약성: TCP/IP 프로토콜을 사용하는 애플리케이션은 SQL 인젝션, 사이트 스크립팅(XSS) 및 버퍼 오버플로 공격 등 다양한 공격에 취약하다. 이러한 공격은 애플리케이션의 보안을 손상시키고 중요한 데이터에 대한 액세스 권한을 얻는 데 사용된다. 

 

Transport(전송) 계층

전송 계층은 장치 간의 안정적인 데이터 전송을 담당하며 TCP 및 UDP 프로토콜을 포함한다. TCP는 신뢰할 수 있는 데이터 전송을 제공하는 연결 지향 프로토콜인 반면 UDP는 더 빠른 데이터 전송을 제공하지만 오류 검사나 안정성 보장이 없다. 

 

전송 계층 취약점 : TCP/IP 프로토콜에서 가장 일반적으로 사용되는 전송 프로토콜은 TCP다. TCP 대표 공격은 공격자가 많은 수의 SYN 패킷을 대상 시스템으로 전송하여 응답 능력을 압도하고 서비스 거부(DoS) 상태를 유발하는 TCP SYN flooding 등이 있다. 

 

 

Internet(IP계층)계층

인터넷 계층은 네트워크의 장치 간에 데이터 패킷을 라우팅하는 역할한다. 이 계층에는 인터넷 프로토콜(IP)과 인터넷 제어 메시지 프로토콜(ICMP)이 포함된다. IP 프로토콜은 한 네트워크에서 다른 네트워크로 데이터 패킷을 이동하는 역할을 하는 반면 ICMP는 오류 보고 및 진단 목적으로 사용된다.

 

인터넷 계층 취약성: 이 계층에서 대표 공격은 IP는 공격자가 위조된 원본 IP 주소로 패킷을 전송하여 공격자의 실제 위치를 추적하기 어렵게 만드는 IP 스푸핑 등이 있다. 

 

 

Link(네트워크 액세스) 계층

네트워크 액세스 계층은 동일한 네트워크에 있는 장치 간에 데이터를 전송하는 역할을 한다. 이 계층에는 이더넷, Wi-Fi 및 토큰 링과 같은 프로토콜이 포함된다. 이러한 프로토콜은 구리 또는 광섬유 케이블과 같은 물리적 매체를 통해 데이터가 전송되는 방식을 정의한다. 

 

네트워크 액세스 계층 취약성: 이 계층은 공격자가 신뢰할 수 있는 장치의 MAC 주소를 스푸핑하여 네트워크에 액세스하는 MAC 주소 스푸핑을 비롯한 다양한 공격에 취약하다. 

 

 

 

전반적으로 TCP/IP 프로토콜은 많은 취약점이 있는 복잡한 프로토콜이다. 오랜기간 광범위하게 사용된 만큼이나 취약점이 정말 많다. 네트워크 관리자와 보안 전문가는 이러한 취약성을 인식하고 강력한 액세스 제어 구현, 네트워크 트래픽 모니터링, 암호화를 사용하여 민감한 데이터 보호 등 취약성을 완화하기 위한 조치를 취해야 한다. 정기적인 보안 평가 및 침투 테스트는 취약성을 식별하고 네트워크 보안을 유지하는 데 필수다.

 

 

 

 


2. TCP 헤더와 취약점

 

 

 

TCP 헤더

 


TCP 헤더는 TCP 세그먼트의 시작 부분에 추가되는 고정 길이의 20바이트 헤더다. 헤더는 여러 필드로 구성되며 각 필드는 데이터를 전송하는 특정 기능이 있다. 

 

 

TCP헤더 필드 순서랑 특징

 

  • TCP 헤더의 첫 번째 필드는 source port number다. 송신 응용 프로그램에서 사용하는 포트 번호를 지정하는 16비트 필드다.

  • 두 번째 필드는 destination port number다. 수신 응용 프로그램에서 사용하는 포트 번호를 지정하는 16비트 필드다.

  • 세번째 필드는 sequence number다. 전송 중인 데이터 스트림에서 바이트 번호를 식별하는 32비트 필드로, 데이터가 올바른 순서로 수신 응용 프로그램에 전달되도록 하는 데 사용된다.

  • 네 번째 필드는acknowledgement number다. 32비트 필드다. 이 필드는 연결의 다른 끝에서 보낸 데이터 수신을 확인하는 데 사용된다. acknowledgement number는 수신 응용 프로그램이 기다리고 있는 다음 예상 시퀀스 번호이기도 하다.

  • 다섯 번째 필드는 header length다. TCP 헤더의 길이를 32비트 워드로 지정하는 4비트 필드다. TCP 헤더의 최소 크기는 20바이트이므로 이 필드는 항상 5로 설정된다.

  • 여섯 번째 필드는reserved field로, 향후 사용을 위해 예약된 6비트 필드인데 안쓰는거라고 보면 된다. 

  • 일곱 번째 필드는 연결 상태를 나타내는 제어 플래그가 포함된 6비트 필드인 제어 플래그(control flags) 필드다. 이러한 플래그에는 URG, ACK, PSH, RST, SYN 및 FIN이 포함된다. 
URG(URGent): 이 플래그 비트는 긴급 데이터가 세그먼트에 포함되어 있음을 나타내는 데 사용된다. 이 플래그가 설정되면 세그먼트의 데이터가 가능한 한 빨리 처리되어야 함을 의미한다. 이 플래그는 버퍼의 다른 데이터보다 먼저 처리해야 하는 우선 순위가 높은 데이터를 보내는 데 사용된다.
URG 플래그가 설정되면 긴급 포인터 필드라고 하는 TCP 헤더의 추가 포인터 필드는 마지막 긴급 데이터 바이트의 현재 시퀀스 번호로부터의 오프셋을 나타낸다.

ACK(ACKnowledgment): 이 플래그 비트는 승인 번호가 유효함을 나타내는 데 사용된다. TCP 헤더의 승인 번호는 수신자가 예상하는 다음 시퀀스 번호입니다. 이 플래그가 설정되면 헤더의 승인 번호가 유효하고 송신자가 해당 시퀀스 번호까지의 모든 바이트를 수신했음을 의미한다. ACK 플래그는 다른 엔드포인트에서 보낸 데이터의 수신을 승인하는 데 사용된다. 예를 들어 클라이언트가 서버에 요청을 보내면 서버는 요청 수신을 승인하도록 ACK 플래그가 설정된 세그먼트로 응답한다.

PSH (PuSH) :이 플래그 비트는 수신자가 버퍼링없이 가능한 한 빨리 응용 프로그램에 데이터를 전달해야 함을 나타내는 데 사용된다. 이 플래그가 설정되면 데이터가 버퍼를 통해 푸시되고 애플리케이션에 즉시 전달되어야 함을 의미한다. PSH 플래그는 수신자가 수신된 데이터를 처리하기 전에 더 많은 데이터를 기다리지 않으려는 상황에서 사용된다. 예를 들어 사용자가 인스턴트 메시징 응용 프로그램에 메시지를 입력하면 응용 프로그램은 메시지가 수신자에게 즉시 배달되도록 PSH 플래그가 설정된 세그먼트를 보낸다.

RST (ReSeT) :이 플래그 비트는 TCP 연결을 재설정하는 데 사용된다. 이 플래그가 설정되면 수신자가 잘못된 세그먼트를 수신했거나 수신자가 어떤 이유로 세그먼트를 처리할 수 없음을 의미한다. TCP 연결이 다시 설정되면 연결의 모든 데이터가 손실되고 끝점이 초기 상태로 돌아간다.
RST 플래그는 오류가 발생할 때 연결을 신속하게 종료하는 데 자주 사용된다.

SYN(SYNchronize) : 이 플래그 비트는 초기 연결 설정 중에 두 엔드포인트 간의 시퀀스 번호를 동기화하는 데 사용된다. TCP 연결이 설정되면 두 끝점이 데이터 전송에 사용할 시퀀스 번호에 동의해야 한다. SYN 플래그는 연결 설정 프로세스를 시작하는 데 사용된다. SYN 플래그가 설정되면 발신자는 초기 시퀀스 번호가 있는 세그먼트를 전송하고 수신자는 초기 시퀀스 번호의 수신을 승인하고 시퀀스 번호의 동기화를 시작하기 위해 SYN 및 ACK 플래그가 모두 설정된 세그먼트로 응답한다.

FIN(FINish) : 이 플래그 비트는 보낸 사람이 데이터 전송을 완료했음을 나타내는 데 사용된다. 이 플래그가 설정되면 보낸 사람이 더 이상 보낼 데이터가 없으며 연결을 닫으려고 함을 의미한다. FIN 플래그는 두 엔드포인트가 FIN 세그먼트를 서로 전송하여 전송할 데이터가 더 이상 없음을 나타내는 연결 종료 프로세스에서 사용된다. 두 엔드포인트가 FIN 세그먼트를 보내고 다른 엔드포인트로부터 승인을 받으면 연결이 닫힌다.
  • 여덟 번째 필드는 window size 다. 수신 창의 크기를 바이트 단위로 지정하는 16비트 필드다. 이 필드는 송신 및 수신 애플리케이션 간의 데이터 흐름을 제어하는 데 사용된다. 

  • 아홉 번째 필드는 check sum 필드다. TCP 세그먼트의 무결성을 확인하는 데 사용되는 체크섬 값을 포함하는 16비트 필드다.

  • 열 번째 필드는 urgent pointer 필드로, TCP 세그먼트에 긴급 데이터가 있음을 나타내는 데 사용되는 16비트 필드다.

  • 열한 번째 필드는 TCP 세그먼트에 대한 추가 정보를 제공하는 데 사용되는 선택적 필드인 옵션 필드다. 이 필드는 최대 세그먼트 크기 또는 필요한 서비스 유형과 같은 연결 매개변수를 협상하는 데 사용할 수 있다.

  • TCP 헤더의 마지막 필드는 데이터 필드로, 송신 및 수신 애플리케이션 간에 전송되는 실제 데이터를 포함한다. 데이터 필드의 길이는 가변적이며 전송되는 데이터의 양에 따라 다르다.

 

TCP 헤더 취약점 : TCP 프로토콜은 안정적이고 순서가 지정된 데이터 전송을 제공하지만, 취약점이 없진 않다. 

대표공격중 하나는 공격자가 TCP 세션을 가로채고 연결을 제어하는 TCP 하이재킹이다. 공격자는 TCP 세션을 가로채고 패킷을 주입하거나 수정하여 두 엔드포인트 간의 통신을 방해하거나 조작할 수 있다.

또 다른 취약점은 공격자가 많은 수의 SYN 패킷을 서버로 전송하여 요청으로 서버를 압도하고 서버를 충돌시키거나 사용할 수 없게 만드는 TCP SYN flooding이다.

TCP 인젝션 공격도 있다. TCP 인젝션은 공격자가 원치 않는 데이터를 TCP 스트림에 주입하여 수신 응용 프로그램이 예기치 않게 작동하거나 다른 공격에 취약해지도록 한다.

 

 

 


3.  IP 헤더와 취약점

 

IP 헤더는 데이터 패킷이 네트워크의 올바른 대상으로 라우팅시키 역할을 하는 TCP/IP 프로토콜의구성 요소다. 라우터와 같은 중간 장치에 데이터 패킷에 대한 정보를 제공할 뿐만 아니라 네트워크에서 사용되는 주소 지정 체계를 정의한다. 서로 다른 네트워크에 있는 장치 간에 데이터 패킷을 이동하는 프로토콜이라서 IP 헤더에는 네트워크에서 데이터 패킷을 처리하고 라우팅하는 방법을 정의하는 필드들이 포함된다. IP 헤더 위치는 TCP/IP 프로토콜중에서 링크 계층 헤더와 전송 계층 헤더 사이에 있다.

 

 

ip 헤더




  • version field는 사용 중인 IP 프로토콜의 버전을 식별하는 4비트 필드다. IP 프로토콜의 현재 버전은 버전 필드의 값 4로 식별되는 IPv4다.

  • header length field는 IP 헤더의 길이를 32비트 워드로 지정하는 4비트 필드다. 이 필드는 IP 패킷에서 데이터의 시작을 결정하는 데 사용된다.

  •  type of service field는 데이터 패킷에 대한 서비스 품질(QoS) 정보를 제공하는 데 사용되는 8비트 필드다. 이 필드는 데이터 패킷의 우선 순위를 지정하거나 전송 중인 데이터 유형을 나타내는 데 사용할 수 있다.

  •  total length field는 헤더와 데이터를 포함한 IP 패킷의 전체 길이를 지정하는 16비트 필드다. 이 필드는 데이터 패킷의 크기를 결정하고 패킷이 네트워크를 통해 전송하기에 너무 크지 않은지 확인하는 데 사용된다.

  •  identification field는 개별 IP 패킷을 식별하는 데 사용되는 16비트 필드다. 이 필드는 수신 장치에서 단편화된 IP 패킷을 원래 형식으로 재조립하는 데 사용된다.

  •  flags field는 IP 패킷의 fragment(조각화)를 제어하는 데 사용되는 3비트 필드다. 이 필드에는 IP 패킷을 조각화해서는 안 되는지 여부를 나타내는 DF(do not fragment) 비트가 포함된다.

  • fragment offset field는 원본 IP 패킷에서 데이터 조각의 위치를 나타내는 데 사용되는 13비트 필드다.

  • TTL(Time to Live) 필드는 IP 패킷이 폐기되기 전에 이동할 수 있는 최대 홉 수를 지정하는 8비트 필드다. 이 필드는 IP 패킷이 네트워크에서 무한정 순환하는 것(루프)을 방지하는 데 사용된다.

  • protocol field는 IP 패킷에서 데이터를 전송하는 데 사용되는 전송 계층 프로토콜을 지정하는 8비트 필드다. 이 필드의 값에는 TCP, UDP 및 ICMP가 포함된다.

  •  header checksum 필드는 IP 헤더의 무결성을 검사하는 데 사용되는 16비트 필드다. 이 필드는 전송 중에 IP 헤더가 손상되지 않았는지 확인하는 데 사용된다.

  • source IP address, destination IP address 필드는 IP 패킷의 소스 및 대상 주소를 지정하는 32비트 필드다. 이 필드는 네트워크를 통해 IP 패킷을 라우팅하고 데이터 패킷이 올바른 대상으로 전달되도록 하는 데 사용된다.



IP 헤더 취약점 : IP헤더는 IP 스푸핑, 패킷 조각화 공격, 서비스 거부(DoS) 공격 등 다양한 공격에 취약하다. 이러한 취약점을 완화하기 위해서는 방화벽, 침입 탐지 시스템 및 암호화 등과 같은 적절한 보안 조치를 취해야 한다.

- IP 스푸핑: 공격자는 패킷의 소스 IP 주소를 위조하여 패킷이 신뢰할 수 있는 소스에서 온 것처럼 보이게 하여 공격자가 액세스 제어를 우회하거나 서비스 거부(DoS) 공격을 시작할 수 있도록 한다.

- 패킷 조각화 공격: 공격자는 IP 조각화를 사용하여 침입 탐지 시스템을 회피하거나 서비스 거부 공격을 일으킬 수 있다.


4. TCP/IP 관계

 

TCP 헤더는 IP 패킷 내에 캡슐화되며, 이는 TCP 세그먼트가 IP 패킷의 데이터 페이로드로 전달됨을 의미한다. IP 헤더는 패킷이 올바른 대상 호스트로 전달되도록 필요한 주소 지정 및 라우팅 정보를 제공하는 반면, TCP 헤더는 수신 호스트가 데이터 스트림을 올바르게 재조립하고 오류 없이 수신되었는지 확인할 수 있는 추가 정보를 제공한다.

 

 

 

응용 프로그램 계층은 데이터를 분할하고 각 세그먼트에 TCP 헤더를 추가하는 TCP 프로토콜에 데이터를 제공한다.

그 다음 결과 TCP 세그먼트는 IP 헤더를 추가하여 IP 패킷을 생성하는 IP 프로토콜로 전달된다.

그 다음 IP 패킷은 네트워크 액세스 계층을 통해 대상 호스트로 전송되며 수신 IP 프로토콜에 의해 처리되고 TCP 세그먼트를 추출하여 수신 TCP 프로토콜로 전달한다.

그 다음 수신 TCP 프로토콜은 데이터 스트림을 재조립하여 수신 응용 프로그램 계층으로 전달한다.

 

IP 헤더의 필드는 필요한 주소 지정 및 라우팅 정보를 제공하는 데 사용된다.

TCP 헤더의 필드는 신뢰할 수 있고 오류를 가능하게 하는 추가 정보를 제공하는 데 사용된다.

 

예를 들면 IP 헤더의 소스 및 대상 IP 주소는 통신의 끝점을 지정하는 데 사용된다면 TCP 헤더의 시퀀스 번호 및 승인 번호 필드는 데이터가 오류 없이 올바른 순서로 전달되도록 하는 데 사용된다.

 

즉, TCP 및 IP 헤더는 함께 작동하면서 인터넷을 통해 데이터를 제공한다. IP 헤더는 데이터가 올바른 대상 호스트로 전달되도록 하는 데 필요한 주소 지정 및 라우팅 정보를 제공한다면, TCP 헤더는 수신 호스트가 데이터 스트림을 올바르게 재조립하고 오류 없이 수신되었는지 확인할 수 있도록 추가 정보를 제공한다.

 

 

TCP와 UDP 차이점

TCP (Transmission Control Protocol)과 UDP (User Datagram Protocol)는 둘 다 Transport layer에서 사용되는 프로토콜이지만, 데이터를 전송하는 방법과 두 endpoint간의 연결과정에서 차이가 있다. 둘다 장단점이 있다. (신뢰 vs 스피디)

  1. Connection-oriented vs Connectionless
    TCP는 connection-oriented 프로토콜이다. 즉, 두 endpoint 간의 연결이 수립되어야만 데이터를 주고 받을 수 있다. 이를 위해 3-way handshake라고 불리는 세 단계의 연결 설정 과정을 거치는데, 이를 통해 데이터의 신뢰성과 순서가 보장된다. 반면, UDP는 connectionless 프로토콜이다. 이는 UDP를 이용해 데이터를 전송할 때 연결 설정 단계가 필요하지 않다는 뜻이다. 단순히 데이터를 보내고 받기만 할 뿐, 데이터의 전송 순서와 신뢰성에 대한 보장은 없다.

  2. Reliable vs Unreliable
    TCP는 reliable한 프로토콜이다. 이는 데이터의 전송 순서와 데이터의 유실에 대한 보장을 함으로써, 데이터 전송 시의 에러를 최소화한다. 데이터 전송에 대한 에러를 최소화하기 위해, TCP는 패킷의 손실이나 에러 발생 시 패킷을 재전송하는 방식을 취한다. 반면, UDP는 unreliable한 프로토콜이다. 이는 데이터를 전송하고, 그 후 패킷의 손실 여부와 같은 오류 체크를 하지 않는다.

  3. 데이터 전송 방식
    TCP는 byte stream 방식으로 데이터를 전송한다. 이는 데이터를 나누어서 전송하는게 아니라, 전체 데이터를 나누지 않고 연속된 스트림으로 보내는 것이다. 반면 UDP는 데이터그램 방식으로 데이터를 전송한다. 이는 데이터를 작은 조각으로 나누어서 전송하고, 각 조각마다 헤더 정보를 붙여 전송하는 방식이다.

  4. 헤더 구조
    TCP와 UDP의 헤더 구조도 다르다. TCP 헤더는 20바이트의 고정 길이로 구성되어 있고, 여러 가지 정보가 포함된다. 이에 비해 UDP 헤더는 8바이트의 고정 길이로 구성되어 있고, 보다 간단한 구조를 가진다.

  5. 대역폭 사용
    TCP는 신뢰성 있는 데이터 전송을 위해 대역폭을 더 많이 사용한다. 이는 데이터 전송 시에 데이터의 신뢰성을 보장하기 위해 패킷을 재전송하고, 흐름 제어와 혼잡 제어를 수행하기 때문이다. 반면, UDP는 간단하고 빠른 데이터 전송이 필요한 경우에 사용되며, 데이터 전송을 위한 대역폭 사용량이 적다.

  6. 상황
    TCP는 주로 파일 전송, 이메일, 웹 브라우징, 파일 공유 등과 같이 데이터의 정확성과 신뢰성이 중요한 상황에서 사용된다. 반면, UDP는 오디오, 비디오, 게임 등과 같이 데이터의 빠른 전송이 중요한 상황에서 사용된다. 이러한 상황에서는 데이터의 일부가 유실되더라도 전체적인 데이터의 신뢰성에 크게 영향을 주지 않는 경우가 많다.


5.  TCP/IP 연결과 취약점

 

 

TCP 프로토콜은 데이터가 올바른 순서로 오류 없이 전달되도록 하는 신뢰할 수 있는 연결 지향 데이터 전송 메커니즘을 제공한다. 반면에 IP 프로토콜은 네트워크를 통해 데이터 패킷을 라우팅하는 역할을 한다.

이 때, 데이터를 안정적으로 전송하기 위해서는 데이터 전송 전, 전송 중, 전송 후에 각각 정해진 절차가 있다.

 

 

연결 수립

 

TCP 프로토콜이 안정적인 연결을 설정하는 데 사용되는것은 3-way handshake다. 그 과정은 다음과 같다. 

 

 

  1. 클라이언트는 연결 설정을 요청하는 SYN(동기화) 패킷을 서버로 보낸다. SYN 패킷에는 서버가 요청을 승인하는 데 사용할 시퀀스 번호가 포함되어 있다.

  2.  서버는 SYN-ACK(synchronize-acknowledge) 패킷으로 응답하여 클라이언트의 요청을 받았고 연결을 설정할 의향이 있음을 나타낸다. SYN-ACK 패킷에는 클라이언트가 응답을 확인하는 데 사용할 시퀀스 번호가 포함되어 있다.

  3. 클라이언트는 ACK(승인) 패킷을 서버로 전송하여 서버의 응답을 승인하고 연결 설정 프로세스를 완료한다. ACK 패킷에는 서버가 연결 설정 완료를 확인하는 데 사용할 시퀀스 번호가 포함되어 있다.


위의 연결이 설정되면 클라이언트와 서버는 설정된 연결을 사용하여 데이터를 교환할 수 있다. 일반적인 데이터 전송 시나리오에서 클라이언트는 데이터 패킷을 서버로 보내고 서버는 ACK(승인) 패킷으로 응답하여 데이터를 수신했음을 확인한다. 클라이언트가 일정 시간 내에 ACK 패킷을 받지 못하면 데이터가 전달되지 않은 것으로 간주하고 데이터를 재전송한다.

 

3way-핸드셰이크 프로세스는 여러 가지 이유로 중요하다. 데이터가 전송되기 전에 두 장치가 통신할 준비가 되었는지 확인하고, 데이터가 올바른 순서로 오류 없이 전달되도록 하는 데 사용되는 초기 시퀀스 번호를 설정한다. 마지막으로 오류 감지 및 복구에 중요한 연결 상태를 추적하는 수단을 제공한다.

 

취약점 : 3way 핸드셰이크는 서버 리소스를 묶어 서비스 거부(DoS) 공격을 유발할 수 있는 SYN 플러딩과 같은 특정 공격에도 취약하다. SYN 플러딩 공격에서 공격자는 서버에 많은 수의 SYN 패킷을 보내지만 최종 ACK 패킷을 보내서 핸드셰이크를 완료하지 않는다. 이로 인해 서버의 리소스가 부족해지고 응답하지 않게 될 수 있다.

TCP 세션 하이재킹과 같은 다른 공격도 3방향 핸드셰이크 프로세스의 취약점을 악용한다. TCP 세션 하이재킹 공격에서 공격자는 3방향 핸드셰이크 프로세스를 가로채고 자신의 패킷을 보내 클라이언트와 서버 간의 연결을 설정한다. 이를 통해 공격자는 두 장치 간에 전송되는 데이터를 가로채고 수정해버릴 수 있다.

이러한 유형의 공격으로부터 보호하려면 방화벽, 침입 탐지 및 방지 시스템, 기타 보안 메커니즘과 같은 보안 조치를 구현하는 것이 중요하다. 또한 SSL 또는 TLS와 같은 암호화 메커니즘을 구현하면 장치 간에 전송되는 데이터를 암호화하여 세션 하이재킹 공격으로부터 보호할 수 있다. 네트워크 트래픽을 정기적으로 모니터링하고 감사하면 심각한 피해를 입히기 전에 공격을 감지하고 예방할 수 있다.

 

 

 

연결 종료

 

TCP 4-way handshake는 TCP 연결 종료에 사용되는 프로토콜이다. TCP 4-way handshake의 과정은 다음과 같다. 

 

  1.  클라이언트가 연결 종료를 요청하는 FIN(Finish) 패킷을 보낸다.
  2. 서버는 FIN 패킷을 받고, 클라이언트가 데이터 전송을 모두 완료했음을 알리는 ACK 패킷을 보낸다.
  3. 서버는 데이터 전송을 모두 완료했음을 알리는 FIN 패킷을 보낸다.
  4. 클라이언트는 FIN 패킷을 받고, 연결 종료를 확인하는 ACK 패킷을 보낸다.

이렇게 TCP 연결이 종료된다. 

 

 

 

차이점

 

일단, 용도가 다르다. 3way는 연결 수립용이고 4way는 연결 종료용인게 다르다. 

 

TCP 3-way handshake에서는 클라이언트가 SYN 패킷을 보내고, 서버는 SYN-ACK 패킷을 보내고, 클라이언트는 ACK 패킷을 보내는 세 단계로 구성되는데, 이 과정에서 클라이언트와 서버는 연결 설정에 필요한 초기 순차번호(Initial Sequence Number, ISN)를 교환하고, 이후 데이터 전송에 사용될 수 있는 유효한 연결 상태로 열려있기 때문이다.

 

TCP 4-way handshake에서는 클라이언트가 FIN 패킷을 보내고, 서버는 ACK 패킷을 보내고, 서버가 FIN 패킷을 보내고, 클라이언트는 ACK 패킷을 보내는 네 단계로 구성된다. 이 과정에서 클라이언트와 서버는 연결을 종료하기 전에 보류 중인 데이터를 모두 전송하고, 상대방이 데이터를 모두 수신했음을 확인한 후에 연결을 종료한다.

 

TCP 4-way handshake에서는 TCP 3-way handshake와 다르게 TIME_WAIT 상태라는 것이 존재한다. 이 상태는 클라이언트와 서버가 연결을 해제한 후, 상대방으로부터 ACK 패킷을 제대로 수신하지 못한 경우에 발생한다. 이 때, 상대방으로부터 ACK 패킷을 제대로 수신하지 못한 경우, 클라이언트나 서버가 재전송한 패킷을 다시 수신하여, 연결을 다시 설정하게 된다.

 

이러한 상황을 방지하기 위해, TCP 4-way handshake에서는 TIME_WAIT 상태에서 일정 시간동안 대기하는 것이 필요한 것이다. 이 시간 동안, 클라이언트와 서버는 다른 연결 요청에 대한 응답을 보낼 수 없다. 그래서 TIME_WAIT 상태에서 대기하는 시간은 일반적으로 2MSL(Maximum Segment Lifetime)로 설정된다.

 


문의는 댓글 남겨주세요

728x90
반응형