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