ГОСТ Р 56939–2016. Информационная технология. Методы и средства обеспечения безопасности. Защита от атак типа «отказ в обслуживании» (DoS). — М.: Стандартинформ, 2016.
ГОСТ Р 51275–2006. Защита информации. Основные термины и определения. — М.: Стандартинформ, 2006.
Федеральный закон № 187-ФЗ от 26.07.2017 «О безопасности критической информационной инфраструктуры Российской Федерации».
Федеральный закон № 149-ФЗ «Об информации, информационных технологиях и о защите информации» от 27.07.2006.
Министерство цифрового развития РФ. Методические рекомендации по обеспечению безопасности государственных информационных систем. — М., 2021.
Mirkovic J., Reiher P. A taxonomy of DDoS attacks and DDoS defense mechanisms // ACM SIGCOMM Computer Communication Review. — 2004. — Vol. 34(2). — P. 39–53.
Douligeris C., Mitrokotsa A. DDoS Attacks and Defense Mechanisms: Classification and State-of-the-Art // Computer Networks. — 2004. — Vol. 44. — P. 643–666.
Zargar S. T., Joshi J., Tipper D. A survey of defense mechanisms against distributed denial of service (DDoS) flooding attacks // IEEE Communications Surveys & Tutorials. — 2013. — Vol. 15(4). — P. 2046–2069.
Beitollahi H., Deconinck G. Analyzing well-known countermeasures against distributed denial of service attacks // Computer Communications. — 2012. — Vol. 35. — P. 1312–1332.
Куликов Г. В. Методы обнаружения аномалий в сетевом трафике. — М.: Лаборатория знаний, 2020. — 312 с.
Студеникин М. И. Информационная безопасность: учебник. — М.: Юрайт, 2021.
Протасов А. В., Чечулин А. А., Купреев Г. А. Методы анализа трафика и предотвращения DDoS-атак. — М.: Бином, 2019.
Документация ПАО «Ростелеком»: Материалы по эксплуатации систем мониторинга и обеспечению кибербезопасности. — Внутренние документы предприятия, 2024.
Cisco Systems. Understanding DDoS Attacks. — Cisco Whitepaper, 2023.
Cloudflare. DDoS Attack Trends Report. — Cloudflare Research, 2023.
OWASP Foundation. OWASP Top 10 — 2021.
Wireshark Foundation. Wireshark User Guide. — 2024.
Python Software Foundation. Python 3 Documentation. — 2024.
PostgreSQL Global Development Group. PostgreSQL Documentation. — 2024.
Solar Security. Руководство пользователя SIEM-системы Solar JSOC. — М., 2023.
Приложения
Приложение А – Программный код
import hashlib
from datetime import datetime
class User:
"""
Класс User реализует сущность пользователя системы мониторинга.
Хранит имя пользователя, хэш пароля и его роль.
"""
def __init__(self, username: str, password: str, role: str = "analyst"):
self.username = username
self.password_hash = self._hash_password(password)
self.role = role
self.created_at = datetime.now()
def _hash_password(self, raw_password: str) -> str:
return hashlib.sha256(raw_password.encode("utf-8")).hexdigest()
def check_password(self, password: str) -> bool:
"""Проверка корректности введённого пароля."""
return self.password_hash == self._hash_password(password)
def __repr__(self):
return f"<User {self.username} ({self.role})>"
from dataclasses import dataclass
from datetime import datetime
@dataclass
class Record:
"""
Record — запись данных о сетевом трафике за определённый интервал времени.
Используется анализатором для обнаружения аномалий.
"""
timestamp: datetime
source_ip: str
packets: int
bytes_count: int
@property
def load_speed(self) -> float:
"""Возвращает примерную скорость передачи трафика."""
return self.bytes_count / 1024 # KB/s
import sqlite3
from typing import List
from record import Record
class Database:
"""
Модуль Database обеспечивает сохранение и выборку данных.
Для примера используется SQLite.
"""
def __init__(self, db_path="traffic.db"):
self.connection = sqlite3.connect(db_path)
self._create_tables()
def _create_tables(self):
cursor = self.connection.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS traffic (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp TEXT,
source_ip TEXT,
packets INTEGER,
bytes_count INTEGER
)
""")
self.connection.commit()
def insert_record(self, record: Record):
cursor = self.connection.cursor()
cursor.execute("""
INSERT INTO traffic (timestamp, source_ip, packets, bytes_count)
VALUES (?, ?, ?, ?)
""", (record.timestamp.isoformat(), record.source_ip, record.packets, record.bytes_count))
self.connection.commit()
def get_last_records(self, limit: int = 100) -> List[Record]:
cursor = self.connection.cursor()
cursor.execute("""
SELECT timestamp, source_ip, packets, bytes_count
FROM traffic ORDER BY id DESC LIMIT ?
""", (limit,))
rows = cursor.fetchall()
return [
Record(datetime.fromisoformat(r[0]), r[1], r[2], r[3])
for r in rows
]
from typing import List
from record import Record
class Analyzer:
"""
Analyzer выполняет простейший статистический анализ трафика
и определяет признаки возможной DDoS-атаки.
"""
def __init__(self, packets_threshold: int = 50000, ip_threshold: int = 200):
self.packets_threshold = packets_threshold
self.ip_threshold = ip_threshold
def detect_packet_spike(self, records: List[Record]) -> bool:
"""Обнаружение резкого повышения числа пакетов."""
total_packets = sum(r.packets for r in records)
return total_packets > self.packets_threshold
def detect_ip_distribution(self, records: List[Record]) -> bool:
"""Обнаружение массовой атаки от множества IP-адресов."""
unique_ips = {r.source_ip for r in records}
return len(unique_ips) > self.ip_threshold
def analyze(self, records: List[Record]) -> dict:
"""Возвращает словарь со статусом обнаруженных аномалий."""
return {
"packet_spike": self.detect_packet_spike(records),
"wide_distribution": self.detect_ip_distribution(records)
}
from datetime import datetime
class AlertManager:
"""
AlertManager формирует уведомления о выявленных аномалиях и событиях безопасности.
"""
def __init__(self):
self.alerts = []
def create_alert(self, alert_type: str, severity: str, description: str):
alert = {
"timestamp": datetime.now(),
"type": alert_type,
"severity": severity,
"description": description
}
self.alerts.append(alert)
print(f"[ALERT] {severity.upper()}: {description}")
def get_alerts(self):
return self.alerts
from datetime import datetime
from record import Record
from database import Database
from analyzer import Analyzer
from alert_manager import AlertManager
def main():
# Инициализация модулей
db = Database()
analyzer = Analyzer()
alerts = AlertManager()
# Пример записи трафика
sample_records = [
Record(datetime.now(), "185.64.10.23", 35000, 2_000_000),
Record(datetime.now(), "79.140.18.45", 42000, 1_800_000),
Record(datetime.now(), "91.200.14.7", 50000, 1_200_000)
]
# Сохранение в БД
for r in sample_records:
db.insert_record(r)
# Анализ последних данных
recent_data = db.get_last_records(limit=50)
results = analyzer.analyze(recent_data)
# Реакция на обнаруженные аномалии
if results["packet_spike"]:
alerts.create_alert(
"packet_spike",
severity="high",
description="Резкое увеличение числа пакетов в единицу времени"
)
if results["wide_distribution"]:
alerts.create_alert(
"wide_distribution",
severity="critical",
description="Обнаружено аномально большое количество уникальных IP-адресов"
)
if __name__ == "__main__":
main()