- 2012-12-04 筑波大学(茗荷谷) 10:10〜17:50
- http://www.bitvisor.org/summit/
- 資料: そのうち公開されるはず...
新宿→池袋→茗荷谷で行くつもりがボケっとしてて新宿→茗荷谷の丸の内線に乗ってしまった。新宿→銀座→池袋ちょい手前という経路だからめっちゃ遠い.. 30分もかかったぜ。四谷でかなり人が減ったな。
なんとか時間までに会場につけた。電源を取ろうとしたら電気がきてない。昼に復旧したが、どうやらブレーカーがトリップしてたようだ。(コーヒーメーカでもつかったか?)
BitVisorの現状と今後 / 品川高廣(東京大学)
- BitVisor Summit: 初めてでどれだけ参加があるかわからなかったが、40人登録、企業・大学で半々になった。
- セキュアVMという商品がすでにあったので、その名前はつかえなかった。
- 1年ごとにメジャーリリースしてきている。おわってるプロジェクトじゃないよっと。
- いまは競争的資金はなくなってるが、イーゲルさんががんばってくれている。時代においついているうちに普及させたい。
- 榮樂さん: 日本では右にでるものはいない
- BitVisorはType I VMM
- BitVisorはVMは1つだけ。「Single-VM仮想化」が特徴。あえて機能を削る(複数OSを実行できるとか,マイグレーションとか)。
- VMMを小さくできるのでセキュリティ的に有利。
- オーバヘッドを減らせる。
- 準パススルー型: 制御の必要ないデバイスアクセスはスルーする(デバイスメディエータ)。1つのデバイスでもスルーしたり制御したりできる点がPCIパススルーとは違う。
- コア機能のみ使う場合にはIOは完全パススルーにする使いかたもある。
- 準パススルーのレベル: 監視のみ、書き換え、多重化(Piggyback;VMMによる機能追加,基本はOSに制御はまかせる)、
- 保護ドメイン(Process): OSがのっとられてもだいじょうぶ。
- TinyVisor:われわれとは別に開発されたものもある。
- コアだけつかうならデバイスドライバを書かなくてよい。コア部分は普段づかいしているが安定して使えてる。Macでも動く(インストールがやや難しい?)。
- ML: 海外からの問い合わせの方が多い。
[2012-12-04 10:40]
準パススルー型VMM開発の難しいところ / 榮樂英樹(イーゲル)
- 準パススルー型はデバイスドライバが少ないので開発が簡単。
- 難しいところ: 新しいCPUへの対応,パススルーしてはいけないデバイスの対応。
- CPUIDをみて隠蔽しないといけない命令が増えていく: XSETBV,Page1GB. (AES-NIはただの演算命令なので隠蔽しなくてよい)
- LAPIC/ACPI/ファームウェアは対応が必要。
- LAPIC: VT-x環境ではスルーしてよいが、AMD-V環境では仮想化が必要(BitVisor1.3で対応)。
- ACPI: 電源制御はゲストOSにまかせたいが、スリープやシリアルポートの電源問題がある。
- S2(Sleeping State),S3(Standby)問題: スリープから復帰するとVMMを忘れてしまう。FADT/DSDTテーブルの内容を書き換える必要がある。
- AMLインタプリタは独自実装した。興味があるのは一部なので。
- AMLのむつかしいところ: 引数の終わりが識別できない、Intelのリファレンス実装でも正しく識別できていないが、これは推測してやるしかない。先頭から1バイトずつ処理して解釈結果を絞り込む必要があるのでパースに時間がかかる。Method()の中身に興味はないのでバイト列として無視して高速化。マルチコアなので初期化処理の裏で並行して解釈して時間短縮。仕様書に沿ってない実装もある。Device()の直下にif()があったり。仕様書からパーサを実装したので実装の誤りがあぶりだされた。
- スリープ(S2,S3)を禁止することでVMMがいなくなるのを避ける方法: 名前を書き換えてS2,S3をなくなったようにみせかける。
- まじめ?スリープ対応: フックして復帰時にVMMのコードが呼ばれるようにする。復帰時にパスワード認証するにはデバイスの初期化が必要なのでむつかしい。
- シリアルポート電源問題: DSDTの中にシリアルポートの電源を落すコードがあるためシリアルポートがつかえい問題。プログラムのその部分をNoopOpで埋めて対策。
- BIOSは仮想マシン用のBIOSは用意しないでシステムのをそのままつかう。
- ブラックボックスなのでデバッグがたいへん。
- BIOSをつくらないで済む代りに機種依存の問題がでる。
- ThinkPad X200のTCG BIOS: BIOSの中で64bitプロテクトモードに遷移してた。
- VMMからBIOSを呼ぶときの注意: 制御レジスタを保存する必要がある。
- ページングの設定が普通じゃなかったり。CR0,WP=0の設定がされてた。
- SMM(system management mode)
- SMI(system management interrupt)で起動される。裏で動いているので普通は見えない。BIOSの中でポートをつっついたあとのフラグの変化をみるループがあって、ポートIOをフックすると無限ループにはまる問題があった。
- SMM内でページフォールトしてもVMMが対応できない問題。
- SMMからディスクIOをしている問題は未解決。
- BitVisorもUEFIのプログラムとして読み込ませたらよさげ?
- UEFIにallocate_pagesがありメモリ領域を使用不可にできる。割り込みをフックしなくてもよくなる。
- MBAで、ファームウェアがロックとってる状態でUEFIでBitVisorでロードされるとデッドロックする。
[2012-12-04 11:23]
- Q: SMMの対応はむつかしいが、手元のハードでBitVisorがつかえるかどうかユーザ判断できるか?
- A: 未知の問題がおきているかどうかは判断できないだろう。
- Q: BIOSの調査はどうやってる?
- A: 止まってる番地をみる→どうやらBIOSらしい。SMIだとout命令が入っている。またかってことになって、周辺をちょこっと逆アセンブルして調査。BIOS全体をみているわけではない。
- Q: なぜThinkPadのBIOSは頻繁に変わるのか?
- A: よくわかんね。型番が近くても大きく違うことがある。
- Q: 商品化を考えたらBIOS対応はたいへんでは?自分用のBIOSを持った方が楽では?
- A: 現状、BitVisorを任意の機種に入れるのは難しい。機種を絞れば対応できるが。ACPI制御は独自BIOSでは対応できない。UEFIは使えるメモリが広くなるのでSMIつかわなくて問題がおこりにくくなっているのではないかと予想している→システムBIOSを使った方が楽という予想。
- Q: Nested VMでBIOSで試したことは?
- A: QEMU 64bit版でBitVisorを動かしたことはある。でもシンプルなBIOSなのであっさり動いてしまった。遅い。QEMUのLAPICのコードが完全ではない。
- Q: BIOSメーカの違いは?
- A: メーカに注目してなかったのでわからない。機器メーカの作り込み部分で問題がでるのではないか?
[2012-12-04 11:34]
[2012-12-04 11:36]
BitVisorをベースとした既存Windowsのドライバメモリ保護 / 須崎有康(産業技術総合研究所)
- NonCopy自体への攻撃。
- ドライバの中にある鍵への攻撃から保護したい。
- すでにOSをインストール済のPCに導入したい。デバイスがかわってしまうのは困るのでパススルーは好都合。
- VM IntrospectionをつかってOSを解析する。
- VMware ESXi5.xからOSレスになったが、代りに管理サーバが必要。
- ハイパーバイザーがドライバの動作・メモリ空間を認識する必要がある。システムコールをトレースする。
- Win7のdriver isolationはプリンタのみ。
- OS/2はring0=kernel, ring1=driverとなってドライバの保護をしていた。
- Linux kexcをつかった。
- LoadDriver関数をフックしてドライバを認識.
- ドライバは自分のメモリしかアクセスできないようにする。
- Stealth Breakpoints: メモリを書き換えないでページフォールトでひっかける。ページ単位でしか設定できないので遅くなる。
- 今は問題プロセスを発見したらをLow IRQLで無限ループにはめる。CPUは喰うがマシンはつかえる状態。
- スタック以外のメモリは保護対象にしている。遅くなるのではないか?
- Q: 保護ドメインはつかわない? ローダを細工したら?
- A: メモリ書き換えたいし。
- Q: 無限ループの変わりにyield命令にしたらよくない?SEGVとかで殺してもよいかも。
- A: アクションを起せば殺せるかも。
- Q: シングルプロセッサ縛りなのはなぜ?
- A: greenkillerが古いbitvisorをつかってるため。
- Q: マルチプロセッサ対応できないのはページテーブルをinvalidateしてもキャッシュされてるとうまくいかないからか?
- A: そうかもしれない。
[2012-12-04 12:09]
隣でオリンパスが特徴的な音をだしてた。
昼休憩
駅前のマクドナルドにいって、ハンバーガーとチキンクリスプ。チキンクリスプは名前がわからなかったので(メニューなくすなよ)「チキンのやつ」って言ったら通じた。席が埋まってたので喫煙席にしかたなく座ることになるかと絶望したが、幸いにも屋外の席が空いてたので女子高生の隣でランチ。
会場に戻る途中でコンビニでおやつ買ったり、大学隣りの公園をふらついたり。
会場に戻ったら電気屋のにーちゃんが配電盤をみてくれて電源復活。IGELさんとこのグッズを配っていたので1セットいただいた。
[2012-12-04 13:16]
Customizing BitVisor 1.3 / 松原克弥(イーゲル)
- コードがドキュメント by 榮樂さん
- "BitVisor powered by IGEL"
- USBデバイスの隠蔽: セキュリティポリシーでUSBメモリを禁止しているときにUSBメモリを刺してもキーボードにしか見えないようにしてしまう、とか。
- ICカード連携: 席をはなれたら画面ロックしてキーボードもマウスも見えなくしてしまう、とか。
- Mac対応: ハードが限定されてるのでWindowsマシンと違って無限地獄はない。Macならビジネスにできるかも..
- BitVisor1.2→1.3でOSの起動時間はちょと速くなった。ビルドベンチはかなり速くなった。
- ADVisor: 画面描画機能
- 「スライドを表示してるマシンもBitVisor上で動いているので「実演」のところでは実際に動かします」「おぉー」
- Makefileの依存関係がちゃんとなったので make -j でちゃんとビルドできるようになった。無駄なコンパイルもなくなった。
- MBAだとシリアルもEtherもないので、ログを画面出力してビデオ撮影するのが便利につかえる。SunOSみたいにログが出ると画面がずれてゆく..
- パニックしたらRIPのアドレスをaddr2lineで該当行をみつける。
- ADvisorをとりこむときにAPIを定義した: vga_is_ready(),vga_transfer_image(),vga_fill_rect().
- 保護ドメイン: VMMコアとは別ringで動くプロセス。メモリ空間が分離独立。SEGVで死ぬのは保護ドメインに閉じるので全体としての動作はつづけられる。
- VMMとのやりとりはメッセージI/Fで。
- ディスクI/O: storage_io_init(), _get_num_devices(), _io_deinit(), _io_aread(), _io_awrite(). R/Wが終わるとcallbackが呼ばれる非同期IO.
- (BitVisorは速いのにUbuntuのリブートに時間がかかる...)
- "実装したコードはオープンソースへ"
- デモ:
- 5秒毎にログ出力 http://youtu.be/IihKKgcXnic
- 5秒毎にVGAログ出力 http://youtu.be/Ype30GRgdd4
- F12でロゴ表示(NG) http://youtu.be/1B_wuZIzcDo
- ロゴ表示(保護ドメイン編) http://youtu.be/jXEB6ZJB7w8
[2012-12-04 14:24]
[2012-12-04 14:25]
BitVisorによる動画像を対象とした著作権保護 / 小清水滋(筑波大学)
- マイクロソフトのDRMやDiXimプロトコルがつかわれているがソフトなのでリバースエンジニアリング可能。
- PS3は独自に著作権保護をVMMで実現しているが(ring0なので?)ユーザが安心してつかえない。
- Trusted Boot: 起動後のユーザ環境が正しいか検証できる。TPM(ハード)に秘密鍵が入っているが所有者でも取り出し不可能。
- 配信サーバ→(SSL/秘密鍵)→UI on guestOS→VMM RPC on BitVisor→メディアプレーヤ(SSL/公開鍵) on BitVisor
- BitVisorがメディアプレーヤに画面を専有させる。
- メディアプレーヤが改変されてる場合には配信サーバがデータを送らないことで対応。
- ffmpegを保護ドメインに移植するのに浮動小数点が扱えない → VMM RPCでレジスタ保存・例外がおこらないようにフラグをおとした。
- フレームバッファの専有: ゲストOSがFBにアクセスすると実はダミーのアドレスになっている。
- デモ http://youtu.be/plIlBqsfrD4
- Q: open()はどう実装した?
- A: open()はなにもしないで、read/writeのRPCで決め打ちのファイルデータを返している。
[2012-12-04 14:52]
[2012-12-04 14:53]
BitVisorを用いたメッセージ表示システム / 大山恵弘(電気通信大学)
- ADvisorはちょっとソースコードは読んでると気分が悪くなる(笑)ようなものだったが、IGELにとりこんでもらった。
- ゲストOSのadminからでも表示を止めさせられない。
- ディスクIOを補足して広告を表示: WEB検索するとキャッシュが作られるのでそれを補足して広告を表示。
- 応用: イベント予定や災害情報をデスクトップ表示するとか。ネットカフェ端末に広告を表示するとか。
- 広告が画面上を移動したり、邪魔にならない場所(画面サイズでタイル分割、マウスがあまり来ないところ、色がおなじところ、FBの更新頻度が低いところ)を検出したりもできる。
- 実装は数百行くらいで済んでいる。
- ioportをつついてVRAMアドレスを取得して1ピクセルずつ描画。ハードのアクセラレーション機能はつかってない。
- 画像ファイルの置き場所: いまはバイナリに埋め込んでいる(配列として持っている)。なので画像を変えるには再ビルドが必要。
- 海外の査読つき論文に投稿しているがstrong rejectになっちゃう。こんなスパイウェアみたいなのをだれがインストールすんの?とかコメントがかえってくる。広告色を弱める方向も考えている。ログ表示機能はうれしい応用。deep packet inspection的なものとか。
- KVM版のADvisorもつくった。
- 広告としては、これをクリックできるようにしたい。
- 広告としてつかった場合にプライバシーなどの法的問題の検討もする必要あり。
- Q: DVDを見てるときにはどうなる? DMAだし頻繁に更新されるし。
- A: サブリミナル的な広告になっちゃうかも。
- Q: プロセススイッチしないOSだと広告表示されない?
- A: yes. でもOSがちゃんと動かないよね。自爆テロじゃん。
- VMMで強制してでも表示したいもの→見たくないもの→広告 (まさにVMMで広告を表示するのは理にかなっている)
- trusted OS: ロールによって、見られてはいけないものを黒ぬりするようなものがあったはず。
[2012-12-04 15:17]
FFR GreenKiller - BitVisorをベースとしたカーネルマルウェアの自動解析システム / 村上純一(フォティーンフォティ技術研究所)
- AVAR国際会議2009年で発表してから時間がたってしまっているが。(AVARはアンチウィルス系の会議)
- 「FFRI リサーチ・ペーパー」で検索!
- ITproホワイトハッカー道場も書いた。
- カーネルモード(ring0)で動くマルウェアが増えている。Windowsのdigital signatureが付いてるのもどんどん出てきている。
- マルウェアがカーネルで動いてると解析がめんどくさい。問題がおこるとブルースクリーンになったりする。
- 解析手法: {ユーザモード,カーネルモード}x{静的解析,動的解析}
- どんどん新しいのがでてくるので、静的解析でマルウェアの知識を得て、動的解析できるようにして自動化する流れ。
- Anubis/report: ユーザモード+動的解析: サーバにアップロードするとサンドボックスで実行してレポートを出してくれる。
- Windbg: Windowsのカーネル/ドライバデバッガ。
- IDA pro: アンチウィルスの解析によくつかわれている。分岐やブロック構造を可視化してくれる。
- VMware上で動いているドライバをwindbg+IDAproで解析・デバッグできるようになってきている。
- カーネルモード+動的解析のところが品薄。でもニーズはあるはず。
- PsLoadedModuleList: ドライバの双方向リスト。これをみてAPIの一覧表をつくる。
- IopLoadDriverにブレークポイントをおくと、ドライバをロードするとGreenKillerが捕捉する。
- SoftwareBreakpiont(int3;0xcc)
- HardwareBP(デバッグレジスタは4つしかない)
- エントリポイントからディスアセンブルして直近の分岐命令にBPをおく。
- CodeTracing: 分岐のところで分岐判定して先のBPを置く。ログをとりながら。分岐を探す・分岐するか評価・分岐先にBP置くの状態遷移マシンになっている。
- ドライバはプラグインなのでコールバックを解析できないと意味がない。登録したコールバックにもBPを置かないといけない。KernelAPI一覧にどの引数がコールバック関数なのか知っとく。
- ステルスブレイクポイント: マルウェアが0xccをスキャンできないように。
- APIログはとれるが可視化して意味を取りだせるようにしたい。大量のログを見るときに自分の知ってる特徴を見いだせれば理解できるが、知らないとわからないという問題をなんとかしたい。
- Q: めちゃくちゃなことをするマルウェアはあるか?
- A: ほかのスレッドを書き換えて他人に悪ささせるようなものはある。書き込みを検出して他のスレッドもトレースしないといけない。情報を隠す系ではリンクリストを切って自分(モジュール)を見えなくするものがある。悪さするには最終的にAPIを呼ばないといけないのでAPIをみていればokのはず。
- Q: エージェントレスとは。
- A: 情報を貯めこむとか。カーネルの情報は外から得る必要があるが、ヒューリスティック(パターンマッチかなにか)で情報をみつけてくるとか考えられる。
[2012-12-04 16:14]
[2012-12-04 16:15]
BitVisorのためのマルウェアの検出機能 / 河崎雄大(電気通信大学)
- 既存のアンチウィルスの問題点:管理者権限があればアンチウィルスを無効化できてしまう。(低スペックマシン・金銭的な問題・意図せず・マルウェアにより)
- ATA(PIO,DMA)の書き込みをBitVisor埋め込みのシグネチャ(ClamAV)をつかってマルウェアを検出(Aho-Corasick)する方法。
- 起動時にシグネチャ・オートマトンを生成する。
- 検出時の動作: 警告を画面表示・ネットワーク遮断・シグネチャ部分をzero-fill.
- 動的シグネチャ更新
- ゲストOSからVMCALLで更新。電子署名を確認してから更新。
- ネットワーク経由。パケットフィルタリングして特定のパケットを捕捉して更新。現在はUDP/IPv4。BitVisorにTCPが実装されたらUDPやめるかも(笑)
- 素のBitVisorに対して20%のオーバヘッドだった(UNIX BENCH)。
- Q: ClamAVに比べて20件未検出だった原因は?
- A: ハッシュ検出を実装してないためではないか?
- Q: 最終的にはOS上でのアンチウィルスと同じ性能になるか?
- A: ファイルのハッシュ値による検出は難しそう(アイデアなし)。マルウェアによるアンチウィルス無効化を無効化できるメリットががる。ホストOSでのアンチウィルスよりも遅くなる。
- Q: パケット大量攻撃はふつうのDoS攻撃では?
- A: そうおもうので対処してない。
[2012-12-04 16:42]
[2012-12-04 16:43]
BitVisorへのシステムコールトレース機能追加によるマルウェアアナライザの実現 / 大月勇人(立命館大学)
- マルウェアに検出されないように。
- BitVisorは実マシンの環境をゲストにそのまま提供するのでQEMUなどに比べてVMMがマルウェアに検出されにくい。
- オーバヘッドが小さいので時間計測をつかったアンチデバッグがされにくい。
- 粒度の観点から命令よりもAPI、悪影響をあたえるにはsyscallが必要なので、システムコールのトレースを元にした挙動解析。
- スレッド(CR3)も区別する。
- Alkanet
- 戻り時にはユーザモードのスタックをみて何のシステムコールの戻りなのかを知る。
- 仮想メモリ・ファイルマッピング・スレッドはコードインジェクションに使われるので監視する重要性が高い。
- ツリー状に表示してスレッドの追跡をする。
- メモリレイテンシの性能が大きく落ちている: メモリ操作のフックのコスト・ログのバッファリング・IEEE1394のDMAで負荷か?
- Q: IEEE1394は簡単にできた?
- A: 初期化はWindowsにやらせている。なので隠蔽はできてない。Linuxのライブラリをつかって実装した。IEEE1394はBitVisor側でなにもしなくてよいのがメリット。
- Q: アンチデバッグはどのあたり? HWブレークポイントPつかってるし。
- A: デバッグレジスタ自体は隠しているがデバッグ例外は実装してなかったり、実行時間解析くらったりする可能性はある。BitVisorの特徴がなにかあるかもしれない。
- Q: ログからマルウェアの特徴を抽出する方法はあるのか?
- A: いろいろやってる.... (詳細はききとれず)
[2012-12-04 17:16]
[2012-12-04 17:18]
TwitVisor / 島田恭平(筑波大学)
- BitVisorがつぶやく https://twitter.com/vmm_ict
- 企業で管理者がPCを監視する目的でログを収集するアイデアを、それだけではおもしろくないのでtwitterにつぶやくことに。
- 複雑な実装はしない。
- 実装したもの: 3-way handshake, send/recv, shutdown, OAuth.
- 汎用的なTCP実装からはほどとおい。
- Q: 日本語ポストは?
- A: URLエンコーディングを実装したらできるはず。
- Q: BSDのTCPスタックをポーティングしないのは? 再送がないということでSYN floodingになってしまわない?
- A: 授業で何か作らないといけなかったのと、納期(発表)があるので。
- 移植するとOS APIに依存しているところを合わせるのがめんどくさかった。
[2012-12-04 17:47]
帰りは池袋経由で会社に戻って一服: フジパン ゴマンベール(101kcal,たんぱく質2.6g,脂質4.1g,炭水化物13.5g)*3。