본문 바로가기
Python

python을 이용한 ARP 스푸핑 구현하기

by 웹하는빡통 2020. 3. 27.

ARP Spoofing근거리 통신망 하에서 주소 결정 프로토콜 메시지를 이용하여 상대방의 데이터 패킷을 중간에서 가로채는 중간자 공격 기법이다. 이 공격은 데이터 링크 상의 프로토콜인 ARP 프로토콜을 이용하기 때문에 근거리상의 통신에서만 사용할 수 있는 공격이다.

ARP 스푸핑은 해커들이 즐겨 사용하는 고전적인 방법 중 하나이며, 중간자 공격 등을 위한 매우효과적인 해킹 기법이다. 

 

만약 이 컴퓨터에서 192.168.30.2라는 IP주소를 가진 사용자에게 정보를 전송한다고 가정하자

그럼 192.168.30.2로 데이터를 전송하기 위해 ARP 브로드캐스트를 수행하기 전 ARP 테이블을 참조하여 캐시된 내용을 찾는다. 그래서 IP주소 192.168.30.2의 MAC주소가 있으면

해당 MAC주소로 정보를 전송하게 되는데 만약 이 MAC주소를 해커의 MAC주소를 바꾸게 된다면? 당연히 모든 데이터는 공격자에게 전송하게 된다. 

 

소스코드 설명.

Scapy 모듈네트워크 패킷을 보내고, 훔치고 또는 패킷을 위조 할때 사용하는 파이썬 프로그램이다. 해당 모듈의 기능은 네트워크를 점검하거나 스캔하거나 공격할때 주로 사용한다.

 

getMAC(ip)이더넷 환경의 LAN에서 IP에 해당하는 컴퓨터의 MAC주소를 얻는다.

만약 행당 컴퓨터가 동작하지 않는 상태하면 MAC 주소를 얻지 못하니 주의하길 바란다.

 

poisonARP(srcip, targetip, targetmac)은 Scapy모듈의 ARP()객체를 이용하여 ARP패킷을 구성하고 Scapy모듈의 send()로 ARP패킷을 전송한다. 

 

※ 여기서 잠깐! ARP() 인자는 다음과 같다.

 

op: ARP Request 또는 ARP Reply를 지정한다. 이 값이 1이면 request이고 값이 2이면 reply를 0뜻한다.

psrc: ARP 패킷을 보내는 IP주소를 지정한다.

pdst: ARP 패킷의 목적지 IP주소를 지정한다. 

hwsrc: ARP 패킷을 보내는 MAC주소를 지정한다.

hwdst: ARP 패킷의 목적지 MAC주소를 지정한다

 

여기서 11라인은 보내는 srcip="보내는 컴퓨터의 IP조소", targetip="목적지 컴퓨터 IP주소", targetmac="목적지 MAC주소"인 ARP Reply 패킷을 구성한다. 

 

restoreARP(victimip, gatewayip, victimmac, gatewaymac)은 희생자 컴퓨터와 게이트웨이의 ARP테이블을 원상 복구하는 함수이다. ARP 스푸핑을 통한 해킹 작업이 마무리되면 이 함수를 호출하여 피해 컴퓨터 및 게이트웨이의 ARP테이블을 원래대로 복구함으로써 자신이 해킹 피해를 입었는지 전혀 알 수 없게 하기 위함이다. 

 

arp1희생자 컴퓨터의 ARP 테이블에서 게이트웨이 MAC주소를 원래대로 복구하기 위한 ARP패킷이고

arp2게이트웨이 ARP 테이블에서 피해 컴퓨터의 MAC 주소를 원래대로 복구하기 위한 ARP패킷이다. 

hwdst값으로 'ff:ff:ff:ff:ff:ff'로 설정한 이유는 네트워크의 모든 호스트로 브로드캐스트하기 위해서 이다. 

21라인부터 ARP 스푸핑의 메인 함수이다. 

게이트웨이의 IP주소와 희생자 IP주소를 지정하고 getMAC()함수를 이용해 각각의 MAC주소를 얻습니다. 만약 MAC주소를 얻지 못하면 프로그램을 종료하기 위해 리턴을 한다. 

 

전체 소스코드.

 

실행 결과.

그림과 같이 실행결과

MAC 주소:  "c0:b6:e6:55:4b" ----> 공격자 MAC주소로 "b4:a9:4f:0f:8d:02"로 바뀌었다. 

댓글