작성자유창훈

ARP부터 시작하겠습니다. 
패킷 구조가 나와있는 책은 꼭 한권 옆에 두고 언제라도 참고할 수 있도록 하시면 좋겠습니다.

1. ARP 이해 
2. 구조
3. 공격 방법
4. 방어 방법



1. ARP 프로토콜의 이해.

: 주소변환프로토콜. 
 
이더넷 환경에서 프래임의 구조는 위의 그림과 같습니다.
여기서 MAC Header이라고 되어있는 부분이 이더넷 헤더 이고 , Ether Type에 정의된 형식에 따라 뒤에 오는 Data부분이 ARP가 될 수 도 있고 RARP가 될 수 도 있고 IP 가 될 수 도 있습니다. 

이더넷 헤더에서 보듯이 제일앞에 나오는것, MAC 주소가 제일 먼저 나옵니다. 그만큼 이유가 있겠지요.
컴퓨터에서 다른 컴퓨터로 데이터를 전달할 때, 라우터를 거치게 됩니다.  전체구간동안 패킷안에 src_IP와 dst_IP는 변화가 없지만 MAC주소는 변하게됩니다.  즉, 각 구간마다 MAC주소는 변하게 되며 실질적인 통신이 가능하게 해주는 것은 MAC주소가 있기 때문입니다.  

보통 PC에서 처음인터넷을 연결할때, 게이트웨이의 IP주소는 알고있는데, MAC주소를 모릅니다. 
MAC주소가 없으면 데이터를 보내고자 할 때, 위에서보는 이더넷 프래임의 처음 6바이트를 채우지 못하여 데이터를 전달할 수가 없습니다. 
그래서 ARP 를 통하여 "내가 IP를 알고있으니 이 IP에 해당하는 MAC주소를 내놔라" 하면서 방송하는 것이 ARP입니다. 반대는 RARP이겠지요.~

ARP는 같은 네트워크 상에서만 공격이 가능합니다. Request패킷이 방송(브로드캐스트한다고해도) Router을 넘을 수 없으므로 ARP공격은 다른 네트워크 대역으로 할 수 없다는 뜻입니다. 아주 철통같은 망이라해도 유선이든 무선이든 한 곳이라도 접속가능하다면 위험합니다. 

