Cloud Native Meetup Tokyo #2 で使用したスライドです。CNCF プロジェクトのひとつ、The Update Framework (TUF) について基本的な概念を解説しています。TUF は安全なソフトウェアアップデートを実現するためのフレームワークで、ダウンロードするファイルが最新であることを保証し、また鍵の危殆化に対抗するための仕組みが備わっています。
イベント概要:https://cloudnative.connpass.com/event/87657/
Update とは何かそして何であるべきかチェシャ猫 (@y_taka_23)Cloud Native Meetup Tokyo #2 (2018/06/01)#cloudnativejp
View Slide
gem update docker-api#cloudnativejp
pip update docker-py#cloudnativejp
docker pull nginx:1.14#cloudnativejp
ソフトウェア更新の仕組み● 抽象化すると単純○ 新しいバージョンの有無を検知○ もしあれば新バージョンをダウンロード○ ローカルマシンへのインストール● 通信路は TLS で保護できる○ 通信相手の認証・暗号化・改ざん検出○ そもそも Chrome では HTTPS がデフォルトに#cloudnativejp
ご清聴ありがとうございましたPresented by チェシャ猫 (@y_taka_23)#cloudnativejp
んな訳ない#cloudnativejp
通信路以外にも危険が● 更新時系列の詐称○ 古い脆弱なバージョンをダウンロードさせる○ 更新があるのにないかのように見せかける● 鍵危殆化、例えば秘密鍵の流出○ サーバやファイルの正当性が信用できなくなる● 悪意あるサーバの挙動○ 無限ストリームデータを送ってくるなど#cloudnativejp
考えるべきことは結構多い#cloudnativejp
The Update Frameworkhttps://theupdateframework.github.io#cloudnativejp
TUF プロジェクトの概要● ソフトウェア更新のフレームワーク○ 安全な更新を実現する○ 何を配布するかに依存しない汎用的な仕様○ 公式の(参照)実装は Python● 更新の検知とダウンロードをサポート● 実はプロジェクトとしては割と古い○ 元になった論文は 2010 年#cloudnativejp
#cloudnativejp
TUF の利用事例● 既に導入されている事例○ Docker Hub (Notary)○ DigitalOcean● 現在、対応が計画されている事例○ RubyGem○ PyPI○ Hackage (Haskell ライブラリ)#cloudnativejp
TUF レポジトリの構造#cloudnativejp
TUF レポジトリのメタデータ● それぞれ別の Role として署名する○ root : 他のメタデータ用の信頼済み鍵リスト○ targets : 配布ファイルのサイズとハッシュ値○ snapshot : 他のメタデータのサイズとハッシュ値○ timestamp : snapshot のサイズとハッシュ値● 全体として整合している必要がある○ クライアントは timestamp で更新の有無を判断#cloudnativejp
TUF レポジトリのターゲット● 実際に配布するファイルを格納○ サイズとハッシュ値の一覧を targets.json に記録○ デフォルトで targets.json 用の Role で署名● 信頼の委譲 (delegation)○ ディレクトリ構造の一部を他の Role として署名○ ライブラリ用のレポジトリなどが典型例○ Role の信頼関係のチェーンをメタデータに記録#cloudnativejp
信頼の「閾値」の設定● Role に対して署名鍵を複数登録○ 署名には必ずしも全鍵を使用しなくてもよい● 信頼に必要な鍵の最低個数を設定○ 登録された内、その個数以上が使われていないと正当なファイルであるとみなされない○ 一度に複数の鍵が危殆化しない限り安全● 閾値は Role ごとに設定できる#cloudnativejp
Role の階層構造Library-1● file-1-1.txt● file-1-2.txtLibrary-2● file-2-1.txtTargets● target.jsonRoot● root.jsonSnapshot● snapshot.jsonTimestamp● timestamp.json#cloudnativejp
Role による責任の分離Library-1● file-1-1.txt● file-1-2.txtLibrary-2● file-2-1.txtTargets● target.jsonRoot● root.jsonSnapshot● snapshot.jsonTimestamp● timestamp.json#cloudnativejp
閾値による鍵危殆化耐性Library-1● file-1-1.txt● file-1-2.txtLibrary-2● file-2-1.txtTargets● target.jsonRoot● root.jsonSnapshot● snapshot.jsonTimestamp● timestamp.json1 < root.threshold = 2#cloudnativejp
まとめ● ソフトウェアの更新は落とし穴が多い○ 真面目に個別に考えようとすると大変● TUF は安全な更新機構を提供○ 何を配布するかに依存しない汎用フレームワーク● 安全性を実現する二つの柱○ 署名されたメタデータによる最新性の保証○ 権限の分割と閾値設定による危殆化への耐性#cloudnativejp
Update Your Knowledge!Presented by チェシャ猫 (@y_taka_23)#cloudnativejp