본문으로 바로가기

ARP 공격

category SECURITY/Network 2017. 5. 4. 22:01


   ARP 공격


   ARP 공격 이론

1) ARP Cache Poisoning

 - request를 받은 호스트는 자신의 캐시 테이블을 업데이트

 - request를 요청한 호스트에 대해서는 인증을 하지 않습니다.

 - 다른 arp 주소를 보내도 인증을 하지 않고 받아드리기 때문에 캐시 테이블을 오염시킬 수 있습니다.

2) ARP Spoofing

 - packet sniffing을 위한 공격 기법

 - MITM(Man in the middle ) : 중간자 공격


[ 실습 ]

기본 사항

현재 모든 PC 들은 Vmware 환경에 있습니다.

Windows 7     IP : 192.168.0.107  Mac : 00:0C:29:AA:A5:E6

Server_Linux   IP : 192.168.0.104  Mac : 00:0C:29:D7:A6:9A

Client_Linux     IP : 192.168.0.106  Mac : 00:0C:29:43:11:EA


   1) ARP Cache Poisoning

 - 공격자 : Server_Linux

 - 희생자 : Windows 7

 - Target : Client_Linux

 - Windows 7 측에서 Client_Linux에게 ping을 보내려고 합니다.


먼저 희생자 측(Windows 7)에서 ARP 테이블을 확인해보면 현재 공격자 측과 Target측의 맥주소를 확인해볼 수 있습니다. (윈도우 : arp -a )

이 상태에서 Target인 Client_Linux로 보내게 되면 Ping이 잘 보내지는 것을 확인할 수 있습니다.

여기서 전에 만들었던 [ arp.py ] 소켓 프로그래밍 한 것을 통해 희생자(Windows 7)측 arp테이블에 Target arp 주소를 공격자 arp 테이블로 바꾸어서 패킷을 보냈습니다.

위에 파이썬 arp.py를 실행하게 되면 희생자측에서 arp -a로 보게되면 현재 target arp와 공격자 arp가 같다는 것을 확인해 볼 수 있습니다.

이로써 희생자 측의 arp 테이블이 오염된 것을 볼 수 있습니다.

그 상태에서 다시 target으로 ping을 보내게 되면 처음에 요청시간이 만료되었다가 다시 응답받는것을 확인할 수 있습니다.

처음에 요청시간이 만료되었다는 것은 희생자가 arp테이블을 보고 ping을 보냈는데 그게 공격자측으로 보내게 되었고, 공격자측에서도 응답을 다시 희생자 측에게 보내줘야 하는데 보내지 않았기 때문에 요청시간이 만료되었다는 것입니다.

하지만 다시 응답받는 이유는 다시 arp테이블을 받아오면서 원래 target의 맥주소로 바뀌었기때문에 통신이 가는 것입니다. 그렇기 때문에 다시 arp테이블을 확인해보면 처음상태로 돌아와있다는 것을 확인할 수 있습니다.



   2) ARP Spoofing

방금 위에서 한 내용을 보면 공격자가 희생자의 arp 테이블을 오염시킬 수 있습니다. 

하지만 다시 희생자가 target으로 보내게되면 통신이 안되기때문에 잘못되었다는 것을 확인할 수 있습니다. 

그래서 forwarding을 통해서 희생자가 target에게 패킷을 보내게 되면 먼저 오염된 arp테이블을 통해 패킷이 공격자에게 넘어가고, 공격자는 그 내용만 보고 다시 target에게 넘겨줍니다.

forwarding이란 원래 패킷의 목적지로 보내는 것을 얘기합니다.


여기서  fragrouter 툴을 이용해서 forwarding 하려고 합니다.

현재 저는 centos 6 32bit를 사용하고 있습니다.

https://centos.pkgs.org/6/repoforge-i386/fragrouter-1.6-0.2.el6.rf.i686.rpm.html

위에 주소로 들어가면 fragrouter 툴을 받을 수 있습니다. (Download - 다운로드 버튼을 누르면 밑에 창이 뜨게 됩니다. 

여기서 오른쪽마우스로 빨간색 박스로 되어있는 부분을 복사해서 리눅스에 wget명령어로 붙어놓게 되면 rpm 파일이 생성됩니다.

rpm 푸는 방법 : rpm -ivh 받은 폴더

fragrouter 사용 : fragrouter -B1



ARP Spoofing은 마찬가지로 똑같이 설정해주되 time명령어로 계속해서 공격자쪽에서 arp패킷을 보내 변경되는 것을 막습니다.

그리고 fragrouter를 이용하게 하게되면 희생자측에서 target으로 ping을 보내게 되면 통신이 되고 있다는 것을 확인할 수 있습니다.

[ 공격자측에서 sniffer를 통해 보낸 데이터를 확인한 결과 ]

[ fragrouter를 통해 확인한 결과 ]

하지만 희생자측에서 target으로 보내는 것만되고 받는 것은 공격자가 확인을 하지 못합니다. 그렇기 때문에 완성된 Arp Spoofing이라고 볼 수 없습니다.

완성을 시키려면 공격자가 target의 arp테이블을 오염시키게 되면 희생자와 target이 통신을 주고받는 내용을 확인할 수 있습니다.



'SECURITY > Network' 카테고리의 다른 글

IP 소켓 프로그래밍 + icmp 소켓  (0) 2017.05.11
IP 소켓프로그래밍  (0) 2017.05.10
ARP 소켓 프로그래밍  (0) 2017.05.01
이더넷 소켓 프로그래밍  (0) 2017.04.28
IP 로우 소켓 프로그래밍  (0) 2017.04.27