Безпека
Безпека, що відчувається як гостинність.
Постачальник ідентифікації надійний настільки, наскільки міцні стіни між його орендарями й наскільки дбайливо він поводиться із секретами. Ось як побудовано Usher Identity. Ми описуємо, що робить програмне забезпечення, і не заявляємо про жодну сертифікацію.
Архітектура
Окремі домени, окремі мережі.
Власні сторінки Usher Identity і видавець кожного клієнта розміщені на різних реєстрованих доменах. Бази даних працюють у мережі, яка не має доступу до інтернету, а єдиний вихід назовні — проксі, що перевіряє, куди спрямовано запит.
- Caddy завершує TLS для кожного хоста й вилучає заголовки, які можуть встановлювати лише власні сервіси Usher Identity.
- Рівень автентифікації обслуговує всі середовища, розрізняючи їх за хостом; ніщо не кешується для одного хоста, щоб потім віддаватися іншому.
- Кожен сервіс звертається до Valkey як окремий користувач, обмежений власними ключами. Користувача за замовчуванням немає.
- Запити, що містять токени й коди, ніколи не записуються до журналу бази даних разом зі своїми значеннями.
Інтернет
Люди, ваші програми, ваші сервери
Межа мережі
Caddy: TLS, HSTS, вилучає внутрішні заголовки
usheridentity.com
Сайт і Console
usheridentity.com, console.usheridentity.com
API
api.usheridentity.com
*.usherid.com
Рівень автентифікації
Видавець і Lobby кожного середовища
Мережа даних · без виходу назовні
Postgres
Окрема схема для кожного середовища
Valkey
Кожен сервіс обмежений власними ключами
Єдиний вихід
Вихідний проксі
Для кожної URL-адреси від клієнта
Виявлення, JWKS, вихід
Лише публічні адреси
Ізоляція
Нічого спільного, що мало б значення.
Кожне середовище проєкту отримує власну схему Postgres, власні ключі підпису й власні секрети, запечатані власним ключем даних. Його видавець — це хост на домені орендарів, а файли cookie прив’язано лише до цього хоста, тож браузер ніколи не надсилає cookie одного середовища іншому.
usheridentity.com
Сайт, Usher Identity Console, акаунти Usher Identity
*.usherid.com
Окремий видавець для кожного середовища, на окремому домені
Користувачі, сеанси й токени зберігаються в схемі, створеній для цього середовища. Запити виконуються до цієї схеми, а не до спільної таблиці зі стовпцем орендаря.
Скопіювати запечатаний секрет клієнта Google із робочого середовища проєкту Acme до робочого середовища проєкту Northwind.
Шифрування в стані спокою
Конвертне шифрування, прив’язане до свого місця.
Секрети, які ви передаєте Usher Identity, запечатуються за допомогою AES-256-GCM під ключем даних, що належить одному середовищу. Ключі даних своєю чергою загорнуто версійованим головним ключем, який зберігається поза базою даних.
- Ключі даних для кожного середовища
- Компрометація ключа даних одного середовища нічого не розкриває про ключ іншого.
- Прив’язка AAD
- Середовище й призначення вбудовано в кожен шифротекст, тож значення не можна перенести між рядками чи орендарями.
- Версійовані ключі
- Кожне запечатане значення зберігає версію ключа, яким його створено, тож ключі можна змінювати, а старі значення — перезагортати.
- Автентифіковане шифрування
- Завдяки тегу GCM змінене значення просто не відкриється, а не розшифрується в щось інше.
Головний ключ
Зберігається поза базою даних, має версії
Ключ даних, по одному на середовище
Загорнутий головним ключем
Секрет
Запечатаний за допомогою AES-256-GCM під ключем даних
u1.<key version>.<iv>.<ciphertext + tag>
aad = u1 | version | environment | purpose
Практики
Деталі, опрацьовані ретельно.
Паролі, якщо ви їх використовуєте
Хешуються за допомогою Argon2id із вартістю, рекомендованою OWASP (19 МіБ, два проходи), з обмеженням кількості одночасних обчислень, щоб наплив спроб входу не поклав сервіс. Нові паролі перевіряються на наявність у відомих витоках через range API сервісу Have I Been Pwned, який бачить лише короткий префікс хешу пароля. Мінімальна довжина за замовчуванням — 12.
Нічого, що можна відтворити повторно
Секрети клієнтів, токени, токени магічних посилань і коди з електронних листів зберігаються в хешованому вигляді. Резервні коди зашифровано. Код авторизації діє п’ять хвилин, а код з електронного листа дає три спроби.
Обмеження частоти на кожних дверях
Вхід, реєстрація, коди й магічні посилання електронною поштою, скидання пароля та перевірки другого фактора мають власні обмеження: наприклад, десять входів із паролем за хвилину та п’ять кодів електронною поштою за десять хвилин.
Сувора Content-Security-Policy
Кожна сторінка Lobby отримує свіжий nonce і політику, побудовану довкола нього: виконуються лише скрипти цього джерела з nonce, форми надсилаються лише до того самого джерела, а інші сайти не можуть вбудувати сторінку у фрейм.
Журнал аудиту, якому можна довіряти
Зміни в робочих просторах, проєктах і середовищах записуються до журналу, куди можна лише додавати, і кожен запис пов’язано хеш-ланцюжком із попереднім, тож змінений чи відсутній запис одразу видно.
Вихідний проксі для URL-адрес клієнтів
Кожен запит, який Usher Identity надсилає на адресу, вказану клієнтом (виявлення OIDC, JWKS, вихід через зворотний канал), проходить через один проксі. Він визначає IP-адресу за іменем один раз, відхиляє приватні, loopback-, link-local-адреси й адреси хмарних метаданих і підключається саме до перевіреної адреси, тож DNS rebinding не перетворить URL-адресу клієнта на внутрішню.
Піддомени, які не видаються двічі
Піддомен робочого середовища — це перша мітка його видавця. До Console можна потрапити лише за запрошенням, Lobby, про яке повідомили як про фішинг, призупиняється, а використаний піддомен ніколи не видається вдруге, бо старі програми можуть досі довіряти його токенам.
Сеанси, що завершуються, коли ви скажете
Usher Identity перевіряє власні сеанси під час кожного запиту, а не покладається на кешовану копію, тож завершений вами сеанс припиняється одразу. Токени доступу короткочасні (за замовчуванням десять хвилин), а ваш API може виконувати їх інтроспекцію.
Відповідальне розкриття
Щось знайшли? Спершу скажіть нам.
Якщо ви вважаєте, що знайшли проблему безпеки в Usher Identity, ми хочемо про неї почути й разом із вами працюватимемо над її виправленням.
- Що ви знайшли, де саме і як це відтворити.
- Що, на вашу думку, з цим можна зробити.
- Як із вами зв’язатися і чи хочете ви, щоб вас згадали.
Будь ласка, тестуйте лише середовища, які належать вам, не отримуйте доступу до чужих даних і дайте нам розумний час на виправлення, перш ніж розповідати про проблему. Щоб повідомити про сторінку, що видає себе за вхід Usher Identity, перейдіть на сторінку Повідомити про зловживання.