Детектор перебора
Задание 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Практика: напишите код
Примеры
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"]
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 скрытых тестов.
Пошаговый план — открывайте по одному шагу
- 1Разберите строки, сгруппируйте времена
FAILпо IP. - 2Отсортируйте времена каждого IP числами, а не строками.
- 3Двигайте правый указатель i, а левый j сдвигайте, пока
t[i] − t[j] >= window. - 4Если в окне
i − j + 1 >= threshold— IP подозрительный. - 5Верните отсортированный список таких IP.
Подсказки — каждая до решения стоит −50 очков
Задание 4Как защититься
Такие правила применяют в fail2ban, WAF и SIEM. Дополнительно — капча и задержки после ошибок.
Разборы участников
Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.