Pereiti prie turinio

Sauga

Saugumas, kuris jaučiasi kaip svetingumas.

Tapatybės teikėjas tiek geras, kiek tvirtos sienos tarp jo nuomininkų ir kiek rūpestingai jis elgiasi su paslaptimis. Štai kaip sukurta Usher Identity. Aprašome, ką daro programinė įranga; jokių sertifikavimo teiginių neteikiame.

Architektūra

Atskiri domenai, atskiri tinklai.

Pačios Usher Identity puslapiai ir kiekvieno kliento išdavėjas yra skirtinguose registruojamuose domenuose. Duomenų bazės yra tinkle, kuris negali pasiekti interneto, o vienintelis kelias laukan – tarpinis serveris, tikrinantis, kur jungiamasi.

  • Caddy užbaigia TLS kiekvienam serveriui ir pašalina antraštes, kurias gali nustatyti tik pačios Usher Identity paslaugos.
  • Autentifikavimo lygmuo atsako už kiekvieną aplinką, atskirdamas jas pagal serverį; niekas, kas išsaugota podėlyje vienam serveriui, nepateikiama kitam.
  • Kiekviena paslauga jungiasi prie Valkey kaip atskiras naudotojas, apribotas tik savo raktais. Numatytojo naudotojo nėra.
  • Užklausos, kuriose yra žetonų ir kodų, niekada neįrašomos į duomenų bazės žurnalą su jų reikšmėmis.

Internetas

Žmonės, jūsų programos, jūsų serveriai

Kraštinis serveris

Caddy: TLS, HSTS, pašalina vidines antraštes

usheridentity.com

Svetainė ir Console

usheridentity.com, console.usheridentity.com

API

api.usheridentity.com

*.usherid.com

Autentifikavimo lygmuo

Kiekvienos aplinkos išdavėjas ir Lobby

Duomenų tinklas · kelio laukan nėra

Postgres

Po schemą kiekvienai aplinkai

Valkey

Kiekviena paslauga apribota savo raktais

Vienintelis kelias laukan

Išeinančio srauto tarpinis serveris

Kiekvienam kliento pateiktam URL

Aptikimas, JWKS, atsijungimas

Tik vieši adresai

Usher Identity lygmenys. Nuomininkų domenas yra kitas registruojamas domenas nei platformos, todėl nuomininko puslapiai niekada nėra toje pačioje svetainėje (same-site) kaip Console.

Izoliacija

Niekuo svarbiu nesidalijama.

Kiekviena projekto aplinka gauna savo Postgres schemą, savo pasirašymo raktus ir savo paslaptis, užsandarintas savo duomenų raktu. Jos išdavėjas yra serveris nuomininkų domene, o jos slapukai skirti tik tam serveriui, todėl naršyklė niekada nesiunčia vienos aplinkos slapuko kitai.

usheridentity.com

Svetainė, Usher Identity Console, Usher Identity paskyros

*.usherid.com

Po vieną išdavėją kiekvienai aplinkai, atskirame domene

Aplinka

Naudotojai, sesijos ir žetonai saugomi šiai aplinkai sukurtoje schemoje. Užklausos vykdomos toje schemoje, niekada bendroje lentelėje su nuomininko stulpeliu.

Nukopijuoti Acme produkcinės aplinkos užsandarintą Google kliento paslaptį į Northwind produkcinę aplinką.

Saugomų duomenų šifravimas

Vokinis šifravimas, susietas su savo vieta.

Paslaptys, kurias pateikiate Usher Identity, užsandarinamos AES-256-GCM duomenų raktu, priklausančiu vienai aplinkai. Duomenų raktai savo ruožtu apgaubti pagrindiniu raktu su versijomis, laikomu už duomenų bazės ribų.

Duomenų raktai kiekvienai aplinkai
Vienos aplinkos duomenų rakto kompromitavimas neatskleidžia nieko apie kitos.
AAD susiejimas
Aplinka ir paskirtis įrišamos į kiekvieną šifrotekstį, todėl reikšmės negalima perkelti tarp eilučių ar nuomininkų.
Raktai su versijomis
Kiekviena užsandarinta reikšmė įrašo rakto versiją, kuria buvo sukurta, todėl raktus galima keisti, o senas reikšmes – apgaubti iš naujo.
Autentifikuota
Dėl GCM žymos pakeista reikšmė neatsidaro, užuot iššifruota į ką nors kita.
  1. Pagrindinis raktas

    Laikomas už duomenų bazės ribų, su versijomis

  2. Duomenų raktas, po vieną kiekvienai aplinkai

    Apgaubtas pagrindiniu raktu

  3. Paslaptis

    Užsandarinta AES-256-GCM duomenų raktu

