Chuyển đến nội dung

Bảo mật

Bảo mật mang cảm giác hiếu khách.

Một nhà cung cấp danh tính chỉ tốt bằng những bức tường ngăn giữa các tenant và sự cẩn trọng với thông tin bí mật. Đây là cách Usher Identity được xây dựng. Chúng tôi mô tả những gì phần mềm làm; chúng tôi không tuyên bố có chứng nhận nào.

Kiến trúc

Tên miền riêng, mạng riêng.

Các trang của chính Usher Identity và bên phát hành của mỗi khách hàng nằm trên những tên miền có thể đăng ký khác nhau. Cơ sở dữ liệu nằm trên một mạng không thể ra internet, và lối ra duy nhất là một proxy kiểm tra nơi kết nối sẽ đến.

  • Caddy xử lý TLS cho mọi host và loại bỏ những header mà chỉ các dịch vụ của chính Usher Identity mới được đặt.
  • Tầng xác thực phục vụ mọi môi trường, phân biệt theo host; không có gì được lưu bộ nhớ đệm cho host này rồi phục vụ cho host khác.
  • Mỗi dịch vụ giao tiếp với Valkey bằng người dùng riêng, chỉ được dùng khóa của chính mình. Không có người dùng mặc định.
  • Các câu lệnh chứa token và mã không bao giờ được ghi vào nhật ký cơ sở dữ liệu kèm giá trị của chúng.

Internet

Người dùng, ứng dụng của bạn, máy chủ của bạn

Lớp biên

Caddy: TLS, HSTS, loại bỏ header nội bộ

usheridentity.com

Trang web và Console

usheridentity.com, console.usheridentity.com

API

api.usheridentity.com

*.usherid.com

Tầng xác thực

Bên phát hành và Lobby của mọi môi trường

Mạng dữ liệu · không có đường ra

Postgres

Mỗi môi trường một schema

Valkey

Mỗi dịch vụ chỉ dùng khóa của chính mình

Lối ra duy nhất

Proxy đi ra

Cho mọi URL do khách hàng cung cấp

Khám phá, JWKS, đăng xuất

Chỉ địa chỉ công khai

Các tầng của Usher Identity. Tên miền tenant là một tên miền có thể đăng ký khác với tên miền của nền tảng, nên các trang của một tenant không bao giờ cùng site với Console.

Cách ly

Không dùng chung bất cứ thứ gì quan trọng.

Mỗi môi trường của dự án có schema Postgres riêng, khóa ký riêng và thông tin bí mật riêng được niêm phong bằng khóa dữ liệu riêng. Bên phát hành của môi trường là một host trên tên miền tenant, và cookie của nó chỉ dành cho host đó, nên trình duyệt không bao giờ gửi cookie của môi trường này sang môi trường khác.

usheridentity.com

Trang web, Usher Identity Console, tài khoản Usher Identity

*.usherid.com

Mỗi môi trường một bên phát hành, trên một tên miền tách biệt

Môi trường

Người dùng, phiên và token nằm trong một schema được tạo cho môi trường này. Các truy vấn chạy trên schema đó, không bao giờ trên một bảng dùng chung có cột tenant.

Sao chép client secret Google đã niêm phong từ môi trường chính thức của Acme sang môi trường chính thức của Northwind.

Mã hóa dữ liệu lưu trữ

Mã hóa phong bì, gắn chặt với vị trí của nó.

Thông tin bí mật bạn giao cho Usher Identity được niêm phong bằng AES-256-GCM dưới một khóa dữ liệu thuộc về một môi trường. Bản thân các khóa dữ liệu được bọc bằng một khóa chính có phiên bản, lưu ngoài cơ sở dữ liệu.

Khóa dữ liệu riêng cho từng môi trường
Lộ khóa dữ liệu của một môi trường không tiết lộ gì về khóa của môi trường khác.
Ràng buộc AAD
Môi trường và mục đích được gắn vào mọi bản mã, nên không thể chuyển một giá trị giữa các hàng hay các tenant.
Khóa có phiên bản
Mỗi giá trị được niêm phong ghi lại phiên bản khóa đã dùng để tạo ra nó, nên có thể xoay vòng khóa và bọc lại các giá trị cũ.
Có xác thực
Thẻ xác thực của GCM có nghĩa là một giá trị bị can thiệp sẽ không mở được, thay vì giải mã ra một thứ khác.
  1. Khóa chính

    Lưu ngoài cơ sở dữ liệu, có phiên bản

  2. Khóa dữ liệu, mỗi môi trường một khóa

    Được bọc bằng khóa chính

  3. Thông tin bí mật

    Được niêm phong bằng AES-256-GCM dưới khóa dữ liệu

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

