計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

51
計計計計計計II Software Security 計計 計計計計計計 「」 (2008 spring) 計計計計

description

計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲. 講義の概要. 0.  参考文献など 「オブジェクト指向とは」とその他の雑談 ソフトウエアセキュリティの研究の一端 オブジェクト指向言語の特徴 オブジェクト指向の意味論・実装法 並列/分散オブジェクト指向計算 オブジェクト指向言語における「型」 (型付アセンブリ言語) (アスペクト指向プログラミング). ソフトウエアセキュリティ研究の一端 (初心者向け). (Software Security) 研究で 想定する脅威. 悪意や誤りのあるプログラムが - PowerPoint PPT Presentation

Transcript of 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

Page 1: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

計算機言語論IISoftware Security

特に「安全メール」(2008   spring)

米澤明憲 

Page 2: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

講義の概要0.  参考文献など• 「オブジェクト指向とは」とその他の雑談• ソフトウエアセキュリティの研究の一端• オブジェクト指向言語の特徴• オブジェクト指向の意味論・実装法• 並列/分散オブジェクト指向計算• オブジェクト指向言語における「型」• (型付アセンブリ言語)• (アスペクト指向プログラミング)

Page 3: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

 

ソフトウエアセキュリティ研究の一端(初心者向け)

Page 4: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

(Software Security) 研究で想定する脅威

• 悪意や誤りのあるプログラムが– 計算機システムを破壊– 秘密を漏洩

• コンピュータウィルスが– サーバプログラムの欠陥をついて侵入

• なりすまし( impersonation )– 正当な利用者のふりをして

計算機システムを不正使用、不正接続

Page 5: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

セキュリティホールの原因

• 事故や攻撃に対する想定に漏れがある

– 最も一般的なセキュリティホールの原因は、 想定外の入力,想定外の環境やタイミングでの動

作などにより,システムが想定外の挙動を示す

E.g., 外部からワームやウイルスを注入される• E.g., 外部からのリクエストの組み合わせ次第

で,本来秘密の情報が漏れてしまう

Page 6: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

よくある攻撃の例 : メールに添付されたウイルス

• 郵便受けは,外に向かって常に開いている• 通常のメールシステムは悪質な添付ファイ

ルの存在を想定していない– 「ユーザが判断できる」という逃げの姿勢で

設計されているシステムが多い

メール本文

添付ファイル(readme.exe)

Page 7: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

従来手法 (1/3)

• 攻撃パターン毎に対症療法的に対応– E.g., パッチの配布– E.g., アンチウイルスソフト– E.g., ファイアウォール– E.g., 侵入検知システム (IDS)

既知の攻撃

未知の攻撃

正常

Page 8: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

従来の対策法• 添付ファイルを開かないようにする• ワクチンで既知ウイルスを排除する

未知のウィルス・悪性プログラム

既知のウイルス

良性プログラム拒否               安全

有害なのに実行されてしまう

Page 9: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

我々の不正コード防御戦略不正コード=(ウイルスもその例)1.添付ファイル(コード)を理論の裏付けられた  方法で解析し,危険性の有無を検査

2.危険性のある箇所は,安全なコードに書き換える

3.それができない場合, OS( あるいは

    仮想機械)で監視しながら実行                サンドボックス法

Page 10: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

サンドボックス法( Sandboxing)

環境

サンドボックス

システムリソース

サンドボックス内のアクセスは許可

サンドボックス外へのアクセスは禁止

ネットワーク

コード

Page 11: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

資源アクセスの制御法1. システムコールフック2. バイナリーコード変換  (課題: . 1 、 2 の利点・欠点の面で比較せよ .)

3.サンドボックス作るためのOS組み込み機能

  (Eg.,   chroot – プロセスがアクセスできるファイル名空間を、全空間の 一部   である subtree に限定する。

       jail – FreeBSDのシステムコールで、 Sbox をファイル+ネットワーク   のアクセスも制限する。)

4.  仮想機械や仮想OS5 .サンドボックス処理の無効化・バイパス防止

Page 12: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

