神戸ソフト株式会社(本社:兵庫県神戸市中央区、代表取締役:松岡 利昌)は、マルチテナント SaaS のための認証情報ブローカー「tenant-pass」を、オープンソースソフトウェア(Apache License 2.0)として公開しました。アプリケーションはテナント(顧客)のデータベースのパスワードを一切持たず、ゲートウェイが実際に転送したリクエストに対してだけ、そのテナントの短命なパスワードを受け取ります。アプリケーションが乗っ取られても、攻撃者の手がすべてのテナントのデータに一度に届くことを防ぎます。PostgreSQL・MySQL・Redis / Valkey に対応しています。

tenant-pass:https://kobesoft.co.jp/oss/tenant-pass/
GitHub:https://github.com/kobesoft-labs/tenant-pass

【画像 https://www.dreamnews.jp/press/367331/images/bodyimage1】

▲ tenant-pass の公式ページ。右は、ゲートウェイがリクエストのたびに署名する「パス」の中身です

開発の背景

複数の顧客(テナント)を1つのアプリケーションで扱う SaaS では、テナントごとにデータベースを分けていても、そこへ接続するアプリケーションは、ふつうすべてのテナントのデータに届く状態にあります。管理者に近い1つの共通のアカウントで接続しているか、テナントごとのパスワードを中央の表に保存し、アプリケーションが復号して使っているかのどちらかです。

リモートでコードを実行される脆弱性、悪意のある依存パッケージ、盗まれたデプロイ用の認証情報など、攻撃者がアプリケーションの中でコードを動かせるようになる道はいくつもあります。そうなれば、攻撃者はすべてのテナントのデータに一度に届いてしまいます。

tenant-pass は「アプリケーションを信頼しない」ことを前提に設計しました。乗っ取られたアプリケーションにできることを、「いまリクエストが来ているテナントだけ」に狭めます。

【画像 https://www.dreamnews.jp/press/367331/images/bodyimage2】

▲ アプリケーションが乗っ取られたとき、攻撃者の手が届くテナントの違い。左は tenant-pass なし、右は tenant-pass あり

tenant-pass の特長

1. パスワードは、実際のリクエストにだけ発行
認証情報を受け取るには、ゲートウェイが署名した「パス」が必要です。パスは「いま、テナント X 宛てのリクエストをあなたに転送している」という証明で、有効期間は数秒です。パスには転送先のアプリケーションの名前も書かれているため、ほかのアプリケーションからは使えません。乗っ取られたアプリケーションはパスを作れないので、リクエストが来ていないテナントの認証情報は取れません。

2. パスワードを保存しない
テナントのパスワードは、tenant-pass の中だけにある鍵から計算(導出)します。どこにも保存しないので、盗まれるパスワードの一覧がそもそもありません。パスワードは既定で15分ごとに入れ替わります。tenant-pass は状態を持たないため、何台並べても台どうしで情報をやり取りする必要はありません。

3. 有効期限はデータベースが守る
PostgreSQL では、パスワードに有効期限を設定します。tenant-pass が止まっていても、期限が来ればデータベース自身がログインを拒否します。MySQL と Redis では、期限の切れたパスワードを tenant-pass が定期的に削除します。データベースへは平文のパスワードではなく照合用のハッシュだけを送るため、パスワードがデータベースのログに現れません。

4. 被害が広がる速さに上限
1つのアプリケーションが1分間に取得できる「異なる」テナントの数を制限します。急に多くのテナントに触れ始めたら、エラーの応答と監査ログでわかり、異常に気付いて対応する時間を稼げます。管理者の権限を持つアカウントや、管理対象の印のないアカウントのパスワードは変えません。

5. 既存の構成に組み込める
すぐに使えるゲートウェイ「tenant-pass-gateway」を同梱しています。Caddy・nginx・Traefik・Envoy に組み込め、利用者の ID プロバイダーが発行したトークン(JWT)を検証して、利用者自身のテナントに対してだけパスに署名します。夜間の集計など後から動く処理のための「ジョブチケット」や、鍵を HashiCorp Vault / OpenBao に保管する仕組みもそろえています。

【画像 https://www.dreamnews.jp/press/367331/images/bodyimage3】

▲ 1回のリクエストの流れ。アプリケーションはパスと自分の ID を tenant-pass に示し、そのテナント専用のアカウントでデータベースに接続します

想定する使いみち

・テナントごとにデータベースのアカウントを分けている SaaS:PostgreSQL のロール、MySQL のユーザー、Redis の ACL ユーザーをテナントごとに持つサービスで、アプリケーションからテナントのパスワードをなくす
・共通のアカウントや、パスワードを保存した表からの移行:アプリケーションが乗っ取られたときに、攻撃者の手が届くテナントを「いま使われているテナント」に狭める
・バックグラウンドの処理:キューに入れた処理や夜間のジョブも、1つのテナントの認証情報だけで動かす

tenant-pass は汎用のシークレット管理ではありません。扱うのは、マルチテナント SaaS における「リクエストに結び付いた、テナント単位の」データベースへのアクセスという、限られた1つの場面です。

いまの状態

今回公開したのは最初の版 v0.1.0 で、1.0 より前です。パスの形式とパスワードの導出方式にはバージョンが付いていて、テストベクターで検証していますが、設定や API の細部はまだ変わる可能性があります。外部のセキュリティ監査はまだ受けていません。デプロイする前に、公式ページとリポジトリの脅威モデルをお読みください。tenant-pass が守るものと守らないものを、そこにまとめています。

ドキュメントは日本語と英語で公開しています。脆弱性は GitHub の非公開の報告の窓口から受け付けます。

ライセンス・導入支援

tenant-pass は Apache License 2.0 のオープンソースソフトウェアで、商用のサービスへの組み込みを含めて無料で利用できます。Go で書いた単一のバイナリで、コンテナイメージも公開しています。自社のサービスへの組み込みや導入のご相談は、開発元の神戸ソフトがお受けします。

会社概要

会社名:神戸ソフト株式会社
所在地:〒650-0031 兵庫県神戸市中央区東町123-1 6F
代表者:代表取締役 松岡 利昌
設立:2023年10月
事業内容:システム開発・アプリ開発の受託開発
URL:https://kobesoft.co.jp/



配信元企業:神戸ソフト株式会社
プレスリリース詳細へ

ドリームニューストップへ
情報提供元: Dream News
記事名:「 神戸ソフト、マルチテナントSaaSのデータベース認証情報ブローカー「tenant-pass」をオープンソースで公開 1つのアプリの侵害で、全テナントを失わないために 」