네트워크 기초 TCP/IP: 파트 2

이 시리즈의 첫 번째 부분에서는 IP 주소, 포트, NAT 및 DHCP와 같은 네트워킹 기본 개념을 소개했습니다.

이번 포스팅글에서는 전편에 이어 TCP/IP의 기초, 즉 Transmission Control Protocol (TCP) 및 Internet Protocol (IP)을 소개하고자 합니다. 이들은 인터넷에서 통신에 가장 일반적으로 사용되는 프로토콜입니다.

좋은 네트워크 엔지니어 및 모의해커, 정보보안담당자가 되려면 이러한 프로토콜의 구조와 해부를 이해해야 합니다.
제 경험상 이 분야의 많은 전문가들은 TCP/IP의 기본 개념을 이해하지 못하고 있습니다. 따라서 TCP/IP를 이해한다면 분명 이들보다 우위에 서 있을 것입니다.

새로운 해킹 도구를 만들거나 네트워크 공격을 조사할 때는 이러한 프로토콜과 그들의 필드를 이해하는 것이 필수입니다. 그렇지 않으면 시간만 낭비하게 될 것입니다.

1. 프로토콜이란 무엇인가요?

프로토콜은 네트워크에서 데이터 통신을 위한 규칙과 규약의 집합으로, 다양한 컴퓨터와 디바이스들 간에 데이터를 주고받는 데 사용됩니다. 이것은 마치 인간 사회에서 사용하는 언어와 유사한 역할을 하며, 효율적이고 정확한 데이터 전송을 보장하기 위한 기준을 제공합니다. 프로토콜은 데이터의 형식, 전송 방법, 에러 처리 등을 포함하여 다양한 측면에서 상호 작용을 원활하게 합니다.

프로토콜은 네트워크 환경에서 의사소통의 합의된 방식을 정의합니다. 언어를 예로 들면, 서로 다른 언어를 사용하는 사람들이 의사소통하기 위해서는 공통된 언어와 문법 규칙이 필요합니다. 이와 마찬가지로 네트워크에서도 프로토콜은 데이터를 주고받는 방식을 일정한 규칙으로 정의하여 효율적인 데이터 교환을 가능케 합니다.

프로토콜은 주로 표준화된 문서 형태인 RFC(Request for Comments)를 통해 정의됩니다. 이 문서들은 전문가들이 협력하여 작성하며, 각 프로토콜이 어떻게 동작하며 어떤 데이터 형식을 사용하는지 등에 대한 세부 사항을 상세하게 설명합니다.

네트워크에서 사용되는 프로토콜은 다양한 목적에 맞게 설계되어 있습니다. 예를 들어 HTTP 프로토콜은 웹 페이지 요청과 응답에 사용되며, SMTP 프로토콜은 이메일 송수신에 사용됩니다. 이러한 프로토콜들은 네트워크 상에서 효율적인 데이터 전송과 상호 작용을 가능하게 합니다.

프로토콜의 중요성은 다양한 기기와 소프트웨어 간에 일관된 데이터 교환을 보장함으로써 네트워크 시스템의 안정성과 성능을 유지하는 데 있습니다. 프로토콜을 이해하고 준수함으로써 네트워크 관리자와 보안 전문가는 네트워크 통신을 효과적으로 관리하고, 데이터의 안정성과 보안을 유지할 수 있습니다.

2. IP (인터넷 프로토콜)

IP (인터넷 프로토콜)은 패킷이 인터넷을 통과할 때 해당 패킷의 출발지와 목적지 IP 주소를 정의하는 프로토콜입니다. 일반적으로 다른 프로토콜인 TCP와 함께 사용되며, 이로 인해 TCP/IP라는 용어가 자주 사용됩니다.

IP 패킷의 헤더를 자세히 들여다보면 야망있는 해커나 포렌식 조사자에게 유용한 정보를 찾을 수 있습니다.

ip 프로토콜

1행

  • 버전 (Version): IP의 버전을 나타내며, 주로 IPv4 또는 IPv6 중 하나를 선택합니다.
  • 헤더 길이 (IHL): IP 헤더의 길이를 나타냅니다.
  • 서비스 유형 (TOS): 이 패킷의 서비스 유형을 나타내며, 최소한의 지연, 최대한의 처리량, 신뢰성의 최대화, 비용의 최소화 등을 포함합니다.
  • 총 길이 (Total Length): IP 데이터그램의 총 길이를 나타내며, 데이터를 포함한 길이이거나 패킷 조각의 길이를 나타냅니다. 최대값은 65,535입니다.

2행

  • 식별자 (Identification): 각 패킷을 유일하게 식별하는 데 사용되는 필드입니다. 조각화된 패킷을 다시 조립할 때 중요한 역할을 합니다.
  • IP 플래그 (IP Flags): 이 필드는 패킷이 조각화되었는지 여부를 나타내며, ‘M’은 조각화된 패킷인지, ‘D’는 조각화되지 않은 패킷인지를 표시합니다. 이 필드를 조작하여 침입 탐지 시스템과 방화벽을 회피하는 데 사용될 수 있습니다. nmap 및 hping3와 같은 도구를 사용하여 패킷을 조작하여 침입 탐지 시스템과 보안 장치를 회피하는 방법을 확인할 수 있습니다. 또한 이 필드는 Window 필드와 함께 사용하여 발신자의 운영 체제를 식별하는 데에도 사용될 수 있습니다.
  • 조각 오프셋 (Fragment Offset): 패킷이 조각화된 경우에 사용되며, IP 헤더의 시작으로부터 조각을 다시 조립해야 할 위치를 나타냅니다.

