← Все комнаты Путь «Защита (код)» →
СложныйЗащита (код) Код Осенний CTF

Детектор перебора

Прогресс комнаты 0 / 4
Задание 1Введение

Цель: Писать эффективный детектор атак методом скользящего окна.

Напишите функцию find_bruteforce_ips(lines, threshold, window) для SOC.

Каждая строка lines имеет вид "<unix_time> <FAIL|OK> <ip>". Верните отсортированный список IP, у которых нашлось threshold или больше неудачных попыток (FAIL) внутри любого окна длиной window секунд (разница между первой и последней попыткой в окне строго меньше window). Строки могут идти не по порядку времени.

Задание 2Теория и инструменты

Порог «N ошибок за T секунд» — основа fail2ban и правил SIEM. Наивная проверка всех пар — O(n²), это медленно.

Скользящее окно с двумя указателями по отсортированным временам решает задачу за O(n log n).

Инструменты

  • Python: collections.defaultdict, sort
  • JS: объекты-словари, sort((a, b) => a - b)

Больше теории — в разделе «Обучение: Защита (код)».

Задание 3Практика: напишите код

Примеры

Пример 1
find_bruteforce_ips(["100 FAIL 1.1.1.1", "110 FAIL 1.1.1.1", "120 FAIL 1.1.1.1", "105 FAIL 2.2.2.2", "200 FAIL 2.2.2.2", "300 FAIL 2.2.2.2"], 3, 60)
→ ["1.1.1.1"]
Пример 2
find_bruteforce_ips(["1760000019 FAIL 10.1.0.29", "1760000031 FAIL 10.1.0.29", "1760000044 OK 10.1.0.29", "1760000056 OK 10.1.0.29", "1760000074 FAIL 10.1.0.18", "1760000090 OK 10.1.0.29", "1760000107 FAIL 10.1.0.29", "1760000116 OK 10.1.0.29", "1760000130 OK 10.1.0.29", "1760000146 OK 10.1.0.29", "1760000158 FAIL 10.1.0.18", "1760000171 FAIL 10.1.0.29", "1760000182 FAIL 10.1.0.29", "1760000192 FAIL 10.1.0.18", "1760000192 FAIL 10.1.0.18", "1760000202 FAIL 10.1.0.29", "1760000218 FAIL 10.1.0.18", "1760000222 FAIL 10.1.0.18", "1760000239 OK 10.1.0.29", "1760000252 FAIL 10.1.0.29", "1760000270 FAIL 10.1.0.18"], 3, 60)
→ ["10.1.0.18", "10.1.0.29"]

Ещё 7 скрытых тестов.

solution
Ctrl+Enter — отправить Войдите, чтобы отправить

Пошаговый план — открывайте по одному шагу

  1. 1
    Разберите строки, сгруппируйте времена FAIL по IP.

Подсказки — каждая до решения стоит −50 очков

Задание 4Как защититься

Такие правила применяют в fail2ban, WAF и SIEM. Дополнительно — капча и задержки после ошибок.

Разборы участников

Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.