● ARP (Address Resolution Protocol)

주소를 재해석해주는 프로토콜이다. OSI 7계층 중에서 네트워크 계층(L3) 프로토콜이지만 IP 하위에서 동작한다. IP를 기반으로 물리적인 주소(MAC)를 알아오는 기술이다. 즉, 논리적인 주소(IP)에 해당하는 장비의 물리적인 주소(MAC)를 획득하는데에 쓰이는 프로토콜이다. 

 

예를 들어, 같은 이름을 가진 사람이 많을 때 주민번호로 구별하는 것과 같은 원리이다. 이름이 같은 사람은 많이 있을 수 있지만, 주민번호가 같은 경우는 없다. 여기서 이름은 IP에 해당되고 주민번호는 MAC에 해당된다. 기계도 마찬가지로 많은 컴퓨터들 사이에서 특정 컴퓨터와 통신을 해야 할 때 Broadcast로 ARP Request를 발생시켜 MAC주소를 알아온다. 이 때, ARP에 대한 Reply는 Unicast로 보낸다.

 

더보기

※ Broadcast/Unicast/Multicast 방식

Broadcast = 같은 네트워크에 있는 모든 장비들에게 신호를 보내는 것

Unicast = 1:1통신을 하는 것

Multicast = 1:Group통신을 하는 것. 특정 그룹에게만 신호를 보낼 수 있음

- ARP의 종류

1. ARP : IP를 기반으로 MAC 주소를 획득

2. RARP : MAC주소를 기반으로 IP주소를 획득

3. Gratuitous ARP : IP충돌을 감지하고 GW의 이중화에 사용

4. Proxy ARP : IP대역은 같지만 물리적으로 분리된 네트워크 통신을 위해 사용

 

- ARP 헤더

ARP Header

  • Hardware Type (2 byte) : Network 환경 정보. Ethernet 환경일 경우 0x0001

  • Protocol Type (2 byte) : 논리적인 주소의 종류. 주로 IPv4인 0x0008

  • Hardware Address Length (1 byte) : 물리 주소의 크기 값을 적음

  • Protocol Length (1 byte) : 논리 주소의 크기 값을 적음

  • Opcode (2 byte) : ARP 패킷의 종류(ARP Request/Reply, RARP, ...) 지정

  • Sender Protocol Address (6 byte) : 자신의 MAC 주소

  • Sender Protocol Address (4 byte) : 자신의 IP 주소

  • Target Hardware Address (6 byte) : 상대 MAC 주소. 모르는 경우(ex.ARP Request)엔 00:00:00:00:00:00 값이 들어감

  • Target Protocol Address (4 byte) : 상대 IP 주소

 

- Wireshark로 잡아본 ARP

  • ARP Request 패킷

ARP Request

  • ARP Reply 패킷

ARP Reply

● ARP Spoofing

Spoofing는 '속이다'라는 뜻을 가지고 있다. ARP Spoofing은 ARP를 이용해 자신의 MAC주소를 다른 장비의 MAC 주소라고 속이는 공격이다. ARP Cache 테이블을 바꾼다는 의미로 ARP Cache Poisoning 공격이라고도 한다. 

더보기

※ ARP Cache Table : IP와 대응하는 MAC 주소를 저장한 테이블을 말한다. 

ARP Cache Table 예시
라우터에서 arp 테이블 보기

만약 다른 네트워크에 있는 A와 B가 통신을 하기 위해서는 라우터를 거치게 된다. 이때 라우터의 ARP Cache Table에서 목적지 IP에 해당하는 MAC 주소가 있는지를 확인한다. 테이블에 MAC 주소가 있다면 그 주소를 찾아가고, 없다면 ARP를 Broadcast로 발생시켜 Unicast로 MAC주소를 받은 후에 그 주소로 이동한다. 

공격자들은 ARP의 허점을 이용해 자신의 MAC주소를 공격 대상의 MAC주소인 척하여 패킷을 Sniffing할 수 있다. 이 공격은 더미 허브 환경이나 스위치 환경에서 사용될 수 있다. 이전에는 단순히 패킷을 가로채 Sniffing만 했다면, 현재는 가로챈 패킷을 변조하여 전송할 수 있다. 이러한 공격 방법은 DNS Spoofing 공격 방식에도 사용될 수 있다. 

 

- ARP Spoofing 탐지 방법

 

1. ARP table을 조회하여 MAC 주소의 중복 여부를 확인

서버에서 arp -a 명령어를 사용하여 ARP Cache Table을 확인해본다. 동일 네트워크에 있는 MAC 주소가 중복되는 것이 있다면 ARP Spoofing 공격일 확률이 높다. 

 

2. 송수신 패킷에서 악성코드 유무 검사

tcpdump 또는 Wireshark 등과 같은 패킷 분석 도구를 이용하여 패킷에 악성코드가 있는지 확인한다. 서버가 보내는 패킷에는 악성코드가 없지만 클라이언트가 받은 패킷에 악성코드가 있다면 ARP Spoofing 공격으로 변조되었을 가능성이 높다. 

 

3. 다량의 ARP Reply 패킷 발생

원래의 서버가 게이트웨이와 연결되어있는 이상 지속적으로 통신을 주고받는 것을 해커도 막을 수 없다. 이 때문에 해커는 게이트웨이에 계속해서 자신의 MAC주소를 ARP Reply로 알려준다. 따라서 게이트웨이에 MAC 주소를 위장하기 위한 ARP Reply 패킷이 지속적으로 수신되는지를 확인해야 한다.

 

- ARP Spoofing 대책 방법

