경희대학교 장대희 교수님의 정보보호 수업을 기반으로 정리한 글입니다.
Protocol
Protocol은 특정 분야에서의 기술적인 용어가 아닌 범용적인 단어로, 절차를 뜻한다.
사전적인 의미로는 무언가를 할 때 어떤 절차를 거쳐 소통을 할 거냐, 이런 게 프로토콜이다.
컴퓨터 시스템에선 컴퓨터와 컴퓨터가 어떻게 소통하는지에 대해 정의하는 절차를 프로토콜이라고 한다.
※ 함수를 호출하는 방법론도 프로토콜 중 하나라고 볼 수 있다.
The three elements of a protocol
Syntax
어떤 규칙을 가치고 소통, 즉 프로토콜이 오갈 것이냐에 대한 것을 의미한다.
Semantics
Syntax의 어떤 부분에, 어떤 의미를 부여(해석)할 것이냐에 대한 것을 의미한다.
ex) 에러가 발생했을 때 어떻게 대응을 할 것인지, 통신을 할 때 서로 순서나 타이밍을 어떻게 동기화할 것인
Timing
언제, 얼마나 빠르게 정보라 서로 오갈(소통) 것이냐에 대한 것을 의미한다.
Functions of a protocol
Addressing
two entities 간에 통신을 할 때 주소를 지정해야 하는 것을 의미한다.
네트워크 통신에서 통신을 하고자 하는 시스템이 어떻게 되느냐에 따라 주소 체계가 존재하고,
이 주소 체계를 정의하는 것과 그 주소를 어떻게 해석할지 알려주는 것이 프로토콜 안에 포함되는 개념이다.
물론, 상대방만 존재하는 경우, 즉 내가 통신을 하고자 하는 상대방이 무조건 딱 하나의 eneity로 정해져 있으면,
주소라는 개념이 사실 필요가 없어, 찾아간다는 개념이 없다.
Sequence Control
프로토콜마다 Sequence Contorl 개념이 있는 경우도 있고, 없는 경우도 있다.
Sequence를 관리하는 프로토콜이 더 복잡하다.
대표적으로 TCP와 같이 Sequence를 관리하는 프로토콜 같은 경우는 서로 통신을 하며 데이터가 오갈 때 순서를 신경쓴다.
내가 원하는 정보가 상대방한테 도착을 했으면 끝, 이게 아니라 여러 개의 정보를 보내는데 그 도착하는 순서가 어떻게 됐느냐가 중요하여 관리를 한다.
반대로 Sequence Conrol이 없는 것의 대표적인 게 UDP가 있다.
connection-oriented communication에서 이런 Sequence Control을 한다.
Fragmentation & Reassembly
네트워크로 전달하고자 하는 정보가 너무 클 때에는 한 번에 전달될 수 없기에, 이 데이터들을 쪼개서 여러 번 전달할 수밖에 없다.
그리고 이렇게 쪼개서 여러 번 보내면, 받은 쪽에서 받은 순서대로 다 맞춰 재조립을 해야한다.
이때 문제가, 조각을 내서 인터넷이 불안정한 네트워크로 데이터를 보내게 되면,
먼저 보낸 데이터가 라우팅에서 한참 돌고, 오히려 그 이후에 보낸 데이터가 지름길로 먼저 도착하는 일이 일어날 수 있다.
그래서 보내는 데이터에 순번을 매기는 Sequence Control을 통해 무슨 데이터가 먼저 도착해야 되었는지 파악하여 다시 재조립을 하고 중간에 빠진 게 있는지에 대해서도 신경을 써야한다.
이렇게 신경 써야 하는 네트워크의 communication 이슈가 많다.
때문에 이런 걸 관리하는 어떤 체계와 규약이 필요하고, 이를 통신에서 프로토콜이라고 한다.
⭐ Encapsulation
캡슐화는 패킷과 네트워크, 인터넷, 통신, 이런 것을 이해함에 있어 굉장히 중요하다.
때문에 패킷이 캡슐화되고 디캡슐화되는 것과 OSI 7계층 레이어의 단계가 어떻게 되는지 잘 알아야 한다.
통신에서 정보를 상대방한테 전달해 주는 메커니즘은 레이어와 단계가 아주 많다.
기본적으로 인터넷을 생각했을 때, 내가 카카오톡에서 채팅으로 메시지를 보내면, 그 메시지에는 TCP 헤더와 IP 헤더가 추가된다. 그런 다음, 이 데이터는 내 컴퓨터나 데스크톱의 무선 랜 카드 또는 유선 랜 크다로 전달된다. 이후, 케이블이나 와이파이 RF를 통해 공유기에 도달하고, 공유기를 거쳐 웹 망을 쭉 타고 들어가 내가 가입한 인터넷 서비스의 백본망 라우터로 데이터가 전달되면, 라우터는 IP 헤더를 확인하여 목적지를 판단하고, 이를 기반으로 적절한 라우터로 계속해서 데이터를 전송한다. 이렇게 여러 개의 라우터를 거친 후, 상대방의 컴퓨터 쪽의 공유기 혹은 통신 단말기에 도착한다. 이는 다시 운영체제로 전달되어, 운영 체제에서 TCP 및 IP 프로세싱을 고쳐 분석한 뒤, 어느 애플리케이션으로 전달해야 하는지 판단한다. 이 과정에서 카카오톡 애플리케이션이 확인되면, 해당 앱의 메모리 버퍼로 데이터를 전달하여 상대방이 메시지를 확인할 수 있게 된다.
이 과정을 살펴보면 캡슐화와 디캡슐화가 굉장히 많이 일어나게 된다.
통신에 있어서 아래 계층으로 갈수록 점점 데이터에 추가적으로 붙는 헤더가 늘어나게 되고,
OSI 7계층에서 상위 계층으로 올라갈수록 헤더가 벗겨지게 된다.
※ 관련 개념 정리
- 백본망(Backbone Network): 인터넷이나 대규모 네트워크의 중심이 되는 고속 데이터 전송망을 의미한다.
- TCP 프로세싱: 데이터가 잘 왔는지 확인하고, 순서대로 데이터 재조립하는 것을 의미한다.
- IP 프로세싱: 누가 보냈고, 어디로 가야 하는지 주소를 확인하는 것을 의미한다.
Connection Control
- 데이터를 주고받기 전에 연결을 설정하고, 통신이 끝나면 연결을 해제하는 과정을 의미한다. (hand shake)
Flow Control
- 데이터가 오가는 속도 차이를 조절해 데이터가 너무 빠르거나 느리지 않게 맞추는 기능을 의미한다.
Error Control
- 전송 중 오류가 발생했을 때 재전송 요청을 하거나 손상된 데이터 검출 및 복구하는 기능을 의미한다.
Synchronization
- 송신자와 수신자의 데이터 전송 타이밍을 맞춰서 올바른 순서로 데이터를 처리하는 기능을 의미한다.
Multiplexing
- 하나의 네트워크 연결에서 여러 개의 데이터 흐름을 동시에 처리하는 기능을 의미한다.
Transmission Service
- 데이터를 안전하고 효율적으로 송신자에서 수신자로 전달하기 위해 제공되는 네트워크 서비스를 의미한다.
Network Layer Structure
7 Layers of OSI

