Сповіщення про вхід у VPN — це не сповіщення про вторгнення: стежте за сеансом
Незвичайний вхід — це привід для перевірки, а не вирок. Пов'яжіть запис автентифікації із сеансом, а потім із тим, чого він торкнувся, перш ніж називати це вторгненням.
Сповіщення VPN, що спрацьовує на нову країну, здається остаточним, і зазвичай таким не є. Автентифікація каже, що спробу прийнято; сеанс каже, яке з'єднання її несло; записи про ресурси кажуть, що сталося всередині цього з'єднання. Кожен відповідає на інше питання. Правило, яке зливає всі три, дає тридцять заявок у понеділок і пропускає справжній випадок у п'ятницю.
Іноземна адреса — це питання, а не відповідь
Подорожі, мобільні оператори з виходом в іншій країні, корпоративний вебпроксі та перерозподілений пул carrier-grade NAT — усі вони зсувають видиме джерело, не зсуваючи нападника. Запис входу відображає, звідки з'єднання увійшло в мережу, а не хто тримав пристрій.
Зворотна помилка гірша, бо вона тиха. Викрадений пароль, використаний із міста самого користувача, дає вхід, що збігається з усіма попередніми під час перевірки географії.
Ставлення до географії як до вироку має вимірювану ціну. Мандрівні ноутбуки створюють сталий потік перевірок, перевірячі вчаться закривати їх не читаючи, і звичка живе, доки справжній випадок не потрапить у ту саму чергу.
Три типи записів відповідають на три різні питання
Починайте з того, що розгорнуті продукти справді видають, а не з того, що обіцяє брошура. Рішення автентифікації називає заявлену особу, метод і результат. Життєвий цикл сеансу називає з'єднання, шлюз і призначену адресу, від початку до зупинки.
| Record | Question it answers | What it cannot prove |
|---|---|---|
| Authentication decision | Which identity was accepted or rejected, by which method, at what time | That the person operating the device was the account owner |
| Session lifecycle | Which connection, gateway and assigned address were active, and for how long | What the session did with that access |
| Resource event | Which read, write or denied operation a service observed | Which human behind the session triggered it |
| Policy change | Whether an administrator altered the rule that governs the access | Whether the change was reviewed or intended |
Порожня клітинка — це прогалина в зборі, а не виправдання. Якщо події про ресурси ніколи не надходять, відсутність підозрілого читання означає, що конвеєру нема чого повідомити, і тиха панель описує конвеєр, а не мережу. Запишіть, які записи розгортання справді створює, перш ніж обіцяти правило, що від них залежить, і назвіть власника кожного відсутнього потоку.
Бухгалтерські деталі — це місце, де сеанси стають перевірюваними. Облік RADIUS, описаний у RFC 2866, несе оновлення початку, зупинки та проміжні, прив'язані до ідентифікатора сеансу, тож сеанс із початком і без зупинки — це прогалина, яку можна назвати, а не загадка.
Пов'язуйте за сеансом, а не за іменем користувача
Один обліковий запис законно тримає кілька сеансів одночасно: ноутбук, телефон, лабораторна машина, залишена підключеною на ніч. Об'єднання всіх подій за цим іменем користувача зливає три пристрої в одну історію і потім читає комбінацію як компрометацію. Призначені адреси теж перевикористовуються, тому з'єднання, яке продовжує збігатися з адресою після завершення сеансу, тягне пристрій минулого місяця в сьогоднішній інцидент. Тримайте ключ сеансу поруч з адресою і обмежте збіг часовим вікном, яке сеанс справді покривав.
Там, де переклад прибирає початкове джерело перш ніж служба його побачить, використовуйте особу, що виживає на цій межі, наприклад суб'єкт взаємного TLS або твердження єдиного входу. Вигадувати взаємно однозначну відповідність між адресою і людиною — та сама помилка з зайвими кроками.
Сповіщення без власника — це панель
Кожному правилу потрібні умова, нешкідливі пояснення, що його породжують, докази, які треба зібрати, і людина, яка діє. Повторна відхилена адміністративна операція, спалах невдалих паролів і мовчазний збирач — це три різні інциденти з трьома різними годинниками.
Повідомлення — не локалізація, і список розсилки нічого не обмежує. Щоб змінити живий сеанс, потрібен компонент, який це вміє: або шлюз, що скидає з'єднання, або постачальник ідентичності, що відкликає сеанс. Застарілі потоки й відсутні записи про зупинку теж належать до тексту правила, бо збирач, який добу нічого не надсилав, з панелі виглядає точно як тиха мережа. Різниця видна лише в самому конвеєрі.
Перевірте шлях збору, перш ніж довіряти тихому тижню
Доведіть конвеєр від початку до кінця, перш ніж налаштовувати хоч одне правило. Команди нижче підтверджують, що слухачі автентифікації й обліку працюють, що тестові облікові дані відхиляються з правильної причини і що події сеансів досі надходять:
ss -uanp | grep -E ':(1812|1813)\b' radtest alice 'not-the-password' 127.0.0.1 0 testing123 journalctl -u openvpn-server@server --since '-30 min' | grep -c 'Peer Connection Initiated' timedatectl | grep -E 'System clock|synchronized'
Відмова в доступі з тесту доводить, що запит дійшов до сервера і спільний секрет збігся, і саме цю частину люди пропускають. Тайм-аут натомість вказує на секрет, слухач або фільтр перед ним, і кожне сповіщення нижче не піддається перевірці, доки це не виправлено.
Стан годинника важливий, бо вікна кореляції припускають узгодженість. Шлюз, що відхиляється на хвилини, робить інакше чисте з'єднання сеансу неможливим на вигляд, і перевірячі компенсують, розширюючи вікно, доки з'єднання не перестане розрізняти. Перевірте зсув перед редагуванням правила.
Потім проведіть одне правило через нешкідливий тест: створіть вхід із неочікуваної адреси, підтвердьте, що сповіщення спрацьовує, підтвердьте, що той, хто реагує, може витягти сеанс і його події про ресурси, і підтвердьте, що заявка несе ідентифікатор сеансу. Правило, що дає зв'язну історію, проходить. Правило, що дає купу рядків журналу, все ще панель. Запишіть результат поруч із правилом, щоб наступна перевірка починалася з доказів, а не з інтуїції.