2. 구조분석

 ARP구조는 다음과 같습니다.  구조는 살짝 참조하였습니다(http://www.ktword.co.kr/abbr_view.php?m_temp1=2188)
0                                                                31  
┌─────────────────┬────────────────┐──────────────────────────────────  
│           Hardware type          │        Protocol Type            │  
├────────┬────────┼────────────────┤──────────────────────────────────
│Hardware Length │ Protocol Length│ Operation │  
├────────┴────────┴────────────────┤──────────────────────────────────
│ Sender Hardware Address │  
├─────────────────────────────────────────────────────────────────────
│ Sender Protocol Address │  
├────────────────────────────────────────────────────────────────────
│ Target Hardware Address │  
├────────────────────────────────────────────────────────────────────
│                     Target Protocol Address                        │  
└────────────────────────────────────────────────────────────────────
<구조 설명은 위에 링크를 참고하셔서 알아두시면됩니다.>  
ARP 패킷 보실때    
opcode  가   1(Request)인지 2(Reply)인지 확인하시고, 

Request라면 다음과 같이 셋팅 됩니다. 
Sender Hadware Address : 보내는 노드 MAC주소         ========>>>> 이부분의 
Sender Protocol Address :  보내는 노드 IP주소
Target Hadware Address :  0으로 채워져있습니다.
Target Protocol Address :  MAC주소를 알고자하는 노드의 IP주소
Reply라면 다음과 같이 셋팅 됩니다
Sender Hadware Address : 보내는 노드  MAC주소         ========>>>> 이부분의 
Sender Protocol Address :  보내는 노드 IP주소
Target Hadware Address :  Request보낸사람의 MAC주소
Target Protocol Address :  Request보낸사람의 IP 주소

나머지 패킷 구성은 보시면 그냥 하실수있을정도입니다. 

3. 공격 방법 
ARP Spoofing 공격은 로컬 네트워크(LAN)에서 사용하는 ARP 프로토콜의 허점을 이용합니다. 허점이라하면 아무런 여과없이 ARP Request ,Reply를 받아들인다는 것이지요. 

ARP Request, Reply 둘다 사용할 수 있지만 Request를 많이 이용합니다. 

밑에 표는  ARP Request와 Reply 패킷으로 위장한 공격 패킷을 보낼때 필드에 채워질 사항으로 한번 정리해 보았습니다.  

 

 Request Reply 
 
Dstnation MacAddress
 Broadcast  Target의 정확한 Mac 주소
 
Source Mac Address
 자신을 숨기기위한 가짜 주소 자신을 숨기기 위한 가짜 주소 

Sender Mac Address 
 밑에 Sender IP와 맵핑될 MAC주소
(spoofing 시 공격자나 전달될 곳의 
 MAC주소로 위장)
 밑에 Sender IP와 맵핑될 MAC주소
(spoofing 시 공격자나 전달될 곳의 
 MAC주소로 위장)

 Sender IP Address
 네트워크상에 존재하는 IP
(spoofing시 일반적으로 Gateway IP)
공격 대상자의 ARP 캐시 테이블에
있는 IP

Target Mac Address 
 0으로 채움  아무거나 가능

 Target IP Address
 공격 대상자의 IP  아무거나 가능

딱 보시면 아시겠지만 Request패킷이 두가지 정도  신경쓸 필요가 없습니다.
저는 보통 특정 컴퓨터 한대만을 대상으로 할때는 Request를 사용하고  , 다수의 컴퓨터를 대상으로 할 때는 Reply를 사용합니다. 

여기서 ARP Request 패킷안에 게이트웨이의 정상적인 IP와 게이트웨이의 변조된 MAC주소(공격자 자신의 MAC)를 셋팅해서 공격대상인 PC에 보낸다면 어떻게 될까요?  자신의 응답패킷을 받은 컴퓨터는 당연히 게이트웨이 IP주소에 해당하는 MAC주소를 덮어쓸것입니다. 여과없이....
그러면 공격을 받은 PC는 (외부로 나가는 = 인터넷을 하는)모든 패킷의 처음 6바이트인 목적지 주소를 공격자의 MAC주소로 바꾸어 전송하게 됩니다. 공격자 PC에서는 이렇게 전달 받은 패킷을 진짜 gateway로 잘 전달해주면됩니다.

또 gateway를 상대로도 똑같은 원리를 적용하여 공격 대상자의 IP주소에 해당하는 맥주소를 공격자의 MAC주소로 변환시키고 외부로 부터 공격대상자로 가게 되는 패킷들은 gateway로 부터 잘 받아서 전달해 주기만 하면 됩니다. 

그러면 공격 대상자 는 인터넷이 조금 느려진다는 것을 제외하곤 이 사실을 눈치채기 어려우며, 공격자는 가만히 앉아서 교환되는 모든 패킷을 감시하는 Sniffing을 할 수 있습니다.  즉 , 예전 더미허브 환경과는 달리 요즘은 스푸핑을 전제로 스니핑을 시도하는 경우가 많습니다.

ARP공격에 따른 캐시테이블의 변화도  직관적이기 때문에 arp -a 리눅스는 arp -n 명령어를 통하여 확인가능합니다.


4. 방어개념
 
위에 설명되어있듯이 ARP는    헛점이 있습니다. 그 헛점을 막으면 되는것입니다. 여과없이 IP에 해당하는 MAC주소를 ARP캐시테이블에 저장하지 않도록 , 미리 IP와 MAC주소를 맵핑해여 고정적으로 ARP 캐시 테이블에 저장해 두는 것입니다. 

또한 스위치에서 포트에대한 MAC주소를 정의할 수도 있겠습니다. 

공격유형에 따라 여러가지가 있지만 만약 1회성의 공격이라면 가만히 있으면 원상복구 되기도 합니다. 
이는 캐시테이블상의 유지를 위해 라우터나 PC가 주기적으로 확인 패킷을 주고 받는데 이때 정상적으로 요청 응답을 하게 되면 ARP캐시테이블 상의 맵핑이 정상으로 돌아옵니다.   

하지만 보통 스푸핑은 스니핑을 위한 전초단계일 뿐이고, 스니핑이 이루어지기 위해 지속적인 공격이 이루어 지므로 1회성의 공격을 기다하기보단 보다 적극적인 예방 및 해결 조치가 필요합니다.  

arp -d 명령어로 arp 캐시 테이블을 초기화 시키고 정상ARP 패킷을 받는 방법도 있지만 이는 지속적인 공격이 이루어 질 때는, 아무런 효과를 거두지 못합니다.  


-------------------------------------------------------------------------------------------------------------------------------------------------------------
정리를 하고 보니, 허술한부분이 많은것 같습니다. 그냥 같이 공부하시면서 재미있게 봐주셨으면 좋겠습니다. 
이상으로  ARP정리를 마치고  다음 글에는 조작된 ARP 패킷을 작성해 보도록 하겠습니다. 



 
AND