Тимчасові посилання зі списку дозволених IP: що насправді допускає дозвіл
Посилання, яке відкриває порт міжмережевого екрана, допускає адресу, а не людину. Визначте область, вимагайте усвідомленого підтвердження та перевіряйте повтор, завершення строку й IPv6.
Перетворити один клік на тимчасове правило міжмережевого екрана зручно, і це водночас будує систему авторизації, яка вирішує, кому можна дістатися до сервісу. Вона видає адресу, а не людину, і ця різниця важлива тієї миті, коли двоє ділять один NAT. Обмежте область дозволу, підтвердьте його усвідомлено й надайте завершенню строку сенс до того, як посилання буде побудоване. Рішення перед вами — де поставити межу, а не чи вона взагалі має існувати.
Вирішіть, на яке питання відповідає дозвіл
Почніть із вимоги. Якщо названа людина має дістатися до сервісу, а застосунок уже автентифікує цю людину, автентифікований шлюз утримує ідентичність у точці застосування і взагалі не потребує допуску адреси. Якщо ціль — агент збирання, адміністративний порт переходу або пристрій, який не може брати участі у вході користувача, обмежений дозвіл адреси може бути єдиним практичним контролем.
Вибір допуску за адресою для застосунку, зверненого до користувачів, переносить справжню проблему авторизації в інше місце, і тоді портал успадковує провину за прогалину, яку так і не закрив.
Обмежте запит на сервері
Браузер не повинен вибирати призначення, порт або префікс. Портал визначає сервіс зі своїх записів і перевіряє право серверним тестом, і це той самий принцип, який настанови OWASP щодо авторизації застосовують до кожного запиту. Виведення адреси теж належить до захищеної межі: коли зворотний проксі повідомляє адресу клієнта, приймайте лише налаштований ланцюжок проксі та його документовану обробку заголовків. Заголовок пересилання, який надає відвідувач, — це твердження про походження, а не доказ його.
Потім перевірте, що портал і сервіс бачать те саме джерело. Розділений тунель, один стрибок проксі та IPv4 проти IPv6 можуть дати двом призначенням дві різні адреси, тому дозвіл, активований одним шляхом, може не покрити наступний запит.
Покажіть дозвіл до встановлення
Відкриття посилання має показувати запропонований сервіс, спостережене джерело й тривалість, і поки нічого не змінювати. Цей єдиний крок перетворює посилання з листа з дії на пропозицію і не дає ботові попереднього перегляду або поштовому сканеру надати доступ, просто завантаживши його.
Підтвердження має бути запитом, що змінює стан, зі звичайними захистами від міжсайтових атак і чужого походження. Токен має бути одноразовим і витрачатися атомарно в момент встановлення правила, а запис має фіксувати власника, сервіс, адресу, ідентифікатор дозволу й завершення строку, ніколи не журналюючи необроблений токен.
Доставка токена заслуговує такої ж уваги, як і саме правило. Прострочене або вже використане посилання, яке все ще створює правило, — це другі двері з тим самим ключем.
Адреса спільна навіть тоді, коли дозвіл чинний
Офісний NAT, NAT оператора й спільний вихід VPN ставлять кожен кількох людей за одну адресу. Допустити цю адресу — означає допустити всіх, хто за нею — наскільки це стосується наступної межі сервісу —, при цьому нічого не доводячи про те, у кого той обліковий запис, якого очікує сервіс.
Видалення правила теж не є універсальним відключенням. Установлені з'єднання, кешовані токени застосунків і тривалі сесії можуть пережити правило на хвилини або значно довше, тому обраний строк життя має відображати те, що сервіс робить після допуску, а не лише скільки існує правило.
Перевірте чотири випадки й обидві родини адрес
Дозвіл добрий настільки, наскільки він витримує чотири випадки: новий дозволений запит, несхвалений запитувач, повтор того самого посилання й той самий запит після завершення строку.
Потім перевірте кожну родину окремо, бо адреса джерела, яку спостерігає сервіс, може різнитися між ними.
dig +short A service.example.com
dig +short AAAA service.example.com
curl -4 -sS -o /dev/null -w "%{http_code}\n" https://service.example.com
curl -6 -sS -o /dev/null -w "%{http_code}\n" https://service.example.com
Корисний результат — тимчасове, придатне для аудиту рішення про допуск під звичайною авторизацією користувача, а не постійне відкриття, що носить ім'я того, хто клікнув першим.