▶ OSI 7계층
5, 6, 7계층은 7 응용 계층 하나로 묶어서 보는 경우가 일반적이다. (OSI 5계층이라고 하기도 함)
※ 네트워크를 계층화하는 이유는 여러 가지 면에서 효율성이 있기 때문이다.

▶ OSI 7계층 구조에 대응하는 프로토콜
- Application Layer: 어플리케이션 내부 데이터를 어떻게 해석할 것인지에 대한 계층이다.
- 응용 프로그램 범위 안에서 일어나는 네트워크 통신에 대한 모든 것이 해당한다.
- 각 응용 프로그램별 통신 규칙(e.g., 카톡만의 규칙)이 존재하여, 어플리케이션마다 7계층이 다 다르다. 즉, UDP든 TCP든 소켓을 만들고, 소켓에 패킷이 올라오면 이를 메모리 버퍼에 가져와 해석하는데, 그 해석이 프로토콜마다 다르다.
- Transport Layer: 어플리케이션을 찾기 위한 계층이다.
- Port 번호는 하나의 장치 내에서 실행되는 특정 애플리케이션을 구분하는 역할을 한다.
- Network Layer: 장치(OS)를 찾기 위한 계층이다.
- 운영체제에서 IP 주소는 하나의 장치를 식별하는 역할을 한다. 즉, 같은 장치에서 실행되는 모든 애플리케이션은 동일한 IP 주소를 사용한다.
- 여러 라우터, 스위치, 허브 등 여러 장비들을 거치는 통신을 커버하는 계층이다.
- Data link Layer: 물리적으로 직접 붙어있는 두 장치 사이에서의 통신을 잘하기 위한 계층이다.
- Physical Layer: 데이터 링크 계층에서 통신을 함에 있어서, 물리적인 방법이 뭔지 정의하는 계층이다.
※ 코드에서 소켓을 생성한 후, 바인딩 과정을 거쳐 적절한 포트 번호와 IP 주소를 할당한다.
TCP/IP layer 4

▶ OSI 7계층과 TCP/IP 4계층
Physical Layer
Physical Layer는 정보보안 관점에서 무선의 경우가 훨씬 중요하다. 또한, 어떤 장비를 해킹하거나 통신을 보안 분석할 때 하드웨어를 분해하여 그 안에서 정보를 추출해야 될 때가 있는데, 이 경우 물리 계층에 대한 이해가 많이 필요하다.
Serial communication
한 컴퓨터 안에서, 혹은 전자기판 하나 안에서 칩이 여러 개가 있으면, 이 칩에서 저 칩으로 어떻게 데이터를 줄 거냐, 혹은 이 PCB 보드(마더 보드)에서 저 PCB 보드로 어떻게 정보를 주고받을 거냐 하는 통신 네트워크, 또는 무선 통신 기기 간에 이루어지는 통신들을 serial communication이라고 한다.

