Кожен відкритий сервіс отримує ту саму пораду: поставте на нього fail2ban. Для VPN-шлюзу ця порада не помилкова і не достатня, і саме ставлення до неї як до галочки в зміцненні призводить до того, що люди залишаються з в'язницею (jail), яка нічого корисного не блокує. Fail2ban читає записи про невдачі, на які ви його націлюєте, і просить backend виконання заблокувати відповідні джерела. Уся його цінність залежить від того, яка поверхня автентифікації створила запис, чи є адреса в ній справжнім клієнтом і що відбувається з усіма іншими за цією адресою.

Що таке fail2ban механічно

Фільтр зіставляє рядки в журналі, в'язниця рахує збіги за джерелом, а дія застосовує блокування через backend міжмережевого екрана. Три рухомі частини, і кожна може бути неправильною незалежно.

Жодна з трьох не торкається шляху автентифікації: fail2ban реагує на свідчення постфактум і ніколи сам не перевіряє облікові дані. Тому в'язниця може працювати бездоганно, поки поверхня, яку вона називає, залишається рівно такою ж відкритою, як раніше.

Слухач тунелю — не форма входу

Слухач OpenVPN, захищений tls-auth або tls-crypt, відкидає пакети без захисту каналу керування ще до початку звичайної обробки TLS. Сканер, у якого ніколи немає ключа, не створює нічого, що міг би порахувати ваш фільтр. Автентифікація за сертифікатом додає ще одні ворота, бо пароля, який можна вгадати, немає. Проєкт Fail2ban документує загальну модель на основі журналів, і загальний фільтр VPN не перетворює неавтентифікований пакет на значущу подію збою.

Якщо шлюз приймає лише сертифікати, історії про brute-force, від якої ви захищаєтеся, на цьому порту може взагалі не бути.

Тож яку поверхню ви захищаєте?

Один і той самий хост часто відкриває три різні речі: слухач тунелю, портал клієнтських профілів або самообслуговування та сторінку адміністрування. Портал і сторінка адміністрування мають форми з паролем і створюють рядки журналу, які фільтр може порахувати. Тунель може створювати лише помилки рукостискання, що означають щось зовсім інше. Зіставляйте в'язницю з поверхнею, а не з назвою продукту.

Одна в'язниця, що стежить за неправильним журналом, гірша за жодну, бо створює впевненість без покриття. Спрямуйте фільтр входу на помилки рукостискання тунелю, і лічильник спрацює на сканерах, які ніколи не мали ключа, а атака паролем на портал залишиться непорахованою. Прочитайте рядок журналу, який зіставляє фільтр, перш ніж довіряти числу в'язниці.

Атрибуція джерела — слабка ланка

Блокування добре рівно настільки, наскільки добра адреса, на яку воно націлене. Коли сервіс стоїть за локальним зворотним проксі, адреса клієнта в журналі може бути адресою проксі, і його блокування прибирає всіх. Довіра до переданого заголовка з ненадійного джерела дає атакуючому можливість блокувати довільні адреси. У UDP адреси джерела можна підробити, тому їхній підрахунок потребує більшої обережності, ніж підрахунок завершеного входу TCP.

Запишіть метод атрибуції джерела в README в'язниці, бо переданий заголовок із ненадійного стрибка перетворює блокування на зброю.

Побічна ціна — інші люди

Кілька співробітників за одним офісним NAT ділять адресу, тому один застарілий збережений пароль може заблокувати весь офіс, щойно поріг буде перевищено. Журнал показує одне джерело й один обліковий запис, які не пройшли, а не збій усього офісу.

Короткі блокування й помірні пороги зменшують це, а задокументований шлях розблокування знижує навантаження на підтримку, коли це все ж трапляється. Адреса — грубий сигнал, а не особа, і людина, яка відкриє заявку, опише збій, а не поріг.

Коли це впроваджувати, а коли виправляти інше

Впроваджуйте, коли на поверхні, яку ви контролюєте, є реальний, атрибутований, повторюваний збій онлайн-входу і коли backend виконання справді покриває цю поверхню. Виправляйте інше, коли проблема в слабкій політиці облікових даних, у сторінці керування, відкритій в інтернет, або в обліковому записі, який успішно входить тому, що був скомпрометований. Блокування не може виправити нічого з цього і не може поглинути трафік, який уже наситив ваш висхідний канал. Остання проблема належить вище за потоком, тому, хто може фільтрувати до того, як пакети дійдуть до вас.

Тримайте кожну в'язницю прив'язаною до однієї поверхні, переглядайте хибні спрацювання й міряйте уникнуту роботу автентифікації, а не кількість заблокованих адрес.

Схожі статті