プロフィール

大山恵弘

  • Author:大山恵弘
  • 公式なサイトはこちら

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

ブロとも申請フォーム

ブログ内検索

RSSフィード

リンク

FC2カウンター

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【セキュリティ】 Towards Protecting Sensitive Files in a Compromised System 【ファイルシステム】

In SISW '05.

Secure Virtual File System (SVFS)の提案。VMMを使った安全なデータストレージ。sHype風味。

ミシガングループ。といってもチェンさんは絡んでない。

センシティブなファイルを一つのゲストOSの中におく、アプリケーションは別のゲストOSで走らせる。ファイルアクセスはVMをまたがることになるので、そこでアクセス制御する。

ファイルシステムを含んでるゲストOSがアクセス制御するので、悪意の者がアプリケーションを乗っ取っても、アクセス制御をバイパスできない。

どのVM(ゲストOS)からファイル要求が来たかによってアクセス制御する。

実装はXenベース。要するにDom0のゲストOSが他のVMのファイルサーバー(NFSサーバみたいなイメージ)になるってやり方。Dom0でローカルで動いているExt3がSVFSの実体。

各ゲストOSのカーネルにはSVFSファイルシステムが登録される。Dom0でSVFSサーバが動く。SVFSファイルシステムが、SVFSクライアントとしてはたらく。

VMMがアクセス制御するアプローチももちろんある。VMMでなくDom0でアクセス制御する利点は、ディスクブロックレベルではなく、ファイル要求レベルでポリシーを強制できること。

標準的なRPCにかわるVirtual RPCを提案。VM間でのデータのやりとりが速い。

ルートキットを用いて実験。ルートキットがセンシティブなファイルを更新しようとしたがブロックできた。

NFSでread-only mountとかCD-ROM mountするから安全ですよ系の研究と言えようか。実に直球の研究という気がします。

VMMならではのイシューや要素技術があるかどうかが鍵。VRPCとかVMの認証あたりがそれになるのかな。

【エミュレータ】 Dynamic Binary Translation and Optimization in a Whole-System Emulator -- SkyEye 【動的コード生成】

In ICPPW '06

システム全体エミュレータSkyEyeの話。命令列を動的に変換しながら実行する。ゲストアーキテクチャの命令列を、Translated Block (TB) というコードブロックに変換する。QEMUのようなシステムと思えばいい?

ARMやMIPSのエミュレータ、LCDやフラッシュのデバイスエミュレータも含む。

ゲストマシンの消費電力計算もしてくれるようだ。

性能は、QEMUに勝ったり負けたり。

仮想デバイスやらMMU仮想化やらの話に一番興味があるのだが、その手の話にはあまりふれられていない。

TBを検索する新規な戦略によって、短時間で適切なTBを見つけられるようになっている(そして実験でARMの高速エミュレーションを確認している)ってのが一番の売りのように読める。この手のシステムではTBの管理って重要なのかな。

仮想マシンモニタ系のVM論文てよりはJava系のVM論文といった印象。

【ルートキット】 A Methodology to Detect and Characterize Kernel Level Rootkit Exploits Involving Redirection of the System Call Table 【OS】

In IEEE IWIA '04.
http://users.ece.gatech.edu/~owen/Research/Conference%20Publications/conference_publications.htm

いわゆるプログラム置き換えルートキットを分類する枠組みを提案。既存のルートキットか、既存のものの修正か、新しいものかに分類。観測される挙動の集合が、元の正常プログラムとルートキットでどういう関係にあるかを元に分類。

いちおうこの論文の貢献はその分類の枠組みの提案ってことになってると思う。でも、多くの人にとっては、それ以外の部分のほうが、おもしろいように思う。論文のかなりの部分がルートキットチュートリアルみたいな文章。実際のルートキットであるSuckITの動作を細かに説明する付録もついてる。

【VMM】 A Choices Hypervisor on the ARM Architecture 【組み込み】

Project report
http://choices.cs.uiuc.edu/

ARMの上にVMMを実装し、ゲストOSとしてオブジェクト指向OS Choicesを走らせましたという報告。QEMUを改造して作った。

ユビキタスでおなじみのキャンベルさんのところの仕事みたい。

ARMの命令セットを調査し、どの命令がsensitiveかを認識。そして、sensitiveな命令でVMMに制御が戻るようにした。特権モードで実行されるsensitive命令はQEMUの現在のバイナリ変換処理に任せる。ユーザモードで実行されるsensitive命令はソフトウェア割り込みのような命令に変換する。

Sensitiveな命令で逐一VMMに制御を戻してくれるVT機能を、バイナリ変換で実現しましたみたいなイメージか。VTはもっとたくさん機能あるけど。