▶ UART Communication
- 처음에 어떤 전기적 신호가 오면 이때부터 해석을 시작할 거고, 어떤 전기적 전압이 어떻게 변하면 그것을 0과 1로 해석할 거고, 이런 것들을 명세하는 프로토콜이다.
UART Communication은 제일 단순한 것 중 하나이기에 정보보안 쪽에서 많이 언급되는 프로토콜 중 하나이다. 무언가를 뜯어보거나 할 때 제일 기본적이고 단순한 Serial Communication을 썼다 하면 거의 UART Communication이기에, UART를 땄다, 이런 표현도 많이 한다. 때문에 칩을 분석하거나 임베디드 장비에 대해 보안 분석할 때 많이 봐야 하는 통신 프로토콜 중 하나이다.
Repeater

▶ Repeater
정보를 보내려면 결국 전기 신호가 전달이 되어야 하는데, 전기 신호를 전달함에 있어서 전력 문제, 파워 문제들이 있다.
때문에 안정적인 통신이 되기 위해 보완하여, 증폭하는 네트워크 장비가 필요한데, 이를 Repeater라고 한다.
RF Communication

▶ Modulation / Demodulation
- Modulation (변조): 내가 보내자고 하는 정보에 대해 전자파 신호로 변환하는 과정이다.
- Demodulation (복조): 전자파 신호에서 정보를 추출하는 과정이다.
정보가 타기 전 기본 전파인 Baseband Signal에 정보를 얹으면,
정보가 탑승된 전파 신호가 생기고, 이를 주고 받으며 통신이 이루어진다.
Modulation / Demodulation의 대표적인 3가지 방법론
- AM (진폭): 파동의 높낮이에 정보의 의미를 부여한다. -> 파동의 높이가 높으면 1, 낮으면 0
- FM (주파수): 파동이 1초에 얼마나 빨리 움직이는지에 정보의 의미를 부여한다. -> 파동이 빨리 요동치면 1, 천천히 움직이면 0
- PM (위상): 파동의 움직임에는 순서가 있는데, 이를 바꿔가며 정보의 의미를 부여한다. -> 파동이 올라가야 할 타이밍에 내려가면 1, 내려가야 할 타이밍에 올라가면 0
※ RF 통신: Radio Frequency 통신으로, 무선 통신을 의미한다.
Hub

▶ 허브(더미 허브)와 스위치 비교
- 허브: 들어온 신호를 모든 포트로(broadcasting) 그대로 뿌리는 단순한 장치, (2계층 정보 해석 필요 X)
- 스위치: 목적지 MAC 주소를 확인해 필요한 포트로만(unicast) 데이터를 전달하는 스마트한 장치 (2계층 정보 해석 필요)
허브와 스위치는 네트워크의 기본 장비이다. 와이파이가 대중적으로 쓰이지 않던 옛날엔, 여러 개의 컴퓨터들을 묶거나 네트워크 구성을 하기 위해 허브 또는 스위치를 많이 이용했다.
※ MAC 주소: 같은 네트워크 내 (logical) 장치를 식별하기 위해 2계층에서 사용된다.
Data Link Layer
Layer 2: Data Link Layer

▶ MAC 주소 확인 (ipconfig 명령어)
※ 네트워크 어댑터: 컴퓨터와 네트워크(유선 또는 무선)를 연결해주는 2계층(MAC 주소, 물리 주소) 장치이다.
Data Link Layer and MAC Address
MAC address

▶ MAC 주소의 형태
- OUI (Organizationally Unique Identifier): MAC 주소의 앞(Prefix) 3바이트로, 장치 제조업체를 식별하는 고유 ID이다.
- Host Identifier: MAC 주소의 뒤(Suffix) 3바이트로, 특정 제조업체가 개별 장치에 할당하는 고유 값이다.
Protocols of the Data Link Layer
Ethernet
대표적인 Data Link 계층의 프로토콜인 Ethernet은 한 번에 주고받을 수 있는 데이터의 크기가 최대 1518바이트로 정해져 있다. 이렇게 계층들마다 소통할 때 주고받을 수 있는 데이터의 크기가 제한되어 있어, 데이터를 쪼개고 재조립하는 과정이 필요하고, 그래서 이 과정이 원활하게 이루어지도록 규칙을 정해주는 프로토콜이라는 게 있어야 한다.

▶ 이더넷의 패킷 구조 (32비트 = 4바이트)

▶ 이더넷 패킷의 내용
이더넷 패킷의 경우엔 데이터 링크 계층에 대한 정보를 다루기에, 여기서 중요한 건 MAC 주소 정보이다.
예를 들어, 무선 랜카드든 유선 랜카드든, 그런 랜카드 드라이버(소프트웨어)가 이 패킷의 MAC 주소와 자신의 MAC 주소 일치 여부를 판단해 처리하거나 버리는 판단을 한다.
자신이 처리해야 되는 패킷이 맞다는 판단이 되면 이후부터 패킷을 파싱하고 해석하기 시작한다.
이때, 대부분의 패킷들의 끝엔 CRC라는 값이 붙는다.
통신에선 항상 오류가 있을 수 있어, 이를 체킹하는 시스템이 있다. 이런 오류 체킹 방법 중 가장 기본적인 것 중 하나가 CRC check이다. CRC는 해시 계산을 하는 것으로, 패킷의 CRC 부분을 제외한 나머지에 대해 해시 계산을 한 결과가 뒤에 붙은 4바이트 CRC와 동일한지 점검하는 것이다.
※ 랜카드 e.g., 무선 마우스 연결 잭
Data Link Layer Devices
Bridge
주로 랜들을 서로 연결하는 장치이다. (MAC 주소)
Switch
랜 및 장치들을 서로 연결하며, Bridge보다 고도화된 장치이다. (MAC 주소)

