understanding-tauri-lifecycle-security について
Tauri 開発者向けのライフサイクルセキュリティスキルです。開発、ビルド、配布、実行時の脅威と対策を整理し、依存関係、署名、CSP、権限境界を扱います。
主な機能
- 01開発から実行時までの脅威整理
- 02依存関係と開発環境の対策
- 03ビルド署名と配布の完全性対策
- 04CSP、ケイパビリティ、権限スコープの設定
活用シーン
- 01Tauri プロジェクト全体の安全対策確認
- 02依存関係と開発環境の強化
- 03ビルド成果物と更新配布の保護
- 04WebView フロントエンドの権限リスク低減
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dchuk/ claude-code-tauri-skills --skill understanding-tauri-lifecycle-securityインストール後、Claude Code で/understanding-tauri-lifecycle-securityを入力して読み込まれたか確認します。
詳細
Tauri アプリケーションのライフサイクルセキュリティ
Tauri アプリケーションのセキュリティは、ライフサイクルのすべての段階で体系的に保護することにかかっています。アプリケーションのライフサイクルにおける最も弱い部分が、実質的にセキュリティ態勢を決定します。
セキュリティの基本原則
Tauri は 2 層のセキュリティモデルを実装しています。
- Rust コア:システムへの完全なアクセス
- WebView フロントエンド:制御された IPC レイヤーを介したアクセスのみ
WebView で実行されるコードは、明確に定義された IPC レイヤーを介して公開されたシステムリソースにのみアクセスできます。
開発フェーズの脅威
上流の依存関係に関するリスク
サードパーティの依存関係には、Tauri が維持しているような厳格な監督が行き届いていない場合があります。
緩和策:
# Scan Rust dependencies for vulnerabilities
cargo audit
# Scan npm dependencies
npm audit
# Advanced supply chain analysis
cargo vet
cargo crev
cargo supply-chain
ベストプラクティス:
- 脆弱性にパッチを適用するため、Tauri、
rustc、nodejsを最新の状態に保ちます - サードパーティライブラリを組み込む前に、その信頼性を評価します
- 重要な依存関係は、バージョン範囲ではなく git ハッシュのリビジョンを指定して使用することを優先します
# Cargo.toml - Pin to specific commit hash
[dependencies]
critical-lib = { git = "https://github.com/org/critical-lib", rev = "abc123def456" }
開発サーバーの公開
開発サーバーは通常、ローカルネットワーク上で暗号化も認証もされずに稼働するため、攻撃者が開発用デバイスに悪意のあるフロントエンドコードを送り込める可能性があります。
脅威シナリオ:
Attacker on same network -> Intercepts dev server traffic -> Injects malicious frontend code
緩和策:
- 信頼できるネットワーク上でのみ開発します
- 必要に応じて相互 TLS(mTLS)認証を実装します
- 注:Tauri の組み込み開発サーバーには、相互認証機能がありません
マシンの強化
| 対策 | 目的 |
|---|---|
| コーディングに管理者アカウントを使わない | 侵害の影響範囲を限定する |
| シークレットをバージョン管理から除外する | 認証情報の漏えいを防ぐ |
| ハードウェアセキュリティトークンを使用する | 侵害の影響を最小限に抑える |
| インストールするアプリケーションを最小限にする | 攻撃対象領域を減らす |
ソース管理のセキュリティ
必須の保護策:
- バージョン管理システムに適切なアクセス制御を実装します
- 不正な帰属表示を防ぐため、貢献者にコミットへの署名を義務付けます
- 認証ワークフローには、確立された強化ガイドラインを使用します
# Enable commit signing
git config --global commit.gpgsign true
git config --global user.signingkey YOUR_KEY_ID
ビルドフェーズの脅威
ビルドシステムへの信頼
CI/CD システムはソースコードやシークレットにアクセスし、ローカルでの検証なしにビルドを変更できます。
脅威ベクトル:
- CI/CD プロバイダーの侵害
- 悪意のあるビルドスクリプト
- 許可されていないシークレットへのアクセス
- ビルド成果物の改ざん
緩和策:
- 信頼できるサードパーティプロバイダー(GitHub Actions、GitLab CI)を利用します
- 機密性の高いアプリケーションでは、自前のインフラストラクチャをホストして管理します
バイナリ署名
アプリケーションには、対象プラットフォームに応じた暗号署名が必要です。
プラットフォームごとの要件:
| プラットフォーム | 署名要件 |
|---|---|
| macOS | Apple Developer Certificate + 公証 |
| Windows | コード署名証明書(EV を推奨) |
| Linux | パッケージへの GPG 署名 |
鍵の保護:
# Use hardware tokens for signing credentials
# Prevents compromised build systems from leaking keys
# Example: Using YubiKey for code signing
pkcs11-tool --module /usr/lib/opensc-pkcs11.so --sign
ハードウェアトークンは鍵の持ち出しを防ぎますが、侵害されたシステム上での鍵の不正使用は防げません。
再現可能なビルドの課題
Rust は理論上サポートしているものの、再現可能なビルドを確実に生成できるとは限りません。フロントエンドのバンドラーも同様に、再現可能な出力の生成に苦労しています。
影響:
- ビルドシステムへの信頼に依存する状況を完全には解消できません
- 複数の検証レイヤーを実装します
- ビルド来歴のアテステーションを検討します
配布の脅威
マニフェストサーバー、ビルドサーバー、バイナリホスティングの管理権限を失うと、重大な脆弱性が生じます。
攻撃ベクトル
Manifest Server Compromise -> Malicious update metadata -> Users download tampered binaries
Build Server Compromise -> Injected malware at build time -> Signed malicious releases
Binary Host Compromise -> Replaced binaries -> Users download malicious versions
緩和策
-
更新チャネルの保護
- すべての更新通信に HTTPS を使用します
- 可能な場合は証明書ピンニングを実装します
- クライアント側で更新署名を検証します
-
バイナリの完全性
- リリースと併せてチェックサムを公開します
- 更新には署名付きマニフェストを使用します
- 透明性ログを検討します
-
インフラストラクチャのセキュリティ
- すべての配布システムで多要素認証を使用します
- バイナリアクセスを監査ログに記録します
- 環境ごとに別々の認証情報を使用します
実行時の脅威
WebView のセキュリティモデル
Tauri は、WebView コンポーネントは本質的に安全ではないと想定し、複数の保護レイヤーを実装しています。
防御レイヤー:
+------------------+
| Untrusted |
| Frontend Code |
+--------+---------+
|
+--------v---------+
| CSP | <- Restricts communication types
+--------+---------+
|
+--------v---------+
| Capabilities | <- Controls API access
+--------+---------+
|
+--------v---------+
| Permissions | <- Fine-grained command control
+--------+---------+
|
+--------v---------+
| Scopes | <- Resource-level restrictions
+--------+---------+
|
+--------v---------+
| Rust Backend | <- Trusted system access
+------------------+
コンテンツセキュリティポリシー(CSP)
CSP は、XSS やインジェクション攻撃を防ぐために WebView の通信の種類を制限します。
tauri.conf.json での設定:
{
"app": {
"security": {
"csp": "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'"
}
}
}
CSP のベストプラクティス:
- 制限の厳しいポリシーから始め、必要な場合にのみ緩和します
- スクリプトでは
'unsafe-eval'と'unsafe-inline'を避けます - 必要な場合は、インラインスクリプトにノンスまたはハッシュを使用します
ケイパビリティの設定
特定のウィンドウに付与する権限を定義します。
例:src-tauri/capabilities/main.json
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "main-capability",
"description": "Capability for the main window",
"windows": ["main"],
"permissions": [
"core:path:default",
"core:window:allow-set-title",
"fs:read-files"
]
}
セキュリティに関する注意事項:
- 複数のケイパビリティに含まれるウィンドウでは、セキュリティ境界が統合されます
- セキュリティ境界はタイトルではなく、ウィンドウのラベルに基づきます
- ケイパビリティは、フロントエンドの侵害や権限昇格から保護します
権限スコープ
リソースへのアクセスを細かく制御します。
例:ファイルシステムのスコープ
# src-tauri/permissions/fs-restricted.toml
[[permission]]
identifier = "fs-home-restricted"
description = "Allow home directory access except secrets"
commands.allow = ["read_file", "write_file"]
[[scope.allow]]
path = "$HOME/*"
[[scope.deny]]
path = "$HOME/.ssh/*"
[[scope.deny]]
path = "$HOME/.gnupg/*"
[[scope.deny]]
path = "$HOME/.aws/*"
プロトタイプの凍結
JavaScript のプロトタイプ汚染攻撃を防ぎます。
{
"app": {
"security": {
"freezePrototype": true
}
}
}
リモート API アクセス制御
Tauri コマンドにアクセスできる外部 URL を制御します。
{
"identifier": "remote-api-capability",
"remote": {
"urls": ["https://*.yourdomain.com"]
},
"permissions": ["limited-api-access"]
}
脅威対策クイックリファレンス
| フェーズ | 脅威 | 対策 |
|---|---|---|
| 開発 | 依存関係の脆弱性 | cargo audit、npm audit、バージョンの固定 |
| 開発 | 開発サーバーの露出 | 信頼できるネットワーク、mTLS |
| 開発 | 認証情報の漏えい | ハードウェアトークン、秘密情報を gitignore に追加 |
| ビルド | CI/CD の侵害 | 信頼できるプロバイダー、セルフホスト可能な選択肢 |
| ビルド | 未署名のバイナリ | プラットフォーム署名、ハードウェアキーの保管 |
| 配布 | マニフェストの改ざん | HTTPS、証明書のピン留め |
| 配布 | バイナリの置き換え | チェックサム、署名済みマニフェスト |
| 実行時 | XSS/インジェクション | CSP、入力の検証 |
| 実行時 | 権限昇格 | ケイパビリティ、権限、スコープ |
| 実行時 | プロトタイプ汚染 | freezePrototype: true |
セキュリティ設定テンプレート
最小限の安全な設定:
{
"app": {
"security": {
"csp": "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'",
"freezePrototype": true,
"capabilities": ["main-capability"],
"dangerousDisableAssetCspModification": false,
"assetProtocol": {
"enable": false,
"scope": []
}
}
}
}
ケイパビリティファイルの構成:
src-tauri/
├── capabilities/
│ ├── main.json # Main window capabilities
│ └── settings.json # Settings window capabilities
├── permissions/
│ └── custom-scope.toml # Custom permission scopes
└── tauri.conf.json
脆弱性の報告
Tauri アプリケーションでセキュリティの脆弱性を発見した場合:
- 影響を受けるリポジトリで GitHub Vulnerability Disclosure を使用します
- メール:[email protected]
- 調整された解決が完了する前に、発見内容を公に議論しないでください
- 限定的な報奨金の検討を受けられる場合があります
重要なポイント
- 多層防御:単一のレイヤーだけでは十分な保護を提供できません
- 最小権限:必要最小限の権限を付与します
- 定期的な更新:WebView のパッチは OS の更新を通じて、より早くユーザーに届きます
- 信頼境界:フロントエンドのコードは信頼できません。Rust ですべてを検証してください
- ライフサイクル全体の対策:セキュリティ対策は開発から実行時までを網羅する必要があります