Securitate
Securitate cu aer de ospitalitate.
Un furnizor de identitate este doar atât de bun cât sunt de solide zidurile dintre tenanții săi și grija cu care tratează secretele. Iată cum este construit Usher Identity. Descriem ce face software-ul; nu pretindem nicio certificare.
Arhitectură
Domenii separate, rețele separate.
Paginile Usher Identity și emitentul fiecărui client se află pe domenii înregistrabile diferite. Bazele de date stau într-o rețea care nu poate ajunge la internet, iar singura cale de ieșire este un proxy care verifică încotro merge fiecare cerere.
- Caddy face terminarea TLS pentru fiecare gazdă și elimină anteturile pe care doar serviciile Usher Identity au voie să le seteze.
- Nivelul de autentificare răspunde pentru fiecare mediu, pe care le deosebește după gazdă; nimic din ce este pus în cache pentru o gazdă nu este servit alteia.
- Fiecare serviciu comunică cu Valkey ca utilizator propriu, limitat la propriile chei. Nu există un utilizator implicit.
- Instrucțiunile care conțin tokenuri și coduri nu sunt scrise niciodată în jurnalul bazei de date împreună cu valorile lor.
Internetul
Oameni, aplicațiile dvs., serverele dvs.
Marginea rețelei
Caddy: TLS, HSTS, elimină anteturile interne
usheridentity.com
Site și Console
usheridentity.com, console.usheridentity.com
API
api.usheridentity.com
*.usherid.com
Nivelul de autentificare
Emitentul și Lobby-ul fiecărui mediu
Rețeaua de date · fără cale de ieșire
Postgres
O schemă pentru fiecare mediu
Valkey
Fiecare serviciu limitat la propriile chei
Singura cale de ieșire
Proxy de ieșire
Pentru fiecare URL furnizat de clienți
Descoperire, JWKS, deconectare
Doar adrese publice
Izolare
Nimic important în comun.
Fiecare mediu de proiect primește propria schemă Postgres, propriile chei de semnare și propriile secrete, sigilate cu propria cheie de date. Emitentul său este o gazdă pe domeniul tenanților, iar cookie-urile sunt doar pentru gazdă, așa că un browser nu trimite niciodată cookie-ul unui mediu altui mediu.
usheridentity.com
Site-ul, Usher Identity Console, conturile Usher Identity
*.usherid.com
Câte un emitent pentru fiecare mediu, pe un domeniu separat
Utilizatorii, sesiunile și tokenurile stau într-o schemă făcută pentru acest mediu. Interogările rulează pe acea schemă, niciodată pe un tabel comun cu o coloană de tenant.
Copiați secretul client Google sigilat al mediului de producție din Acme în mediul de producție din Northwind.
Criptare în repaus
Criptare în plic, legată de locul ei.
Secretele pe care le dați lui Usher Identity sunt sigilate cu AES-256-GCM sub o cheie de date care aparține unui singur mediu. Cheile de date sunt, la rândul lor, învelite de o cheie principală cu versiuni, păstrată în afara bazei de date.
- Chei de date pentru fiecare mediu
- Compromiterea cheii de date a unui mediu nu dezvăluie nimic despre cheia altuia.
- Legare AAD
- Mediul și scopul sunt legate în fiecare text cifrat, așa că o valoare nu poate fi mutată între rânduri sau tenanți.
- Chei cu versiuni
- Fiecare valoare sigilată reține versiunea cheii cu care a fost creată, așa că cheile pot fi rotite, iar valorile vechi reîmpachetate.
- Autentificare
- Eticheta GCM face ca o valoare modificată să nu se mai poată deschide, în loc să fie decriptată în altceva.
Cheia principală
Păstrată în afara bazei de date, cu versiuni
Cheie de date, câte una pentru fiecare mediu
Învelită de cheia principală
Secretul
Sigilat cu AES-256-GCM sub cheia de date
u1.<key version>.<iv>.<ciphertext + tag>
aad = u1 | version | environment | purpose
Practici
Detaliile, făcute cu grijă.
Parole, dacă le folosiți
Hashuite cu Argon2id la costul recomandat de OWASP (19 MiB, două treceri), cu o limită a numărului de operații simultane, ca un val de conectări să nu poată dărâma serviciul. Parolele noi sunt verificate față de breșele cunoscute prin API-ul de intervale al Have I Been Pwned, care vede doar un prefix scurt al hashului parolei. Lungimea minimă implicită este 12.
Nimic stocat care ar putea fi reutilizat
Secretele client, tokenurile, tokenurile linkurilor magice și codurile trimise prin e-mail sunt stocate ca hash. Codurile de rezervă sunt criptate. Un cod de autorizare este valabil cinci minute; un cod trimis prin e-mail permite trei încercări.
Limite de rată la fiecare ușă
Conectarea, înregistrarea, codurile prin e-mail, linkurile magice, resetările de parolă și verificările celui de-al doilea factor au fiecare propria limită: de exemplu, zece conectări cu parolă pe minut și cinci coduri prin e-mail la fiecare zece minute.
O politică Content-Security-Policy strictă
Fiecare pagină a Lobby-ului primește un nonce nou și o politică construită în jurul lui: rulează doar scripturile acestei origini care poartă nonce-ul, formularele trimit doar către aceeași origine, iar alte site-uri nu pot încadra pagina.
Un jurnal de audit în care puteți avea încredere
Modificările aduse spațiilor de lucru, proiectelor și mediilor sunt scrise într-un jurnal în care doar se adaugă, fiecare intrare fiind legată prin hash de cea dinainte, așa că o intrare modificată sau lipsă se vede.
Un proxy de ieșire pentru URL-urile clienților
Fiecare cerere pe care Usher Identity o face către o adresă primită de la un client (descoperire OIDC, JWKS, deconectare back-channel) iese printr-un singur proxy. Acesta rezolvă numele o singură dată, refuză adresele private, de loopback, link-local și de metadate cloud și se conectează la adresa pe care a verificat-o, așa că DNS rebinding nu poate transforma URL-ul unui client într-unul intern.
Identificatori care nu sunt dați niciodată de două ori
Identificatorul unui mediu de producție este prima etichetă a emitentului său. Accesul la Console se face doar pe bază de invitație, un Lobby raportat pentru phishing este suspendat, iar un identificator folosit o dată nu mai este dat niciodată altcuiva, pentru că aplicațiile vechi ar putea avea încă încredere în tokenurile sale.
Sesiuni care se încheie când spuneți dvs.
Usher Identity își verifică propriile sesiuni la fiecare cerere, în loc să se bazeze pe o copie din cache, așa că o sesiune pe care o încheiați se termină imediat. Tokenurile de acces au viață scurtă (implicit, zece minute), iar API-ul dvs. le poate introspecta.
Divulgare responsabilă
Ați găsit ceva? Spuneți-ne întâi nouă.
Dacă credeți că ați găsit o problemă de securitate în Usher Identity, ne-ar plăcea să aflăm despre ea și vom lucra împreună cu dvs. ca să o remediem.
- Ce ați găsit, unde și cum se poate reproduce.
- Ce ar putea face cineva cu ea, așa cum o înțelegeți dvs.
- Cum vă putem contacta și dacă doriți să vă menționăm numele.
Vă rugăm să testați doar mediile care vă aparțin, să nu accesați datele altor persoane și să ne lăsați un timp rezonabil ca să remediem problema înainte să o faceți publică. Pentru a raporta o pagină care se dă drept o pagină de conectare Usher Identity, consultați Raportați un abuz.