Kurahiセキュリティ概要
English: Security Overview
このページは、自社ホストのKurahiについてセキュリティレビューで問われる事項に答えます。各項目は仕組みと、確認に使えるコマンドを示します。対象バージョン:Kurahi 2.0.0以降(kurahi --version で確認)。
1. 配置モデル
「1. 配置モデル」の見出し- Kurahiは自社ホスト型のソフトウェアです。識別名ごとに1つのゲートウェイプロセスが、評価者のマシンまたはサーバー上でOSのサービス管理(systemdユーザーサービス、launchdエージェント、Windowsタスクスケジューラ)の下で動作します。評価構成にKurahi側が運用するクラウド構成要素はありません。
- すべての状態は1つのディレクトリ
KOLO_HOME(Linux / macOSは~/.kolo、Windowsは%LOCALAPPDATA%\KoLo)に置かれます。それ以外に書き込むのはインストール先のプログラムファイルだけです。 - クライアント(ターミナル、Web UI、ペアリングした端末、メッセージングチャネル)はWebSocketとHTTPでゲートウェイに接続します。ゲートウェイは、設定されたモデルプロバイダーと、運用者が有効化したチャネルに対してのみ外向き通信を行います。
2. マシンの外に出るデータ
「2. マシンの外に出るデータ」の見出し| 通信 | 宛先 | 既定 | 無効化の方法 |
|---|---|---|---|
| モデルへのリクエスト(プロンプト、ツール結果、応答) | 運用者が設定したプロバイダー(標準プロファイルは国内ホストのOpenAI互換サービス、またはローカルのモデルサーバー) | プロバイダー設定後のみ | kurahi init で local プロファイルを選ぶ |
| メッセージングチャネル | 各チャネル事業者のAPI(LINE、Telegramなど) | 無効 | チャネルを有効化しない |
| 更新確認 | パッケージレジストリ(バージョン情報のみ) | npmインストールではゲートウェイ起動時 | kolo.json で update.checkOnStart: false |
| mDNS/Bonjourの告知 | ローカルネットワークへのゲートウェイ名のブロードキャスト | minimal | gateway.discovery.mdns.mode: "off" |
| インストーラーのダウンロード | github.com(リリースバンドルとSHA256SUMS.txt) | インストール時のみ | --bundle によるオフラインインストール |
テレメトリー、アナリティクス、クラッシュレポート、利用統計は送信しません。ゲートウェイは実行時にKurahiや提供元へ接続しません。詳細はプライバシー を参照してください。
3. ネットワーク公開範囲と接続ポリシー
「3. ネットワーク公開範囲と接続ポリシー」の見出し- 既定の待ち受けはループバック(
127.0.0.1/::1)です。リモートアクセスにはgateway.bindの明示設定(lan、tailnet、custom)と、すべての接続でのトークンが必要です。 /api/*配下のすべてのHTTPルートと、すべてのWebSocketメソッドは資格情報を要求します。認証なしで応答するのはGET /healthとGET /api/healthだけで、返すのは状態・バージョン・稼働時間のみです。詳細な準備状況は資格情報が必要です。- 資格情報の試行は送信元アドレスごとにレート制限されます(毎分20回)。
- APIはOpenAPI 3.1文書(
GET /doc、資格情報が必要)で記述され、各操作が最小スコープを宣言しています。
4. 認証と認可
「4. 認証と認可」の見出し- ゲートウェイシークレット:
kurahi initが生成するランダムな256ビットのトークン。KOLO_HOME/secrets/gateway.tokenにファイル権限0600で保存され、コマンドライン引数には渡されません。 - 端末のペアリング:スコープ付き(
observe<attach<admin<owner)で有効期限が数分の1回限りの招待コード。端末はサーバーが発行したノンスに署名することで、Ed25519秘密鍵の保有を証明し、短命のアクセストークンとローテーションするリフレッシュトークンを受け取ります。失効済みリフレッシュトークンの再利用は、そのトークン系列全体を取り消します。端末はいつでも取り消せます(kurahi pair revoke)。一定期間(既定90日)後に再同意が必要です。 - セッション許可リストにより、資格情報を特定のセッションやエージェントに限定できます。
- エージェントのツール実行は、運用者の実行承認(
kurahi approvals)とサンドボックス設定の下で行われます。
確認:kurahi pair list、kurahi pair invite --scope observe の後に管理ルートへアクセス(403を期待)。
5. シークレット
「5. シークレット」の見出し- プロバイダーの鍵やチャネルのトークンは、
KOLO_HOME配下の認証プロファイルストアと暗号化シークレットストアに保存されます(kurahi secrets listでバックエンドを表示)。設定ファイルはシークレットを名前で参照し、kurahi secrets migrateでkolo.jsonから平文の値を移動できます。 - どのコマンドもシークレットを表示せず、コマンドライン引数としては受け付けず(
--stdinまたは環境変数を使用)、ログではマスクされます。 - 他ツールの資格情報ファイルからの取り込みは明示的な操作(
kurahi doctor --verbose)でのみ行われ、自動では行われません。
6. 監査ログ
「6. 監査ログ」の見出し- すべての認証、ペアリング、セッション接続/切断、管理操作、ツール実行は、
KOLO_HOME/audit/配下のハッシュチェーン付き監査ログに追記されます(月ごとに1ファイル。各エントリは直前エントリのハッシュを含みます)。 kurahi audit verifyはチェーンを再計算して最初の断絶を報告し、kurahi audit tailは直近のエントリを表示します。ゲートウェイからは追記のみです。改ざんは検出できますが、ファイルを追記専用ストレージに転送しない限り防止はできません。- 監査ログの保持期間による削除は、署名付きのアンカーを置いたうえで最も古い側から月単位でのみ行うため、残ったチェーンはそのまま検証できます。
governance.minimumRetentionDays.audit(既定365日)より短くはなりません。正しい個人番号は監査ログの行で常にマスクされます。データガバナンスを参照してください。
7. 起動時の整合性ゲート
「7. 起動時の整合性ゲート」の見出しkurahi integrity initは、インストールの基本ファイル(エージェントへの指示、ポリシー)のSHA-256ダイジェストを記録します。起動のたびにゲートウェイが再検証し、enforceモードでは不一致があると起動を拒否(終了コード3)、warnモードでは起動したうえで/healthにintegrity: warnを報告します。- 確認:登録済みファイルを変更して再起動し、
kurahi service logsで拒否を確認。
7a. ポリシー・アズ・コード
「7a. ポリシー・アズ・コード」の見出し- ゲートウェイごとに1つの宣言的なポリシー
KOLO_HOME/policy/policy.yamlを置きます。内容は、エージェントごとのツール許可・拒否リストと権限のグロブ、利用を認めるプロバイダー・モデル・チャネル、予算(1日あたりのトークン、1日あたりのコスト、1時間あたりのツール呼び出し、ジョブごとの実行時間)と超過時の警告・一時停止・停止、キルスイッチ、人の承認が必要なツール分類、外部通信とMCPの許可リスト、読み書きを禁止するパス、シークレットのパターン、資格情報のスコープごとに拒否するHTTP/WebSocket操作です。kurahi policy schemaでJSON Schemaを表示します。 - 署名による保証:ポリシー文書はオーナー鍵(Ed25519)で署名され
policy.yaml.sigに保存されます。署名を認める鍵はowners.jsonに固定します。enforceモード(既定)では、署名のない文書、改変された文書、信頼されていない鍵で署名された文書は拒否されます。起動時はゲートウェイが終了コード3で終了し、稼働中は直前に受理した文書が有効なまま残ります。policy.mode: auditでは警告付きで読み込みます。モードは設定で決まり、文書側では変えられません。 - すべてのツール呼び出し(コア、MCP、Code Mode)、すべてのモデルリクエスト、チャネルの送受信メッセージ、認証済みのHTTP/WebSocketリクエスト、ジョブの開始時に強制されます。判定はそれぞれ、判定した条項のIDとともに監査ログに記録されます。ポリシーファイルは起動時の整合性ゲートの保護対象です。
- キルスイッチ:
kurahi policy kill --agent <id>|--all、POST /api/policy/kill、WSpolicy.kill(owner または admin)。実行中のジョブは中止され、新しい作業はイベントループの1ティック以内に拒否されます。この状態はreleaseするまで再起動後も維持されます。 - 確認:
kurahi policy initの後、再署名せずにファイルを編集して再起動し、kurahi service logsで拒否を確認。ターン中にkurahi policy kill --allを実行すると、kurahi api listJobsでジョブがcancelledで終わることを確認できます。
8. 保存データと保持期間
「8. 保存データと保持期間」の見出し| データ | 場所 | 保持 |
|---|---|---|
| 設定 | KOLO_HOME/kolo.json |
変更または削除まで |
| ゲートウェイトークン、シークレット、端末の資格情報(ハッシュのみ) | KOLO_HOME/secrets/(0600) |
取り消しまたは削除まで |
| セッションと会話記録 | KOLO_HOME/agents/<id>/sessions/ |
削除するまで(kurahi sessions、または完全削除)。自動アップロードなし |
| エージェントの作業領域とメモリ | KOLO_HOME/workspace/ |
削除まで |
| ログ | KOLO_HOME/logs/ |
日次ローテーション。自由に削除可 |
| 監査チェーン | KOLO_HOME/audit/ |
月次ファイル。ポリシーに従って保管 |
| サポートバンドル | KOLO_HOME/support/ |
kurahi support 実行時のみ生成。マスク済み |
データ区分(会話記録、案件、証跡、監査ログ、添付、生成物、メモリ、コネクターのキャッシュ)ごとの保持期間、訴訟ホールド、署名付きeDiscoveryエクスポート、本人からの請求への対応はデータガバナンスに記載しています。保持規則で指定するまで、どの区分も無期限に保管します。削除した証跡は署名付きのトゥームストーンを残します。
ファイルはサービスユーザーのOS権限で保護されます。ホストのフルディスク暗号化を推奨します。Kurahiはシークレットストア以外に独自のディスク暗号化を追加しません。
9. 完全削除
「9. 完全削除」の見出しkurahi service uninstall # OS サービスを停止して削除kurahi uninstall --all --yes # KOLO_HOME(設定、シークレット、セッション、監査、ログ)と作業領域を削除rm -rf <インストール先> # ~/.local/share/kolo と ~/.local/bin/kolo、または %LOCALAPPDATA%\KoLokurahi uninstall --all --yes --dry-run で削除対象を事前に確認できます。これらのパス以外には何も残りません。ペアリング済み端末が持つのは削除されたゲートウェイが発行したトークンだけで、無効になります。
10. ソフトウェアサプライチェーン
「10. ソフトウェアサプライチェーン」の見出し- リリースバンドルは
SHA256SUMS.txtとともに公開され、インストーラーはダイジェストが一致しないダウンロードを拒否します。 pnpm release:checkはエントリポイントが参照するすべてのファイルがパッケージに含まれることを検証し、pnpm pack:checkはCIでパッケージを空のディレクトリにインストールして実行します。- 依存関係は
pnpm-lock.yamlで固定され、CIはソースにシークレットスキャナーを実行します。 - リリース:すべてのリリースにSHA-256チェックサム、CycloneDX SBOM、ビルド来歴(provenance)証明を添付。macOS/Windowsバイナリのコード署名は計画中(公開ロードマップ参照)。
11. 脆弱性対応
「11. 脆弱性対応」の見出しsecurity@kodasoken.comへ報告してください。3営業日以内に受領連絡、10営業日以内にトリアージ、確認された重大度「高」または「緊急」の脆弱性は30日以内に修正、報告から最長90日で協調開示します。詳細はリポジトリの SECURITY.md を参照してください。
12. ライセンスと来歴
「12. ライセンスと来歴」の見出しオープンコア:プロトコル、SDK、プラグインAPI、CLIはMIT。ゲートウェイランタイムとそのサブシステムはFunctional Source License(FSL-1.1-Apache-2.0)。アイデンティティエンジンとエンタープライズ機能はプロプライエタリライセンス。サードパーティ構成要素は各自のライセンスに従います(NOTICE、ATTRIBUTION.md)。評価条件:評価ライセンス。
13. エージェント固有の統制
「13. エージェント固有の統制」の見出しエージェント特有のリスクに対する統制です。各ページに動作モードと限界を記載しています(英語)。新規インストールでは有効になっており、既存のインストールでは、まだ無効なものを kurahi doctor が表示します(セキュアデフォルト)。
| 統制 | 内容 |
|---|---|
| サプライチェーンロック | スキルとプラグインは、オーナー鍵で署名したロックのピンとSHA-256が一致する場合にのみ読み込まれる |
| メモリの来歴管理 | メモリへの書き込みごとに書き込んだ主体を記録し、信頼できない入力の後の書き込みは運用者のレビューまで保留する |
| エージェント間メッセージの署名 | エージェント間のメッセージをエージェントごとに署名し、送信者・宛先・時刻・ノンス・ペイロードのスキーマを検証する |
| ターミナルブローカー | Work Console のシェルはゲートウェイが管理し、1行ごとの判定、承認、ファイル差分、監査記録を行う |
| セキュアデフォルト | 新規インストールで、資格情報の分離、サンドボックス、実行承認、予算、破壊的コマンドのガードを有効にする |
| 添付ファイルの取り込み | メールの添付は隔離し、静的ポリシーとマルウェアスキャン(失敗時は拒否)を通ったものだけをプロジェクトに保存する |
| エンタープライズ ID | 人のための OIDC / SAML サインイン、SCIM プロビジョニング、ロールと組織単位、監査付きブレイクグラスのある SSO 必須 |
| データガバナンス | データ区分ごとの保持期間、訴訟ホールド、署名付きeDiscoveryエクスポート、外部送信時のマイナンバー遮断、本人請求への対応 |
| オートパイロットのウォッチドッグと停止 | ベースラインを超えた実行は何も実行せずルーティンを停止し、autopilot.stopAll と STOP ファイルで全ルーティンを止める |
OWASP Top 10 for Agentic Applications との対応と、リスクごとの評価:OWASP Agentic Top 10 への対応。