▶ 브리지와 스위치
Network Layer
Network Layer Protocols
Layer 3: Network Layer
IP 주소를 사용하여 LAN을 넘어 소통할 수 있게 하는 계층이다.

▶ IP 패킷 구조 (IPv4)
TL에 16bits를 쓰고 있기에, 이론적으로 2^16bytes 이상의 데이터는 패킷 속에 들어갈 수 없다.
이때 상위 계층의 데이터를 하위 계층이 감싸는 캡슐화 구조를 띄므로,
IP 헤더 다음 4계층 데이터의 헤더가 와야 하기에, IP 헤더 DATA 영역의 가장 앞에 4계층 데이터의 헤더가 와야 한다.
IP (Internet Protocol)


▶ IP 패킷의 내용
- Protocol: 3계층 위에 올라탈 4계층 프로토콜을 정의한다.

▶ IP 주소 클래스
- 네트워크 주소: 네트워크를 표현하는 부분으로, 호스트가 속한 특정 네트워크를 식별하는 데 사용된다.
- 호스트 주소: 호스트를 표현하는 부분으로, 특정 호스트를 식별하는 데 사용된다.
IP 주소는 32비트로, 200.42.62.32 이런 식이다.
이때 각 숫자는 32비트를 8비트씩으로 쪼갠 것이기에, 8비트가 가질 수 있는 가장 큰 unsigned integer 값인 255를 넘을 수 없다.
클래스풀 주소 체계
무조건 호스트 주소 공간을 크게 할당하면?
- 호스트가 할당되지 않은 다수의 IP 주소가 낭비
무조건 호스트 주소 공간을 작게 할당하면?
- 호스트가 사용할 IP 주소가 부족
-> 이런 고민을 해결하기 위해 생겨난 개념이 바로 IP 주소의 클래스(class)이다.
클래스 (class)
네트워크 크기에 따라 IP 주소를 분류하는 기준으로, 필요한 호스트 IP 개수에 따라 클래스를 달리 선택하여 네트워크 크기 조정이 가능하다.
이러한 클래스를 기반으로 IP 주소를 관리하는 주소 체계를 클래스풀 주소 체계(classful addressing)라고 한다.

▶ 클래스
- D 클래스: 그룹 통신을 위한 클래스
- E 클래스: 실험 및 연구용를 위해 예약된 클래스
이때, 실제론 호스트의 주소 공간을 모두 사용할 수 있는 것은 아니다.
호스트 주소가 전부 0인 IP 주소
- 해당 네트워크 자체를 의미하는 네트워크 주소로 사용
호스트 주소가 전부 1인 IP 주소
- 브로드캐스트 주소로 사용
-> 클래스별 할당 가능한 호스트 수는 '이론적으로 할당 가능한 호스트 수 - 2' 이다.
※ 네트워크 주소의 크기는 곧 LAN의 규모를 나타낸다. 예를 들어, C 클래스 IP 대역의 주소를 사용하는 LAN은 작은 규모의 LAN이고, B 혹은 A 클래스 대역을 사용하는 LAN은 호스트들이 많이 모인 거대한 규모의 LAN이다.

