Security/정보보안

정보보안 1차시: 네트워크 - ARP와 TCP/UDP

arsenic-dev 2025. 3. 21. 16:13

경희대학교 중앙동아리 쿠러그의 정보보안 강의를 기반으로 정리한 글입니다.

네트워크

MAC vs IP

MAC

각 네트워크 인터페이스에 할당된 물리적인 고유 식별 주소로,

Data Link 계층에서 사용되며, 같은 네트워크 내에서만 유일하면 된다.

 

48bit 구성 -> 8bit씩 6자리로 구성 -> 16진법으로 총 12자리로 표기

ex) 12-34-56-AB-CD-EF (앞 3자리는 제조사, 뒤 3자리는 기기 고유 코드)

 

IP

실제 통신 과정에서 사용하는 고유 주소로,

Network 계층에서 사용되며, 같은 네트워크 내인 LAN 환경에서는 MAC 주소 기반 통신이 이루어진다.

 

IP 주소

  • IPv4: 32비트로, 8비트씩 끊어 10진수로 나타낸다. ex) 192.168.0.1
  • IPv6: 128비트로, 4자리씩 끊어 16진수로 나타낸다. ex) 2606"2800:0220:0001:0248:1893:25c8:1946

IPv4는 이미 고갈되었으나, 사이더 방식을 통해 현재도 계속 사용하고는 있다.

  • 사이더: 같은 네트워크를 구분하기 위한 방식으로, 연속된 IP 주소를 표기하는 방법이다.
  • ex) 192.168.1.4/24 -> 앞의 24bit가 같으면 하나의 네트워크

※ IPv4 vs IPv6 표기 진수 차이

  • IPv4: 10진수를 사용하여 사람이 읽기 편한 형태로 주소 표현
  • IPv6: 더 많은 주소를 제공하기에, 이를 관리하고 표현하는 데 있어 더 효율적이고 간결한 방법인 16진수를 사용하여 주소 표현
 
 

CIDR이 왜 IPv4 고갈을 막는지?

IPv4 주소는 총 2^32개(약 43억 개)뿐이라 계속 사용하려면,

CIDR 방식을 통해 IP를 효율적으로 할당하여 낭비를 줄여야 한다.

 

1. 기존의 IPv4 주소 할당 방식 (클래스 방식)

IP 주소를 A, B, C 클래스 단위로 할당

  • 클래스 A: 16,777,216개 IP (ex 10.0.0.0/8)
  • 클래스 B: 65,536개 IP (ex 172.16.0.0/16)
  • 클래스 C: 256개 IP (ex 192.168.1.0/24)

-> 문제점: 작은 네트워크에 너무 큰 범위를 할당하면 IP 주소가 낭비됨

 

2. CIDR 방식 (사이더 방식)

IP 주소를 필요한 만큼만 할당

 

예를 들어 설명하자면, 클래스 C(/24, 256개)를 강제할 필요 없이, /25(128개)나 /26(64개)처럼 세밀하게 나눌 수 있다. 따라서, 300개 IP가 필요한 회사의 경우 클래스 B(/16)를 받지 않고 /23을 통해 512개의 적당한 수의 IP를 받아, 65,024개 IP를 절약할 수 있다.

 

192.168.1.0/25와 같은 CIDR 표기법에서 /25는 서브넷 마스크를 의미한다. 쉽게 말해, IP 주소에서 앞의 25비트가 네트워크를 구분하는 부분이고, 나머지 비트가 호스트(사용 가능한 IP) 부분이다.

 

CIDR ex) 192.168.1.0/25, 192.168.1.128/25는 각각 다른 128개의 IP

▶ 실제 데이터 전송 흐름

ARP

Address Resolution Protocol의 약자로, 같은 네트워크 내에 있는 송수신 대상의 IP 주소로 MAC 주소를 알아내는 프로토콜이다.

ARP 동작

  • ARP Request
  • ARP Reply
  • ARP Table 갱신

예를 들어 동일 네트워크에 속한 호스트 A, B가 있을 때, 호스트 A는 호스트 B의 IP 주소는 알지만 MAC 주소는 모른다고 가정했을 때, 이 상황에서 호스트 B의 MAC 주소를 알아내는 과정이다.

 

1. ARP Request

▶ ARP Request

  • 호스트 A: 브로드캐스트 메시지 전송
  • ARP Request라는 ARP 패킷이 포함된 브로드캐스트 메시지이다.

※ 브로드캐스트 메시지: 네트워크에 속해 있는 모든 호스트가 전달 받는 메시지

 

2. ARP Reply

