본문 바로가기
(실기) 정보보안기사&산업기사

네트워크 기본학습 6~8

by IT매니절 2024. 3. 18.

 

 

ARP/RARP 프로토콜
1) 특징
- 논리적인 주소와 물리적인 주소 사이의 변환을 담당
- ARP : IP-> MAC
- RARP : MAC -> IP. IP주소는 하드디스크 내 설정파일에 저장되어 있는 편이지만,
하드디스크가 없는 터미널의 경우엔 초기 가동될 때 자신의 MAC 주소를 담아 RARP 요청을 만들어 자신의 IP주소를 받아온다. MAC에 해당하는 IP 주소정보를 관리하는 RARP 데몬 서버가 구성되어 있어야 한다.


과정
A가 라우팅 테이블(목적지까지의 게이트웨이 주소 정보) 참조
-> 게이트웨이 B로 전송하고자 함
-> ARP Request를 보내서 ARP Reply받아 게이트웨이 B의 mac 주소를 받아옴
-> 2계층에서 mac 주소로 인접한 노드(게이트웨이 B)로 전송
-> 게이트웨이 C에 ARP Request를 보내서 ARP Reply받아 ... 반복
-> 목적지 D에 도착

A에서 바로 D에 도착할 수 없는 이유
: internet layer를 보면, ARP/RARP는 IP를 이용하지 않는다.
IP헤더가 없으면 라우팅을 할 수 없으므로 "로컬" 인접한 노드 내에서만 기능한다.

 

 

ARP메시지 형식

Hardware Type (16bit, 2계층) Protocol Type (16bit, 3계층)
Hardware length Protocol length Operation
(Req일때 1 Reply일때 2)
Sender Hardware address
Sender Protocol address
Target hardware address
Target protocol address

가. Hardware Type
- 2계층, 일반적으로 Ethernet(1)

나. Protocol Type
- 3계층, 일반적으로 IP(0x0800)

다. Hardware length
바이트단위. MAC은 48bit (6byte)

라. Protocol length
바이트단위. IP의 경우 32bit(4byte) 사용

바. Operation
- 패킷 유형 정의. ARP Request(1) ARP Reply(2)

사. Sender Hardware address
- 송신자의 물리주소를 나타내는 필드

아. Sender Protocol address
- 송신자의 논리주소를 나타내는 필드

자. Target hardware address
- 목적지의 물리주소

차. Target protocol address
- 목적지의 논리주소

 

ping 처리과정
1. 라우팅 테이블 참고 : 동일(로컬) 네트워크일 경우 직접 전달
                                      다른 네트워크일 경우, 게이트웨이 주소로 전달
2. ARP Request 전송 -> ARP Reply 전달받음
3. ICMP Echo Request -> ICMP Echo Reply 전달받음

 

 

ARP 패킷 캡쳐 (와이어샤크 기준 예시)

: ARP Request Broadcast -> 해당하는 호스트가 Unicast로 ARP Reply 응답. 다른 호스트들은 메시지 버림

Source Destination Protocol Info
00:0a:12:0b:c3:04 ff:ff:ff:ff:ff:ff  ARP Who has 1922.168.0.0? Tell 192.168.0.1
00:0c:78:9c:cc:0c 00:0a:12:0b:c3:04 ARP 192.168.0.0 is at 00:0c:78:9c:cc:0c

Request를 까보면

Hardware type: Ethernet (0x0001)
Protocol type: IP(0x0800)
Hardware size: 6
Ptotorol size: 4
Opcode: request (0x0001)
Sender MAC address: 00:0a:12:0b:c3:04
Sender IP address: 192.168.0.1
Target MAC address: 00:00:00:00:00:00
Target IP address: 192.168.0.0

 

이런식으로 들어가있다.

 

Reply를 까보면

Opcode: reply (0x0002)
Sender MAC address: 00:0c:78:9c:cc:0c
Sender IP address: 192.168.0.0
Target MAC address: 00:0a:12:0b:c3:04
Target IP address: 192.168.0.1

 

* ff:ff:ff:ff:ff:ff : 2계층의 브로드캐스트 주소. 즉, 모든 로컬 네트워크에 물어보기 위해 전송

 

 

