포스트

패킷 스니핑 알아보기 1장 - 개념

앞서서

로스트아크 게임에 사용할 수 있는 데스크탑 프로그램을 만들기 위해 먼저 로스트아크의 패킷 분석을 해보아야 하지 않을까 싶다.

패킷 분석에 대해서도 아는게 전무하므로 배워가면서 알아보기로 했다.

패킷 분석

패킷 분석 = 패킷 스니핑 = 프로토콜 분석 등 여러 단어로 불리고 있다.

네트워크를 통해 전달되는 실제 데이터를 수집, 해석하며 이는 패킷 스니퍼를 통해 이루어진다.

패킷 스니퍼

패킷 스니퍼를 구분하는 여러가지 요소가 있다.

  • 지원되는 프로토콜 : 대부분은 공통 네트워크 프로토콜(IPv4, ICMP), 전송 계층 프로토콜(TCP, UDP), 응용 계층 프로토콜(DNS, HTTP)를 해석 가능. 모두가 공통적이진 않고 새로운 프로토콜은 지원하지 않는 경우도 있다.
  • 친 사용자 환경
  • 비용 : 무료, 유료
  • 커뮤니티
  • 운영체제 지원

동작 방식

세 가지 단계로 나뉜다.

  1. 수집 : 회선에서 원본 바이너리 데이터를 수집. 일반적으로 네트워크 인터페이스를 promiscuous 모드로 변경한다. 이 모드에서는 특정 네트워크 영역 내의 모든 네트워크 트래픽을 엿볼 수 있다.
  2. 변환 : 수집된 바이너리 데이터를 읽을 수 있는 형태로 변환시킨다. CLI 형태로 작동하는 패킷 스니퍼 대부분이 여기까지만 수행한다.
  3. 분석 : 수집된 데이터, 변환된 데이터를 실제적으로 분석하는 단계. 수집된 네트워크 데이터의 프로토콜 검증과 프로토콜 특징, 내용을 분석한다.

프로토콜

네트워크 상에서 서로 다른 시스템과 플랫폼이 통신하기 위해서 프로토콜 이라는 공통 규약을 사용한다.

일반적으로는 TCP(Transmission Control Protocol: 전송 제어 프로토콜), IP(Internet Protocol: 인터넷 프로토콜), ARP(Address Resolution Protocol: 주소 결정 프로토콜), DHCP(Dynamic Host Configuration Protocol: 동적 호스트 설정 프로토콜) 등이 있다.

프로토콜은 패킷이 어떻게 라우팅 되는지, 연결을 어떻게 초기화하는지, 데이터 수신을 어떻게 확인하고 응답하는지를 규정하기 위해 동작한다.

프로토콜에 따라 복잡도는 다양하지만 대부분의 고려사항이 있다.

  • 연결 초기화(시작) : 서버-클라이언트가 연결을 시작하는가? 어떤 정보를 통신 전에 미리 교환해야 하는가?
  • 연결 특성 협의 : 통신을 암호화할 것인가? 어떻게 호스트들 간에 암호화 키를 전달할 것인가?
  • 데이터 형식 : 패킷에 포함된 데이터를 어떻게 정렬할 것이며, 어떤 정렬이 이것을 수신한 장치에 의해 처리된 데이터인가?
  • 오류 탐지와 교정 : 패킷이 목적지까지 가는데 너무 오래 걸리면 어떻게 되는가? 짧은 시간내에 서버-클라이언트 간에 통신이 설정되지 않았다면 클라이언트는 어떻게 복구할 것인가?
  • 연결 종료 : 어떻게 호스트는 통신이 끝났다는 것을 다른 호스트에게 알릴 것인가? 통신을 정상 종료하기 위해 마지막으로 어떤 정보를 전송할 것인가?

OSI 7계층 모델

이제는 산업 표준으로 추천되지 않고 프로토콜 개발자들도 정확하게 이 모델을 따르도록 하지도 않는다. 미국방성 모델(DoD 모델. 다양한 모델들이 있지만 TCP/IP 프로토콜 4계층 이라고도 부르기도 하고 구분하기도 하고 되게 헷갈리게 있는 포지션인듯)을 더 선호하는 사람들도 많다. 하지만 이 모델은 매우 쉽게 네트워크 통신을 이해할 수 있게 해준며 서로 다른 계층에서 이루어지는 상호작용이 네트워크 문제에 대한 개념을 갖게 된다는 것을 알 수 있다.(라우터 문제는 3계층 문제, 소프트웨어 문제는 7계층 문제로 인식되는 것 처럼)

OSI 7계층 모델, DoD 모델

각 계층의 특정 기능