▶ 네트워크 클래스의 구분
LAN이란?
LAN은 가까운 거리에 위치한 컴퓨터들을 작은 규모로 연결하는 근거리 네트워크를 의미하며, 인터넷을 공유하여 쓰는 모든 기기들은 LAN으로 연결되어 있다고 볼 수 있다. 이러한 LAN 구축하는 방법은 거의 이더넷과 와이파이이다.
LAN을 구성했다는 것은 2계층에서 직접 1:1 통신을 라우팅을 하지 않고 할 수 있다는 의미이다. LAN과 LAN 사이의 통신을 하려면 반드시 라우터를 거쳐야 하는데, 라우팅을 하지 않아도 2계층의 MAC 주소로 서로 통신을 할 수 있는 네트워크의 구성이 하나의 LAN이라고 볼 수 있다.
이때, 이 LAN 안에서의 보안 문제와 LAN 외부의 보안 문제는 좀 다르다. 예를 들어, ARP 스푸핑(Spoofing)이라는 해킹 기법은 LAN 안에서만 할 수 있는 공격에 해당한다. 그래서 라우팅을 하여 LAN 바깥으로 나가는 순간 네트워크 상황이 달라져 보안 관점에서 전혀 다른 상황이 된다.
때문에 LAN 내부와 LAN 외부를 구분할 수 있어야 한다. LAN 안에 있는 기기들끼린 MAC 주소를 통해 통신 할 수 있으나, LAN을 떠나는 순간 Data Link 계층의 MAC 주소는 의미를 상실한다.
※ ARP spoofing(속이기): 공격자가 자신의 MAC 주소를 다른 IP 주소의 MAC인 것처럼 속여, 데이터를 가로채거나 중간자 공격을 수행하는 기법이다.
- ARP (Address Resolution Protocol): IP 주소를 MAC 주소로 바꿔주는 프로토콜이다.
같은 LAN 안에 있는 컴퓨터들끼린 보통 같은 IP 클래스를 갖는 경우가 많다. 예를 들어, C 클래스 IP 대역의 경우 공유기 안에서 공유되는 경우가 아주 많다. 즉, 단순히 무작위로 IP 주소를 정하는 것이 아니라, 같은 클래스 대역의 IP 주소를 설정한다.
때문에, 근거리 LAN에 있는 컴퓨터들의 IP 주소의 네트워크 주소는 동일하게 하고 마지막 호스트 주소만 서로 다르게 해준다.
이처럼 IP 주소들은 서로 가까이 있는 기기들을 공통으로 묶어서 관리한다.
※ 네트워크 마스크(Subnet Mask): IP 주소에서 네트워크 주소, 호스트 주소를 구분해주는 기준선의 값이다.
- 서브넷 마스크 = 24비트 -> C 클래스 대역
IPv6 (128 bits)
IPv4 네트워크에서 유니크하게 식별할 수 있는 IP 주소는 2^32개이다. 세계 인구가 1인 1통신 단말기를 가지고 있다고 하면, 얘네에게 다 유니크한 IP 주소 할당이 안 되기에, 기본적으로 IPv6를 만들어 이를 확장시켰다. (IPv4: 32비트 -> IPv6: 128비트)
최근에는 IPv6와 IPv4가 많이 호환되지만 여전히 IPv4를 주로 사용한다.

▶ IPv4와 IPv6 헤더 비교
ARP (Address Resolution Protocol) - Important
ARP Spoofing이라는 공격을 이해하기 위해 꼭 알아야 하는 부분이다. (보안과 밀접한 관련성)
ARP는 IP 주소와 MAC 주소를 해석하기 위한 Protocol로,
LAN 안에서 MAC 주소를 알아내고 싶을 때, 이를 알아낼 수 있는 프로토콜이다.
이때, LAN을 떠나면 ARP는 아무 의미가 없다.
이러한 ARP는 같은 LAN에 있는 모든 device들에게 broadcast 해서 패킷을 다 뿌려, 특정 IP 주소에 해당하는 device가 자신의 MAC 주소를 응답하도록 요청한다. 그러면 해당 IP 주소를 가진 장치가 자신의 MAC 주소를 broadcasting을 보낸 장치의 MAC 주소에게 응답함으로써 IP 주소와 MAC 주소 간의 매핑이 이루어진다. 이를 통해 장치들은 동일 네트워크 내에서 MAC 주소 기반으로 통신할 수 있게 된다.

▶ ARP 패킷 구조

▶ ARP 패킷의 내용
이러한 ARP는 도청 관련해서 보안에서 중요한 문제가 있다. 왜냐면 broadcasting에 대해 거짓말로 응답하는 것을 막을 방법이 없기 때문이다. 이런 이유로 LAN 안에서의 도청은 굉장히 쉽다. (암호화 필요)
ARP 프로토콜에 보안을 적용시킬 수 있지만 현실적으로 반영되어 있는 경우는 여러 이유로 인해 거의 없다.
ICMP (Internet Control Message Protocol)
IP의 신뢰할 수 없는 비연결형 통신
IP는 데이터를 보낼 때 상대가 제대로 받았는지 확인하지 않고,
연결 없이 일방적으로 전송하는 신뢰하지 않는 비연결형(비신뢰성) 통신 방식이다.
IP의 전송 특성을 보완하는 ICMP
IP 패킷 전송 과정에 대한 피드백 메시지를 제공한다. (전송 오류, 네트워크 진단 정보)
ICMP = Type + Code
- 타입: ICMP 메시지 유형 번호
- 코드: 구체적인 메시지 내용 번호

▶ 피드백 메시지 - 전송 오류

▶ 피드백 메시지 - 네트워크 진단 정보
- 에코 요청/응답: 상대가 살아 있는지 네트워크 연결 상태 확인 (ping 명령어)
- 라우터 광고: IPv6에서 라우터가 자신의 존재와 네트워크 설정 정보를 알려주는 메시지
ICMP는 IP의 보조 도구일 뿐, IP의 신뢰도를 완전하게 보장하기 위한 것은 아니다.
통신 환경에서 발생하는 문제에 대한 피드백을 제공하기 위한 것이다.
IP의 한계를 극복하려면 전송 계층의 TCP를 이용해야 한다.
ICMP도 보안과 관령성이 높지만, 원래 프로토콜의 의도는 오류 점검이나 진단, 즉 통신에 문제가 있는지 체킹하는 것이다.
- ping: ICMP 프로토콜의 대표적인 어플리케이션
※ 최근 서버들은 ping 요청이 와도 자신이 살아있건, 죽어있건 이 정보를 민감하게 생각하여 응답을 안 하도록 설정되어 있는 경우도 있다. 때문에 ping을 했을 때 반응이 안 온다고 서버가 죽었다고 확신할 순 없다.

