概要
- Obsidian はサプライチェーン攻撃対策を徹底した設計
- 依存ライブラリを極力減らし 独自実装 を重視
- 依存関係は 厳密なバージョン管理 とロックファイルで制御
- アップグレードは慎重かつ段階的 に実施
- 多層的な安全対策で 利用者のプライバシーと安全 を確保
Obsidianのサプライチェーン攻撃対策
- サプライチェーン攻撃は 悪意あるアップデート がオープンソースコードに紛れ込むリスク
- Obsidian では依存する外部コードを最小限に抑制
- 同カテゴリの他アプリと比較して 依存数が少ない 特徴
- 依存ライブラリ一覧は Creditsページ で公開
- 機能(例:Bases, Canvas)は 市販ライブラリを使わず独自実装
- 実装の完全なコントロール性確保
- 小規模ユーティリティは 自前実装 が基本
- 中規模モジュールは ライセンス許諾範囲でフォークし内包
- 大規模ライブラリ(例:pdf.js, Mermaid, MathJax)は
- 既知の安全なバージョンファイル を直接同梱
- アップグレードは セキュリティ修正時など必要最小限
- アップグレード時は リリースノート精読・変更差分確認・徹底検証
- 依存関係のグラフが浅く サブ依存も最小限
- 攻撃が紛れ込むリスクの低減
実際にアプリに含まれるもの
- 実際のアプリに含まれるパッケージは Electron, CodeMirror, moment.js などごく一部
- ビルド時のみ使うパッケージ(例:esbuild, eslint)は ユーザー環境に含まれない
バージョン管理とロックファイル運用
- 全依存関係は厳密なバージョン指定 とロックファイルで管理
- ロックファイルがビルド時の 唯一の参照元
- これにより 再現性のあるインストール と 変更監査の容易化 を実現
- postinstallスクリプトは不使用
- インストール時の 任意コード実行リスクを排除
アップグレード運用方針
- 依存関係のアップデートは 慎重かつ段階的
- 変更履歴を逐一確認
- 新バージョンで追加された サブ依存も精査
- 変更が大きい場合は 差分比較
- 自動・手動テスト で主要動作を確認
- レビュー通過後のみロックファイルを更新
- 実際のアップデート頻度は 非常に低い
- 安定稼働を優先し 頻繁な変更を避ける
- アップデート時は 新規依存追加と同等の慎重さ
時間的バッファの活用
- リリース前に十分な遅延期間 を設ける運用
- その間に コミュニティやセキュリティ研究者による検知 が期待できる
- 問題のあるバージョンは 出荷前に発見されやすい
多層防御によるリスク低減
- 単一の対策だけでなく
- 依存数削減
- 浅い依存グラフ
- 厳密なバージョン固定
- postinstall排除
- 慎重なアップグレード
- これらの多層的アプローチで サプライチェーン攻撃のリスクを大幅に低減
- コードがユーザーに届く前に問題を発見できる長い猶予期間 を確保
さらなるセキュリティ情報
- Obsidianの広範なセキュリティ方針や過去の監査 については
- 公式 Securityページ や 監査報告書 を参照