본문 바로가기

Learning/└◆Security Section

[네트워크 이론] ARP & RARP

 

 

7

ARP(Address Resolution Protocol)

 

ARP(주소 변환 프로토콜, Address Resolution Protocol)IP 네트웍 상에서 IP 주소를 물리적 네트웍 주소로 대응시키기 위해 사용되는 프로토콜이다. 여기서 물리적 네트웍 주소라 함은 이더넷 또는 토큰링의 48 bits 네트웍 카드주소를 의미한다.

예를 들어, IP 호스트 AIP 호스트 B에게 IP 패킷을 전송고자 할 때 IP 호스트 B의 물리적 네트웍 주소를 모르는 경우, ARP 프로토콜을 사용하여 목적지 IP 주소 B와 브로드캐스팅 물리적 네트웍 주소 FF:FF:FF:FF:FF:FF를 가지는 ARP 패킷을 네트웍 상에 전송한다. IP호스트 B는 자신의 IP 주소가 목적지에 있는 ARP 패킷을 수신하면 자신의 물리적 네트웍 주소를 A에게 응답한다.

 

이와 같은 방식으로 수집된 IP 주소와 이에 해당하는 물리적 네트웍 주소 정보는 각 IP 호스트의 ARP 캐시라 불리는 메모리에 테이블 형태로 저장된 후 다음 패킷 전송시에 다시 사용된다. ARP와는 역으로, IP 호스트가 자신의 물리 네트웍 주소는 알지만 IP 주소를 모르는 경우, 서버로부터 IP주소를 요청하기 위해서는 RARP를 사용한다.

 

IP -> MAC

IP를 통해서 MAC을 확인하기 위함

 

(1). ARP 동작

ARP 프로토콜은 통신할때 항상 사용하는 것이다. 같은 네트워크 안에서 두대의 서버는 통신하게 된다. ServerAServerB와 통신하기 위해서는 ServerBMAC 주소를 알아야만 한다. 그래서 ARP을 통해서 통신하기 전에 ServerBMAC 주소를 얻어 온다. ServerBMAC주소를 알게되면 다음에 또 사용할것을 대비해서 ARP 캐쉬 테이블(ARP Cache Table)에 기록하게 되고 캐싱된 것을 가지고 또 통신하는 경우 사용하게 된다.

 

ARP 프로토콜의 동작 원리를 확인

 

ARP프로토콜동작원리확인.hwp

 

 

ARP 프로토콜의 동작 원리를 확인

 

 

사용시스템

- linux200

- windows2008

 

 

ARP cache table 관리명령어(EX: 리눅스 기준)

(설정) # arp -s <IP> <MAC>

(확인) # arp -a

(삭제) # arp -d <IP>

 

 

(linux200)

# arp -d 192.168.20.201

# ping -c 1 192.168.20.201

# arp -a

? (192.168.20.100) at 00:0C:29:99:C2:B9 [ether] PERM on eth0

? (192.168.20.201) at 00:0C:29:17:06:FB [ether] on eth0

 

 

(window2008)

c:\> arp -d 192.168.20.200

c:\> ping -n 1 192.168.20.200

c:\> arp -a

인터페이스: 192.168.20.201 --- 0xb

인터넷 주소 물리적 주소 유형

192.168.20.100 00-0c-29-99-c2-c3 동적

192.168.20.200 00-0c-29-e0-2c-6f 동적

192.168.20.255 ff-ff-ff-ff-ff-ff 정적

224.0.0.22 01-00-5e-00-00-16 정적

224.0.0.252 01-00-5e-00-00-fc 정적

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ethernet Header

 

 

 

ARP Header

 

 

 

 

 

[실습] ARP 패킷을 캡쳐하고 분석

Ethernet Header의 모양을 확인하고 저장한다.- win2008(windows 2008) 에서 실습- linux200(centos 5.10)에서 실습

 

ARP패킷을캡쳐하고분석하기.hwp

 

 

 

 

 

 

 

 

 

 

ARP 헤더 분석

 

 

 

 

00 01 : Ethernet (0x0001)

 

보내는 MAC ( Linux )

받는 MAC ( 0 처리 )

 

 

 

 

 

Trailer 크기를 맞추기 위함

 

 

 

 

 

 

 

Win2008

 

 

 

 

 

ARP 패킷을 캡쳐하고 분석하기

 

 

 

사용시스템

- linux200

- windows2008

 

 

(linux200)

 

# wireshark &

 

# arp -d 192.168.20.201

# ping -c 1 192.168.20.201

# arp -a

nic2 (192.168.20.100) at 00:0C:29:99:C2:B9 [ether] PERM on eth0