▶ ICMP 패킷 구조
ICMP 패킷은 IP 패킷의 Data 부분 위에 올라간다.

▶ ICMP 패킷의 내용
ICMP (Internet Control Message Protocol)
ICMP Echo Request/Reply Message

▶ ICMP Echo Request
ICMP Destination Unreachable Message
ICMP 패킷이 목적지에 도달하지 못하고, 중간의 라우터가 더 이상 갈 수 없다고 판단하여 대신 응답을 보내는 경우이다.
이렇게 라우터가 경로를 차단하거나 목적지까지 전달할 수 없는 상황에서 이러한 메시지를 보낸다.
ICMP Redirect Message
라우터가 더 나은 경로가 있을 때 송신자에게 새로운 경로를 알려주는 메시지이다.
ICMP Time Exceeded MEssage

▶ ICMP Time Exceeded
패킷이 인터넷 망을 돌다 꼬여 무한 루프를 돌게 되면 라우터들이 쓸데없이 전력을 소모한다.
그래서 3계층에서 기본 규칙이, 라우팅을 한 번 할 때마다 IP 헤더의 TTL이라는 field 값을 참고하고, 한 번 판단 할 때마다 이를 1씩 감소하는 것이다. 라우터 입장에서 패킷을 와서 받고, 어디로 보낼지 판단 할 때 TTL이 0이면 버려줘야 한다는 판단을 하여 더 이상 프로세싱 못한다는 오류 응답을 소스 IP 쪽으로 보낸다.
이러한 ICM/P TTL Expire(만료)를 통해 Traceroute를 할 수도 있다. 일부러 TTL 값이 낮은 ICMP 패킷을 보내, 각 라우터에서 TTL이 만료될 때마다 보내는 응답을 통해 거치는 모든 중간 노드들의 라우팅 경로(IP 주소)를 알 수 있다. (패킷 출처 파악 - 중요)
※ Gateway: 특정 LAN을 나가고 들어오고 하는 출입구 역할의 노드를 의미한다.
Network Layer Equipment

▶ 라우터
Routing Principles
라우팅
인터넷을 할 때 IP 주소를 가지고 찾아가는 알고리즘과 방법들을 의미한다.

▶ PC의 라우팅 테이블
네트워크 마스크 = 24비트 -> C 클래스 길이만큼 자를 수 있다.
네트워크 마스킹을 한다는 것은 주로 IP 주소에서 호스트 부분 말고,
네트워크 부분만을 꺼내기 위해 비트 AND 연산을 하는 것이다.
※ 대부분의 게이트웨이는 IP의 마지막이 1이다.

▶ IP 주소 200.200.200.200에 대한 네트워크 경로 확인
Static Routing and Dynamic Routing
Static Routing
특정 주소로 갈 때 거쳐가야 할 라우터가 이미 fix되어 있다는 의미이다.

▶ 정적 라우팅
Dynamic Routing
보안이 critical할 때 사용하는 방식으로, 속도 or 보안 중 판단하여 더 나은 경로로 dynamic하게 라우팅한다는 의미이다.
- 라우팅의 교통 상황을 판단하여 더 나은 경로 (빠른 경로)
- 원하는 라우터만 거쳐가도록 하는 경로 (특정 ISP, Internet Service Provider를 지나고, 안 지나고를 고려하는 경로)

▶ 동적 라우팅
※ 단말기를 조사하거나, 네트워크 포렌식을 하거나, 해킹 흔적이 있었는지, 네트워크 상황을 이해하고, 이런 걸 하기 위해선 LAN 안에서 이 패킷이 어떻게 오가는지랑 WAN과 LAN의 관계, 이런 것들을 잘 알아야 한다.
Transport Layer
Transport Layer and Ports
Layer 4: Transport Layer
특정 장치로 도착한 패킷이, 그 이후에 어디로 가야하는지에 초점을 맞춘 계층이다.
ex) TCP의 Port 번호

▶ 포트별로 정해진 응용 프로그램
네트워크 어플리케이션을 개발하면 socket을 만들게 되는데, 만들면 거기에 포트 번호를 설정할 수 있다.
이때 포트 번호의 크기는 16비트 변수로 지정할 수 있다.

▶ 캡슐화에 의해 하부 레이어로 갈 수록 정보의 양이 많아진다.
Port (중요 기본 개념)