RAPR 동작방식
- RARP Request Broadcast -> Unicast로 RARA Reply 응답받음

 

(짤막지식

1. 2계층 브로드캐스트 mac 주소 ff:ff:ff:ff:ff:ff
- 동일 로컬 네트워크내의 모든 노드에게 전달된다

2. 3계층 브로드캐스트 ip 주소
- Local Limited Broadcast : 255.255.255.255 동일 로컬 네트워크 내에서 모든 노드에게 전달
- Directed Broadcast : 다른 네트워크에 브로드캐스트 메시지를 전달. 악용의 소지가 있어 라우터가 잘 허용해주진 않음
ex 192.168.10.255

 

3계층에서 255.255.255.255로 전달되면
2계층에서도 ff:ff:ff:ff:ff:ff로 캡슐화

3계층에서 192.168.10.255로 전달되면
2계층에선 라우팅 테이블의 게이트웨이 주소(192.168.10.~의)의 mac주소로 캡슐화)

 

 

 

6 END --

 

 

ARP Cache Table
- 조회 명령어 : arp -a
- 삭제 명령어 : arp -d
- 정적 설정 : arp -s [ip주소] [mac 주소]
- 타입 dynamic(일정기간 후 삭제) 또는 static(리부팅 전까지 유지)으로 지정

(리눅스에선 arp -d [ip주소] 입력해야함)

 

ARP Spoofing 공격 (ARP Cache Poisoning포이즈닝)
- 희생자에게 ARP Reply를 공격자의 주소로 지속적으로 전송하여,
희생자의 ARP Cache Table에 특정 호스트의 mac주소를 공격자의 주소로 변조한다.
희생자가 특정 호스트에게 보내는 패킷을 공격자의 주소로 보내게 되고(스니핑),
공격자는 IP Forward 기능을 통해 정상적인 통신이 이루어지는 것처럼 위장한다.

 

시험에서는 중복된 mac 주소를 보여주며 ARP 스푸핑 공격을 나타낸다
(arp -a의 결과를 보여준다거나)

 

arp - a를 실행한 결과 예시

Interface Address     Physical Address          Type
192.168.0.100         00-0a-12-3b-45-7c      dynamic
192.168.0.177         00-0a-12-3b-45-7c      dynamic

=> ARP Spoofing 공격 유추 가능

(만약 MAC주소가 변경되는 예시가 나온다면, 변경된 IP가 희생자이고 원래 그 MAC주소를 갖고 있던 IP가 공격자이다.

희생자의 MAC주소를 공격자의 MAC주소로 변조하는 공격이기 때문)

 

(fragrouter -B1 : ip Forward 기능 활성화)

 

대응방법
- 구조적인 취약점이 있으므로 완벽한 방어는 없음.
- ARP 캐시를 static로 설정하면 ARP 공격이 와도 변조되지 않는다.

시스템 부팅시마다 ARP 캐시를 정적으로 구성해주어야 하는 번거로움이 있음
ARPWatch 등을 이용해 IP주소와 MAC주소 매핑을 감시할 수 있다

 

(+ ARP Redirect : 게이트웨이인 척 변조)

 

GARP (Gratuitous ARP)
Sender IP와 Target IP가 동일한 ARP 요청
- 브로드캐스트를 통해 로컬내 다른 장비에게 자신의 존재를 알리는 목적

 

목적
IP 충돌 감지 (자신과 동일한 IP가 있는지 ARP Reply로 확인 가능)
상대방의 ARP Cache 정보 갱신 (이 부분이 취약점이 될 수 있다. 상대방을 인증하지 않으므로)

 

 

MITM (Man In the Middle) 중간자 공격
- 네트워크 통신을 조작해 통신 내용을 도청 및 조작, 재전송하는 공격 기법
- 호스트 A, B 사이에 침입해 두 호스트의 패킷을 도청 및 조작해 재전송

 

 

7 END ----

 

 

IP(IPv4) 프로토콜
1) 개요
비연결형 프로토콜. 패킷 전송 순서를 보장하지 않는다
비신뢰적Unreliable 프로토콜.
목적지 주소를 기반으로 라우팅을 담당하는 인터넷 계층의 대표 프로토콜.
- 라우팅 알고리즘을 통해 최적의 경로를 선정하여 목적지를 찾아간다