aad = u1 | version | environment | purpose

Một giá trị được niêm phong ghi tên môi trường và mục đích của nó trong dữ liệu xác thực. Sao chép đi bất kỳ đâu khác, nó sẽ không mở được.

Thực hành

Từng chi tiết, làm cẩn thận.

  • Mật khẩu, nếu bạn dùng

    Được băm bằng Argon2id ở mức chi phí OWASP khuyến nghị (19 MiB, hai lượt), với giới hạn số lượt chạy cùng lúc để một đợt đăng nhập dồn dập không thể làm sập dịch vụ. Mật khẩu mới được đối chiếu với các vụ rò rỉ đã biết qua API phạm vi của Have I Been Pwned, vốn chỉ thấy một tiền tố ngắn của giá trị băm mật khẩu. Độ dài tối thiểu mặc định là 12.

  • Không lưu gì có thể bị dùng lại

    Client secret, token, token của liên kết đăng nhập và mã gửi qua email đều được lưu ở dạng băm. Mã dự phòng được mã hóa. Một mã ủy quyền có hiệu lực năm phút; một mã gửi qua email cho phép thử ba lần.

  • Giới hạn tần suất ở mọi cánh cửa

    Đăng nhập, đăng ký, mã qua email, liên kết đăng nhập, đặt lại mật khẩu và kiểm tra yếu tố thứ hai đều có giới hạn riêng: ví dụ, mười lần đăng nhập bằng mật khẩu mỗi phút, và năm mã qua email mỗi mười phút.

  • Content-Security-Policy nghiêm ngặt

    Mỗi trang Lobby có một nonce mới và một chính sách xây dựng quanh nonce đó: chỉ các script của origin này mang nonce mới được chạy, biểu mẫu chỉ gửi đến cùng origin, và các trang khác không thể nhúng trang vào khung.

  • Nhật ký kiểm toán đáng tin cậy

    Các thay đổi đối với không gian làm việc, dự án và môi trường được ghi vào một nhật ký chỉ cho phép ghi thêm, mỗi mục được nối chuỗi băm với mục trước, nên một mục bị sửa hoặc bị mất sẽ lộ ra.

  • Proxy đi ra cho URL của khách hàng

    Mọi yêu cầu Usher Identity gửi đến một địa chỉ do khách hàng cung cấp (khám phá OIDC, JWKS, đăng xuất qua kênh sau) đều đi qua một proxy duy nhất. Proxy phân giải tên một lần, từ chối các địa chỉ riêng tư, loopback, link-local và metadata đám mây, rồi kết nối đến đúng địa chỉ đã kiểm tra, nên DNS rebinding không thể biến URL của khách hàng thành một URL nội bộ.

  • Tên định danh không bao giờ được cấp hai lần

    Tên định danh của một môi trường chính thức là nhãn đầu tiên trong bên phát hành của nó. Console chỉ mở cho người được mời, Lobby bị báo cáo lừa đảo sẽ bị tạm ngưng, và một tên định danh đã dùng sẽ không bao giờ được cấp lại, vì các ứng dụng cũ có thể vẫn tin tưởng token của nó.

  • Phiên kết thúc khi bạn muốn

    Usher Identity kiểm tra phiên của chính mình ở mỗi yêu cầu thay vì tin vào một bản sao trong bộ nhớ đệm, nên một phiên bạn kết thúc sẽ chấm dứt ngay lập tức. Token truy cập có hiệu lực ngắn (mặc định mười phút), và API của bạn có thể kiểm tra chúng.

Công bố có trách nhiệm

Phát hiện điều gì? Hãy báo cho chúng tôi trước.

Nếu bạn nghĩ mình đã tìm thấy một lỗi bảo mật trong Usher Identity, chúng tôi rất muốn được nghe, và sẽ cùng bạn khắc phục.

security@usheridentity.com
  • Bạn đã tìm thấy gì, ở đâu, và cách tái hiện.
  • Theo bạn hiểu, ai đó có thể làm gì với lỗi này.
  • Cách chúng tôi có thể liên hệ với bạn, và bạn có muốn được ghi công hay không.

Vui lòng chỉ thử nghiệm trên các môi trường bạn sở hữu, không truy cập dữ liệu của người khác, và cho chúng tôi một khoảng thời gian hợp lý để khắc phục trước khi bạn chia sẻ. Để báo cáo một trang giả mạo trang đăng nhập Usher Identity, hãy xem Báo cáo lạm dụng.