1 / 16

型付きアセンブリ言語の一般化

型付きアセンブリ言語の一般化. 吉野 寿宏 ( 東京大学 米澤研究室 ) < tossy-2@yl.is.s.u-tokyo.ac.jp >. 背景. Mobile Code の隆盛 便利なことは多い スパイウェアやトロイの木馬などの脅威も 信用のおけないコードの取り扱い 実行しなければいい → すべて自分で手作りするわけにも … どうやったら配布されているコードを信用 できる / してもらえるか?. コードの出自を保証 悪意のあるコードを 含まないことは保証 できない コードの正統性・ 同一性を保証する 中身を保証する技術ではない.

fuller
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. 型付きアセンブリ言語の一般化 吉野 寿宏 (東京大学 米澤研究室) <tossy-2@yl.is.s.u-tokyo.ac.jp>

  2. 背景 • Mobile Code の隆盛 • 便利なことは多い • スパイウェアやトロイの木馬などの脅威も • 信用のおけないコードの取り扱い • 実行しなければいい → すべて自分で手作りするわけにも… • どうやったら配布されているコードを信用できる/してもらえるか?

  3. コードの出自を保証 悪意のあるコードを含まないことは保証できない コードの正統性・同一性を保証する 中身を保証する技術ではない D(Kpub, {h}) {h}Kpri ハッシュ値 h h = h’ ? H(M) ハッシュ値 h’ 関連技術:電子署名 公開鍵暗号化 ハッシュ値 h {h}Kpri コード

  4. コードが安全である数学的証明を添付 受け取った側は、ツールで安全性を検証 検証に通ったコードは信用できる 数学的理論に基づいた中身の検証が可能 [1] G. Necula. Proof-Carrying Code. In POPL97 関連技術:Proof-Carrying Code[1] 安全証明 コード このコードは安全です 安全ポリシー

  5. 関連技術:Java VM • バイトコード検証機構 • バイトコードの型検査 • コンパイル時の静的型が正しくない場合に有効 • ライブラリのバージョンを途中で変えたり • 一部のファイルを再コンパイルしたり • しかし、Java であるがゆえに • デバイスドライバ等、システムの基幹部分に応用が難しい

  6. アセンブリ言語に型を導入 レジスタの型・メモリの中身の型を静的に検証 Java のバイトコード検証のアプローチを実 CPU 向けのアセンブリ言語に適用 システムソフトウェアなどにも応用がきく [2] G. Morrisett, et al. TALx86: A Realistic Typed Assembly Language. 1999 ACM SIGPLAN Workshop on Compiler Support for System Software 型付きアセンブリ言語(TAL)[2]

  7. アセンブリコードに annotation を挿入 レジスタの型 スタックの型 各 annotation について型を検証してゆく mov eax,ecx ; i = n inc eax ; ++i mov ebx,0 ; s = 0 jmp test body: {eax: B4, ebx: B4} add ebx,eax ; s += i test: {eax: B4, ebx: B4} dec eax ; --i; cmp eax,0 ; i > 0 jg body TAL による検証の流れ EAX は 4-byte integer を持つEBX は 4-byte integer を持つ

  8. 応用例:デバイスドライバ • デバイスドライバの安全性 • WindowsXP: 署名がない場合に警告を表示 • オオカミ少年的状況 • 署名されていないドライバが数多い • 私が知る限り、ちゃんと署名されていたドライバってあまり見た記憶がない… • 署名されていないからといって、ハードウェア用ドライバのインストールを中断するか? • 安全性を数学的に検証することによって、動機付けを強くする

  9. 応用例:BREW • 携帯分野への応用 • 個人情報を取り扱う端末 = 頑健でなくてはならない • BREW アプリの登場 • 低レベルなコード(C++ などで記述)を実行させる技術 • 現在では認証を通った公式コンテンツプロバイダのみが使用可能 • TAL 検証系を利用すれば、サードパーティーのコード安全性を検証可 • 認証を受けなくても BREW 使用可能に • 開発者側の幅が広がるのでは

  10. しかし… • 現存する実装は一部 CPU に限られる • 本家では x86 専用のツールを配布 → http://www.cs.cornell.edu/talc/ • ほかにもアーキテクチャはたくさんある • PowerPC, Alpha, ARM, … • その他のアーキテクチャの取り扱いは? • システムを毎回独立に作成する必要 • コスト高すぎませんか • 書式が一定でないかもしれない

  11. 統一的な実装に向けて • CPU のできることは皆だいたい同じ • 計算機の構成 • レジスタがあって、 • メモリ(スタック、ヒープ、グローバル変数)があって • 算術演算、メモリ操作、関数呼び出しなどの命令 → 共通化した型理論が構築できないか?

  12. 目指すべきもの • CPU 非依存な、アセンブリ言語レベルでの型検査システム IA-32 Alpha SPARC ARM IA-32 定義 Alpha 定義 SPARC 定義 ARM 定義 共通型検査エンジン 複数のアーキテクチャを統一的に扱えるようなシステム

  13. CPU 非依存な型システム • Modular な型の処理・検証 • CPU の実体とできるだけ癒着しないように • CPU 依存の部分を分離して記述するように • あるいは、CPU 定義を読んで型処理コードを出力するようなコードジェネレータを作成する • 既存のアセンブラに組み込めることを想定 • たとえば GNU as などに組み込めたら、利用しやすいのでは

  14. 目指すべきもの または、 • 実 CPU の機械語にほぼ straightforward な変換ができる型安全な中間言語 C/C++コンパイラ ObjectiveCaml … 中間言語処理系(型検証エンジン) IA-32トランスレータ Alpha トランスレータ SPARC トランスレータ ARM トランスレータ IA-32 Alpha SPARC ARM

  15. 型安全な中間言語を定義する • 実機の機械語とほぼ一対一対応する言語 • 簡単なトランスレータで各アーキテクチャに対応 • 型の処理系は一つで済む • 高級言語からのコンパイラが、その分必要になるが…

  16. 困難な点 • ポインタの操作 • CPU specific な命令の処理 • たとえば、IA-32 の LGDT 命令は他の CPU ではどうなる? • デバイスドライバなど、ハードウェアに近いコードを検証する場合には必要 • 外部ライブラリとの連携 • 特定のレジスタによる値渡しなどの処理 • 特に、中間言語のアプローチだとどうか?

More Related