(비연결형: 가상의/논리적인, 연결형: 연결상태/통로)

(흐름제어 : 상대방이 수신할 수 있는 만큼만 전송
오류제어 : 오류나 손실이 발생하지 않도록 보장
혼잡제어: 네트워크 전송량 조절
=> 신뢰적 프로토콜)

 

2) 구조

Header(20~60byte)

1. VER (4) : IP 버전 정보
2. HLEN : 헤더길이. 4Byte 단위
3. Service Type
4. Total length
5. Identification (16bit) : 단편화, 재조합 관련 필드. 원본 IP 데이터그램을 식별하기 위한 ID
6. Flags (3bit) : 단편화, 재조합 관련 필드.

- 첫 번째 비트 : 사용 안함

- 두 번째 비트 : 1 설정시 단편화 하지 말라는 의미

- 세 번째 비트 : 1 설정시 추가단편 있음, 0은 없음
7. Fragmentation offset (13bit) : 단편화, 재조합 관련 필드.

- 현재 단편의 상대위치offest을 저장한 필드. 8Bytes 단위 
8. Time to live : (=TTL) 라우터/L3스위치 통과 가능 횟수 hop count (무한루핑(looping) 방지)
- 통과시마다 -1되고 0이되면 패킷을 폐기하고 ICMP Destination Unreachable전송

- OS마다 TTL 값이 달라 os 핑거프린트 목적으로 사용가능
9. Protocol

- 상위 프로토콜을 식별하기 위한 프로토콜 번호를 저장 ex ICMP(1) TCP(6) UDP(17)
10. Header checksum
11. Source IP address (32bit) 출발지 IP주소 
12. Destination IP address (32bit)  목적지 IP주소 
13. 주요 LP 옵션 헤더 (잘 사용하지 않음)

- Loose느슨한 Soure Route : 경우에 따라 다른 경로로 라우팅
- Strict엄격한 Soure Route : 무조건 출발지에서 지정한 경로로 라우팅

 

 

IP 단편화와 재조합

- L1~L2 계층의 프로토콜(이더넷, 토큰링 등)은 물리적인 네트워크 프로토콜이라고 한다.
한 번에 전송할 수 있는 데이터의 크기가 제한적 (MTU Maximum Transmission Unit)
(ex 이더넷 MTU: 1500byte(1500 옥텟))

- MTU가 프로토콜마다 제각각이므로 IP 단편화 (Fragmentation) 를 하게되고 수신측에서 재조합 (Reassembly)

- 이더넷 IP 단편화 예시
원래의 데이터 : 2960 Byte
첫 번째 단편 : IP Header 20Byte + IP 데이터부 Payload 1480Byte => 총 1500Byte
두 번째 단편 : IP Header 20Byte + IP 데이터부 Payload 1480Byte => 총 1500Byte

* 단편화는 라우터/L3 스위치 등의 중계구간 MTU에 따라 추가로 발생할 수 있지만, 재조합은 최종 목적지에서만 진행

 

계산 예시 (어느정도는 계산할 수 있어야 함)

원본 : 3018Byte, 이더넷 환경
첫 번째 단편 : Identification=1, flag 001, offset = 0, total length = 1500
두 번째 단편 : Identification=1, flag 001, offset = 1480, total length = 1500
세 번째 단편 : Identification=1, falg 000, offset = 2960, total length = 78
(1480 + 1480 + 58 = 3018byte)

 

* tcpdump 패킷 캡쳐 예시 
[root@Fedora]# tcpdump -i eht0 -nvv "ip"
00:00:00.123456 < 12.12.12.1 > 10.10.10.100 : icmp: echo request (frag 22666:1480@0+) (ttl 128)
00:00:00.123458 < 12.12.12.1 > 10.10.10.100 : (frag 22666:1480@1480+) (ttl 128)
00:00:00.123459 < 12.12.12.1 > 10.10.10.100 : (frag 22666:48@2960) (ttl 128)

=> 22666은 identification, 1480은 ip 헤더를 제외한 total length, 0은 offset +는 more fragments bit 1 추가단편 있음

(frag "단편 id":"단편크기(ip헤더 제외)"@"offset"+(또는 +없음))

 

-- 8 END