▶ ARP Reply

  • 호스트 B: 자신의 MAC 주소를 담은 유니캐스트 메시지 전송
  • 나머지: 호스트 B 외에 나머지 호스트는 자신의 IP 주소가 아니므로 무시
  • ARP Reply라는 ARP 패킷이 포함된 유니캐스트 메시지로, 이 메시지를 수신한 A는 B의 MAC 주소를 알게 된다.

※ 유니캐스트 메시지: 일대일 통신을 수행하는 메시지

 

3. ARP Table 갱신

▶ ARP Table 갱신

  • ARP Table: ARP Request-Reply을 통해 알게 된 IP 주소와 MAC 주소의 연관 관계 기록
  • ARP Table 항목은 일정 시간이 지나면 삭제, 임의 삭제도 가능
  • ARP Table에 등록된 호스트에 대해선 ARP 요청을 보낼 필요 없음
다른 네트워크에 속해 있는 호스트의 IP 주소는  MAC 주소는 모르는 상황에선 어떻게 해야 할까?

 

네트워크 별로 ARP가 수행된다. 

▶ 통신하고자 하는 호스트 A와 B가 서로 다른 네트워크에 속해 있을 경우

  • ARP 요청 - ARP 응답 과정을 통해 라우터 A의 MAC 주소를 알아낸 뒤, 이를 향해 패킷 전송
  • ARP 요청 - ARP 응답 과정을 통해 라우터 B의 MAC 주소를 알아낸 뒤, 이를 향해 패킷 전송

ARP Table

▶ IP와 MAC 주소를 연결해주는 중간다리가 필요

 

ARP Table은 네트워크 내의 각 기기의 IP와 MAC을 매칭해 둔 테이블로,

IP - MAC이 쌍으로 존재하며, 해당 쌍을 표 형태로 여러 개 가지고 있다.

 

이러한 ARP Table을 채우려면 일단 상대방의 MAC 주소를 알아야 하는데, 이때 보내는 것이 ARP Packet이다.

ARP Packet

IPv4에서 상대방의 MAC 주소를 알아내기 위한 Packet으로, ARP Request, ARP Reply 과정에서 송수신되는 패킷이다.

▶ ARP Packet

  • Opcode (Operation Code): ARP의 구체적인 동작 - ARP 요청의 경우 1, ARP 응답의 경우 2
  • MAC 주소 - 송신지 하드웨어 주소(Sender Hardware Address), 수신지 하드웨어 주소(Target Hardware Address)
  • IP 주소 - 송신지 프로토콜 주소(Sender Protocol Address), 수신지 프로토콜 주소(Target Protocol Address)

※ Packet: 데이터 전송의 단위

 

※ IPv6에서는 ARP 대신 Neighbor Discovery Protocol (NDP) 를 사용하는데, NDP는 IPv4의 ARP와 비슷한 역할을 하지만 보안 기능이 추가되었다.

▶ ARP Packet Example

  • FF:FF:FF:FF:FF:FF - broadcast, 모두에게 전송하라는 의미
  • 00:00:00:00:00:00 - MAC 정보가 없으니 임의로 채우는 값
나(183.179)는 MAC 주소가 c62e야. 네가 찾던 정보야!

 

ARP Request

  • ETH (Ethernet) 레벨
    • smac (Source MAC) = 3805 (보낸 사람의 MAC 주소)
    • dmac (Destination MAC) = ffff (브로드캐스트, 모든 장치에 전송)
  • ARP 레벨
    • smac = 3805
    • sip (Sender IP) = 183.12 (보낸 사람의 IP)
    • tmac (Target MAC) = 00 (누군지 모름, 그래서 ARP 요청을 보냄)
    • tip (Target IP) = 183.179 (목적지 IP)

ARP Reply

  • ETH (Ethernet) 레벨
    • smac = c62e (응답자의 MAC 주소)
    • dmac = 3805 (요청 보낸 사람의 MAC 주소)
  • ARP 레벨
    • smac = c62e
    • sip = 183.179 (응답자의 IP)
    • tmac = 3805 (요청자의 MAC 주소)
    • tip = 183.12 (요청자의 IP)

※ ip, mac 주소의 일부는 생략하여 표기하였다.

 

※ Ethernet은 유선 2계층 기술, Wi-Fi는 무선 2계층 기술, 인터넷은 3계층 IP 기반 전 세계 네트워크 연결이다.

ARP Spoofing

웹사이트에 접속을 하려면 라우터를 거쳐서 바깥 인터넷과 연결해야 한다.

라우터와의 통신은 DataLink - Network 부분에서 이루어지는데, 이 과정에서 ARP Table을 이용해 MAC 주소를 결정한다.

 

