- 2015-11-26
- お茶の水女子大学 理学部3号館207〜209室
- http://www.bitvisor.org/summit4/
朝は雨だったので電車が遅延ぎみ。予定より10分くらい遅れて到着。人生2度目(今年2度目)の女子大潜入。WLANは使えないという事前アナウンスがあったのでモバイルルーターをもっていったが、理学部3号館2FにはWiMAXの電波は来てなかった。いつものようにNexus7をdocomo 4G(IIJmioクーポン切れなので200kbps)でつないでおいてBluetoothでテザリング。参加者は20人ほど。
[2015-11-26 10:00]
「BitVisorの現状と今後」 / *品川高廣(東京大学) 
BitVisor はSingle-VMという特徴を活かして、通常のハイパーバイザとは異なる様々な目的を実現するための汎用プラットフォームとして活用されることを目指しています。本発表では、まず BitVisor の現在のアーキテクチャの概要を説明し、次にBitVisor を活用した研究や開発をいくつか紹介します。また、BitVisor の今後の方向性についてもお話します。
- 女子大での開催は最初で最後かも。ComSys初日は守衛さんにけっこう止められたらしい。
- 招待講演はむつかしくなってきたが、一般セッションは例年どおりあつまった。
- 来年はComSysの真ん中あたりで開催されるらしい。ComSysの参加者とかぶってないが、来年は混ざる?
- BitVisor1.5はまだでてない..昨年からcoming soonのまま..
- bitbucketでソース公開。githubをつかわないのはbitvisorが伝統的にhgをつかってるから。
- bitvisorでオープンになってないところもある。外部資金のとか特許のところとか。無料で非公開プロジェクトがつくれる。
- 2014-12-25公開。クリスマスプレゼント的な。
- コミット94件のうちほとんどは榮樂さん。フォーク4。プルリクエスト1件(しかも却下されてる。。。)
- 知名度を上げるために一般の人がつかえるようなものがほしい。
- コーディング規約はあってないようなものなので榮樂さんのコードを参考に。
- A-STEPプロジェクトで生き存えている。
- ASPLOS2015: bitvisorをつかったネットワークブート。
- ローカルディスクアクセスをネットワークに替えて、bgでダウンロードもする。
- ダウンロードがおわったらde-virtualizationする。
- UCC015: bitvisorをつかったライブマイグレーション
- 物理デバイスの状態をbitvisorでマイグレーション。(仮想デバイスじゃないところが肝)
- ASPLOS2015: bitvisorをつかったネットワークブート。
- 東京大学への導入 (教育用計算システム ECCS)
- 1341台のiMac。OSXとWin10のデュアルブート。集中管理したい。定期的なOS・アプリの更新。
- 商用版: vThrii Seamless Provisioning: 榮樂さんが再実装
- ATMoverUDP→TCPに変更
- virtioでNIC2つにした。ブート前から対応するにはパススルーではむつかしい。de-virtualはなし。
- bitvisorの論文の参照件数は順調に伸びている。
- 今後の課題
- デバイス対応とかやってほしい。プルリクして。
[2015-11-26 10:33]
[2015-11-26 10:35]
「Unsafe Nested Virtualization」 / *榮樂英樹(株式会社イーゲル) 
最近BitVisorに実装されたUnsafe Nested Virtualizationは、BitVisorの仮想マシンにCPUの仮想化支援機能を提供するものです。ゲストOS上の仮想マシンが直接ハードウェアにアクセスしないことを前提として様々なチェック等を省略しています。現在のところAMD-V限定ですが、基本的な考え方はIntel VT-xにも適用できるものと考えられます。
- Nested Virtualization: VM上にVMを動かす。
- AMD SVM: VMRUN/VMEXIT/割り込み/IOでVMMとゲスト遷移
- アドレス変換テーブルの管理
- VM上のVMのアドレス変換テーブルの面倒を一番下のVMMがみないといけない。
- VMCB(制御レジスタ)のデータ構造の変換
- 終了条件のORをとったりしないといけない。
- Intel VMCS, AMD VMCB: アドレス変換テーブル、IOビットマップ、MSR(モデル固有レジスタ)ビットマップ。
- Intelは専用命令をつかうのでそのタイミングで。AMDはメモリアクセスなのでシャドウ作成で。
- Unsafe Nested Virtualizationは準パススルーをつかって大幅に簡素化したもの。
- 暗号化対象デバイスはパススルーアクセスしないよね、などを仮定している。ふつうのVMは悪さしないと仮定。
- アドレス変換テーブルのシャドウをつくらないで済ませる。
- VMM領域へのアクセスもしないと仮定。
- Intel VT-xは命令数がおおくて未着手。アドレッシングも複雑。VMEXITはAMDならVMRUNの次からでよい。アドレス空間IDはAMDではCPUの判定なしでおk(VPID,ASID)→Intelめんどくさい
- NASID=0をbitvisorが使用。無駄なTLBフラッシュを回避。
- MSR:
- VMMCALLは実行されないものと仮定。
- 動作確認: VirtualBoxとLinux KVMが軽快に動作している。
[2015-11-26 10:55]
- Q: bitvisor on bitvisorはできる?
- A: 試してない。暗号化してるとパススルーしちゃう。
- Q: ネットワークも速い?
- A: LiveCDが普通にうごいた。
- Q: bitvisor on VMWareをやってみたことがあるが、nestedやる同期は?
- A: 商用利用でそういう話があったので手がすべってやってみた。デバッグ目的ではない。hypervとか。
- Q: 開発はqemuをつかった?
- A: 実機で。(最初は割り込みを禁止してるコードをけすのをわすれてた)
- Q: 商用化の時期は?
- A: まだ。
- Q: NASID=2の対応は必要?
- A: 三重のnestもあり。。
[2015-11-26 11:02]
[2015-11-26 11:03]
「ライブマイグレーション実装で体験したデバッグの解説」 / *深井貴明(筑波大学),竹腰開(筑波大学), 品川高廣(東京大学) 
これまで,研究でBitVisor にライブマイグレーション機能を実装する中でデバッグか難しいバグにいくつか直面した.例えば,Linuxゲストにおいて,init プロセスが segv で停止する,triple fault で停止する,といったことがある.今回の発表では,今後BitVisor で研究開発する方々の参考となるよう,このようなバグの原因と実際にとった対策について解説する.
- ライブマイグレーションするとマシン状態がどんどんこわれてしまう。パニックしなかったり。
- 物理ハードの状態をマイグレーション。
- InitプロセスがSegV
- Linuxもbitvisorもpanicしない。ログだけ。libcの中で死んでるっぽい。アドレスランダマイゼーションを止めてみて→
- SIMDもxorで落ちてた→SIMD状態のXCR0がおかしかった
- (SIMDつかってるのは文字列処理を高速化するためっぽい)
- SSEを隠すとLinuxがブートしない。
- bitvisorでSIMDを隠したらブート初期で止まってしまう→CPUIDあたりのコードを調査→64bit linuxではSIMD必須だった(ないとhalt)
- RIPが特定のポイントとのときだけSSEみせるようにしたらlinuxは動いた。。なんのためのverifyだったのか。。。(Javaは動かない)
- triple fault
- マイグレーション先でおこる。LKMLみるとsysenterがらみでおこるらしい。
- sysenter関係を送ってなかった。(32bitだとソフト割り込みだけど64はsysenter)
- 動くけど止まる
- マイグレーションして動いてるけど、出力がパラパラ。→タイマー割り込みが止まってた(スケジューラが動かないため)
- Preempt Timer
- Intel VTに定期的にVMEXITを発生させる機能がある。
- 定期的にbitvisorに落ちてきてマイグレーションするのにつかいたかった。
- ねらった間隔で来ない。でもこの機能をつかってる他のVMMがない。
- C2ステート以上ではタイマーが動かない。(C2はすぐに入っちゃう)
- linuxブートオプションでC2にならないようにして対応した。
- realtekのドライバで止まる
- RTL8169
- パニックせずに止まる。
- Rxのheadポインタがtailポインタを追い越してしまったのが原因。→ 空きディスクリプタがないので割り込みが無限に発生→DoS
- kvm-clockソースが遅いので性能評価するときには注意。
[2015-11-26 11:26]
- Q: qemunのマイグレーションやってた。バッファキャッシュを壊しててshutdownするときにディスクこわしてた。。
- A: iSCSIつかってるので
- Q: sysenterじゃなくてsyscallも?
- A: やってる
- Q: hypervisorのアップグレードにつかえない?
- A: ベアメタルクラウドでファームウェアの更新とか、ハードが壊れそうになったのを検知してマイグレーションとか。
- Q: 割り込みDoSになってるのはどう気づいた?
- A: ディスクリプタをprintデバッグ。
[2015-11-26 11:36]
昼休み
女子大だけどふつうの生協食堂。ちょうど昼休みの時間なので激混み。あたりまえだけど周りはJDばかり。メニューは小鉢多めな感じ。めんどくさいのでホイコーロープレートのみ選択。食品サンプルにも栄養が書いてあったがレシートにも書いてあった: エネルギー891Kcal,塩分2.6g,赤3.9,緑0.2,黄7.6。
[2015-11-26 13:01]
「不要なデバイスを無効化するハイパーバイザー DeviceDisEnabler」 / *須崎有康(産業技術研究所) 
不要なデバイスを無効化するハイパーバイザー”DeviceDisEnbler(DDE)”を提案する。DDEはbitvisorをベースにし、既存のOSに挿入できる軽量ハイパーバイザーである。DDEはOSがPCIやUSBのデバイスを認識する際に使う情報(Vendor ID, DeviceClassなど)を変更して、OSにデバイスを認識させない。DDEは攻撃者ばかりななく、利用者からもバイパスあるいは無効化される恐れがあるためにTPMを使った改竄防止機能を含める。
- 去年のbitvisor summitで話す予定だったがblackhatで通ってたので話せなかった。
- サイバーエスピオナージ
- インカメラで目に写り込んだ親指の動きをよみとるとか。
- ジャイロスコープで盗聴(20-200Hzのサンプリング)
- PCI configuration spaceのデバイスID,ベンダーIDがFFFFの場合はデバイスなしとなる。
- IO命令に介在してチェック+隠蔽
- BIOSでデバイスを無効にした場合もFFFFを返す。
- vendorID,deviceID,classIDでマッチング
- bitvisorにハードディスクの暗号化は持っているが、Windowsの起動を止めるのはちょっと困難。
- smss.exeだけを暗号化してbitvisorが介在しないとブートできないようにした。
- getFileExtents.exeでファイル→ブロック番号に変換してbitvisorが介在。
- Windowsのリカバリ機能が勝手に修復してしまう。再インストール攻撃も同じ。(対策はあきらめた)
- 暗号鍵の隠蔽にはセキュリティチップTPMをつかった。正しいbitvisorでないと鍵を取り出せないようにした。
- TPM non-volatile storageのアクセスにはPCRハッシュ値を知らないとアクセスできない。
- USBデバイスは今後対応
- https://www.youtube.com/watch?v=zFghX8Y0-qk
[2015-11-26 13:30]
- Q: デバイスのインタフェースがマルチの場合、IDで区別できないのでは?
- A: 今は機能単位で認識できるようにする予定。(シリアル番号よりは強力なものをつかって)
- Q: BIOS updateしたときは?
- A: 計測しなおし。
- Q: ゲストOSまでtrust of chainをつなげられる?
- A: いまは作り込んでない。原理的には可能。
- Q: スマホでもvendorID,deviceIDでの区別はつかえる?
- A: できるはず。Androidは知らず。
- Q: FFFFでもアクセスしにきたら?
- A: 現状隠してないのでアクセスできちゃう。
[2015-11-26 13:35]
[2015-11-26 13:37]
「BitVisor上の独自機能に対するテストの試み」 / *竹腰開(筑波大学) 
プログラムの質を担保する手法の1つとして、プログラムとは別途記述したテストによりプログラムが仕様通りに動作するか確認する手法が一般に知られている。本発表では、BitVisor上に独自に実装した機能の開発過程において、vmcall命令を用いてゲストから当該機能を呼び出し動作を確認する事で簡易なテストを適用した試みについて発表する。
- bitvisorでもテストしたいなぁ。
- VMMのテストは困難
- 内部構造が複雑・初期化コストが高いなど
- 自分の実装したところだけでもテストしたい。VMMCALLでテストを呼べるようにした。
- リファクタリングの助けになった・潜在バグがみつかった。
- マルチコアのタイミングバグ(実は全コアのTSCは一致してない)
- メモリリーク(異常系でメモリリーク→メモリ破壊)
- テストハンドラをちまちま定義するのがめんどくさい
- ゲストから任意の関数を呼べるようにしたい→ELFシンボル情報を見ればok
- debug interactive shell で任意の関数呼出。
- https://www.youtube.com/watch?v=up13acsw3UA
[2015-11-26 13:53]
- Q: iPXEブート?
- A: iSCSIをlocalにみせるようにしてbitvisorをロード。(テスト用にマシンが1台必要)
- Q: 電源操作は?
- A: ビルドがおわったらゲストでリブートか、IPMIか。
- Q: vmcallはユーザが呼べる
- A: yes.
- Q: ユニットテストじゃなく全体テストの場合は時間がかかるのでは? (モバイルではテスト用のファームがある)
- A: リブートのコストが高いので、テストして状態が壊れてなさそうだったら、別のテストを続行するとか、preempt timerで監視したり。
[2015-11-26 14:01]
休憩
BitVisorシール配布など
[2015-11-26 14:20]
「ADvisor機能を応用した有害画像の視覚的規制」 / *宮元景冬(電気通信大学) 
近年ではPCの普及により家庭でのインターネット利用が非常に容易である。それに伴い、青少年の有害サイトへのアクセスと有害画像の閲覧が懸念される。また、無害サイトにおいても有害な広告が数多くみられる。 このように、ウェブサイト上に現れる有害画像を規制するシステムを、BitVisorの既存システムであるADvisor機能を用いて作成することを目標とする。
- 青少年が有害画像を閲覧しないように。
- ブラウザ以外も対象にしたい。
- ADvisorで肌色をぬりつぶそう→VRAM領域をみて肌色の範囲(RGBをHSVに変換)にはいってたら黒にするだけ!
- 浮動小数点がつかえない
- CR3レジスタの一定回数更新されたら黒塗り実行
- 問題点
- オーバヘッド。ブートが3.5倍くらい時間がかかるようになってしまう。
- 一瞬見えてしまう。(バッファを塗り潰せないか?)
- 動画はムリ。
- https://www.youtube.com/watch?v=L9SNce41Pc4
[2015-11-26 14:36]
- Q: HDCPのような著作権保護がかかってるやつ(モニタまで暗号化される)のは対応できないのでは?
- A: 動画は範囲外なので!
- Q: 画面を頻繁に更新するものだけが遅くなる? CR3をみてるところが悪い? CR3と画面書き換え回数に相関なさそう。
- Q: CPUの使いかたを工夫してはどうか?
- Q: 回避法はあるか?
- A: モノクロにしちゃう?
- Q: 本質的なところで問題がありそうな。
[2015-11-26 14:46]
[2015-11-26 14:48]
「drivisor internal: How to conceal and disguising real device」 / *米司伊織(筑波大学)
「Holy Device unification of Antioch and How to achieve that? The Implementation status of virtio-modern」 / *米司伊織(筑波大学) 
各OSでたくさんのデバイスドライバを用意しなくてはならない状況により新しいOSの参入が難しくなっている。この問題を解決するため、bitvisorを用いて各種デバイスを同じ種類のデバイスに見せる。今回は実証のため、Intelのギガビットイーサをvirtio-netのデバイスに「偽装」する。本発表ではその具体的な方法を解説する。
- OSをつくりたいけどドライバ書くのはいやだ。
- すでに人類はドライバを書き飽きた。Linuxカーネルは半分はドライバ。
- virtio: デバイス仮想化のデファクト・スタンダード。仮想化ではデバイスはメモリ上にあるので豪勢につかって簡単にしよう、という発想。
- OSノイズをなくすのにつかえたり。
- Vring: 双方向リンクのリング
- virtio legacy → virtio 1.0 (FreeBSDはまだ対応してない; Linuxはlegacyの方を優先してつかってくる)
- デバイスIDがちがう。capability list(PCIeで必須)をみる。
- legacy: BAR(PIO)
- 1.0: VringがVqueueになった。
[2015-11-26 15:13]
- Q: ioMemoryとは? ストレージとはちがう?
- A: io*riveみたいなやつだとおもう。
- Q: legacy はbitvisorに入っている。MMIOでどうなる?
- A: ゲストにハイバーパイザーが用意したコードを実行させることができるようになる。
- Q: OSvをbitvisor上で動かすやつのと同じ流れ?
- A: yes。物理デバイスをマイグレーションするよりもvirtioのほうが簡単とか。
[2015-11-26 15:23]
[2015-11-26 15:24]
「SSLWatcher: SSL/TLS通信を監視し警告するハイパバイザ」 / *平井成海(電気通信大学) 
SSL/TLSによる暗号化通信は電子商取引等において広く利用されている. SSL/TLSによる暗号化通信では, 始めに暗号化アルゴリズムとハッシュアルゴリズムの組み合わせである暗号スイートが, クライアントとサーバのネゴシエーションによって決定される. SSL/TLSがサポートする暗号スイートの中には脆弱なものが含まれているが, 不適切なサーバ設定などによりそのような暗号スイートの利用を許してしまうサーバがあることが知られている. また利用者がSSL/TLSに関する表示を見てもすぐに安全かどうかを判別できないため, 脆弱な暗号スイートを利用されてしまった際に安全性が低下する危険性がある. 本研究ではPCのセキュリティ向上を目的としたハイパバイザである, BitVisorを利用することでOSに依存せずにSSL/TLS通信をキャプチャし, SSL/TLSの安全性が低下するような通信を発見した際にディスプレイに警告を表示するシステムであるSSLWatcherを提案する.
- FREAK,Logjamなど脆弱性がみつかっている。弱い暗号をつかわされたりする攻撃があったり。
- 安全じゃないSSL/TLSを検出して警告したい。
- TCPの再構築が必要になる。(lwipは入っているが再構築につかえず、libnidsを移植した)
- OpenSSLには強度がある: NULL,EXPORT,LOW,MIDIUM,HIGH。
- 強度や鍵長が短かいときにADvisorで警告を出す。bitvisorのメッセージ機能をつかって警告をださせる。
- 性能: iperf約28%の性能低下(素と比べて)。wgetだとなぜかHTTPでも性能低下してしまった。
- IDS/IPS: ネットワークを監視するのでトポロジに依存。
- 課題
- CCS Injection
- 通信の切断
[2015-11-26 15:46]
- Q: ハイパーバイザーで実装するメリットは? OSでもよくない? (脅威モデル)
- A: ユーザによる無効化を難しくしたい。
- Q: サーバ証明書のチェックは?
- A: ルート証明書のストアとチェインの検証がたいへんだったので避けた。
- Q: 公開は?
- A: 機会があれば。
- Q: wgetおそいのは?
- A: transmit bufferがどうのこうのとシリアルに出てくるのが関係してる? (メモリコピーが多いので遅い?)
[2015-11-26 15:55]
休憩
デモセッション
- igel vThrii Seamless Provisioning で端末の遠隔アップデートのデモ。(OSプロビジョニング・システム)
- bitvisorベースなので上のOSに依存しないので、windowsでもmacでも可。
- 競合製品: Citrix PVS, アルファシステム V-Boot, Panasonic OSV-VHD boot
- Windowsしか対応してない製品がほとんど(V-Bootはlinuxも可)。Macはnetbootのみ。WindowsとMacで管理システムが別になってしまう。
- 開発側はOSのアップデートをキャッチアップしていく必要がある。
- 1回目のブートはネットワークから取ってくるので速くない(遅くない)が、
- 2回目以降はローカルディスクに書いてあるので速い。
- 1つのファイルサーバでだいたい100台くらいさばける。
- ネットワークだけvirtioが入っているが、それ以外のデバイスはパススルーなのでオーバヘッドがない。
- ネットワークを仮想化したのはOSがブートする前にアクセスする必要があるため。
- ネットワークは仮想化した方が速くなるオマケつき。
- メモリフットプリントは128MBと小さい。競合製品は大きいのでメモリを積み増しする必要がある。
- サーバからディスクイメージをコピーするのはOSがアクセスしてきたときとOSが暇してるときに裏でも先読みでダウンロード(バックグラウンド・インストール)する。
- 暇かどうかはディスクIOとMWAIT(カーネルスケジューラが寝るのにつかっている;HLTはつかってない模様)をフックして判定(CPUステートはみていない)。
- bitvisorにキラーアプリがないということでセキュリティ関係であれこれやってきたが、これは1つの解(セキュリティと関係ないけど)。
- ノートPCでWLANだと性能が出ないが、P2Pネットワークで配布できるとおもしろい。
- 差分アップデートで必要なところだけコピーする。OSを切り替えるようなケースでは全コピーになる。
- 古いバージョンに戻すのもできる。
- GPTはパーティション情報を末尾にも置くので、修理でディスクが交換されたときにサイズが変わると困るので、ちょっと細工した。(CRCもいじらないといけない)
- ディスクイメージ転送中にスリープするとダメなのでスリープサポートしてないとOSに見せてる。サスペンドはたぶんだいじょうぶ(だけど客にはダメといってある)。
- OSの選択はクライアントでやってるが、管理サーバから設定をつっこんでいる。
- ディスクイメージ転送プロトコルは独自。
- bitvisorのネットワーク速度は300Mbpsくらいしかでてない(Gbps出てない)が、一斉にブートしたときにはどうせサーバ律速になるので無問題。
- ゲストOSのネットワーク速度は限界まで出てる(930Mbpsとか)ので問題ない。
- https://www.youtube.com/watch?v=H2s9khCITUw