응용 계층(7계층)
OSI 모델의 최상위 계층인 응용 계층. 사용자에게 네트워크 자원에 대한 접근을 제공한다. 네트워크 활동들에 대한 모든 기본적인 인터페이스를 제공한다. 사용자에게 보이는 유일한 계층이다.
표현 계층(6계층)
응용 계층에 의해 전달받은 데이터를 읽을 수 있는 형식으로 변환한다. 응용 계층으로부터 전송받거나 전달되는 데이터의 인코딩과 디코딩이 이루어진다. 또한 안전한 데이터 사용을 위해 몇가지 암호화와 복호화 형식도 가지고 있다.
세션 계층(5계층)
두 대의 컴퓨터 사이의 세션이나 다이얼로그(dialogue. 대화)를 관리한다. 모든 통신 장비를 연결하고 관리하며 종료한다. 또한 순간적으로 연결이 끊어지는것을 막고 호스트 사이의 연결을 적절하게 종료시키기 위한 기능과 연결의 방향성 설정(단방향, 양방향)을 담당한다.
전송 계층(4계층)
신뢰성 있는 데이터 전송이 가장 중요한 목적인 계층이다. 이러한 전송이 복잡하고 불편할 수 있지만 가장 중요한 계층 중 하나다. 흐름 제어, 분할, 재조립, 오류 관리를 포함한다. 지점과 지점 간의 오류가 없음을 보장해준다. Connection-Oriented(연결 지향적인) 프로토콜, Connectionless(비연결 지향적인) 프로토콜을 제공하며, 방화벽과 프록시 서버가 이 계층에서 동작한다.
네트워크 계층(3계층)
가장 복잡한 계층 중 하나로, 물리적인 네트워크 사이의 라우팅을 담당한다. 네트워크 호스트의 논리적인 주소(ex. IP주소)를 관리하고 패킷을 분할해 프로토콜을 식별하는 기능, 오류 탐지 같은 몇가지 기능을 담당한다. 라우터가 이 계층에서 동작한다.
데이터 링크 계층(2계층)
물리적인 네트워크 사이의 데이터 전송을 담당한다. 가장 중요한 목적은 물리적인 장비를 식별하는 데 사용되는 address schema(주소 지정 체계)와 데이터가 변조되지 않았음을 확증하기 위한 오류 확인을 제공하는 것이다. 브릿지와 스위치가 이 계층에서 동작하는 물리적 장비들이다.
물리 계층(1계층)
OSI 모델의 최하위 모델인 물리 계층. 네트워크 데이터가 전송될 때 사용되는 물리적 매개체다. 전압, 허브, 네트워크 어댑터, 리피터, 케이블 명세서 등을 포함해 모든 하드웨어의 물리적이고 전자적인 특성을 정의한다. 연결을 설정하고 종료하며, 공유된 통신자원을 제공하고, 아날로그와 디지털 간 변환을 담당한다.

계층별 대표적인 프로토콜

계층프로토콜
응용HTTP, SMTP, FTP, Telnet
표현ASCII, MPEG, JPEG, MIDI
세션NetBIOS, SAP, SDP, NWLink
전송TCP, UDP, SPX
네트워크IP, IPX
데이터 링크Ethernet, Token Ring, FDDI, AppleTalk

데이터 캡슐화

데이터가 어떻게 OSI 모델 계층들 사이에서 전송되는지 알아보자. 최초의 데이터는 시스템의 응용 계층에서 시작해 OSI 모델 계층을 내려와 네트워크상으로 전송된다.

데이터 송신 시스템은 7계층부터 아래 계층으로 차례대로 전달된다. 데이터 수신 시스템은 물리 계층에서 데이터를 가져와서 응용 계층까지 각 계층을 순서대로 거쳐 위로 전달한다.

OSI 모델의 각 계층의 다양한 프로토콜 서비스들은 상호의존적이지 않다. 한 계층에 있는 프로토콜이 특정 서비스를 제공하면 다른 계층의 프로토콜은 이와 동일한 서비스를 제공하지 않는다. 비슷한 목표와 기능을 가질 순 있지만 약간 다르게 작동한다.

데이터 송신 컴퓨터와 데이터 수신 컴퓨터상의 동일 계층에 있는 프로토콜은 상호보완적이다. 예를 들어 데이터 송신 시스템에 있는 특정 계층에서 데이터를 암호화 한다면 수신 시스템의 동일 계층에서 암호화된 데이터를 복호화하는 프로토콜이 존재한다.

OSI 모델에서 각 계층은 바로 위, 아래에 있는 계층과 통신한다. 예를 들어 2계층은 1, 3계층으로 데이터를 주고 받을 수 있다. 다른 계층의 프로토콜들이 서로 통신할 때 데이터 캡슐화(Data Encapsulation)를 이용한다. 각 계층은 다른 계층과 통신할 때 데이터에 특정 정보가 들어있는 헤더(Header), 푸터(Footer)를 추가한 후 다른 계층으로 전달한다. 예를 들어 Session Layer 에서 Transport Layer 로 데이터를 보낼 때 데이터 앞에 헤더 정보를 더한 후에 보낸다.