我々の防御戦略3重のセーフティネットー

セキュアな言語の使用/実装

セキュアな実行時系・オペレーティングシステム

プログラムやプロトコルの論理的解析・検証

実行前

実行中

Page 13: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

我々の防御網

無害化されたプログラム

既知のウイルス

拒否       

安全とわかるプログラム

監視実行されるプログラム

未知の不正コード( ウイルス)

この領域を我々の研究でできるだけ小さくする

       安全

Page 14: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

バッファーオーバフロー攻撃  

Page 15: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

データ B

バッファオーバーフロー (1/3)

• 指定されたメモリ領域からデータ溢れを起こすプログラミング上のバグ– 配列で宣言された範囲を超えたデータのアクセス

– 隣接したデータや制御情報を破壊– 普通は,ソフトウェアが異常終了– 不注意からバッファオーバーフローバグがプログラムに入り込むことが頻繁にある

• C言語の標準的な教科書(K&R)にもこのバグがデータ AA1 A2 A3 A4 A5 B1 B2 B3 B4A6 A7

Page 16: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

バッファオーバーフロー (2/3)

• バッファオーバーフローを悪用した侵入法– 悪性命令列を含む長大なデータの送信

• 悪性命令列の設置+命令制御情報の書き換え

データ Bデータ AA1 A2 A3 A4 A5次の命令 B2 B3 B4

もともとのプログラム

Page 17: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

バッファオーバーフロー (3/3)

• バッファオーバーフローを悪用した侵入法– 悪性命令列を含む長大なデータの送信

– データとして悪性命令列をインストール– 命令制御情報の書き換えによって,制御を奪う

データ Bデータ A悪 い 命 令 列 B2 B3 B4次の命令

Page 18: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

安全なメールシステム

Page 19: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

インターネット

メールシステムの基本構造

サーバ

サーバメーラ

LAN

LAN

LAN

サーバ

メーラ

Page 20: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

研究対象としてのメールシステム

• 問題が凝縮されている– サーバとクライアント

• サーバ: 公開アドレス,自律動作,ワームの脅威

• クライアント: プライベートアドレス,人間が操作,                          ウイルスの脅威

– 信頼性に対する高い要求– 古典的問題

• 盗聴,改竄,なりすまし

Page 21: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

想定するメールシステムへの攻撃

• サーバへの攻撃クラッキング,ワームサービス拒否攻撃

• 通信路への攻撃盗聴,改竄

• クライアントへの攻撃ウイルス添付メール迷惑メール

Page 22: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

システムの安全性

• サーバ– ワームやクラッキングへの耐性– メーリングリストなど拡張機能の安全な実行– 故障時にはメールをどこかに退避

• メーラ– 添付ファイルの検査– 添付ファイルの安全な実行

• プロトコル– 配送経路のトラッキング– 送信否認の防止

Page 23: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

23

基本的な 前提 (1/2)

• ハードウェア– 任意のタイミングで一時的に停止しうる– 頑強なストレージ(ミラーリング, RAID な

ど)を仮定–ハードウェアのセキュリティホールは想定外

• ネットワーク– 任意のタイミングで一時的に切断しうる

• システムソフトウェア– OS等のセキュリティホールは想定外

Page 24: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

24

基本的な 前提 (2/2)

• 攻撃–ネットワーク経由の攻撃だけを仮定– 物理攻撃は想定外

• 互換性– 通常のメールシステムとの互換性が必要

Page 25: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

我々のアプローチ (1/2)

• プログラムの検証と監視実行• 3階層のセーフティネット

セキュアな言語の使用実装

セキュアな実行時系・オペレーティングシステム

プログラムやプロトコルの検証

実行前

実行中

Page 26: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

我々のアプローチ (2/2)悪性 良性

悪性と判定 良性と判定

監視実行

コード書換

Page 27: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

サーバに対する脅威と対策

• ワームやクラッキング– バッファオーバーフロー攻撃などは,安全な

言語で防御• 危険な拡張機能

– SoftwarePot (加藤和彦)を用いて拡張機能を隔離実行

