Перейти до вмісту

Безпека

Безпека, що відчувається як гостинність.

Постачальник ідентифікації надійний настільки, наскільки міцні стіни між його орендарями й наскільки дбайливо він поводиться із секретами. Ось як побудовано 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, вихід

Лише публічні адреси

Рівні Usher Identity. Домен орендарів — інший реєстрований домен, ніж домен платформи, тож сторінки орендаря ніколи не належать до того самого сайту (same-site), що й Console.

Ізоляція

Нічого спільного, що мало б значення.

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

usheridentity.com

Сайт, Usher Identity Console, акаунти Usher Identity

*.usherid.com

Окремий видавець для кожного середовища, на окремому домені

Середовище

Користувачі, сеанси й токени зберігаються в схемі, створеній для цього середовища. Запити виконуються до цієї схеми, а не до спільної таблиці зі стовпцем орендаря.

Скопіювати запечатаний секрет клієнта Google із робочого середовища проєкту Acme до робочого середовища проєкту Northwind.

Шифрування в стані спокою

Конвертне шифрування, прив’язане до свого місця.

Секрети, які ви передаєте Usher Identity, запечатуються за допомогою AES-256-GCM під ключем даних, що належить одному середовищу. Ключі даних своєю чергою загорнуто версійованим головним ключем, який зберігається поза базою даних.

Ключі даних для кожного середовища
Компрометація ключа даних одного середовища нічого не розкриває про ключ іншого.
Прив’язка AAD
Середовище й призначення вбудовано в кожен шифротекст, тож значення не можна перенести між рядками чи орендарями.
Версійовані ключі
Кожне запечатане значення зберігає версію ключа, яким його створено, тож ключі можна змінювати, а старі значення — перезагортати.
Автентифіковане шифрування
Завдяки тегу GCM змінене значення просто не відкриється, а не розшифрується в щось інше.
  1. Головний ключ

    Зберігається поза базою даних, має версії

  2. Ключ даних, по одному на середовище

    Загорнутий головним ключем

  3. Секрет

    Запечатаний за допомогою 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, ми хочемо про неї почути й разом із вами працюватимемо над її виправленням.

security@usheridentity.com
  • Що ви знайшли, де саме і як це відтворити.
  • Що, на вашу думку, з цим можна зробити.
  • Як із вами зв’язатися і чи хочете ви, щоб вас згадали.

Будь ласка, тестуйте лише середовища, які належать вам, не отримуйте доступу до чужих даних і дайте нам розумний час на виправлення, перш ніж розповідати про проблему. Щоб повідомити про сторінку, що видає себе за вхід Usher Identity, перейдіть на сторінку Повідомити про зловживання.