win2008 (192.168.20.201) at 00:0C:29:17:06:FB [ether] on eth0

 

 

wireshark 화면

43 Vmware_e0:2c:6f Broadcast ARP Who has 192.168.20.201? Tell 192.168.20.200

44 Vmware_17:06:fb Vmware_e0:2c:6f ARP 192.168.20.201 0c:29:17:06:fb

45 192.168.20.200 192.168.20.201 ICMP Echo (ping)

46 Vmware_17:06:fb Broadcast ARP Who has 192.168.20.200? Tell 192.168.20.201

47 Vmware_e0:2c:6f Vmware_17:06:fb ARP 192.168.20.200 0c:29:e0:2c:6f

48 192.168.20.201 192.168.20.200 ICMP Echo (ping) reply

 

 

 

(windows 2008)

 

wireshark 프로그램 실행

 

c:\> arp -d 192.168.20.200

c:\> ping -n 1 192.168.20.200

c:\> arp -a

인터페이스: 192.168.20.201 --- 0xb

인터넷 주소 물리적 주소 유형

192.168.20.100 00-0c-29-99-c2-c3 동적

192.168.20.200 00-0c-29-e0-2c-6f 동적

192.168.20.255 ff-ff-ff-ff-ff-ff 정적

224.0.0.22 01-00-5e-00-00-16 정적

224.0.0.252 01-00-5e-00-00-fc 정적

239.192.152.143 01-00-5e-40-98-8f 정적

239.255.255.250 01-00-5e-7f-ff-fa 정적

 

 

wireshark 출력 화면

25 Vmware_17:06:fb Broadcast ARP 42 Who 192.168.20.200? Tell 192.168.20.201

26 Vmware_e0:2c:6f Vmware_17:06:fb ARP 60 192.168.20.200 is at 00:0c:29:e0:2c:6f

27 192.168.20.201 192.168.20.200 ICMP 74 Echo quest id=0x0001, seq=7/1792, ttl=128 (reply in 28)

28 192.168.20.200 192.168.20.201 ICMP 74 Echo ply id=0x0001, seq=7/1792, ttl=64 (request in 27)

 

캡쳐된 파일들을 파일로 저장한다.

 

 

 

 

 

 

 

[실습] 이더넷 주소를 임시적으로 바꾸기

win2008(windows 2008) 에서 실습

linux200(centos 5.10) 에서 실습

 

 

MAC주소를임시적으로변경하는방법.hwp

 

 

 

 

PERM : 영구적이다. (재부팅 전까지 유지)

 

 

 

MAC 주소를 임시적으로 변경하는 방법

 

 

사용시스템

- linux200

- windows2008

 

 

[참고] ARP Cache Table 관리 명령어

(설정) # arp -s <IP> <MAC>

(확인) # arp -a

(삭제) # arp -d <IP>

 

[참고] 물리적인 주소(MAC 주소)에 대해서(EX: Network Adapter, 1 port)

* 공장에서 생산할 때 할당되는 번호(port 구분 번호)

* 일반적인 체계에서는 MAC 중첩이 나지 않는다.

* 운영체제가 기동이 될때 NICMAC 주소를 불러서 설정한다.

* 운영체제에서 임시적으로 NICMAC 주소를 변경해도 재부팅이 되면 다시 복원된다.

* 가상 운영체제 환경(EX: VMware)인 경우에는 약간 틀리다.

 

(linux200)

 

linux200 IP : 192.168.20.200

win2008 IP : 192.168.20.201

 

window2008 서버에 ping 테스트 후 arp cache table 확인

# ping -c 1 192.168.20.201

# arp -an

? (192.168.20.201) at 00:0C:29:E5:D4:AD [ether] on eth0

 

새로운 MAC 주소로 arp cache tablestatic 하게 등록(잘못된 설정)

# arp -d 192.168.20.201

# arp -s 192.168.20.201 00:0C:29:E5:D4:AA <--- 'AD -> AA' 변경

# arp -an

? (192.168.20.201) at 00:0C:29:E5:D4:AA [ether] PERM on eth0

 

통신 테스트

# ping -c 1 192.168.20.201

-> 정상적으로 통신이 되는가?

 

Ping statistics - 100% packet loss

잘못된 MAC adress 로 인해 통신 불가

 

다시 정상적으로 변경

# arp -d 192.168.20.201

# arp -s 192.168.20.201 00:0C:29:E5:D4:AD

# arp -an

? (192.168.20.201) at 00:0C:29:E5:D4:AD [ether] PERM on eth0

 

통신 테스트

# ping -c 1 192.168.20.201