▶ 주요 포트와 서비스
- 80 HTTP: 인터넷을 할 때 웹브라우저와 웹서버 사이에 연결되는 TCP 커넥션의 기본 포트 번호
- 53 DNS: 도메인 이름을 IP 주소로 변환하는 서비스로, 보안과 관련이 높은 프로토콜
- 21 FTP: 파일을 업로드/다운로드할 때 사용
- 23 Telnet: 원격 로그인 프로토콜로, 암호화되지 않은 텍스트 기반 원격 접속
- 25 SMTP: 이메일을 송신하는 프로토콜
- 69 TFTP: FTP보다 가벼우며 인증 기능이 없음 (Trivial, 단순한)
- 110 POP3: 이메일을 수신하는 프로토콜, 이메일을 서버에서 다운로드하여 로컬에서 관리
포트 번호 0 ~ 1023까지를 Well-Known 포트 번호로 부른다. (높은 권한 요구)
- Well-Known 포트 번호에 access하기 위해서는 보안상 민감하게 시스템이 다루기에, 관리자 권한이 주로 필요하다.
- 일반적으로 포트 번호 0은 사용하지 않는다.
포트 번호는 UDP, TCP에 붙는다. 물론 UDP, TCP 외에도 4계층 프로토콜이 있긴 하나, 대부분 그 두가지이다.
Packet Structure and Example

▶ Packet Structure and Example
목적지 Port가 80이면 주로 클라이언트가 서버에 요청을 날릴 때의 패킷이고,
출발지 Port가 80이면 주로 서버가 클라이언트에 응답하는 패킷이다.
TCP (Transmission Control Protocol)
Characteristics of TCP
- Connection Oriented (3-way handshake)
- UDP는 connection oriented 방식이 아니다.
- Sequence Numbering
- 데이터를 여러 개의 패킷으로 쪼개서 보낼 수 밖에 없기에, 이것들을 안정적으로 전송하는 것을 보장하기 위해 필요하다.
- UDP는 하지 않는다.
- High reliability
- 암호화, 도청 방지 이런 걸 의미하는 것이 아니라, 데이터가 안정적으로 도착했음을 신뢰할 수 있음을 의미한다.
- Virtual circuit connection method
- 가상 회선 연결 방식 (연결 설정 및 종료)
- Establishment and termination of connections
- 3-way handshake로 연결 설정: SYN -> SYN-ACK -> ACK
- 4-way handshake로 연결 종료: FIN -> ACK -> FIN -> ACK
- Data checksum
- UDP도 Data checksum은 한다.
- Timeout and retransmission
- Data flow control
TCP (Transmission Control Protocol) packet structure

▶ TCP 패킷의 헤더 구조
Sequence, Acknowledgement Number를 예측 or 위조하는 것이 네트워킹 해킹과 연관이 있다. (보안 관점에서 중요)
- 각 number는 byte 단위로 증가한다.


▶ TCP 패킷의 헤더 내용
Three-Way Handshaking

▶ TCP에서 연결 생성 과정
- SYN, ACK 패킷은 OS가 만든다.
네트워크 어플리케이션을 개발하는 프로그래머 입장에서는, socket open 함수를 호출해주고 bind나 일련의 TCP 연결을 생성하기 위한 몇 개의 함수 호출을 해주면 세부적인 것은 OS가 알아서 패킷을 만들어 주고받는다.

▶ TCP에서 연결 해제 과정
보안 관점에서, 계속해서 SYN, ACK으로 connection을 맺고, 절대 끝내지 않으면 서버가 터져버린다.
즉, 서버에 위해를 가할 수 있다. 실제로 과거엔 연결 상태를 서버가 계속해서 관리하는 방식의 허점을 악용해서 DoS 공격을 하고 DDos를 일으키는 해킹 기법이 많이 있었다. (최근엔 잘 대응되어 있음)
- Dos (Denial of Service): 서비스 거부 공격으로, 정상적인 사용자가 서비스에 접근하지 못하도록 시스템 자원을 고갈시켜 서비스를 방해하는 공격이다.
- DDoS (Distributed Denial of Service): 분산 서비스 거부 공격으로, 여러 대의 컴퓨터에서 동시에 공격을 실행하여 대규모로 서버를 마비시키는 공격이다.
※ FIN은 데이터 보내지 마! 가 아니라, 난 더 이상 데이터 안 보낼 거야! 라는 의미이다.
UDP (User Datagram Protocol)
Characteristics of UDP
- Connectionless
- Reduced network overhead
- Unreliable
- Some of the transmitted data may be lost
한 가지 장점은 3-way handshake 없이 곧바로 본론을 얘기할 수 있다는 점이 있다.
그래서 별도의 점검을 하지 않더라도 절대 패킷이 drop될 가능성이 거의 없이, 이미 물리적인 통신 인프라가 아주 안정적이면 UDP를 써도 웬만하면 오류가 없을테니 별 문제가 없을 것이다. 하지만 장거리 통신이나 무선 통신 구간이 있거나, 라우팅이 복잡하면 UDP를 통해 패킷을 주고 받을 경우, 약 30%는 패킷이 손실될 수 있기에, 사용할 수 없는 수준이라고 볼 수 있다.
UDP (User Datagram Protocol) packet structure