DataLink로의 전송 과정에서는 MAC 주소를 이용해 전송할 곳을 알아내며,

IP 주소는 단순히 Network에서 연결을 위한 주소일 뿐이고, 실질적인 데이터 이동은 DataLink의 MAC 주소만 사용한다.

이 상황에서 발생할 수 있는 문제점엔 뭐가 있을까?

 

ARP Table이 잘못되어 있다면 MAC 주소가 잘못 매칭되고, MAC 주소가 틀렸다면 잘못된 사람에게 전송된다.

 

ARP 스푸핑은 근거리 통신망(LAN) 하에서 주소 결정 프로토콜인 ARP 메시지를 이용하여 상대방의 데이터 패킷을 중간에서 가로채는 중간자 공격 기법이다. 이 공격은 데이터 링크 상의 프로토콜인 ARP 프로토콜을 이용하기 때문에 근거리상의 통신에서만 사용할 수 있는 공격이다.

 

이 기법을 사용한 공격의 경우 공격자가 정상적인 주소를 위조하여 신뢰할 수 있는 사용자나 시스템처럼 보이게 만드는 방식이라, 패킷 흐름이 정상적으로 보이고 별다른 오류가 발생하지 않기 때문에 사용자는 특별한 도구를 사용하지 않는 이상 쉽게 자신이 공격당하고 있다는 사실을 확인하기 힘들다.

 

※ 중간자 공격: 네트워크 통신을 조작하여 통신 내용을 도청하거나 조작하는 공격 기법이다. 중간자 공격은 통신을 연결하는 두 사람 사이에 중간자가 침입하여, 두 사람은 상대방에게 연결했다고 생각하지만 실제로는 두 사람은 중간자에게 연결되어 있으며 중간자가 한쪽에서 전달된 정보를 도청 및 조작한 후 다른 쪽으로 전달한다.

ARP Spoofing을 하는 방법은?

 

그냥 상대방에게 ARP Reply를 날리면 된다.

 

ARP 프로토콜은 기본적으로 인증 과정이 없다.

즉, 공격자가 거짓된 ARP Reply를 보내면, 피해자의 ARP 테이블이 조작될 수 있다.

▶ you(피해자), there(정상 서버), me(공격자)

  • 공격자는 you에게 자신의 MAC으로 속여 ARP Reply를 보냄
  • 피해자는 조작된 응답을 받아들여 ARP Table을 업데이트
  • you가 there로 패킷을 보내면, 실제로는 me의 MAC 주소로 전달됨
  • me는 트래픽을 중간에서 훔쳐보거나 변조할 수 있음

※ ARP 테이블(캐시)은 새로운 ARP Reply가 오면 항상 덮어쓰기(overwrite) 하기 때문에, 공격자가 보내기 전에 정상 서버가 응답을 보냈더라도 공격자의 MAC 주소로 보내게 된다. (ARP Cache Poisoning, ARP 캐시 오염)

▶ 결과

훔쳐보거나 위조가 아닌, 그냥 망가뜨리는 것 자체가 목적이라면?

 

▶ you(피해자), 라우터, me(공격자)

  • 네트워크 내 모든 장비가 조작된 ARP 정보를 받음
  • 라우터를 향한 트래픽이 차단되어 인터넷 연결 불가

※ 트래픽: 네트워크에서 주고받는 데이터의 흐름을 의미하며, 패킷 단위로 전송된다.

 

※ 라우터: 여러 네트워크를 연결하고 데이터 패킷을 목적지로 전달하는 장치이다.

 

ARP Spoofing Mitigation

 

ARP Spoofing 공격 탐지 방법

  • 인터넷이 비정상적으로 갑자기 느리거나 되지 않음
  • ARP Table을 확인해 보니 서로 다른 IP의 MAC이 같음
  • ARP에 만료 기한을 두고 정기적으로 갱신하여 MAC 주소 변화 감지

하지만 대부분의 Mitigation(완화)은 전부 대응이 가능한 편이며, 주기적으로 ARP Packet을 보낸다면 여전히 막을 수 없다.

때문에, 사실상 못 막는다고 할 수 있다.

 

이게 바로 우리가 아무 무선 인터넷에 멋대로 연결하면 큰일나는 이유이며,

PC방과 같은 경우에는 공격을 막기 위한 보안 라우터를 사용한다. (라우터 수준에서 ARP Spoofing 방어)

TCP / UDP

Port

IP Address가 컴퓨터를 찾을 때 필요한 주소라면, Port는 컴퓨터 안에서 프로그램을 찾을 때 필요한 주소이다.

 