3행

  • TTL (Time To Live): 패킷이 인터넷을 거치는 동안 몇 번의 ‘점프’를 할 수 있는지를 나타냅니다. 이는 운영 체제에 따라 다르며, 발신자의 운영 체제를 파악하는 데에 유용합니다.
  • 프로토콜 (Protocol): 이 필드는 IP와 함께 사용되는 프로토콜을 나타내며, 대개 6은 TCP, 1은 ICMP, 17은 UDP를 의미합니다.
  • 헤더 체크섬 (Header Checksum): 이 필드는 오류 검사를 위한 필드입니다. 헤더 데이터의 무결성을 확인하기 위한 체크섬(간단한 알고리즘)을 계산합니다.

4 & 5행

  • 출발지 / 목적지 (Source / Destination): 이 행은 IP 헤더의 가장 중요한 부분입니다. 출발지와 목적지 IP 주소를 나타냅니다.

6행

  • 옵션 (Options): 이 필드는 가변 길이이며 필요한 경우에 사용됩니다 (예상한 대로).
  • 패딩 (Padding): 이 필드는 헤더의 나머지 비트와 바이트를 필요한 경우에 채우는 데 사용됩니다.


3. TCP (전송 제어 프로토콜)

TCP (전송 제어 프로토콜)의 헤더는 야망있는 해커나 포렌식 조사자가 이해해야 할 많은 중요한 필드를 포함하고 있습니다.

tcp logical

1행

  • 송신지 포트 / 목적지 포트 (Source Port / Destination Port): 아마도 가장 중요한 부분인데, 이는 송신지와 목적지 포트입니다. 이러한 필드는 어느 포트에서 통신이 시작되었는지 (송신지)와 어느 포트로 통신이 가고 있는지 (목적지)를 결정합니다.

2행

  • 순서 번호 (Sequence Number): 순서 번호는 송신지 시스템의 TCP 스택에서 생성되며, 패킷이 도착할 때 패킷이 올바른 순서대로 정렬되도록 도와줍니다. 이것은 또한 MitM(Man-in-the-Middle) 공격을 방지하는 데에 중요합니다.

3행

  • 확인 번호 (Acknowledgement Number): 이것은 수신 시스템에서 다시 전송된 순서 번호의 에코입니다. 기본적으로 “순서 번호를 포함한 패킷을 받았다”는 뜻이며, 이를 통해 송신자는 패킷이 도착했음을 알 수 있습니다. 만약 일정 시간 내에 확인 번호를 받지 못하면 송신자는 패킷을 재전송하여 수신자가 패킷을 받았는지 확인합니다. 이렇게 함으로써 TCP는 신뢰성 있는 통신을 구현합니다. (UDP는 이렇게 하지 않으므로 신뢰성이 떨어집니다.)

4행

  • 네 번째 행에는 몇 가지 중요한 정보가 있습니다. 데이터 오프셋과 예약된 필드는 생략하고, 행 4 중앙의 8비트로 이동합니다. 이것들은 3-way 핸드셰이크와 nmap 스캔에서 유명한 플래그들입니다.

첫 두 비트인 CWR과 ECE는 이 수업 범위를 벗어납니다. 다음 여섯 비트는 URG, ACK, PSH, RST, SYN 및 FIN 플래그입니다. 이러한 플래그들은 TCP 통신 시 사용됩니다.

  • SYN: 새로운 연결 시작
  • FIN: 연결 정상적 종료
  • ACK: 패킷 확인. 3-way 핸드셰이크 이후 모든 패킷은 이 비트가 설정돼야 합니다.
  • RST: 연결 강제 종료, 패킷이 잘못된 포트 또는 IP로 도착했음을 통신에 사용됩니다.
  • URG: 다음 데이터가 긴급하다는 것을 나타냅니다.
  • PSH: 버퍼를 통과하여 데이터를 응용 프로그램으로 전송합니다.
  • Nmap 또는 Hping3과 같은 탐사 도구를 사용하여 이러한 플래그를 활용하여 시스템에서 어떤 플래그가 열려 있는지 확인할 수 있습니다. 이렇게 하면 보안 엔지니어나 해커는 대상 시스템에서 어떤 플래그가 열려 있는지 및 실행 중인 서비스를 확인할 수 있습니다.

5행

  • 체크섬 (Checksum): 이 필드는 간단한 알고리즘을 사용하여 오류를 확인합니다. 기본적으로 데이터의 무결성을 확인하는 것입니다.
  • URG 포인터 (URG Pointer): 이 필드는 긴급 데이터의 순서 번호에서 마지막 바이트를 가리킵니다. URG 플래그가 설정된 경우에만 이 필드를 활성화할 수 있습니다.

6행

  • 옵션 (Options): IP 헤더와 유사하게 TCP 헤더에도 선택적으로 사용되는 옵션 필드가 있으며 가변 길이입니다.
  • 패딩 (Padding): 패딩은 TCP 헤더를 32비트의 배수로 만들기 위해 필요합니다.

이것으로 네트워크 기초 TCP/IP 파트는 마치도록 하겠습니다.

감사합니다.

[Reference]
1. What is NAT (manageengine.com)
2. IP Address Classes – Networkel

[관련글] 네트워크 기초 TCP/IP: 파트 1 | Tech Hyeonker

댓글 남기기