الانتقال إلى المحتوى

الأمان

أمان يشبه حُسن الضيافة.

لا يكون مزوّد الهوية جيدًا إلا بقدر متانة الجدران بين مستأجريه، وعنايته بالأسرار. إليك كيف بُني Usher Identity. نحن نصف ما يفعله البرنامج، ولا ندّعي الحصول على أي شهادة.

البنية

نطاقات منفصلة، وشبكات منفصلة.

تقع صفحات Usher Identity نفسه وجهة الإصدار لكل عميل على نطاقات مختلفة قابلة للتسجيل. وتقع قواعد البيانات على شبكة لا يمكنها الوصول إلى الإنترنت، والمخرج الوحيد منها وكيل يتحقق من وجهة كل اتصال.

  • يتولى Caddy إنهاء TLS لكل مضيف، ويزيل الترويسات التي لا يحق لغير خدمات Usher Identity نفسها تعيينها.
  • تستجيب طبقة المصادقة لكل البيئات، وتميّز بينها بالمضيف؛ ولا يُخزَّن شيء مؤقتًا لمضيف ثم يُقدَّم لمضيف آخر.
  • تتصل كل خدمة بـ Valkey بوصفها مستخدمًا مستقلًا، مقصورًا على مفاتيحها الخاصة. ولا يوجد مستخدم افتراضي.
  • لا تُكتب استعلامات SQL التي تحمل رموزًا مميزة أو رموز تحقق في سجل قاعدة البيانات مع قيمها أبدًا.

الإنترنت

الأشخاص، وتطبيقاتك، وخوادمك

الطبقة الطرفية

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 خاص بها، ومفاتيح توقيع خاصة بها، وأسرار خاصة بها مختومة بمفتاح بياناتها الخاص. وجهة الإصدار الخاصة بها مضيف على نطاق المستأجرين، وملفات تعريف الارتباط فيها مقصورة على المضيف، فلا يرسل المتصفح أبدًا ملف تعريف ارتباط بيئة ما إلى بيئة أخرى.

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 وتمريرتان، مع حد لعدد العمليات المتزامنة، فلا يمكن لسيل من محاولات تسجيل الدخول أن يُسقط الخدمة. وتُفحص كلمات السر الجديدة مقابل التسريبات المعروفة عبر واجهة النطاقات في Have I Been Pwned، التي لا ترى سوى بادئة قصيرة من تجزئة كلمة السر. والحد الأدنى للطول 12 حرفًا افتراضيًا.

  • لا شيء مخزّن يمكن إعادة إرساله

    تُخزَّن أسرار العملاء والرموز المميزة ورموز الروابط السحرية والرموز المرسلة بالبريد الإلكتروني مُجزَّأة. والرموز الاحتياطية مشفّرة. يبقى رمز التفويض صالحًا خمس دقائق، ويسمح الرمز المرسل بالبريد الإلكتروني بثلاث محاولات.

  • حدود للمعدل على كل باب

    لكلٍّ من تسجيل الدخول، وإنشاء الحسابات، والرموز عبر البريد الإلكتروني، والروابط السحرية، وإعادة تعيين كلمات السر، والتحقق بالعامل الثاني حدّه الخاص: عشر محاولات لتسجيل الدخول بكلمة السر في الدقيقة، مثلًا، وخمسة رموز عبر البريد الإلكتروني كل عشر دقائق.

  • سياسة Content-Security-Policy صارمة

    تحصل كل صفحة من صفحات Lobby على قيمة nonce جديدة وسياسة مبنية حولها: لا تعمل إلا النصوص البرمجية من هذا المصدر التي تحمل قيمة nonce، ولا تُرسَل النماذج إلا إلى المصدر نفسه، ولا يمكن للمواقع الأخرى تضمين الصفحة في إطار.

  • سجل تدقيق يمكنك الوثوق به

    تُكتب التغييرات على مساحات العمل والمشاريع والبيئات في سجل لا يقبل إلا الإضافة، وكل إدخال فيه مرتبط بسلسلة تجزئة بالإدخال الذي قبله، فيظهر أي إدخال معدَّل أو مفقود.

  • وكيل للاتصالات الصادرة إلى عناوين العملاء

    كل طلب يرسله Usher Identity إلى عنوان قدّمه أحد العملاء (اكتشاف OIDC، و JWKS، وتسجيل الخروج عبر القناة الخلفية) يخرج عبر وكيل واحد. يحلّ الوكيل الاسم مرة واحدة، ويرفض العناوين الخاصة وعناوين الاسترجاع (loopback) والعناوين المحلية للرابط (link-local) وعناوين البيانات الوصفية للسحابة، ثم يتصل بالعنوان الذي تحقق منه، فلا يمكن لهجوم DNS rebinding أن يحوّل عنوان URL لعميل إلى عنوان داخلي.

  • أسماء مختصرة لا تُمنح مرتين أبدًا

    الاسم المختصر لبيئة الإنتاج هو التسمية الأولى في عنوان جهة الإصدار. لا يُتاح Console إلا بدعوة، ويُعلَّق أي Lobby يُبلَّغ عنه بسبب التصيد الاحتيالي، ولا يُمنح الاسم المستخدم مرة لأحد بعد ذلك أبدًا، لأن التطبيقات القديمة قد تظل تثق برموزه المميزة.

  • جلسات تنتهي حين تقرر

    يتحقق Usher Identity من جلساته في كل طلب بدلًا من الوثوق بنسخة مخزّنة مؤقتًا، لذا تنتهي الجلسة التي تُنهيها فورًا. رموز الوصول قصيرة العمر (عشر دقائق افتراضيًا)، ويمكن لواجهة API الخاصة بك فحصها.

الإفصاح المسؤول

وجدت شيئًا؟ أخبرنا أولًا.

إذا كنت تعتقد أنك وجدت مشكلة أمنية في Usher Identity، فنودّ أن نسمع عنها، وسنعمل معك على إصلاحها.

security@usheridentity.com
  • ما الذي وجدته، وأين، وكيف يمكن إعادة إنتاجه.
  • ما الذي يمكن لأحد أن يفعله به، بحسب فهمك.
  • كيف يمكننا التواصل معك، وهل تودّ أن يُنسب إليك الفضل.

يُرجى الاختبار فقط على البيئات التي تملكها، وعدم الوصول إلى بيانات الآخرين، ومنحنا وقتًا معقولًا لإصلاح المشكلة قبل أن تشاركها. للإبلاغ عن صفحة تنتحل صفة صفحة تسجيل دخول Usher Identity، راجع الإبلاغ عن إساءة الاستخدام.