이러한 Port는 각각의 프로그램에 맞춰 포트 번호가 이미 지정되어 있으며,

HTTP 80, HTTPS 443, DNS 53, SMTP 25, FTP 20/21 등 자주 쓰는 포트 번호도 정해져 있다.

▶ 각각의 Port에서 TCP/UDP 통신이 이루어진다.

UDP

Transport(L4) 계층에서 사용하는 규약으로, 데이터를 주긴 주는데 검증하는 과정은 없다.

  • 마치 전단지 배포하듯이 상대방이 받았는지 여부는 검증하지 않고 일단 주기만 함
  • 재전송 기능이 없어서 상대방이 받지 못했더라도 다시 보내주지  않음 (받았는지도 알 수 없음)

때문에, 주로 실시간 스트리밍과 같이 내용이 살짝 손실되더라도 큰 문제가 없는 경우에 사용한다.

 

전송 성공 여부 검증이 필요없기 때문에 Broadcasting이 가능하다. (모두에게 전송 가능)

▶ UDP

  • Source Port: 출발지에서 사용한 포트 번호
  • Destination Port: 목적지에서 사용되는 포트 번호
  • UDP Length: UDP 패킷과 페이로드 데이터의 길이 합
  • UDP Checksum: 데이터 오류를 확인하기 위한 부분

※ payload: 전송되는 데이터에서 실제 유용한 정보(내용물)를 의미한다.

TCP

▶ TCP는 데이터를 더 안정적으로 주고받기 위한 방법이다.

  • 송수신하기 위한 연결 과정 거침
  • 연결 과정에서 데이터 전송 속도(RTT) 등 다양한 정보 수집
  • 제대로 된 송수신 보장을 위해 SEQ Number와 ACK Number 필드 존재
    • SEQ Number: 송신자가 보내는 데이터의 순서를 나타내는 번호로, 패킷이 재정렬될 때 사용
    • ACK Number: 수신자가 다음에 받을 것으로 예상하는 SEQ 번호로,이전 패킷이 정상적으로 도착했음을 의미

UDP와 달리 데이터 재전송 기능이 있어서, 만약 제대로 수신하지 못했다면 데이터를 재전송하는 과정을 거치게 된다.

 

TCP/IP 네트워크에서 패킷은 여러 개의 작은 조각(세그먼트)으로 나뉘어 전송되는데, 이 패킷들이 순서대로 도착하지 않을 가능성이 있다. 즉, 송신한 순서와 다르게 패킷이 도착하면 재정렬 과정이 필요한데, TCP는 재정렬이 가능하다. (UDP는 순서 상관 X)

 

하지만, 전송 성공 여부 검증이 필요하기 때문에 Broadcasting이 불가능하다.

 

※ RTT: Round Trip Time, 패킷이 출발지에서 목적지까지 갔다가 다시 돌아오는 데 걸리는 왕복 시간을 의미한다.

▶ 3 -Way Handshake 과정

▶ 4 -Way Handshake 과정

 

이렇게 TCP 연결 설정은 SYN 플래그를 이용한 3-Way Handshake 과정을 통해 이루어지며,

연결 해제는 FIN 플래그를 이용한 4-Way Handshake 과정을 통해 이루어진다.

 

SEQ/ACK Number

  • 송신하는 데이터의 크기만큼 증가함(1byte에 1씩 증가)
  • SYN, FIN: 시작, 종료
  • SEQ는 보낸 데이터, ACK는 받은 데이터
  • Number는 데이터를 보낸 "뒤에" 증가

장점

  • 순서가 틀릴 경우 재조합 가능
    • 예상하지 못한 이유로 순서가 틀릴 수 있음
    • UDP는 순서가 없어서 재조합이 불가능함 (손실 여부도 파악 불가)
  • 중간에 손실된 것이 있는지 확인 가능
    • 중간에 숫자가 비었다면 손실이 이루어졌다는 것을 알 수 있게 됨
    • 상대방에게서 돌아오는 숫자가 이상하면 손실이 일어났음을 확인 가능
만약 누군가가 SEQ, ACK number를 이용해서 패킷 중간에 끼어들어 사기를 친다면?

 

이를 방지하기 위해 초기값을 random하게 결정하여 맘대로 끼어들어 사기치지 못하게 한다.

물론, 이를 예측하는 TCP sequence prediction attack도 있다.

 

TCP - Retransmission 취약점

 

TCP를 과금하는 방법에는 두 가지가 있다.

 

1. 전체 데이터(패킷 위의 정보 포함) 과금

만약 45byte를 보내야 한다고 하면, 통신 상태가 깨끗할 경우에는 한 번에 45byte가 모두 전송된다.