• メールの消失事故– 消失しないことを数学的に検証

• 証明は約 18,000 行• 証明支援系 Coq を利用

Page 28: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

メーラに対する脅威とその対策

• 危険な添付ファイル– 検査系と実行系を   プラグイン可能にするシステム構成

を設計– 検査系:未知ウイルス検知システムなど– 実行系: SoftwarePot など

• 受信したメールの消失事故– 検証済み

Page 29: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

主な要素技術 (1/2)

監視実行リソースの安全

性を保証

安全な言語メモリの安全性

を保証

プログラム検証耐故障性などを

保証

新規開発システム

Page 30: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

主な要素技術 (2/2)

監視実行リソースの安全

性を保証

プログラム検証メモリの安全性

を保証

ダウンロードされたコード

Page 31: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

プログラム検証の意義 (1/2)

• Common Criteria Evaluation Assurance Levels– EAL1: Functionally Tested– EAL2: Structurally Tested– EAL3: Methodically Tested and Checked– EAL4: Methodically Designed, Tested, and

Reviewed– EAL5: Semiformally Designed and Tested– EAL6: Semiformally Verified Design and Tested– EAL7: Formally Verified Design and Tested

Page 32: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

プログラム検証の意義 (2/2)

• 本当にクリティカルな部分は数学的検証を行う価値がある

• 我々の経験事例– コードサイズ 約 600 行– 証明サイズ 約 18,000 行– 労力 100~ 150人時

Page 33: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

メールシステム構築の目的

• 安全なソフトウェアシステム構築方式を体系化– 想定する攻撃は,ワーム,ウイルス,クラッキン

グなど– ソフトウェア技術でソフトウェアを守る– 人的問題,社会的問題にはあまり踏み込まない– 暗号の問題にもあまり踏み込まない

• 領域に関連した技術の統合と実証試験• そのための例題としてメールシステムを選択

Page 34: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

安全メールの基本機能

• 既存メールシステムとの互換性– SMTP/POP3 をサポート

• 安全サーバ– (機能的には普通の) SMTP サーバ

• 安全メーラ– MIME のサポート– Jar ファイルの実行環境

Page 35: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

安全メールの特徴 (1/2)

• 安全プロトコル– 改竄防止と経路認証が可能な配送プロトコ

ル– 既存 SMTP サーバからは透過的– BAN 論理を用いた理論的な検証

• 安全サーバ– メモリセーフな実装– Coq を用いた形式的かつ機械的な検証

Page 36: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

安全メールの特徴 (2/2)

• 安全メーラ– 検証するには複雑すぎる

• JavaMail, Java Swing などに依存– センシティブなのは添付ファイル実行部分– 検査器用のプラグインインタフェース

• E.g., 静的解析モジュール• E.g., コード変換モジュール• E.g., 動的モニタリングモジュール

– 実行器用のプラグインインタフェース

Page 37: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

実装の状況

• Java 言語でメモリセーフに実装 • 基本機能と特徴的機能の一部が動作• Windows 2000/XP, Solaris 7/8, Linux,

MacOS X などで稼動 中• 現在 α版の段階

Page 38: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

安全プロトコルの概要

• 改竄防止と経路認証– 改竄が行われていないことを確認できる– 送信者と 中継 サーバを確認できる– 送信を否認できない

• 信頼度の判断材料– E.g., 検査サーバが 中継 したメールは信頼する

• 匿名性での悪事も防ぎたい

危険サーバ

安全サーバ

Page 39: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

安全プロトコルの実現

• 送信者と中継 サーバが電子署名– 中継 のたびに署名を追加

• 付加情報はヘッダーに格納– 送信者,送信先,時刻印,次のサーバ,署名など

X-Anz: [email protected],[email protected]:..