ARMのどの命令に注意するべき必要があるかをまとめてくれてるのはうれしい。

それ以外の部分は至って普通という気がする。I/Oと仮想記憶を実装してないって点にはうーむと思ったが。

VMMを実装したことのある人にとっては、大きなサプライズはない論文と思います。VMMを実装したことのない人にとっては、チュートリアルとして良いかもしれない。

サプライズはないんだけど、読んでて非常に楽しかった。水戸黄門を見る喜びとでも言うんでしょうかね。

【プロファイル】 Framework for Instruction-level Tracing and Analysis of Program Executions 【instrumentation】

In VEE 2006.
http://www.veeconference.org/vee06/

ユーザプログラムの完全トレースの記録と決定的再実行(シミュレーション)を可能にするシステム。命令レベルでトレース/再実行/解析ができる。

タイムトラベルデバッガでデバッグできるツールあり。データ局所性解析ツールあり。

バイナリ変換とインタープリテーションを組み合わせて実装。再実行に必要な情報を集めるためのcallbackをアプリケーションに挿入する。決定的再実行に影響を与える外部との相互作用は、記録しておく(時刻取得命令の返り値とか)。

オーバヘッドは微妙(平均トレースオーバヘッドは11倍!再実行オーバヘッドはさらにその3、4倍!)。トレースのサイズは、新方式によってかなり圧縮されている(1命令あたりのビット数が0.5くらい)。

自己改変コードにも対応。マルチスレッド、マルチプロセッサにも対応。キャラメルだけでも十分なのに、おまけ2個ついてますみたいな。この実装の馬力はすごい。

トレースの圧縮と聞くとまず私はWPPが浮かぶんですが、WPPとこの研究てどんな関係にあるんでしょうね(bibには挙げられているが、関連研究の章では比較されてないみたい)。もちろん、再実行するとかバイナリ変換するとかの点で、差分ありまくりなわけですけど、純粋に圧縮手法の部分だけを比較したらどうなのかなって思って。

あとやっぱQEMUとかbochsとの関係も気になるなあ。

【異常検知】 Anomaly Detection of Web-based Attacks 【Webアプリケーション】

In CCS '03.
http://doi.acm.org/10.1145/948109.948144

Webアプリケーションのための学習ベース異常検知システムの提案。

Webサーバのアクセスログが対象。各要求に異常スコアを与える。
複数の異常検知手法による異常スコアを重みづけ加算して、全体の異常スコアを決定する。

述べられている手法は6個。

その1。属性の長さ。属性の文字列の長さは、ふつう、固定長だったり、短かかったり、そう大きく変化しない。正常な要求の属性文字列はだいたい標準的な分散にしたがう。変に長い文字列は攻撃の可能性が高い。

その2。属性の文字列の分散。属性に読めない文字が含まれてるのはあやしいとか、アルファベットの各文字の出現確率を利用するとか。

その3。正常な属性の構造を推論。パラメタの構造を確率的正規文法で表現。そして非決定性有限オートマトンを作る。

その4。値集合から選ぶタイプの属性については、ちゃんとその集合の中の値になっているかどうかをチェック。

その5。属性があるかないかをチェック。攻撃者による要求は、脆弱性に関係ない属性を省略して埋めないことがあるので。

その6。属性の順番をチェック。その5と関係。

一つ一つはスタンダードな方法だし小ネタという気がするが、たくさん集めて組み合わせて、実験もしてるあたりがすごいかも。合わせ技一本か。文章も読みやすいと思う。

【セキュリティ】 Secure and Practical Defense Against Code-injection 【乱数化】

In VEE '06.
http://dependability.cs.virginia.edu/info/Publications/

命令セット乱数化によるセキュリティ実現手法の近況。

アプリケーションを暗号化。アプリケーションをエミュレータ上で動かす。エミュレータがアプリケーションを復号して実行。コード注入攻撃によって注入されたコードは復号に失敗する。よってそういうコードを実行前に発見できる。

てのがCCS03あたりまでの状況。私の理解では。

今回の進展をまとめると以下の通り。
・AESを使った
・AESを使う実装の実装方式と性能を示した
・攻撃コードを実行前に検出できるようにした。各命令に「命令タグ」をつける。複合された命令列にそのタグがついているかどうかをチェック。これまでは、復号された無効なコードが実行された結果高確率でエラーに至ることを利用していた。

AESを使ったことを主要な貢献と位置づけている(!)が、それがどの程度の技術的困難を伴うものなのかは、私はよくわかってない。