하지만 통신 상태가 깨끗하지 않으면 15byte씩 잘라서 보내지게 된다.

 

이렇게 되면 매 15byte마다 header가 추가되어 통신 요금이 매우 올라가게 된다.

이는 주로 유럽에서 쓰는 통신 요금 과금 방법이다.

 

2. 실제 통신이 이루어지는 부분만 과금

우리나라에서 주로 쓰는 방법으로, 통신 상태에 따른 영향이 적다.

byte만큼 증가하므로 SEQ Number 값의 차이가 실제 통신 데이터 크기를 의미한다.

SEQ Number를 변조하여 데이터 양은 100byte이지만, SEQ Number 증가량은 0이라면 과금 X?

 

이 방법이 바로 TCP Retransmission 취약점이고, 쉽게 패치하기 어려운 부분이라 지금도 사용할 수 있다고 한다.

실습

Wireshark

실제 네트워크 패킷을 감지할 수 있는 패킷 캡처 프로그램으로,

네트워크에서 송수신되는 패킷을 모니터링하고 분석하는 도구이다.

▶ 관찰할 네트워크 인터페이스 선택 가능

  • 네트워크 인터페이스: 패킷을 송수신할 수 있는 통로
    • 해당 인터페이스로 패킷이 송수신되고 있다면 오른쪽에 지그재그 모양이 그려짐

▶ 패킷 캡처 중단 방법

▶ 화면 구성

  • 빨간색 박스: 선택한 인터페이스에서 송수신된 패킷들에 대한 정보
    • 패킷 번호(No)
    • 시간(Time)
    • 송신지(Source) / 수신지(Destination) - IP 주소
    • 프로토콜(Protocol)
    • 패킷 길이(Length)
    • 해당 패킷에 대한 간략한 설명(Info)
  • 파란색 박스: 선택된 패킷의 캡슐화된 모습으로, 특정 패킷의 특정 계층의 헤더 확인 가능
  • 초록색 박스: 패킷에 해당하는 16진수 형태의 실제 데이터로, 헤더를 클릭하면 해당 부분에 하이라이트가 됨

※ 캡슐화: 상위 계층의 헤더가 덧붙는 과정

  • Hypertext Transfer Protocol: HTTP
  • Transmission Control Protocol: TCP
    • 송신지 포트 번호(Source Port) / 수신지 포트 번호(Destination Port)
    • 순서 번호(Sequence Number)
    • 확인 응답 번호(Acknowledgment Number)
  • Internet Protocol Version 4: IPv4
    • 목적지 IP 주소(Destination Address) / 송신지 IP 주소(Source Address)
  • Ethernet ||: 이더넷 프레임
    • 수신지 MAC 주소(Destination) / 송신지 MAC 주소(Source) 

※ IP > MAC > Port

  • IP 주소로 네트워크 상에서 장치 찾기
  • MAC 주소로 같은 네트워크 내에서 장치 찾기
  • Port 번호로 장치 안의 프로그램 찾기

▶ 패킷 필터링

  • 입력 창에 필터 입력 -> 캡처된 패킷 중 필터 조건에 맞는 패킷만 조회 가능

▶ 기본 필터

 

※ ip.addr, ip.dst, http.serve, udp.port == 80, tcp || udp, (ip.src == 192.168.219.100) && (tcp.dstport == 80) 이런 식으로 더욱 세부적인 필터링도 가능하다.

과제

http://example.com에 접속하는 패킷 확인

 

https가 아닌 http인 이유는 http가 암호화되어 있지 않아서이다.

암호화된 https를 알려면 다른 도구를 써야 하며, 그마저도 나의 접속만 확인 가능하다.


참고자료

https://www.youtube.com/watch?v=aVvr1Rz5zRo

https://ko.wikipedia.org/wiki/ARP_%EC%8A%A4%ED%91%B8%ED%95%91

 

ARP 스푸핑 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 성공적인 ARP 스푸핑 공격은 네트워크 상의 라우팅을 공격자가 바꿈으로써 효과적으로 중간자 공격을 수행할 수 있도록 한다. ARP 스푸핑(ARP spoofing)은 근거리 통

ko.wikipedia.org

https://www.youtube.com/watch?v=BEK354TRgZ8&t=299s

https://www.youtube.com/watch?v=DjXVetRVPGg

'Security > 정보보안' 카테고리의 다른 글

XSS game  (1) 2025.04.01
정보보안 3차시: 웹 - SQL Injection  (3) 2025.03.31
정보보안 2차시: 웹 - 기본적인 웹 취약점  (2) 2025.03.28