▶ UDP 패킷 구조
- Checksum: 데이터에 오류가 있었는지 없었는지 확인할 수 있는 해시 값이라고 볼 수 있다.
- 데이터에 변형이 가해졌는지 알 수 있는 것이지, 패킷 전체가 사라졌을 때 대응할 수 있는 수단은 아니다.
암호화 프로토콜 , 즉 암호화된 통신을 할 때는 TCP를 깔고 그 위에 암호화를 한다. 물론, UDP를 가지고 암호화를 할 수도 있다. 하지만 패킷 손실의 가능성 때문에 신뢰도가 있어야 하는 프로토콜을 위에 올리기는 어렵지만, UDP를 쓰더라도 상위 프로토콜에서 양쪽 통신의 안정성을 보장한다면, 이런 식의 활용은 있을 수 있다.
※ IP 주소, 포트 번호로 바인딩하고 소켓을 열어 통신하기 위한 프로그래밍 방식은 다 같은데, 내부적인 reliability가 천차만별이다.
UDP (User Datagram Protocol) packet content

▶ UDP 패킷의 내용
Application Layer
Layer 7: Application Layer
통신을 하는 궁극적인 이유에 해당하는 계층으로,
OSI에서는 7계층이라 하지만, 인터넷이라는 네트워크 체계에만 국한하면 5, 6, 7계층을 합쳐서 Application 계층이라고 보면 된다.
Application Layer의 경우엔, 최종 궁극적인 목적의 데이터를 다루기에 프로토콜마다 다루는 정보가 구체화되어 있다.
FTP (File Transfer Protocol, 20, 21)
파일을 주고받는 프로토콜인 FTP는 어떤 서버나 시스템에서 여기에 파일을 올리게도 해주고, 특정 서버 안에 있는 파일들을 꺼내는 데에도 활용된다.
그러나, 이러한 이유로 인가되지 않은 사람이 이 프로토콜을 사용해 네트워크 어플리케이션과 소통을 하게 된다면 인가되지 않은 정보를 빼가거나 악성 코드를 삽입할 수 있게 된다는 보안상의 문제가 있다.
때문에 특정한 네트워크 장비가 있으면 해커들은 가장 먼저 FTP로 열리는 게 있는지부터 본다.
접근이 열려있어 파일을 넣고 빼고 할 수 있으면, 온갖 보안상 공격에 해당하는 행위를 할 수 있기 때문이다.
Telnet(23)
TCP 기반으로 단순한 문자 메시지를 주고받는 데 많이 활용되는 Telet은 본래 간단한 메시지(단순 명령)를 주고받는 기능만을 제공하지만, Telnet 위에다가 다시 이를 응용하여 복잡한 원격 제어를 한다던지 하는 용도로 변형된 경우가 많다.
따라서 Telnet 프로토콜이 존재하는가, 열려있는가도 보안에 밀접한 내용이다.
보통 순수한 Telnet 자체로는 별 의미가 없을 수 있는데, Telnet을 가지고 보안상 문제가 될 수 있게 구현이 된 시스템이 많다보니 FTP와 마찬거지로 특정 서버, IoT 장비, 임베디드 기기 이런 게 주어지면 보안 관점에서 Telnet이 있는지 1순위로 찾아본다.
SMTP (Simple Mail Transfer Protocol, 25)
TCP 위에 올라가는 상위 레벨 프로토콜로, 이메일을 주고 받기 위한 프로토콜이다.
DNS(Domain Name System, 53) - 중요
도메인 이름에 대한 정보를 관리하는 시스템으로, 도메인 네임을 IP 주소로 바꿔준다.
인터넷에서 실제 통신을 하기 위해서는 IP 주소가 필요하기에, DNS는 인터넷 사용 시 반드시 사용되는 요소이다.
DNS가 보안상 중요한 이유는 이를 조작하기가 아주 쉽기 때문이다. 최근 시스템이어도 DNS는 허술한 경우가 매우 많기에, 특히 근거리에 있는 해커가 이를 조작하여 피싱 사이트로 사용자를 유도하는 해킹을 할 수 있다. 또한 악성 코드들이 유포되는 과정에서도 굉장히 많은 연관성이 있으며, 그뿐만 아니라 DNS 관련하여 다양한 해킹 기술도 존재한다.
TFTP (Trivial File Transfer Protocol, 69)
FTP 프로토콜과 거의 비슷한데, UDP 기반으로 훨씬 빠르게 파일을 전송할 수 있다.
주로 임베디드 장치의 펌웨어 플레싱(flashing) 업데이트나, 가까운 장치 간에 빠르고 단순하게 파일을 주고받을 때, 파일을 보안에 대해 따지지 않고 믿으면서 주고 받을 때 사용하는 프로토콜이다.
HTTP (HyperText Transfer Protocol, 80) - 중요
웹브라우저와 웹서버가 데이터를 주고받는 방식을 정의하는 프로토콜이기에 가장 중요하다.
때문에 웹해킹을 이해하려면 HTTP 이해가 필수적이다.
참고자료
https://www.youtube.com/watch?v=WEUQ559AWEw
https://www.youtube.com/watch?v=QxsAFH-ojv0
'CS > 정보보호' 카테고리의 다른 글
해킹 문제 풀이 실습 (http_hack) - 2 (0) | 2025.04.03 |
---|---|
해킹 문제 풀이 실습 (http_hack) - 1 (0) | 2025.04.02 |
1. Introduction (0) | 2025.04.02 |