注目すべきは性能。Apacheの性能が実機に比べて2-15%しか落ちてない。その秘密は動的コード変換技術にあるようだ。人々がエミュレータと言われて想像する性能をはるかにこえている。これはすごい。

セキュリティに関して。この手法で実在の攻撃が防止できることを実験で示している。でも、他の手法でも防止できるかどうかの実験結果はない。

ある程度の割合のコード注入攻撃はスタックなどのメモリ配置の乱数化でも防げるような気がしますが、どうなんでしょうね。あとは、ここにあるみたいに、システムコール情報だけ暗号化しても、結構うまくいくような気がします。

【システムコールサンドボックス】 Authenticated System Calls 【バイナリ変換】

In DSN '05.
http://www.cs.arizona.edu/solar/

「認証つきシステムコール」の提案。システムコールに引数を追加する。追加引数には、その呼び出しのポリシーと、そのポリシーのインテグリティを保証するMACを与える。

カーネルは追加引数の情報を利用して、システムコールの安全性を検査する。

信頼できるインストーラが、アプリケーションのバイナリを静的解析してポリシーを生成する。そして、バイナリを、認証つきシステムコールを呼び出すようなものに変換する。

ポリシーとしては記述できるものは、各システムコールを呼び出してよいプログラムポイントとか、各システムコールで許される/許されない引数とか。

実装はLinux上。PLTOをいうバイナリ変換ツールを利用。

ポリシーをシステムコールの引数にのせるってアイデアが新しいのと、ポリシーのインテグリティを守るための暗号情報もシステムコールの引数にのせるってアイデアが新しいと思う。それ以外は普通のシステムコールフックサンドボックスといったかんじ。

第一著者はアリゾナの人。といってもデブレイ氏は著者に入ってない。からんでるのはトレバージム。サイクロンの人がこんな研究もしてますみたいな。

ユーザプログラムとカーネルが暗号的な情報を共有し、攻撃コードが変なやり方でシステムコールを呼び出すと復号が失敗して攻撃が検出される、という方法は、このへんにもあります。

【仮想化】 Unix as an Application Program 【マイクロカーネル】

In USENIX Summer Conference, 1990.
http://www.cs.cmu.edu/afs/cs/project/mach/public/www/doc/abstracts/mach3_intro.html

Machカーネルの上でBSDを動かす(マイクロカーネルの上で伝統的なOSを動かす)話。

Xenの論文を読んでいるような感覚。一つ一つの用語には古さが感じられるものの、現代に通じる問題をたくさん扱っていて、非常に楽しめる。

自分の研究の質を向上させるという面からは、この手の古典を読むことがどの程度の意味を持つかは微妙なところではある。現代の問題の解決に使えそうな手法が発見できたり、新しい研究ネタが思いつくかっていうと、ちょっと微妙。実験も、現代の感覚からすると、しょぼしょぼな印象。教養や楽しみのために読むなら良い論文かもしれない。

【セキュリティ】 Retrofitting Legacy Code for Authorization Policy Enforcement 【プログラム解析】

In 2006 IEEE Symposium on Security and Privacy.
http://www.cs.wisc.edu/~vg/papers/ieee-sp2006/

セキュリティを考えてないレガシーなコードに、アクセス制御ポリシーを強制するコードをどうはさむか。一般に、コードのどこに何をはさむかは、単純な問題ではない。

提案は2つ。1つはポリシー強制コードを呼び出すべき場所を自動的に求めるツールAID。もう一つはその結果にしたがってコードをinstrumentするツールARM。

AIDは、セキュリティセンシティブな処理をする特徴的なコードパターンを「指紋」として認識する。指紋を得るには、実行トレースを利用する。基本的なアイデアは、目に見える副作用を伴う処理をセキュリティセンシティブな処理とみなすってこと。Xサーバで言えば、CreateWindowを呼ぶとウィンドウが出るので、CreateWindow関数が、「ウィンドウを作る」というセキュリティセンシティブな処理に関係付けられる。で、コードを静的に解析し、指紋が出現する場所を見つける。出現する各場所が、ポリシー強制コードをはさむ場所となる。

ARMは上記の解析結果にもとづいて、リファレンスモニターを呼び出すコードを、元のプログラムに挿入する。

Cのソースコードを解析する。バイナリは扱えない。

IDSなどでいい仕事をしているジャ氏と、ポリシー分野で有名なジャエガー氏がコラボすると、こういう論文が出てきますっていう。そういう味わい深さもある論文。二人の個性がそれぞれ光っている。コラボもいいのうって気分になる。

| ホーム |


PREV PAGE «  BLOG TOP  » NEXT PAGE


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。