1 / 83

情報社会を支える ディペンダブル・プロセッサ

情報社会を支える ディペンダブル・プロセッサ. 九州大学 井上弘士(いのうえこうじ). ディペンダブル・コンピューティング ( Dependable Computing ). 頼る. ~できる. 計算すること. あなたにとって,「○○先生」は頼りになりますか? YES! 私の質問に対して,常に,正しい解答を示してくれる 私に危害を加えない(私を裏切らない) 勝手に他人へ危害を加えない などなど NO! 私の質問に対して,常に(たまに),誤った解答を示す 私に危害を加える(突然きれる,突然暴れる) 他人へ危害を加える などなど.

tammy
Download Presentation

情報社会を支える ディペンダブル・プロセッサ

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 情報社会を支えるディペンダブル・プロセッサ情報社会を支えるディペンダブル・プロセッサ 九州大学 井上弘士(いのうえこうじ)

  2. ディペンダブル・コンピューティング(Dependable Computing) 頼る ~できる 計算すること • あなたにとって,「○○先生」は頼りになりますか? • YES! • 私の質問に対して,常に,正しい解答を示してくれる • 私に危害を加えない(私を裏切らない) • 勝手に他人へ危害を加えない • などなど • NO! • 私の質問に対して,常に(たまに),誤った解答を示す • 私に危害を加える(突然きれる,突然暴れる) • 他人へ危害を加える • などなど

  3. ディペンダブル・コンピューティング(Dependable Computing) 頼る ~できる 計算すること • 「頼りになる」とは? • 提供されるサービス(利用者が認識するシステムの振舞い)が正確で信頼できる • 結果として利用者に損害をもたらさない,また,被害が発生しても最小限に留める • でも現実は・・・ • 様々な「想定外の事象」により正確性や信頼性が失われる • 「常に100%正確かつ信頼できるシステム」はありえない • そこで・・・ • Dependability:予測不可能性(想定外事象)を秘めた系において,システムに期待されるサービスが許容範囲内で提供される事を保障すること • Dependable Computing:「想定外事象は発生するもの」という前提に立ち,それを解決(回避)可能なシステムで計算する!

  4. 4004@1971 (108KHz) i486@1989 (25MHz) Pentium@1993 (60MHz) Pentium2@1997 (450MHz) ここまで発展したマイクロプロセッサ(シングルコア) Pentium4@2000 (1.5HGz) 出展:http://www.intel.com/museum/online/hist_micro/hof/index.htm

  5. ここまで発展したマイクロプロセッサ(マルチコア)ここまで発展したマイクロプロセッサ(マルチコア) 256KB LS 256KB LS 256KB LS 256KB LS Opteron (AMD) 256KB LS 256KB LS Niagara-T2 (Sun) 256KB LS 256KB LS http://news.com.com/ PPE 512KB L2キャッシュ Cell (Sony/Toshiba/IBM) Opteron(AMD):http://techreport.com/

  6. Trace Cache Hyper Threading Super Scalar Out-Of-Order Renaming On-Chip L2$ On-Chip L1$ プロセッサの回路規模はどの程度?(トランジスタ数の観点から) • 半導体集積度は3年で約4倍に!(ムーアの法則) インテル・プロセッサの場合 M Tran. http://www-vlsi.stanford.edu/group/chips_micropro.html

  7. 命令の実行手順 プロセッサ 命令レジスタ 主記憶 アドレス PC ・・・ 0x00104 デコーダ add $t0, $s1, $s2 0x00104 sub $t1, $t0, $s3 0x00108 レジスタ ALU lw $t1, 320($s4) 0x0010c ・・・ • 命令の取得:PCが指すアドレスの値をメモリから命令レジスタへ取得.同時に,次命令の取得に備えてPCの値を更新(例えば+4) • 命令の解読:命令レジスタの値をデコード • 命令の実行:解読結果に従って実行 実際には,各命令は2進表現でメモリに格納されている

  8. 命令の実行手順 PCの指す番地から取得した命令を保持 プロセッサ 実行する命令のアドレス 命令レジスタ 主記憶 アドレス add $t0, $s1, $s2 PC ・・・ 0x00104 デコーダ add $t0, $s1, $s2 0x00104 sub $t1, $t0, $s3 0x00108 レジスタ ALU lw $t1, 320($s4) 0x0010c ・・・ • 命令の取得:PCが指すアドレスの値をメモリから命令レジスタへ取得.同時に,次命令の取得に備えてPCの値を更新(例えば+4) • 命令の解読:命令レジスタの値をデコード • 命令の実行:解読結果に従って実行 実際には,各命令は2進表現でメモリに格納されている

  9. 命令の実行手順 プロセッサ 次命令の取得にそなえてPCを更新 命令レジスタ 主記憶 アドレス add $t0, $s1, $s2 PC ・・・ 0x00108 デコーダ add $t0, $s1, $s2 0x00104 sub $t1, $t0, $s3 0x00108 レジスタ ALU lw $t1, 320($s4) 0x0010c ・・・ • 命令の取得:PCが指すアドレスの値をメモリから命令レジスタへ取得.同時に,次命令の取得に備えてPCの値を更新(例えば+4) • 命令の解読:命令レジスタの値をデコード • 命令の実行:解読結果に従って実行 実際には,各命令は2進表現でメモリに格納されている

  10. 命令の実行手順 プロセッサ 命令レジスタ 主記憶 アドレス add $t0, $s1, $s2 PC ・・・ 0x00108 デコーダ add $t0, $s1, $s2 0x00104 sub $t1, $t0, $s3 0x00108 レジスタ 取得した命令を解読 (s1とs2を加算し,t0へ格納) ALU lw $t1, 320($s4) 0x0010c ・・・ • 命令の取得:PCが指すアドレスの値をメモリから命令レジスタへ取得.同時に,次命令の取得に備えてPCの値を更新(例えば+4) • 命令の解読:命令レジスタの値をデコード • 命令の実行:解読結果に従って実行 実際には,各命令は2進表現でメモリに格納されている

  11. 命令の実行手順 プロセッサ 命令レジスタ 主記憶 アドレス add $t0, $s1, $s2 PC ・・・ 0x00108 デコーダ add $t0, $s1, $s2 0x00104 sub $t1, $t0, $s3 0x00108 レジスタ ALU lw $t1, 320($s4) 加算 0x0010c ・・・ • 命令の取得:PCが指すアドレスの値をメモリから命令レジスタへ取得.同時に,次命令の取得に備えてPCの値を更新(例えば+4) • 命令の解読:命令レジスタの値をデコード • 命令の実行:解読結果に従って実行 実際には,各命令は2進表現でメモリに格納されている

  12. 命令の実行手順 PCの指す番地から取得した命令を保持 プロセッサ 実行する命令のアドレス 命令レジスタ 主記憶 アドレス sub $t1, $t0, $s3 PC ・・・ 0x00108 デコーダ add $t0, $s1, $s2 0x00104 sub $t1, $t0, $s3 0x00108 レジスタ ALU lw $t1, 320($s4) 0x0010c ・・・ • 命令の取得:PCが指すアドレスの値をメモリから命令レジスタへ取得.同時に,次命令の取得に備えてPCの値を更新(例えば+4) • 命令の解読:命令レジスタの値をデコード • 命令の実行:解読結果に従って実行 実際には,各命令は2進表現でメモリに格納されている

  13. 命令の実行手順 プロセッサ 次命令の取得にそなえてPCを更新 命令レジスタ 主記憶 アドレス sub $t1, $t0, $s3 PC ・・・ 0x0010c デコーダ add $t0, $s1, $s2 0x00104 sub $t1, $t0, $s3 0x00108 レジスタ ALU lw $t1, 320($s4) 0x0010c ・・・ • 命令の取得:PCが指すアドレスの値をメモリから命令レジスタへ取得.同時に,次命令の取得に備えてPCの値を更新(例えば+4) • 命令の解読:命令レジスタの値をデコード • 命令の実行:解読結果に従って実行 実際には,各命令は2進表現でメモリに格納されている

  14. 命令の実行手順 プロセッサ 命令レジスタ 主記憶 アドレス sub $t1, $t0, $s3 PC ・・・ 0x0010c デコーダ add $t0, $s1, $s2 0x00104 sub $t1, $t0, $s3 0x00108 レジスタ 取得した命令を解読 (t0とs3を減算し,t1へ格納) ALU lw $t1, 320($s4) 0x0010c ・・・ • 命令の取得:PCが指すアドレスの値をメモリから命令レジスタへ取得.同時に,次命令の取得に備えてPCの値を更新(例えば+4) • 命令の解読:命令レジスタの値をデコード • 命令の実行:解読結果に従って実行 実際には,各命令は2進表現でメモリに格納されている

  15. 命令の実行手順 プロセッサ 命令レジスタ 主記憶 アドレス sub $t1, $t0, $s3 PC ・・・ 0x0010c デコーダ add $t0, $s1, $s2 0x00104 sub $t1, $t0, $s3 0x00108 レジスタ ALU lw $t1, 320($s4) 減算 0x0010c ・・・ • 命令の取得:PCが指すアドレスの値をメモリから命令レジスタへ取得.同時に,次命令の取得に備えてPCの値を更新(例えば+4) • 命令の解読:命令レジスタの値をデコード • 命令の実行:解読結果に従って実行 実際には,各命令は2進表現でメモリに格納されている

  16. 命令の実行手順 PCの指す番地から取得した命令を保持 プロセッサ 実行する命令のアドレス 命令レジスタ 主記憶 アドレス lw $t1, 320($s4) PC ・・・ 0x0010c デコーダ add $t0, $s1, $s2 0x00104 sub $t1, $t0, $s3 0x00108 レジスタ ALU lw $t1, 320($s4) 0x0010c ・・・ • 命令の取得:PCが指すアドレスの値をメモリから命令レジスタへ取得.同時に,次命令の取得に備えてPCの値を更新(例えば+4) • 命令の解読:命令レジスタの値をデコード • 命令の実行:解読結果に従って実行 実際には,各命令は2進表現でメモリに格納されている 以降,繰り返し・・・

  17. 信頼できるマイクロプロセッサとは? • マイクロプロセッサのお仕事は? • 「正しいプログラム」を「正しく実行」する • 正しい命令の取得(フェッチ)と実行の繰り返し • 必要に応じてメモリにデータを正しく書込み/読出し • マイクロプロセッサにとっての「想定外事象」は? • 正しく実行できない! • ハードウェア(回路)が正しく動作しない • 誰かに実行を邪魔される • 正しいプログラムではない! • 不正なプログラムを実行させられる

  18. コンピュータ・システムにおける「想定外の事象」とは?コンピュータ・システムにおける「想定外の事象」とは? 情報漏洩 データ改竄 Secure Processor コンピュータウィルス ソフトウェア バグ 外部ノイズ 製造プロセスの揺らぎ Patchable Processor Reliable Processor 内部ノイズ 設計の誤り 経年劣化

  19. なぜ、プロセッサでセキュリティ? • インターネット・セキュリティに関する多くの研究 • 暗号技術,不正侵入検知,認証技術など • システム・ソフトウェアに関する多くの研究 • OS, Libraryなど • 専用ハードウェアに関する多くの研究 • 特に暗号処理ハードウェア • プロセッサでのセキュリティに関する研究は??? • 2000年ごから「プロセッサ・アーキテクチャ」に関する国際会議での発表が相次ぐ • コンピュータ処理の本質である「演算」と「記憶」の安全性 • 「最後の砦」では?(⇒トランジスタ・レベルでは難しい・・)

  20. 発表手順 • はじめに • プログラム実行の乗っ取りを防止する! • 信用できるプログラムしか実行しない! • その他のディペンダブル・プロセッサ • 「ディペンダビリティ」はより重要になる!

  21. 不正プログラムの実行を防止する! 攻撃方法が既知の場合 ハードウェアによる攻撃の検知

  22. 猛威を振るうコンピュータ・ウィルス 1.2~1.5兆円の規模で推移 10億米ドル 独立行政法人 情報処理推進機構, “国内・国外におけるコンピュータウイルス被害状況調査,” 2003情財第0314号, 2004年4月

  23. CERTバッファ・オーバフロー勧告 R.B.Lee, D.K.Karig, J.P.McGregor, and Z.Shi, “Enlisting Hardware Architecture to Thwart Malicious Code Injection,” Proc. of the Int. Conf. on Security in Pervasive Computing, Mar. 2003. バッファ・オーバフロー攻撃 • バッファ・オーバフロー • 最も多く活用される脆弱性の1つ • Blaster@2003, CodeRed@2001 • メカニズム • データ境界を越えた書込み • C標準ライブラリ内に存在(strcpyなど) • スタックの破壊(スタック・スマッシング) • 悪質コードの挿入と戻りアドレスの改ざん • プログラム実行制御の乗っ取り • 改ざん後の戻りアドレスがPCへ設定

  24. 関数呼出し/復帰時の動作 int f ( ) { … g (s1); … } int g ( char *s1) { char buf [10]; … strcpy(buf, s1); … } 実行 コード • 関数f ( )の実行 • 関数g( )の呼出し • 文字列コピー • 関数f( )へ復帰 処理 手順

  25. g()呼出し の次命令 正常時 関数呼出し/復帰時の動作 int f ( ) { … g (s1); … } int g ( char *s1) { char buf [10]; … strcpy(buf, s1); … } 実行 コード • 関数f ( )の実行 • 関数g( )の呼出し • 文字列コピー • 関数f( )へ復帰 処理 手順

  26. 文字列 正常時 関数呼出し/復帰時の動作 int f ( ) { … g (s1); … } int g ( char *s1) { char buf [10]; … strcpy(buf, s1); … } g()呼出し の次命令 実行 コード • 関数f ( )の実行 • 関数g( )の呼出し • 文字列コピー • 関数f( )へ復帰 処理 手順

  27. g()呼出し の次命令 文字列 関数呼出し/復帰時の動作 int f ( ) { … g (s1); … } int g ( char *s1) { char buf [10]; … strcpy(buf, s1); … } 実行 コード • 関数f ( )の実行 • 関数g( )の呼出し • 文字列コピー • 関数f( )へ復帰 処理 手順 正常時

  28. g()呼出し の次命令 文字列 正常時 スタック・スマッシングによる実行制御の乗っ取り int f ( ) { … g (s1); … } int g ( char *s1) { char buf [10]; … strcpy(buf, s1); … } 実行 コード • 関数f ( )の実行 • 関数g( )の呼出し • 文字列コピー • 関数f( )へ復帰 処理 手順

  29. g()呼出し の次命令 g()呼出し の次命令 文字列 正常時 異常時 スタック・スマッシングによる実行制御の乗っ取り int f ( ) { … g (s1); … } int g ( char *s1) { char buf [10]; … strcpy(buf, s1); … } 実行 コード • 関数f ( )の実行 • 関数g( )の呼出し • 文字列コピー • 関数f( )へ復帰 処理 手順

  30. g()呼出し の次命令 攻撃コー ドの先頭 g()呼出し の次命令 攻撃 コード 文字列 異常時 正常時 スタック・スマッシングによる実行制御の乗っ取り int f ( ) { … g (s1); … } int g ( char *s1) { char buf [10]; … strcpy(buf, s1); … } 実行 コード • 関数f ( )の実行 • 関数g( )の呼出し • 文字列コピー • 関数f( )へ復帰 処理 手順

  31. 攻撃コー ドの先頭 g()呼出し の次命令 攻撃 コード 文字列 異常時 正常時 スタック・スマッシングによる実行制御の乗っ取り int f ( ) { … g (s1); … } int g ( char *s1) { char buf [10]; … strcpy(buf, s1); … } 実行 コード • 関数f ( )の実行 • 関数g( )の呼出し • 文字列コピー • 関数f( )へ復帰 処理 手順

  32. CPU Mem. 動的な戻りアドレス改ざん検出~Secure Cache: SCache~ プロセッサ コア キャッシュ スタック • 問題点: • スタックに書込んだ戻りアドレスが改ざんされる • 解決策: • キャッシュで戻りアドレスを保護しよう! • 手段: • 戻りアドレス書込み時に複製(レプリカ・ライン)を作成 • 戻りアドレス読出し時に複製と比較 • 不一致であれば戻りアドレス改ざん発生と判定

  33. レプリカ・フラグ(1b) レプリカ・ライン用選択回路 ワード比較器(32b) ヒット条件 内部構成

  34. Original Replica 動作(戻りアドレス書込み時) 生成レプリカ数(Nrep)=2の場合 キャッシュ・ヒット時

  35. Replica Original 動作(戻りアドレス読出し時) 生成レプリカ数(Nrep)=2の場合 キャッシュ・ヒット時

  36. 戻りアドレス改ざんの動的検出が可能 ただし、レプリカ・ラインが存在する場合のみ プロセッサの内部構成へ与える影響は極めて小さい アクセス時間/面積オーバヘッドは極めて小さい レプリカ数を変更可能 安全性と消費エネルギーのバランスを決定可能 レプリカ作成に伴うヒット率の低下 平均メモリアクセス時間の増大 下位階層メモリへのアクセス消費エネルギー増大 レプリカ作成に伴う消費エネルギーの増加 書込みエネルギーの増大 ライトバック・エネルギーの増大 読出しエネルギーの増大(他低消費電力キャッシュと比較して) SCacheの特徴(利点と欠点) Pros Cons

  37. SimpleScalar3.0 16KB 4-way Dキャッシュ ラインサイズ:32B 2-way IO/4-way OOO実行 SPEC2000 7個のintプログラム 4個のfpプログラム Small input(完全実行) 4KB×4 SRAM設計 0.18μm CMOSプロセス Scache機構は未実装 8bメモリセルが1個のラッチ型センスアンプを共有 回路シミュレーション カスタム・レイアウトと容量抽出(周辺回路は含まない) ビット当たりのアクセス消費エネルギー測定 評価環境 消費エネルギー 安全性/消費エネルギー/性能

  38. 評価モデル 評価対象モデル 危険度 Vulnerability = (Nv-rald / Nrald) * 100 安全性を保障できない 戻りアドレス・ロード回数 全戻りアドレス ロード回数 消費エネルギー Etotal = Erd + Ewt + Ewb + Emp 読出し 書込み キャッシュ・ミス レプリカ生成に伴う ライトバック

  39. キャッシュミス率(2-way IO) • レプリカ数の増加と共にミス率は悪化 • ALLでもミス率増加の影響は極めて小さい

  40. どの程度安全なのか? LRU1L LRU1 LRU2 MRU1 MRU2 ALL 2-way In-Order Processor Vulnerability 164.gzip 176.gcc 197.parser 256.bzip2 179.art 188.ammp 175.vpr 181.mcf 255.vortex 177.mesa 183.equake 13.7% 16.8% 23.4% 12.5% 4-way OOO Processor Vulnerability 164.gzip 176.gcc 197.parser 256.bzip2 179.art 188.ammp 175.vpr 181.mcf 255.vortex 177.mesa 183.equake

  41. CONV LRU1L LRU1 LRU2 MRU1 MRU2 ALL どの程度エネルギーを消費するのか? Emp Ewb Ewt Erd • レプリカ数の増加に伴い「Ewt」と「Emp」が増大 • オーバヘッドは20%以下(4-way OOOでも同様) 2-way In-Order Processor Normalized Energy 164.gzip 176.gcc 197.parser 256.bzip2 179.art 188.ammp 175.vpr 181.mcf 255.vortex 177.mesa 183.equake

  42. どの程度性能が低下するのか? • レプリカの増加に伴い性能は低下 • 性能低下は1%以下(「All」と「197.parser」除く) 2-way In-Order Processor LRU1L LRU1 LRU2 MRU1 MRU2 ALL Performance Overhead 164.gzip 176.gcc 197.parser 256.bzip2 179.art 188.ammp 175.vpr 181.mcf 255.vortex 177.mesa 183.equake

  43. 不正プログラムの実行を防止する! 攻撃方法が未知の場合 動的なプログラム実行の認証

  44. ブラックリスト方式 →既知の不正プログラムを検出して駆除 ホワイトリスト方式 →認められたプログラムのみを実行 Trusted Programs Virus Program Key X X + + A A A A A A B B D D C C Y Y OS Z Z CPU CPU CPU CPU CPU CPU • 問題点 • 鍵照合プログラムが改ざんされた場合は機能しない • 実行中に突然ウィルスが暴走した場合は対応できない • 問題点 • データベースが必要(ウィルス定義リストやルール定義リスト) • 新種ウィルスに対応できない 現在の主な不正プログラム対策と問題点

  45. Program CPU 実行の振舞いに基づく動的プログラム認証方式 • 秘密鍵より「プログラム認証のための実行の振舞い」を決定 • Memory-Access Patternなど • コンパイル時に「決定した実行振舞い」を実現できるようコードを生成 • 実行時に「実行の振舞い」をモニタリング • 同一プログラムでも異なる振舞いを鍵情報として実現 object code compile Secret Key Behavior Model Behavior Model ?

  46. 「ある実行命令数毎に必ずアドレスAにアクセスする」「ある実行命令数毎に必ずアドレスAにアクセスする」 アタック コード プロファイラ 正規 プログラム N命令 プロファイラ 鍵となる実行の振舞い(例)~メモリアクセス・パタン~ 実行終了 実行制御の 乗っ取り!

  47. 基本 ブロック コンパイル時における実行振舞いコントロール 鍵となる メモリアクセス命令 • 分岐命令への対応 • 基本ブロック・サイズの統一 • 投機/OOO実行への対応 • コミット時にチェック

  48. Load for Key Nop Original 性能/コスト・オーバヘッド • 統一基本ブロックサイズの縮小に伴い性能/コードサイズ・オーバヘッドは増大 • StrongARM Model • In-Order execution • Branch Pred. (not-taken) Normalized Code Size Normalized Exe. Time BB Size (#Inst.) BB Size (#Inst.)

  49. 信頼性の向上 ハードウェア資源を有効利用!

  50. いまどきのプロセッサ(例)POWER6 Microprocessor Jeffrey Kellington et. al., “IBM POWER6 Processor Soft Error Tolerance Analysis Using Proton Irradiation ,” IEEE Workshop on Silicon Errors In Logic (SELSE3), Apr. 2007. (http://www.selse.org/selse07.program.linked.htm)

More Related