$30 off During Our Annual Pro Sale. View Details »

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/

y_taka_23

June 01, 2018
Tweet

More Decks by y_taka_23

Other Decks in Technology

Transcript

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

    View Slide

  2. gem update docker-api
    #cloudnativejp

    View Slide

  3. pip update docker-py
    #cloudnativejp

    View Slide

  4. docker pull nginx:1.14
    #cloudnativejp

    View Slide

  5. ソフトウェア更新の仕組み
    ● 抽象化すると単純
    ○ 新しいバージョンの有無を検知
    ○ もしあれば新バージョンをダウンロード
    ○ ローカルマシンへのインストール
    ● 通信路は TLS で保護できる
    ○ 通信相手の認証・暗号化・改ざん検出
    ○ そもそも Chrome では HTTPS がデフォルトに
    #cloudnativejp

    View Slide

  6. ご清聴ありがとうございました
    Presented by チェシャ猫 (@y_taka_23)
    #cloudnativejp

    View Slide

  7. んな訳ない
    #cloudnativejp

    View Slide

  8. 通信路以外にも危険が
    ● 更新時系列の詐称
    ○ 古い脆弱なバージョンをダウンロードさせる
    ○ 更新があるのにないかのように見せかける
    ● 鍵危殆化、例えば秘密鍵の流出
    ○ サーバやファイルの正当性が信用できなくなる
    ● 悪意あるサーバの挙動
    ○ 無限ストリームデータを送ってくるなど
    #cloudnativejp

    View Slide

  9. 考えるべきことは結構多い
    #cloudnativejp

    View Slide

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

    View Slide

  11. TUF プロジェクトの概要
    ● ソフトウェア更新のフレームワーク
    ○ 安全な更新を実現する
    ○ 何を配布するかに依存しない汎用的な仕様
    ○ 公式の(参照)実装は Python
    ● 更新の検知とダウンロードをサポート
    ● 実はプロジェクトとしては割と古い
    ○ 元になった論文は 2010 年
    #cloudnativejp

    View Slide

  12. #cloudnativejp

    View Slide

  13. TUF の利用事例
    ● 既に導入されている事例
    ○ Docker Hub (Notary)
    ○ DigitalOcean
    ● 現在、対応が計画されている事例
    ○ RubyGem
    ○ PyPI
    ○ Hackage (Haskell ライブラリ)
    #cloudnativejp

    View Slide

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

    View Slide

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

    View Slide

  16. TUF レポジトリのメタデータ
    ● それぞれ別の Role として署名する
    ○ root : 他のメタデータ用の信頼済み鍵リスト
    ○ targets : 配布ファイルのサイズとハッシュ値
    ○ snapshot : 他のメタデータのサイズとハッシュ値
    ○ timestamp : snapshot のサイズとハッシュ値
    ● 全体として整合している必要がある
    ○ クライアントは timestamp で更新の有無を判断
    #cloudnativejp

    View Slide

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

    View Slide

  18. TUF レポジトリのターゲット
    ● 実際に配布するファイルを格納
    ○ サイズとハッシュ値の一覧を targets.json に記録
    ○ デフォルトで targets.json 用の Role で署名
    ● 信頼の委譲 (delegation)
    ○ ディレクトリ構造の一部を他の Role として署名
    ○ ライブラリ用のレポジトリなどが典型例
    ○ Role の信頼関係のチェーンをメタデータに記録
    #cloudnativejp

    View Slide

  19. 信頼の「閾値」の設定
    ● Role に対して署名鍵を複数登録
    ○ 署名には必ずしも全鍵を使用しなくてもよい
    ● 信頼に必要な鍵の最低個数を設定
    ○ 登録された内、その個数以上が使われていないと
    正当なファイルであるとみなされない
    ○ 一度に複数の鍵が危殆化しない限り安全
    ● 閾値は Role ごとに設定できる
    #cloudnativejp

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  23. まとめ
    ● ソフトウェアの更新は落とし穴が多い
    ○ 真面目に個別に考えようとすると大変
    ● TUF は安全な更新機構を提供
    ○ 何を配布するかに依存しない汎用フレームワーク
    ● 安全性を実現する二つの柱
    ○ 署名されたメタデータによる最新性の保証
    ○ 権限の分割と閾値設定による危殆化への耐性
    #cloudnativejp

    View Slide

  24. Update Your Knowledge!
    Presented by チェシャ猫 (@y_taka_23)
    #cloudnativejp

    View Slide