-> 정상적으로 통신이 되는가?

 

arp cache table 내용 삭제

# arp -d 192.168.20.201

 

 

 

 

 

(windows2008)

linux200 서버에 ping 테스트 후 arp cache table 확인

c:\> ping 192.168.20.200

Ping 192.168.20.200 32바이트 데이터 사용:

192.168.20.200의 응답: 바이트=32 시간=1ms TTL=64

192.168.20.200의 응답: 바이트=32 시간<1ms TTL=64

192.168.20.200의 응답: 바이트=32 시간<1ms TTL=64

192.168.20.200의 응답: 바이트=32 시간=7ms TTL=64

 

192.168.20.200에 대한 Ping 통계:

패킷: 보냄 = 4, 받음 = 4, 손실 = 0 (0% 손실),

왕복 시간(밀리초):

최소 = 0ms, 최대 = 7ms, 평균 = 2ms

 

c:\> arp -a

인터페이스: 192.168.20.201 --- 0xb

인터넷 주소 물리적 주소 유형

192.168.20.100 00-0c-29-f2-67-c6 동적

192.168.20.200 00-0c-29-d1-cc-21 동적

192.168.20.255 ff-ff-ff-ff-ff-ff 정적

224.0.0.22 01-00-5e-00-00-16 정적

224.0.0.252 01-00-5e-00-00-fc 정적

 

새로운 MAC 주소로 arp cache tablestatic 하게 등록(잘못된 설정)

c:\> arp -d 192.168.20.200

 

c:\> netsh interface show interface

관리 상태 상태 종류 인터페이스 이름

-------------------------------------------------------------------------

사용 연결됨 전용 로컬 영역 연결

 

c:\> netsh interface ip add neighbors "로컬 영역 연결" "192.168.20.200" "00-0c-29-d1-cc-22"

-> MAC 주소를 다른것을 설정한다.(00-0c-29-d1-cc-21 ===> 00-0c-29-d1-cc-22)

-> (예제) netsh interface ip add neighbors "로컬 영역 연결" "192.168.20.200" "00-0c-29-e0-2c-66"

 

c:\> arp -a

-> 잘못된 MAC 주소 확인

 

통신 테스트

c:\> ping 192.168.20.200

-> 테스트가 되는가?

 

arp cache table 내용 삭제

c:\> netsh interface ip delete neighbors "로컬 영역 연결" "192.168.20.200"

or

c:\> arp -d 192.168.20.200

 

통신 테스트

c:\> ping 192.168.20.200

-> 테스트가 되는가?

 

 

 

(결론)

한번 통신하면 arp cache table에 저장이 된다.(IP <-> MAC)

MAC 주소가 틀리면 통신이 되지 않는다.

 

 

 

 

 

정리

 

실제 MAC   00-0c-29-13-ed-e0
변경할 MAC 00-0c-29-d1-cc-22

ping 192.168.20.200

arp -a

arp -d 192.168.20.200
netsh interface ip add neighbors "로컬 영역 연결" "192.168.20.200" "00-0c-29-d1-cc-22" 

(테스트) 

arp -a

ping 192.168.20.200

 

(삭제)
netsh interface ip delete neighbors "로컬 영역 연결" "192.168.20.200"

arp -d 192.168.20.200

 

 

[실무 활용 예]

 

반드시 실습은 172.16.0.0/16 대역의 PC에서 작업한다.

 

(원본 운영체제에서 수행해 본다.)

 

c:\> ping 172.16.255.255

c:\> arp -a

-> (실무) 같은 네트워크 안에 살아있는(alive) 시스템을 확인 할 수 있다.

-> (실무) MAC 주소가 중첩(충돌)이 발생한 서버의 MAC 주소를 확인 할 수도 있다.

-> (실무) SAN 스토리지/스위치(네트워크 장비) IP를 모르는 경우 IP 확인을 위해서 사용한다.

 

 

 

ARP Poisoning

 

 

 

ARP(Address Resolution Protocol) 프로토콜은 네트워크 상에서 IP 주소를 MAC 주소와 대응하기 위해 사용된다.

예를 들어, IP 호스트 AIP 호스트 B에게 IP 패킷을 전송하고자 할 때 IP 호스트 BMAC 주소를 모르는 경우, ARP 프로토콜을 사용하여 목적지 IP 주소 B와 브로드캐스팅 물리적 네트워크 주소 FFFFFFFFFFFF를 가지는 ARP 패킷을 네트워크 상에 전송한다.

IP 호스트 B는 자신의 IP주소가 목적지에 있는 ARP 패킷을 수신하면 자신의 MAC 주소를 A에게 응답한다.