X-Anz-Sig: sn=0,si=anzenmail.is.titech.ac.jp,di=cs.titech.ac.jp,    ts=1026375710449,sa=SHA1withRSA,sg=xLsXLKk+T1P      l7DxacE1DgWZAQffJ07wQ9sn8luUQZvqlAFOVBD9CP      wZxOP5uJ6nHtQ4y74loMpMokhgfzjdWzafEQzAUMwD    9PBLQK9hlL2v+6xpFdca9pht7OSsLsTzb0BVihZmX666      F93kadO95ceLonKJDEJKAyOGUZ/ll5Eo=

課題: このプロトコルで安全でない部分を指摘し、その対策を考えよ。

Page 40: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

安全プロトコルの検証

• ほぼ次のような性質を理論的に検証– 最終受信者は,メッセージ m を受信した時に,以下を確信できる

• 送信者が最初のサーバに m を送った• 経路上の各サーバ(最後のものは除く)が次

のサーバへ  m を転送した

• 正確には,もっと複雑な性質を証明してる

Page 41: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

安全プロトコルと相互運用性

• 配送経路上にレガシー SMTP サーバが存在する場合– メールの送受信は可能– 経路認証は部分的にしか機能しない– レガシーサーバが勝手にメールのボディを変更し

た場合,改竄とみなされる

• 暗号化,受信否認の防止などについて– 他のメッセージフォーマットやプロトコルと組み

合わる– SMTP 準拠なら組み合わせ可能

Page 42: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

安全サーバの構成

• SMTP の送受信部,メッセージキュー管理部などから構成される,SMTPprotocol

SMTPprotocolSMTP

送信部SMTP受信部

署名メッセージキュー

Page 43: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

安全サーバの検証 (1/3)

• SMTP 受信部の正当性を形式的に検証– プロトコル仕様を満たさないリクエストを拒否

する– 致命的エラー (fatal error) が生じない限り,プ

ロトコル仕様を満たすリクエストを受理する– Ack を返す前 に,メッセージをストレージに

セーブする(サーバが落ちてもメッセージは喪失されない)

SMTPprotocol

SMTP受信部

Page 44: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

安全サーバの検証 (2/3)

• 証明支援系として Coq を利用– Java のメソッドを Coq の関数へ変換して

から検証– オリジナルのプログラムからバグを数個発見

– 検証の規模とコスト• 対象は約 600 行の Java ソースコード• 仕様のサイズは約 300 行• 証明のサイズは約 5,000 行• 要した労力は,約 100人時+ 2CPU 分

Page 45: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

安全サーバの検証 (3/3)

• 検証を可能とした条件– 検証の対象が比較的小さかった– サーバの記述は,オブジェクト指向的でな

く,型安全な命令型– スレッド間の干渉が実質的にない

Page 46: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

安全メーラ ( 1 /2)

• 見かけは普通のメーラに近い– フォルダの一覧– 選択されたフォルダ内のメール一覧– 選択されたメールの内容表示

• MIME タイプに応じて,検証系と表示・実行系を選択– 検査系や表示・実行系はプラグイン可能

Page 47: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

安全メーラ の見かけ

Page 48: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

安全メーラの構成 (1/2)

• 検証系と実行系を追加できる

JVM

安全メーラJavaMail1.2

V1 V2 V3

V4

E1 E2 E3

E4検証モジュール

機能拡張モジュール

Page 49: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

安全メーラの構成 (2/2)

安全メーラ

Java Security Architecture

E1 E2 E3 E4

V1 V2 V3 V4

A

A

外部検証器

安全

危険

OS & other resources

添付コード

検証モジュール

Page 50: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

外部検証&実行モジュール

• 署名の検証系– Jar ファイルの署名を検査

• SoftwarePot– Linux/x86, Solaris のバイナリをサンドボックス内で実行

• 資源使用解析– 資源の利用順序に依存する性質を静的に検査

• アンチウイルスエンジン

Page 51: 計算機言語論II Software Security 特に「安全メール」 (2008 spring) 米澤明憲

まとめ

• 安全な配送プロトコルの設計と検証– 改竄と送信・転送の否認を防止

• サーバの構築と検証– シンプルな設計– コア部の検証

• クライアントの設計と構築– 本体の検証は当面行わない– 添付ファイルの安全な実行をめざす