Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Update とは何かそして何であるべきか #cloudnativejp / Cloud Na...

Update とは何かそして何であるべきか #cloudnativejp / Cloud Native Meetup Tokyo 2nd

Cloud Native Meetup Tokyo #2 で使用したスライドです。CNCF プロジェクトのひとつ、The Update Framework (TUF) について基本的な概念を解説しています。TUF は安全なソフトウェアアップデートを実現するためのフレームワークで、ダウンロードするファイルが最新であることを保証し、また鍵の危殆化に対抗するための仕組みが備わっています。

イベント概要:https://cloudnative.connpass.com/event/87657/

y_taka_23

June 01, 2018
Tweet

More Decks by y_taka_23

Other Decks in Technology

Transcript

  1. ソフトウェア更新の仕組み • 抽象化すると単純 ◦ 新しいバージョンの有無を検知 ◦ もしあれば新バージョンをダウンロード ◦ ローカルマシンへのインストール •

    通信路は TLS で保護できる ◦ 通信相手の認証・暗号化・改ざん検出 ◦ そもそも Chrome では HTTPS がデフォルトに #cloudnativejp
  2. 通信路以外にも危険が • 更新時系列の詐称 ◦ 古い脆弱なバージョンをダウンロードさせる ◦ 更新があるのにないかのように見せかける • 鍵危殆化、例えば秘密鍵の流出 ◦

    サーバやファイルの正当性が信用できなくなる • 悪意あるサーバの挙動 ◦ 無限ストリームデータを送ってくるなど #cloudnativejp
  3. TUF プロジェクトの概要 • ソフトウェア更新のフレームワーク ◦ 安全な更新を実現する ◦ 何を配布するかに依存しない汎用的な仕様 ◦ 公式の(参照)実装は

    Python • 更新の検知とダウンロードをサポート • 実はプロジェクトとしては割と古い ◦ 元になった論文は 2010 年 #cloudnativejp
  4. TUF の利用事例 • 既に導入されている事例 ◦ Docker Hub (Notary) ◦ DigitalOcean

    • 現在、対応が計画されている事例 ◦ RubyGem ◦ PyPI ◦ Hackage (Haskell ライブラリ) #cloudnativejp
  5. TUF レポジトリのメタデータ • それぞれ別の Role として署名する ◦ root : 他のメタデータ用の信頼済み鍵リスト

    ◦ targets : 配布ファイルのサイズとハッシュ値 ◦ snapshot : 他のメタデータのサイズとハッシュ値 ◦ timestamp : snapshot のサイズとハッシュ値 • 全体として整合している必要がある ◦ クライアントは timestamp で更新の有無を判断 #cloudnativejp
  6. TUF レポジトリのターゲット • 実際に配布するファイルを格納 ◦ サイズとハッシュ値の一覧を targets.json に記録 ◦ デフォルトで

    targets.json 用の Role で署名 • 信頼の委譲 (delegation) ◦ ディレクトリ構造の一部を他の Role として署名 ◦ ライブラリ用のレポジトリなどが典型例 ◦ Role の信頼関係のチェーンをメタデータに記録 #cloudnativejp
  7. Role の階層構造 Library-1 • file-1-1.txt • file-1-2.txt Library-2 • file-2-1.txt

    Targets • target.json Root • root.json Snapshot • snapshot.json Timestamp • timestamp.json #cloudnativejp
  8. Role による責任の分離 Library-1 • file-1-1.txt • file-1-2.txt Library-2 • file-2-1.txt

    Targets • target.json Root • root.json Snapshot • snapshot.json Timestamp • timestamp.json #cloudnativejp
  9. 閾値による鍵危殆化耐性 Library-1 • file-1-1.txt • file-1-2.txt Library-2 • file-2-1.txt Targets

    • target.json Root • root.json Snapshot • snapshot.json Timestamp • timestamp.json 1 < root.threshold = 2 #cloudnativejp
  10. まとめ • ソフトウェアの更新は落とし穴が多い ◦ 真面目に個別に考えようとすると大変 • TUF は安全な更新機構を提供 ◦ 何を配布するかに依存しない汎用フレームワーク

    • 安全性を実現する二つの柱 ◦ 署名されたメタデータによる最新性の保証 ◦ 権限の分割と閾値設定による危殆化への耐性 #cloudnativejp