PDU(Protocol Data Unit)는 OSI 모델의 정보 처리 단위로 캡슐화(Encapsulation) 과정에서 만들어진다. 하위 계층으로 전달될 데이터에 헤더와 푸터가 더해져서 PDU 가 생성된다. 데이터가 OSI 모델의 하위 계층으로 내려가면서 PDU 에는 다양한 프로토콜에 의해 헤더와 푸터가 더해진다. 마지막 Physical Layer 에서 PDU 는 최종형태로 변하며, Physical Layer 가 다른 컴퓨터에 데이터를 보내는 접점이 된다. 데이터를 수신한 컴퓨터에선 OSI 계층을 올라가며 PDU 로부터 프로토콜의 헤더와 푸터를 분석한다. PDU 가 OSI 의 제일 마지막 계층에 도달하면 원본 데이터만 남는다.

패킷(Packet)이라는 용어는 OSI 모델의 모든 계층으로부터 헤더와 푸터 정보를 포함한 전체 PDU 를 말한다.

한 시나리오를 가정해 Data Encapsulation 과정을 알아보자. Session Layer 나 Presentation Layer 는 제외한다. 우리는 google.com 에 접속하려 한다. 과정의 시작은 클라이언트 컴퓨터(발신지, Source)에서 서버 컴퓨터(목적지, Destination)로 요청 패킷을 생성해야 한다. TCP/IP 통신 세션이 이미 시작됐다고 가정한다. 아래의 그림은 Data Encapsulation 과정을 보여준다.

data encapsulation 아이콘 출처(클라이언트1, 서버2)

Application Layer 에서 웹 사이트를 브라우징하고, 사용되는 프로토콜은 HTTP 이다. google.com 의 index.html 파일을 다운로드하게 명령을 실행시킨다. 이를 위해 Destination 으로 패킷을 전달한다. 패킷의 데이터는 Transport Layer 의 스택으로 전달된다.

HTTP 는 TCP 위에서 TCP 를 활용하는 Application Layer 프로토콜이다. TCP 는 패킷의 신뢰성 있는 전달을 보장하기 위해 사용되는 Transport Layer 프로토콜이다. TCP 헤더가 생성되며 이 TCP 헤더는 Sequence Number 와 패킷에 추가되는 다른 데이터를 포함하며 패킷이 제대로 전달됐는지를 보장한다.

OSI 모델의 탑다운 설계로 인해 하나의 프로토콜이 다른 프로토콜의 위에 “앉아있다” 고 말한다고 한다. HTTP 같은 Application Layer 프로토콜은 특정 서비스를 제공하는데, 서비스의 전달을 위해 TCP 에 의존한다. 그 외에도 DNS 가 UDP 위에, TCP 가 IP 위에 앉아있다고도 한다.

TCP 가 IP 로 패킷을 전달하고, IP(3계층 프로토콜) 는 패킷의 논리 주소 지정을 책임진다. 논리 주소 지정 정보를 포함하는 헤더를 생성해 Data Link Layer 의 Ethernet 을 따라 패킷을 전달한다. Ethernet 주소(MAC:Media Access Control 주소로도 불림)들은 Ethernet 헤더에 저장된다. 패킷의 조립 완료 후에 Physical Layer 로 전달되어 네트워크를 통해 0과 1로 전송된다.

네트워크 케이블 시스템을 따라 Google 웹 서버에 도착하면, 웹 서버는 아래 계층부터 다시 패킷을 읽기 시작한다. Data Link Layer 에서 패킷이 Google 웹 서버를 향할 수 있게 사용된 NIC(Network Interface Controller)에 대한 Ethernet 주소 지정 정보를 포함한 내용을 읽는다. 이후 2계층 정보가 벗겨지고 3계층 정보가 처리된다.

IP 주소 지정 정보는 적절한 주소 지정을 보장하고 패킷이 단편화(Fragmentation)되지 않게 2계층 정보와 동일한 방법으로 읽어진다.

4계층 TCP 정보는 패킷이 순서대로 도착했음을 보장하기 위해 읽혀지며, 4계층 헤더 정보는 벗겨지고 웹 서버 어플리케이션에 전달될 수 있도록 Applcation Layer 데이터만 남긴다.

이후 서버는 TCP ACK(Acknowledgement, 확인 응답) 패킷을 전달한다. 클라이언트는 이 요청이 index.html 파일 다음에 수신됐음을 알게된다.

모든 패킷은 어떤 프로토콜이든 위와 같이 조립되고 처리된다. 하지만 네트워크 상의 모든 패킷이 Application Layer 프로토콜로부터 생성된 것은 아니다. 2,3,4계층 프로토콜의정보만 들어있는 패킷도 분명 존재한다.


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.