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
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
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.
Pagrindinis raktas
Laikomas už duomenų bazės ribų, su versijomis
Duomenų raktas, po vieną kiekvienai aplinkai
Apgaubtas pagrindiniu raktu
Paslaptis
Užsandarinta AES-256-GCM duomenų raktu
u1.<key version>.<iv>.<ciphertext + tag>
aad = u1 | version | environment | purpose
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.
- 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ą.