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

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

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

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

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

332f89cc697355902a817506b6995f2b?s=128

y_taka_23

June 01, 2018
Tweet

Transcript

  1. Update とは何か そして何であるべきか チェシャ猫 (@y_taka_23) Cloud Native Meetup Tokyo #2

    (2018/06/01) #cloudnativejp
  2. gem update docker-api #cloudnativejp

  3. pip update docker-py #cloudnativejp

  4. docker pull nginx:1.14 #cloudnativejp

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

    通信路は TLS で保護できる ◦ 通信相手の認証・暗号化・改ざん検出 ◦ そもそも Chrome では HTTPS がデフォルトに #cloudnativejp
  6. ご清聴ありがとうございました Presented by チェシャ猫 (@y_taka_23) #cloudnativejp

  7. んな訳ない #cloudnativejp

  8. 通信路以外にも危険が • 更新時系列の詐称 ◦ 古い脆弱なバージョンをダウンロードさせる ◦ 更新があるのにないかのように見せかける • 鍵危殆化、例えば秘密鍵の流出 ◦

    サーバやファイルの正当性が信用できなくなる • 悪意あるサーバの挙動 ◦ 無限ストリームデータを送ってくるなど #cloudnativejp
  9. 考えるべきことは結構多い #cloudnativejp

  10. The Update Framework https://theupdateframework.github.io #cloudnativejp

  11. TUF プロジェクトの概要 • ソフトウェア更新のフレームワーク ◦ 安全な更新を実現する ◦ 何を配布するかに依存しない汎用的な仕様 ◦ 公式の(参照)実装は

    Python • 更新の検知とダウンロードをサポート • 実はプロジェクトとしては割と古い ◦ 元になった論文は 2010 年 #cloudnativejp
  12. #cloudnativejp

  13. TUF の利用事例 • 既に導入されている事例 ◦ Docker Hub (Notary) ◦ DigitalOcean

    • 現在、対応が計画されている事例 ◦ RubyGem ◦ PyPI ◦ Hackage (Haskell ライブラリ) #cloudnativejp
  14. TUF レポジトリの構造 #cloudnativejp

  15. TUF レポジトリの構造 #cloudnativejp

  16. TUF レポジトリのメタデータ • それぞれ別の Role として署名する ◦ root : 他のメタデータ用の信頼済み鍵リスト

    ◦ targets : 配布ファイルのサイズとハッシュ値 ◦ snapshot : 他のメタデータのサイズとハッシュ値 ◦ timestamp : snapshot のサイズとハッシュ値 • 全体として整合している必要がある ◦ クライアントは timestamp で更新の有無を判断 #cloudnativejp
  17. TUF レポジトリの構造 #cloudnativejp

  18. TUF レポジトリのターゲット • 実際に配布するファイルを格納 ◦ サイズとハッシュ値の一覧を targets.json に記録 ◦ デフォルトで

    targets.json 用の Role で署名 • 信頼の委譲 (delegation) ◦ ディレクトリ構造の一部を他の Role として署名 ◦ ライブラリ用のレポジトリなどが典型例 ◦ Role の信頼関係のチェーンをメタデータに記録 #cloudnativejp
  19. 信頼の「閾値」の設定 • Role に対して署名鍵を複数登録 ◦ 署名には必ずしも全鍵を使用しなくてもよい • 信頼に必要な鍵の最低個数を設定 ◦ 登録された内、その個数以上が使われていないと

    正当なファイルであるとみなされない ◦ 一度に複数の鍵が危殆化しない限り安全 • 閾値は Role ごとに設定できる #cloudnativejp
  20. 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
  21. 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
  22. 閾値による鍵危殆化耐性 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
  23. まとめ • ソフトウェアの更新は落とし穴が多い ◦ 真面目に個別に考えようとすると大変 • TUF は安全な更新機構を提供 ◦ 何を配布するかに依存しない汎用フレームワーク

    • 安全性を実現する二つの柱 ◦ 署名されたメタデータによる最新性の保証 ◦ 権限の分割と閾値設定による危殆化への耐性 #cloudnativejp
  24. Update Your Knowledge! Presented by チェシャ猫 (@y_taka_23) #cloudnativejp