ARP Spoofing Attack ( MAC주소 이용 )

2017. 6. 23. 21:02NetworkHacking/Network




대표적인 Sniffing기법중의 하나이다

ARP Spoofing은 근거리 통신망(LAN) 하에서 주소 결정 프로토콜(ARP) 메시지를 이용하여 상대방의 데이터 패킷을 중간에서 가로채는 중간자 공격 기법 ( Man In The Middle )

데이터 링크 상의 프로토콜인 ARP 프로토콜을 이용하기 때문에 근거리상의 통신에서만 사용할 수 있는 공격



[ 실습1 ] - A에게 ARP 패킷을 보낸다

A가 B에게 보내는 데이터를 가로채보자 ( A -> hacker -> B )

A ip : 192.168.6.41

B ip : 192.168.6.200


[1] #vi arping.py : A의 캐시 테이블을 오염시키는 코드


설명

1> 사용자 A에게 arp패킷을 보낸다 ( B의 아이피로 가장하고 B인척하면서 B의 맥 어드레스를 자신의 어드레스로 변질시켜서 전송한다 )

일정 시간이 지나면 A의 캐시 테이블에서의 B 맥 어드레스가 정상적으로 다시 바뀌게 되어서 반복문을 통해 계속해서 arp패킷을 전송한다

2> 사용자 A에게는 B의 정보가 캐시 테이블에 저장된다 ( 하지만 맥 어드레스는 변질되어 있음 ! )

3> A가 B에게 데이터를 전송하면? 내 MAC Address에 데이터가 전송되서 읽어들일 수 있다


[2] 명령어 fragrouter -B1

fragrouter 툴을 이용해서 A에서 B로 보내는 데이터를 전송시켜준다 ( 해킹당했다는 의심이 안들도록 정상적으로 작동시키기 위함 )

다운법

1) #wget ftp://rpmfind.net/linux/dag/redhat/el6/en/i386/dag/RPMS/fragrouter-1.6-0.2.el6.rf.i686.rpm

2) #rpm -ivh fragrouter-1.6-0.2.el6.rf.i686.rpm

3) #fragrouter -B1 : 명령어를 입력하면 가동상태가 된다 ( -B1 : 기본옵션 )


[3] #vi sniffer2.py

읽어드린 데이터를 출력한다


[4] 실행결과 : 3개의 창을 켜두고 실행하도록 한다

1> #python3 arping.py    : A에게 arp패킷을 무한히 보내고 있음 

2> #python3 sniffer.py    : eth0으로 들어오는 데이터 읽어드린다 ( A -> hacker's Mac -> B )

3> #python3 fragrouter -B1 : A에서 들어오는 데이터가 B에 전달되도록 하는 tool ( 위장하기 위함 )

4> 또 다른 사용자 A가 B에게 데이터를 전송하면 아래와 같이 sniffer에서 읽습니다

[ 그림1 ]

A에서 B로 가는 데이터를 가로채서 출력까지 완료된 모습이다



[ 실습2 ] B에게 ARP패킷을 보낸다

 A가 B에게 보내는 데이터를 가로채며, B가 A에게 보내는 데이터도 가로챈다

그리고 fragrouter tool을 이용해서 정상적인 데이터 전송이 된다고 위장한다


[1] #vi arping2.py


설명

1> 사용자 B에게 arp패킷을 보낸다 ( A의 아이피로 가장하고 A인척하면서 A의 맥 어드레스를 자신의 어드레스로 변질시켜서 전송한다 )

일정 시간이 지나면 B의 캐시테이블에서의 A 맥 어드레스가 정상적으로 다시 바뀌게 되어서 반복문을 통해 계속해서 arp패킷을 전송한다

2> 사용자 B에게는 A의 정보가 캐시 테이블에 저장된다 ( 하지만 맥 어드레스는 변질되어 있음 ! )

3> B가 A에게 데이터를 전송하면? 내 MAC Address에 데이터가 전송되서 읽어들일 수 있다



[2] #vi sniffer2.py


[3] 실행결과 

1> #python3 arping.py    : A에게 arp패킷을 무한히 보내고 있음 ( A의 캐시 테이블 변조 )

2> #python3 arping.py    : B에게 arp패킷을 무한히 보내고 있음 ( B의 캐시 테이블 변조 )

3> #python3 sniffer.py    : 해커의 장치(eth0)로 들어오는 데이터 읽어들이고 필터링해서 출력 ( A -> hacker's Mac -> B )

4> #python3 fragrouter -B1 : A와 B가 정상적으로 통신하고 있음을 위장한다

=> A와 B가 서로 데이터를 교환하면 sniffer에서 해당 정보가 읽혀져 아래와 같이 출력된다


[ 그림2 ]


A(192.168.6.41) 가 B(192.168.6.200) 에게 보내는 패킷과 B가 A에게 보내는 패킷이 hacker의 MAC에 도착함을 알 수 있다

이 때에도 fragrouter tool을 사용해 A->B, B->A 과정을 실행시켜서 정상적으로 작동하는 것처럼 위장하자




[ 동작과정 ]

1> A와 B 각각의 호스트에게 arp패킷을 보낸다

=> A의 캐시테이블에서 B의 맥주소 = 해커의 맥주소 / B의 캐시테이블에서 A의 맥주소 = 해커의 맥 주소

2> A가 B에게 데이터를 전송한다                  

=> 해커의 장치( eth0 )로 해당 패킷이 들어온다

=> fragrouter tool 을 사용해 B에게도 전송시켜 위장한다

3> B는 A로부터 데이터를 받은 것으로 인식하고 A에게 답변을 해준다

=> 해커의 장치( eth0 )로 패킷이 들어온다

=> fragrouter tool 을 사용해 A에게도 전송시켜 위장한다

4> A와 B는 서로 정상적으로 데이터를 교환했다


* A => Hacker => B 의 형태로 중간에서 패킷을 가로채는 방식으로 공격이 이루어진다 

( 단, 근거리 통신망에서만 가능하다 ! arp 프로토콜을 사용하므로.. )



*실행화면

 #python3 arping.py

[ 그림3 ]


 #fragrouter -B1 

[ 그림4 ]