1. 정적인 ARP Table 관리

게이트웨이에 등록된 IP와 MAC주소를 정적으로 고정시켜, ARP Spoofing 공격이 발생해도 잘못된 MAC 주소를 저장하지 않도록 한다. 

 

2. 중요 패킷의 암호화

만약 ARP Spoofing 공격이 발생한다면 네트워크의 패킷들을 도청할 수 있다. 따라서 민감하거나 중요한 정보가 담긴 패킷은 내용이 노출되지 않도록 암호화하여 통신한다. 

 

 

 

참고: KISA(https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=21495)

'정리 > 용어정리' 카테고리의 다른 글

TCP와 UDP  (2) 2020.06.26

● TCP와 UDP

두 프로토콜 모두 OSI 7 계층 중 전송계층(L4)에서 사용된다. 데이터 전송을 위해 IP 주소를 사용한다. 

 

더보기

※ 전송 계층에서는 데이터 전송 방식을 정하고 서비스 주소(Port 번호)를 구분한다. 또한 필요에 따라 단편화 작업을 수행하여 크기가 큰 데이터를 쪼개어 보낸다.

● TCP (Transmission Control Protocol)

데이터를 전달했을 때, 상대방이 확실하게 받았는지를 확인하여 신뢰성을 높인다. 주로 중요한 데이터를 정확하게 전달할 때 사용한다. 

EX) FTP의 TCP 20,21번 포트, HTTP의 TCP 80번 포트

- TCP의 특징 3가지

1. 연결 지향

<연결 설정 → 데이터 전송 → 연결 종료>의 순서로 진행된다. 

3 WHS(3-Way-HandShake)를 이용해 논리적인 연결을 구성하고, 데이터 전송 후 4 WHS(4-Way-HandShake)를 이용해 연결을 종료한다. 

 

<연결 설정>

3 WHS란 데이터 전송을 위해 상대 서버 또는 클라이언트와 세션 연결을 수립하는 과정이다. 

서버에 ACK 패킷을 보낸 후에는 데이터 전송이 이루어진다. 

3WHS의 과정

 

<연결 종료>

4 WHS는 3 WHS와 반대로 연결된 세션을 종료하기 위한 과정이다. 데이터 전송을 마친 후에 이루어진다. 

4WHS의 과정

더보기

* TCP 상태 천이 다이어그램

TCP 상태 천이 다이어그램

쉽게 말하자면 <3 WHS + 데이터 전송 + 4 WHS>로 구성되어있다. 

 

2. 신뢰성 보장

TCP 헤더의 Sequence Number와  Acknowledge Number를 이용해 데이터를 순서를 표기하여 순차적으로 전송할 수 있다. 이를 이용하여 누락된 패킷을 재전송해달라고 요청할 수 있다. 

Seq Num과 Ack Num에 대해서는 이후에 Wireshark를 이용하여 헤더 구조와 함께 더 자세하게 다룰 예정이다.

 

3. 흐름 제어

송신자가 너무 빠르게 데이터를 보내어 수신자가 그 속도를 따라가지 못하면 버퍼 오버플로우가 발생한다. 수신자의 버퍼가 받지 못하면 그대로 데이터의 손실로 이어진다. 이를 막기 위해 Sliding Window방법을 사용하여 해결한다.

Sliding Window란 송신자가 설정한 window size만큼의 데이터에 대해 ACK를 받지 않아도 여러 패킷을 보낼 수 있도록 하는 알고리즘이다. 즉, 송신받는 데이터의 양을 조절하는 방식이다. 

 

- TCP의 확인 응답 3가지

1. 일반 확인 응답 

Segment : ACK = 1 : 1

수신자가 하나의 Segment를 전달하면 반드시 송신자로부터 ACK를 받아야 한다. ACK를 받은 후에 다음 순서의 데이터를 전송한다.

 

2. 누적 확인 응답

Segment : ACK = N : 1

TCP 연결 시 한 번에 보낼 수 있는 Segment양을 정한다. 정해진 양만큼의 Segment는 ACK가 없어도 계속 전송한다. 송신 측에서는 정해진 양의 Segment를 받았을 때 하나의 ACK를 보낸다.

 

3. 선택적 확인 응답

누적 확인 응답 방식은 중간에 Segment의 손실이 발생하면 정상 수신한 Segment까지 재전송해야 하는 문제점이 있다. 이를 해결하기 위해 손실 발생 시 재전송이 필요 없는 Segment의 정보를 함께 알려 불필요한 재전송을 방지한다. 

 

 

● UDP (User Datagram Protocol)

데이터 전송의 신뢰성보다는 빠른 속도를 보장한다. 주로 빠른 통신 속도가 필요한 서비스(실시간 통신, 음성 서비스)에 이용된다. 

EX) DNS의 UDP 53번 포트, DHCP의 UDP 67,68번 포트, TFTP의 69번 포트

 

- UDP의 특징 3가지

1. 비 신뢰성

빠른 속도를 위해 수신자가 데이터를 받았는지 확인하지 않는다. 오직 빠른 전송과 데이터의 연속성만이 중요하다...

 

2. 비 연결 지향성

연결 없이도 통신이 가능하다.

 

3. 최소화된 헤더

4개의 필드를 가지며 크기는 총 8 byte이다. 20~60 byte의 크기를 가지는 TCP 헤더에 비해 헤더의 크기가 작으며 필드의 수 또한 매우 적어 구조가 간단하다. 

'정리 > 용어정리' 카테고리의 다른 글

ARP와 ARP Spoofing  (2) 2020.06.27

+ Recent posts