Към съдържанието

Сигурност

Сигурност, която се усеща като гостоприемство.

Един доставчик на идентичност е толкова добър, колкото са здрави стените между наемателите му и колкото грижа полага за тайните. Ето как е изграден 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. Домейнът за наематели е различен регистрируем домейн от този на платформата, така че страниците на един наемател никога не са от същия сайт като Console.

Изолация

Нищо съществено не се споделя.

Всяка среда на проект получава собствена Postgres схема, собствени ключове за подписване и собствени тайни, запечатани със собствен ключ за данни. Нейният издател е хост в домейна за наематели, а бисквитките ѝ са само за хоста, така че браузърът никога не изпраща бисквитката на една среда към друга.

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 MiB, два прохода), с ограничение колко хеширания вървят едновременно, така че наплив от опити за вход да не може да срине услугата. Новите пароли се проверяват за известни изтичания чрез range API на Have I Been Pwned, което вижда само кратък префикс от хеша на паролата. Минималната дължина по подразбиране е 12.

  • Нищо съхранено не може да бъде използвано повторно

    Клиентските секрети, токените, токените на магическите връзки и кодовете по имейл се съхраняват хеширани. Резервните кодове са шифровани. Кодът за оторизация е валиден пет минути; кодът по имейл позволява три опита.

  • Ограничения на честотата на всяка врата

    Входът, регистрацията, кодовете по имейл, магическите връзки, нулирането на пароли и проверките на втория фактор имат отделни ограничения: например десет входа с парола в минута и пет кода по имейл на всеки десет минути.

  • Строга Content-Security-Policy

    Всяка страница на Lobby получава нов nonce и политика, изградена около него: изпълняват се само скриптове от този произход, които носят nonce, формулярите се изпращат само към същия произход, а други сайтове не могат да вграждат страницата в рамка.

  • Одитен дневник, на който можете да разчитате

    Промените в работни пространства, проекти и среди се записват в дневник, към който може само да се добавя, като всеки запис е свързан с хеш верига с предишния, така че редактиран или липсващ запис личи веднага.

  • Изходящо прокси за адресите на клиентите

    Всяка заявка, която Usher Identity прави към адрес, подаден от клиент (OIDC откриване, JWKS, изход по обратния канал), излиза през едно прокси. То разрешава името веднъж, отказва частни, loopback и link-local адреси, както и адресите за облачни метаданни и се свързва с адреса, който е проверило, така че DNS rebinding не може да превърне адреса на клиент във вътрешен.

  • Кратки имена, които никога не се дават два пъти

    Краткото име на продукционна среда е първият етикет на нейния издател. Console е достъпна само с покана, Lobby, за което е подаден сигнал за фишинг, се спира, а веднъж използвано кратко име никога не се дава отново, защото стари приложения може все още да се доверяват на токените му.

  • Сесии, които приключват, когато кажете

    Usher Identity проверява собствените си сесии при всяка заявка, вместо да се доверява на кеширано копие, така че сесия, която прекратите, приключва на мига. Токените за достъп са краткотрайни (по подразбиране десет минути), а вашият API може да ги проверява чрез интроспекция.

Отговорно разкриване

Открили сте нещо? Първо ни кажете.

Ако смятате, че сте открили проблем със сигурността в Usher Identity, ще се радваме да научим за него и ще работим с вас, за да го отстраним.

security@usheridentity.com
  • Какво сте открили, къде и как да го възпроизведем.
  • Какво би могъл да направи някой с него, доколкото разбирате.
  • Как можем да се свържем с вас и дали искате да бъдете посочени.

Моля, тествайте само срещу среди, които притежавате, не достъпвайте данни на други хора и ни дайте разумно време да отстраним проблема, преди да го споделите. За да съобщите за страница, която се представя за вход с Usher Identity, вижте Сигнал за злоупотреба.