Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

отчет лаба 2 Гаранин

.docx
Скачиваний:
0
Добавлен:
12.02.2026
Размер:
281.36 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНСТВО ВОЗДУШНОГО ТРАНСПОРТА

(РОСАВИАЦИЯ)

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)

Кафедра вычислительных машин, комплексов, сетей и систем.

Лабораторная работа защищена с оценкой ____________________

____________________

(подпись преподавателя, дата)

ЛАБОРАТОРНАЯ РАБОТА №2

по дисциплине «Программирование сетевых приложений».

Тема: «Обнаружение аномалий в DNS-трафике. Разработка систем мониторинга на основе эвристических алгоритмов.»

Выполнила студентка группы ИС221

Магальник Екатерина Борисовна

Руководитель: Гаранин Сергей Александрович

МОСКВА – 2025

Цель работы.

Освоить методы обнаружения и анализа аномальной активности в DNS трафике, изучить современные техники кибератак, связанные с DNS, и разработать систему мониторинга на основе эвристических алгоритмов.

Задание.

Реализовать систему мониторинга DNS-запросов (Детектор аномалий DNS-трафика), которая обнаруживает потенциально опасные паттерны. Должен обнаруживать:

  1. DNS-туннелинг - запросы с очень длинными доменными именами (>100 символов)

  2. Fast-flux домены - частые изменения IP-адресов для одного домена

  3. DGA-домены - домены, похожие на сгенерированные алгоритмом

  4. Подозрительные TLD - использование редких или новых доменных зон

  5. Чрезмерное количество запросов к одному домену Продемонстрировать работу DNS-детектора аномалий с различными сценариями.

Листинг.

# dns_simulator.py import time import random import string class DNSAnomalyDetectorSimulator: def __init__(self): self.stats = { 'total_queries': 0, 'long_domains': 0, 'suspicious_tlds': 0, 'potential_dga': 0, 'potential_flux': 0, 'flood_attacks': 0 } def simulate_traffic(self): """Симуляция DNS-трафика с аномалиями""" print("🎭 СИМУЛЯЦИЯ DNS-ТРАФИКА С АНОМАЛИЯМИ") print("=" * 60) # Нормальные домены normal_domains = [ "google.com", "youtube.com", "github.com", "stackoverflow.com", "microsoft.com", "apple.com", "amazon.com", "wikipedia.org" ] # Аномальные домены long_domains = [ "x" * 150 + ".com", "y" * 120 + ".net", "z" * 200 + ".org" ] suspicious_tld_domains = [ "malicious.top", "phishing.xyz", "scam.tk", "bad.gg", "dangerous.pw", "fake.ws" ] dga_domains = [ "xbcd83fgh92.com", "pqrs123mno456.net", "fghj678klmn901.org", "wxyz234vuts876.com" ] # Симуляция нормального трафика for domain in normal_domains: self.process_domain(domain, "192.168.1.100", "8.8.8.8") time.sleep(0.1) # Симуляция DNS-туннелинга print("\n🔴 СИМУЛЯЦИЯ DNS-ТУННЕЛИНГА:") for domain in long_domains: self.process_domain(domain, "10.0.0.50", "1.1.1.1") time.sleep(0.2) # Симуляция подозрительных TLD print("\n🔴 СИМУЛЯЦИЯ ПОДОЗРИТЕЛЬНЫХ TLD:") for domain in suspicious_tld_domains: self.process_domain(domain, "192.168.1.200", "8.8.4.4") time.sleep(0.1) # Симуляция DGA-доменов print("\n🔴 СИМУЛЯЦИЯ DGA-ДОМЕНОВ:") for domain in dga_domains: self.process_domain(domain, "172.16.0.100", "9.9.9.9") time.sleep(0.1) self.print_stats() def process_domain(self, domain, src_ip, dst_ip): """Обработка домена и обнаружение аномалий""" self.stats['total_queries'] += 1 print(f"🔍 ЗАПРОС {src_ip} -> {dst_ip} : {domain}") # Обнаружение аномалий anomalies = [] # Длинные домены (DNS-туннелинг) if len(domain) > 100: self.stats['long_domains'] += 1 anomalies.append(f"🚨 Длинное имя ({len(domain)} символов)") # Подозрительные TLD suspicious_tlds = {'.top', '.xyz', '.tk', '.gg', '.pw', '.ws'} tld = '.' + domain.split('.')[-1] if tld in suspicious_tlds: self.stats['suspicious_tlds'] += 1 anomalies.append(f"⚠️ Подозрительный TLD: {tld}") # DGA-домены if self.is_dga_like(domain): self.stats['potential_dga'] += 1 anomalies.append("🤖 Возможный DGA") if anomalies: for anomaly in anomalies: print(f" {anomaly}") def is_dga_like(self, domain): """Проверка на признаки DGA""" domain_name = domain.split('.')[0] consonants = 'bcdfghjklmnpqrstvwxz' vowels = 'aeiouy' consonant_count = sum(1 for c in domain_name if c in consonants) vowel_count = sum(1 for c in domain_name if c in vowels) digit_count = sum(1 for c in domain_name if c in '0123456789') if vowel_count == 0: return True c_v_ratio = consonant_count / vowel_count digit_ratio = digit_count / len(domain_name) return c_v_ratio > 4 or digit_ratio > 0.3 def print_stats(self): print("\n" + "=" * 50) print("📊 ФИНАЛЬНАЯ СТАТИСТИКА ОБНАРУЖЕНИЯ АНОМАЛИЙ") print("=" * 50) for key, value in self.stats.items(): print(f"{key}: {value}") print("=" * 50) if __name__ == "__main__": simulator = DNSAnomalyDetectorSimulator() simulator.simulate_traffic()

Результат работы программы.