이와 같은 방식으로 수집된 IP주소와 이에 해당하는 MAC 주소 정보는 각 IP 호스트의 ARP Cache라불리는 메모리에 데이블 형태로 저장된 후 다음 패킷 전송시에 다시 사용된다.

원격의 공격자는 알려진 IP에 대해 잘못된 MAC 주소를 계속 발생시켜 ARP cache가 잘못된 정보를 저장하도록 하여 로컬네트워크 상에서 서비스 거부 공격을 발생시킨다.

 

[참고] 속이기(Spoofing)

스푸핑(Spoolfing)이란 속이다라는 의미이다.

IP주소, 호스트이름, MAC 주소등 여러가지를 속일수 있으며, 스푸핑은 이런 속임을 이용한 공격을 총칭하는 명령이다.

ARP 스푸핑, IP 스푸핑, DNS 스푸핑, DHCP 스푸핑등이 있다.

인터넷이나 로컬에서 존재하는 모든 연결에 스푸링이 가능하며, 정보를 얻어내는 것 외에도 시스템을 마비시키는 것도 가능하다.

흔히 일어나는 IP 충돌 문제 역시 고의가 아닌 IP 스푸핑이라고 생각할 수도 있다.

 

[참고] 스푸핑에 대해서

ARP Spoofing :

IP Spoofing :

DNS Spoofing :

DHCP Spoofing:

 

 

 

ARP Spoofing

로컬에서 통신하고 있는 서버와 클라이언트의 IP 주소에 대한 2계층 MAC 주소를 공격자의 MAC 주소로 속여 클라이언트가 서버로 가는 패킷이나 서버에서 클라이언트로 가는 패킷을 중간에서 가로채는 공격이다.

공격자는 이 패킷을 읽고 확인한 후 정상적인 목적지로 향하도록 다시 돌려 보내 연결이 끊어지지 않고 연결되도록 유지한다.

 

----------+-------------+-------------+--------------

          |             |             |

        HostA         Hacker        HostB

        - IP1          - IP2         - IP3

        - MAC1        - MAC2         - MAC3

중간에서 MAC 주소를 변경하여 패킷을 얻을 수 있다. (다른공격을 하기위한 전초작업)

HostA 와 HostB 에게 계속적인 신호 전송    (패킷상에 오버헤드가 심해 네트워크가 느려진다.)

IP fowding기능을 통한

 

* Ethernet Hub

* Ethernet Switch

 

 

[실습] ARP 스푸핑을 실습 & ARP 스푸핑을 막을수 있는 방법

http://hyess.tistory.com/entry/ARPAddress-Resolution-Protocol 

 

 

 

 

 

8

RARP(Reverse Address Resolution Protocol)

 

 

RARP는 근거리통신망 내에 물리적으로 존재하는 장치가 게이트웨이의 ARP 목록이나 캐시로부터 자신의 IP 주소를 알아내기 위한 확인 요청을 하는데 사용되는 프로토콜이다. 네트웍 관리자는 근거리통신망의 게이트웨이 라우터 내에 물리적인 장치가 그에 상응하는IP주소를 지칭하도록 목록표를 작성한다. 새로운 장치가 설정되었을 때, RARP 클라이언트 프로그램은 라우터 상의 RARP 서버에게 그 장치를 위한 IP 주소를 보내주도록 요청한다. RARP 서버는 라우터 목록 내에 새로운 엔트리가 설정되었다고 가정하여, 그 장치에게 IP주소를 답신해 주게 된다.

RARP는 이더넷, FDDI, 토큰링 등의 근거리통신망에서 사용할 수 있는 프로토콜이다.

 

 

MAC => IP

 

대표적인 RARP 사용 클라이언트

Diskless Client(Hardless Client)

 

[참고] PXE Boot + DHCP

 

(1). RARP 동작

RARP 프로토콜은 특정한 서버에서만 사용한다. RARP(a)Jumpstart Server/Client 통신시 (b)Diskless Server/Client 통신시에 사용된다. RARP를 사용해서 Client는 통신 초기에 서버에서 자신의 주소로 쓸수 있는 IP를 얻어 와야 한다. 이때 RARP를 통해서 IP를 얻어 오게 된다. 서버에서는 클라이언트에게 제공할 정보인 IPMAC 주소를 가지고 있고 in.rarpd 데몬를 통해서 서비스 하게 된다.

 

 

[그림] RARP 프로토콜 동작

(2). RARP 패킷 분석

 

 

 

[그림] RARP Encapsulation in Ethernet II Frame

 

 

[그림] RARP Header