u1.<key version>.<iv>.<ciphertext + tag>

aad = u1 | version | environment | purpose

Užsandarinta reikšmė savo autentifikuojamuose duomenyse nurodo savo aplinką ir paskirtį. Nukopijuota kitur, ji neatsidaro.

Praktika

Detalės, atliktos kruopščiai.

  • Slaptažodžiai, jei juos naudojate

    Maišomi Argon2id algoritmu OWASP rekomenduojamu sudėtingumu (19 MiB, du perėjimai), ribojant, kiek jų vykdoma vienu metu, kad prisijungimų antplūdis negalėtų paslaugos sustabdyti. Nauji slaptažodžiai tikrinami pagal žinomus nutekėjimus per Have I Been Pwned intervalų API, kuri mato tik trumpą slaptažodžio maišos priešdėlį. Numatytasis mažiausias ilgis – 12.

  • Nesaugoma nieko, ką būtų galima pakartoti

    Kliento paslaptys, žetonai, magiškųjų nuorodų žetonai ir el. paštu siunčiami kodai saugomi kaip maišos. Atsarginiai kodai užšifruojami. Autorizacijos kodas galioja penkias minutes; el. paštu atsiųstą kodą galima įvesti tris kartus.

  • Užklausų ribos prie kiekvienų durų

    Prisijungimas, registracija, el. paštu siunčiami kodai, magiškosios nuorodos, slaptažodžio atkūrimas ir antrojo veiksnio patikra turi atskiras ribas: pavyzdžiui, dešimt prisijungimų slaptažodžiu per minutę ir penki el. paštu siunčiami kodai per dešimt minučių.

  • Griežta Content-Security-Policy

    Kiekvienas Lobby puslapis gauna naują nonce ir aplink jį sudarytą politiką: vykdomi tik šios kilmės scenarijai su tuo nonce, formos siunčiamos tik į tą pačią kilmę, o kitos svetainės negali įterpti puslapio į rėmelį.

  • Audito žurnalas, kuriuo galima pasitikėti

    Darbo sričių, projektų ir aplinkų pakeitimai rašomi į tik papildomą žurnalą, kuriame kiekvienas įrašas maišos grandine susietas su ankstesniu, todėl pakeistas ar trūkstamas įrašas išryškėja.

  • Išeinančio srauto tarpinis serveris klientų URL

    Kiekviena užklausa, kurią Usher Identity siunčia kliento pateiktu adresu (OIDC aptikimas, JWKS, back-channel atsijungimas), išeina per vieną tarpinį serverį. Jis vieną kartą išsprendžia vardą, atmeta privačius, grįžtamojo ryšio, vietinio ryšio ir debesies metaduomenų adresus ir jungiasi prie patikrinto adreso, todėl DNS perrišimas negali kliento URL paversti vidiniu.

  • Identifikatoriai, niekada neišduodami dukart

    Produkcinės aplinkos identifikatorius yra pirmoji jos išdavėjo adreso dalis. Console pasiekiama tik su kvietimu, Lobby, apie kurį pranešta dėl sukčiavimo, sustabdomas, o kartą panaudotas identifikatorius niekada nebeišduodamas, nes senos programos gali vis dar pasitikėti jo žetonais.

  • Sesijos, kurios baigiasi, kai pasakote

    Usher Identity tikrina savo sesijas per kiekvieną užklausą, užuot pasitikėjusi kopija podėlyje, todėl jūsų nutraukta sesija baigiasi iš karto. Prieigos žetonai trumpalaikiai (numatytai dešimt minučių), o jūsų API gali juos patikrinti.

Atsakingas atskleidimas

Ką nors radote? Pirmiausia praneškite mums.

Jei manote, kad radote saugumo problemą Usher Identity, norėtume apie tai išgirsti ir kartu su jumis ją ištaisysime.

security@usheridentity.com
  • Ką radote, kur ir kaip tai atkartoti.
  • Ką, jūsų supratimu, kas nors galėtų su tuo padaryti.
  • Kaip galime su jumis susisiekti ir ar norėtumėte būti paminėti.

Testuokite tik savo aplinkas, nesinaudokite kitų žmonių duomenimis ir duokite mums pagrįstą laiką problemai ištaisyti, prieš ja dalydamiesi. Norėdami pranešti apie puslapį, apsimetantį Usher Identity prisijungimo puslapiu, žr. Pranešti apie piktnaudžiavimą.