BitVisor

いってきた: BitVisor Summit 7

IMG_20181128_100201IMG_20181128_100344bitvisorsummit7

[2018-11-28 10:30]

BitVisorの現状と今後 / 品川 高廣(東京大学)

  • スライド
  • 録画
  • BitVisor Summit を議論の場として提供していく。
  • 昨年は盛況だった。内輪じゃない人がおおかった。
  • 今年は招待講演がない。ちょっとネタ切れ。宣伝不足だった?
  • 今年10周年(2018/03)。
  • vThriiの近況
    • ネットブートとネットインスールのハイブリッド。
    • うれしいのはユーザじゃなくて管理者。
    • 大学中心にけっこう売れてる。合計5690台。
    • あまり競合製品がないので市場規模がわからないけど。
    • Macの方がデバイスドライバで問題がおきにくい。Winはつらい。
    • となるとお金をもってる大学しか入れられない?
    • 海外展開: MacのAdmin会議で宣伝するとか?
    • 東大の機器が2020年にあたらしくなるがMac miniに対応できるかな?
    • ARM対応はいつかやらないといけない。
  • 研究室
    • 査読付き論文 5本
      • Live Migration in Bare-metal Clouds
      • がんばって物理デバイスの状態を取得する。
      • CPUは簡単だけどIOがたいへん。
    • Unified Hardware Abstraction Layer with Device Masquerade
      • bitvisorがハードウェア抽象化することでOSのデバイスドライバを共通化できる。
      • たとえば物理デバイスをvirtioにみせる。
    • Distributed Denial of Service Attack Prevention at Source Machines
      • BitVisorのなかでBPFをうごかしてDoSを防ぐ。
      • 外からBPFで書かれたポリシーを送り込みたい。
      • 攻撃側のPCにポリシーを送り込んで攻撃を止めたい。
      • BPFなら安全。
    • FaultVisor2: Testing Hypervisor Device Drivers against Real Hardware Failures
      • デバイスドライバのバグをみつけるために、デバイスの故障をエミュレーション。
      • VMware ESXiのデバドラバグを発見した。
      • Nested VMに対応したのでHyperVisorのデバッグができるようになった。
    • 進行中 研究3件
    • 論文 VEE09の参照数が200件を越えた。
  • 普及活動
    • コミュニティを活性化したいが、
    • ちょっと敷居がたかい。(一般ユーザ向ではないので)
    • ひきつづき考えていく。
    • ML, slack がある。

[2018-11-28 10:53]

[2018-11-28 10:54]

BitVisor 2018年の主な変更点 / 榮樂 英樹(株式会社イーゲル)

  • スライド
  • 録画
  • NMI関連の問題の修正
    • VMMの処理のなかでNMIが来てるかチェックしてからVMRUNでゲストに戻るまでにNMIをくらった場合、NMIがインジェクトされず、次回VMMに制御が移ったときにインジェクトされる(遅れる)問題。
      • 一見、次のVMEXITのときにインジェクトできるので問題なさそうだが、
      • Windowsの再起動のときにCPU0がNMIを送信して、CPUnは割り込み禁止にしてMWAITしてNMIをまっていて、(VMEXITが発生せず)ハング。
      • 直前にチェックするようにして回避した。
      • AMD SVM: CLGI命令でNMIをマスクできる!のでVMRUNでゲストに戻った瞬間にVMEXITできてNMIチェックをすりぬける隙間が空かない。
      • Intel VT-x: スタックのリターンアドレスをみる。
    • 割り込みでVMEXITしたときにVMMの処理のなかでNMIくらったばあい、両方の割り込みをインジェクトすることができず、次回までNMIインジェクトが待たされる問題。
      • 一旦通常割り込みをインジェクトしてすぐにVMEXITさせることで解決する。
    • NMIハンドラ実行中からIRETまでのNMIはブロックされるが正しく処理できない問題があった。

(以降、話題についてゆけず orz)

[2018-11-28 11:28]

  • Q: Nested VMのときはNMIはどうなる?
  • A: guest vmmがNMIをハンドルしてくれるはず。
  • Q: VMCS shadowingはもっと簡単な方法があるのでは?
  • A: 昨年深井さんからもらったコードはクリアするだけのコードになってたが、いろいろ不具合がありそうだったのでコピーする実装にした。その方が速かった。
  • Q: 不具合対応は榮樂さん以外でもできる体制になってる?
  • A: 調査くらいなら他の人でもできている。
  • Q: AMD対応をがんばっているのはなぜ?
  • A: いまのところ製品としてはAMDには採用されたことはないが、サポートするといっているので、やらないわけにはいかない。
  • Q: 割り込み(NMI)のテストはどうやっている?
  • A: bitvisorのコードwo流用してNMIを起こすようにしてテストした。
  • Q: DPDKとかVT-dとかRDMAとかをつかうアプリ対応は? (マイグレーションのときとかどうする) (virtioをつかうものはbitvisorのvirtioのできしだい)
  • A: 考えてなかった。MacでファームウェアでVT-dを設定しているものがあり、bitvisorが立ち上がったときにはすでにVT-dが設定されている(おそらくfirewireのメモリ転送を止めるため)。 VT-dを無効にしている。
  • Q: 今回のバグを修正したものはつかえるか?
  • A: bitbucketのは反映されている。リリースはまだ予定はない。

[2018-11-28 11:42]

昼休み

IMG_20181128_115514

30分くらい寝た。

[2018-11-28 13:00]

Interesting Issues During NVMe Driver Development / Ake Koomsin(IGEL Co.,Ltd.)

(中学レベルの英語力しかないので理解できず orz)

  • なんとなく:
    • completion queueのエントリをコピーするときにsfenceいれないといけなかった。
    • appleのNVMeんUEFIファームウェアにクセがある。ファームウェアのコードがgithubにあったので参考にした。
    • NVMe各社のコントローラにクセがある。

[2018-11-28 13:20]

QA

[2018-11-28 13:23]

[2018-11-28 13:24]

BitVisorによるOSの見かけ上10倍速実行 / 大山 恵弘(筑波大学)

  • スライド
  • 録画
  • ここ数年は時間を操ることをやっている。
  • 筑波大学には端末室が20もある。端末は1000台以上。
  • vThriiがよくおちる 運用の問題もあるかも
  • ゲストOSの時間を速くする → TSCを増やして返す。
  • あるキーを押すと10倍になるようにした。
  • デモ: xclock, worldclock, amazon, youtube, top, wget, ping が速くなる。
    • youtubeは処理がおいつかなくなってコマ落ちしている。
  • 60倍にしても資源バウンドとか待ち時間バウンドでその速度で動かない。
  • なにのやくにたつ?
    • ソフトウェアの開発で短時間で確認する。
    • 低速にして動作確認(シューティングゲームとか)。
    • 長い時間経過がトリガになる処理の確認。
  • RDTSCでVMEXITして偽装する。
  • RDTSCはwindows,linuxでHPETやPITよりも優先してつかわれる。
  • TSC deadline: linuxが計時につかっているが、めんどうなのでまだ実装してない。linuxがつかっている。
  • RDTSCP: out-of-order実行されないRDTSCは実装してない。
  • ブート時のTSC calibrationのときには1倍速にしておくのが重要。
  • マルチコア対応: コアごとに時刻をおぼえている。
  • 修正は230行。
  • NTPは切っておく。
  • linux tsc=reliableをつけておかないとHPETにきりかわってしまう。watchdogが常にPITでTSCを監視している。
  • windowsはまだうごいてない。画面が真っ黒になってしまう。原因不明。
  • キー入力はキーリピートが10倍速になって操作が難しくなる。
  • コンテキストスイッチも10倍になってオーバヘッドがめだつ。
  • 関連:
    • CPUエミュレータの加速/減速機能ににている。
    • HyperSlow(仮想時間を速くしてマルウェアを動かなくする)
    • うさみみハリケーンの加速減速機能

[2018-11-28 13:50]

  • Q: linux fundationでカーネルをいじって速くするという話があった。jiffiesがあふれる瞬間をみれたり。デバイス周りのタイマとの整合性。USB1だとCPU依存。タイムアウトはあるかも。
  • Q: TCPのタイムスタンプとか。無駄に再送されてる?
  • Q: プロセスごとに時間切り替えはCR3でできる?
  • A: OSの時間管理をいじらないとむつかしそう。
  • Q: マルウェアの解析にはどうつかう?
  • A: 未来にならないと発症しないもの、sleepはスキップするとダメなものがあるのでsleepをスキップせずに早く終わらせたり。
  • Q: タイマー割り込みは?
  • A: 頻度は変えてない。
  • Q: DOSは?
  • A: DOSはだめかも。
  • Q: youtube: ビデオとオーディオの同期はどうなってる? ふつうはオーディオにあわせようとして速くならないのでは?
  • A: 音はミュートしていたのでわからない。
  • Q: 止められる? 逆まわしとか。
  • A: やってない

[2018-11-28 14:03]

[2018-11-28 14:04]

CTFVisor: BitVisorによるCTF作問・出題支援 / 松原 克弥(公立はこだて未来大学)

  • スライド
  • 録画
  • 背景:
    • プロジェクト学習(PBL)
    • CTF(Catch The Flag)
      • attack & defence: 脆弱性のあるシステムの攻防
      • Jeopardy: フラグ(隠されたデータ)を読み出す早さを競うクイズ
  • CTFは作問がむつかしい。
  • ログやダンプを渡して解析させることがおおい(キャプチャはやらない)
    • Network,Forensics,Stego
  • bitvisorが入ったUSBメモリを参加者に渡してパケットキャプチャをするところからやらせる。実環境での体験を提供する。
    • たとえば、CTFVisorの上でパケットを送信するとTCPヘッダのreserved領域にフラグを埋め込まれて、wiresharkでキャプチャして発見させる、など。
    • たとえば、ブートセクタを読むとフラグが埋め込まれたデータが返ってくるとか。
  • windowsだとVRAMを書き換えても画面キャプチャできない。
    • linuxならframebufferをキャプチャすればいける。
  • mrubyで作問できるようにしたい。
  • USBの通信も作文につかわれているので対応したい。

[2018-11-28 14:20]

  • Q: CTFはセキュリティがメインだが、そもそもUSBを挿すのは抵抗があるのでは?しかもハイパーバイザーが立ち上がるし。
  • A: 本格的なCTFよりは易ししCTFとか期末試験につかうとか、CTF初心者に向け。ログをみるよりは実際にキャプチャすることを体験させる。
  • Q: CTFやってるひとからするとUSBを解析されてしまう?
  • A: たぶんbitvisorを解析されてしまう。
  • Q: 画面に表示することでbitvisorが動いていることを示す電子透かしにできないか?
  • A: できるとおもうが、VRAMの書き換えは難易度が高い。
  • Q: デモで毎回リブートしていたのはなぜ?
  • A: intel graphicのドライバの関係。
  • Q: デバイスがいろいろだとbitvisorがうごかないのでは?
  • A: いろんなOSが動くが、いろんなマシンでは動かないというのがbitvisorの欠点...
  • 環境の流通としてのbitvisor: bitvisorでハードウェア環境をわたして、OSはユーザのものを使える。

[2018-11-28 14:32]

休憩

P1210681x

[2018-11-28 14:46]

TinyVisorによるVM間H/Wリソース動的譲渡 / 安岡 亮輔

  • スライド
  • 録画
  • tinyvisorとはVMが2つ(メインVMとサブVM)動くようにしたもの。ハードウェア分割してしまう。
  • タイマとか分割できないものは仮想化しているものもある。
  • 起動時にリソース分割して2つのVMが同時に起動してしまっていた。
  • 起動後にHWリソース分割できるようにした。
  • hotplug/unplugで資源譲渡する。
  • hotunplugするとHALT状態になるのでNMIを送ってvmexitさせる。
  • メモリはhotplugできるけどunplugできないのでhot-offlineをつかう。
    • hot-unplugは物理的に抜ける。
    • hot-offlineは使わないようにするだけ。
  • デモ(ひさしぶりに動かしたので手順ミスって失敗...)
  • サブVMの起動は1回のみ。サブVMのブートシーケンスを改良する必要がある。
  • 実行中に資源を譲渡するのは実装してない(サブVM起動時のみ)。

[2018-11-28 15:08]

  • Q: どういうときに使うとうれしい?
  • A: 先生にいわれたから。。。 VMM再起動で若返りさせるのにつかえる?
  • Q: DPDKではremoveではなくunbindだったような。
  • Q: 非連続物理メモリでもだいじょうぶか? hugepageがつかえない。
  • A: サブVMの方はアドレス変換しているのでだいじょうぶ。hugepageでもだいじょうぶ。
  • Q: 128MiB単位でしかonline/offlineできなかったような。

[2018-11-28 15:17]

[2018-11-28 15:18]

bitvisor.ko : BitVisor as a module / 味曽野 雅史(東京大学)

  • スライド
  • 録画
  • モチベーション:
    • 開発速度を上げたい
    • 仮想化によるオーバヘッドを下げたい
  • bitvisorは常に必要ではないかもしれない → 必要になったときだけ使う
  • デバイスの暗号化では最初から仮想化が必要だが、
  • オンデマンド仮想化: 必要なときだけVMMを挟む。
  • オンデマンド仮想化ネタは新しいものではない。
  • 関連研究:
    • VMX rootkit
    • Late launch (Intel TXT) コードサインの関係で生OSでブートしてからVMMをはさむものらしい。
    • カーネルモジュールでhypervisor: (ksm),bareflank,ShadowBox,HyperPlatform
  • やりかた:
    • (a) bitvisorをカーネルモジュールにする。
    • (b) カーネルモジュールからbitvisor.elfを読む。 (今回はこっちで)
  • bitvisorのUEFIのブートシーケンス:
    • firmware -> loadvmm.elf -> 2nd-loader -> init +start VMM -(VMENTRY)-> トランポリン -> loader.elf,firmwareにもどる
  • 関係しそうなところがたくさんありすぎるので、問題になりそうなところから順番に対応していく方針で。
    • UEFI func call
    • ACPIはいったん実装保留.. (どうせサスペンドさせたりしないし...)
  • - どうやって連続メモリを確保するか? いまはlinuxのブートオプションで特定のメモリ領域をつかわないようにしてbitvisor用の領域を確保する。
  • Application Processor(AP)
    • マルチプロセッサ環境でブートでつかわないCPUの方
    • cf BSP(bootstrap processor)
    • bitvisorは最初BSPしか仮想化してなくて、guest OSがstartup IPIで初期化しようとしたときに初めて仮想化する。
  • bitvisorがサポートしてない命令が実行されたらどうする? (隠蔽できないので)
  • ユーザ空間でどうやって実行するか? SMEP/XD bit のためカーネルモードからユーザ空間のコードを実行できない。
  • de-vitualization: ゲストがvmcallしてきて、vmentryしないで状態を復元してjmpでもどる。
  • 実装はまにあわず。
  • 余談: 開発では ubuntu on bitvisor on VMware workstation on Host の環境でやっているが、linux RAIDのコードがAVX512命令をつかっていて、そこでlinuxがpanicする問題がおきている。

[2018-11-28 15:44]

  • Q: (榮樂)ページ切り替え: 1ページにきりかえコードをおしこむコードがすでにある
  • A: (味曽野)参考にします。
  • Q: (味曽野)APで頻繁に同期してるのは?
  • A: (榮樂)キャッシュをさわるときは同期をとるようにマニュアルに書いてあるので。

[2018-11-28 15:47]

ベアメタルクラウドにおけるハードウェア保護に関する研究 & Advent Calendar について / 深井 貴明(元 筑波大学)

  • スライド
  • 録画
  • BMCArmor: A Hardware Protection Scheme for Bare-Metal Clouds
  • 実は去年のネタ。社会人になって手を動かす時間がとれなくなった。。。
  • 発表6回目。
  • bitvisorはseedsベースの話が多いが、今回はneedsベース。
  • ベアメタルクラウド=物理マシンを提供するIaaSクラウド
    • マシンの最大性能・物理ハードウェアを提供できるが、
    • OS非依存のスナップショットとか資源の多重化は不可。
  • ベアメタルクラウドだとfirmwareをさわれてしまう問題。
  • 起動しなくなったりファームウェアにrootkitを入れられてしまったり。
  • マシンのオーナーとOSの管理者が別なのはPCアーキテクチャでは考えてなった。
  • Permanent DoS,データ盗難・破壊。
  • ハードウェアの保護機構: 有効になってなかったり、脆弱性があったり、そもそも保護機構がなかったり。問題があったときの対応が難しい。
  • ファームウェアの書き戻しがうまくいくとはかぎらない。(すでの壊れてたり、rootkitが入っていたり)
  • 既存研究には検知はあるが防止はない。
  • 不揮発データへのアクアセス: メモリ, IO, コマンドキュー.
  • これをbitvisorでアクセス制限したり、有効になってない保護機能を有効化したり。
  • メモリはwriteだけ止める。readはパススルー。
  • IOはポート単位でread/writeをフックしてwriteは止めるreadはエミュレートする。
  • コメンドキューは止めたいコマンドをダミーコマンド(エラーになるような)に入れかえてしまう。completeキューにはエラーが返ってくる。実装が楽。
  • Intel CHIPSEC(検査ツール)で保護機構が有効かどうかチェックできる。
  • netperfでの性能測定では、オーバヘッドは少なかった。
  • 不要なVMEXITが多発。おなじページに保護したいデータと通常機能があるため。
    • intelは細粒度で保護かけられるようにするらしい。
    • 最近のデバイス(x540とか)だと1つのページにまざらないようになっている。
  • 研究の経緯:
    • 後輩が実験で全てのIOをランダムに改変する実験(デバイスドライバのfuzzing)をしてたらハードが壊れた(ノートPC 3台)。EEPROMを書き換えられてしまった?
BitVisor Advent Calendar 振り返り & 宣伝 & お願い

[2018-11-28 16:16]

  • Q: 不揮発データへのアクセス方法は、この3つだけか? 抜けはないか? (CPUを介さないファーム更新があるかもしれない?)
  • A: 単純なMMIOじゃなくてポインタをつかうようなものはあるかも。
  • Q: 毎回ファームウェアをロードするようなデバイスだと困るのでは? (スマホのカメラの画像プロセッサとか)
  • A: サーバがターゲットだったのでカメラとかはかんがえてなった。NICとNVMeを考えていた。GPUは考えてなかった。
  • Q: UEFI boot menuは対象か? だとするとインストーラが動かないのでは?
  • A: boot menuはBIOS ROMに保持しているので、たぶんだめ。ホワイトリスト形式で制御できるようにしたい。
  • ベアメタルクラウドはPCアーキテクチャベースだがIPMIとかRedfishとかである程度マシンの制御はできるはずだが周辺デバイスまでは管理できない。
  • 究極にはPCIやMMUにポリシーを書けるようにしないといけないだろう。

[2018-11-28 16:30]

[2018-11-28 16:31]

LT: Bitvisor will be dead / Kuniyasu Suzaki

  • 録画
  • T2 secure chip in Mac mini.
  • secure bootを強化したようなもの。linuxがブートしない(セキュリティをoffにすればブートするらしい)。
  • Apple_T2_Security_Chip_Overview.pdf
  • パスワードを27回まちがえると1時間待たされる。さらに間違えるとリカバリーモードになって、さらに間違えると消去される。
  • T2はマイクの電源は切るけどカメラを切らないのは裏がありそう。
  • bitivisorがMacに依存していると、これからたいへんそう。

[2018-11-28 16:36]

閉会

[2018-11-28 16:43]

P1210693x

いってきた: BitVisor Summit 6

京王線から南武線への乗り換えは久し振りだなぁ。余裕みすぎて9:15くらいに武蔵中原についた。

駅を出てぱっと目に入る富士通川崎工場の方にいってしまった。しまった。

imageimage

入口の守衛さんから事前登録しておいた名前でゲストカードをもらって入館。

imageimage

開錠はしっかり電源確保されていた。うれしい。ロビーに設置された無線LANは会場まで届かず残念。

[2017-12-05 09:59]

会場案内

[2017-12-05 10:02]

「BitVisorの現状と今後」 / 品川 高廣(東京大学)image

10:00-10:30(30分)
本発表では、最新のBitVisorに関する情報や、東京大学で運用しているvThriiの
運用状況についてお話します。
  • https://www.slideshare.net/shinagawa/20171204-bitvisor-summit-6-bitvisor
  • 今年も濃い話があつまった。
  • 未踏でbitvisorをやってる木村さんを招待講演
  • 発表者の層が拡がってきた
  • 参加登録者が増えてきた(初回なみ) connpassつかったためか新しい人が増えたっぽい
  • BitVisorとは: A Single-VM Lightweight Hypervisor
  • BitVisorは小さいのでセキュリティ的に有利 (KVMとかと比べて)
  • 準パススルー型 (一部だけフック(デバイスメディエータ)する以外はパススルー)
  • 2006年に開始、2009年にver1.0を公開。
  • BitVisor2.0の機能はもう榮樂さんしかわからない。。。
  • 東大での実運用 vThrii
    • 安定稼働している
    • MacのうえでMacOSとWindowsがうごいている
    • ローカルディスクの内容をアップデートしたい
    • ネットワークブートしつつ裏でHDDを更新できるので待たなくてもよい。
    • いちおう(ネットワークブートは重いので)夜間に月1で差分配信、4ヶ月に1回フル配信
    • 実はイメージをつくるのが大変。
    • イメージの切り戻し(rollback)はvThriiの標準機能
    • イメージをつくるときにIPをDHCPにするのを忘れて固定IPで配信してvThriiも使えなくなってインストールしなおし。
    • vThrii自体のアップデート macOSをアップデートしたらVT-d のアドレス変換のためで vThriiの対応が必要になった
    • パーティションサイズの変更
      • SSD 250GB くらいしかないのでソフトをインストールしてたら空きが足りなくなったので TMP領域を縮小した
    • vThriiは安定している
  • 品川研究室での活動
    • 査読つき論文2本
      • BMCArmor ベアメタルクラウドへの攻撃 不揮発性メモリを破壊/ウイルス感染される恐れ 不揮発性メモリの書き込みだけ準パススルーにすることで性能劣化を最小限におさえる。
      • Unified Hardware Abstraction Layer ... デバイスごとOSごとにデバイスドライバ書くのがたいへん virtioで統一したインタフェースを提供 Device Masqueradeで多様なデバイスに対応
    • VMMの若返り
      • VMMもメモリリークで性能が低下する(aging) -> とりあえずリブート
      • VMMを再起動しても上のVMは再起動したくない
      • TinyVisorでnested VMM。VMMを一時VMMにマイグレーションしてメインVMMを更新。
    • ベアメタルマイグレーション VMのマイグレーションはメモリ状態なのでマイグレーションは簡単 なんとかしてハードウェアの情報をマイグレーションする
  • BitVisor論文(VEE'09)のインパクト わりとインパクトがある google scalarで199件の参照数はなかなか
  • 今後の課題 無線LAN(メンドクサイ) ドキュメンテーション(榮樂さんがいろいろ書いてるのをまとめるとか)

[2017-12-05 10:33]

<招待講演> 「BitVisorをベースとしたカーネル解析プラットフォーム」 / 木村 廉(神戸大学)image

10:30-11:10(40分)
近年統合開発環境を始めとする多様なソフトウェア開発プラットフォームの登場
により、デバッグやテストといった作業は従来とは比較にならないほど高効率化
されている。しかし一方でデバイスドライバといったカーネルソフトウェア開発
においては、開発支援ツールが充実しておらず古典的なデバッグ手法を取らざる
得ないケースも多い。 そこでBiVisorをベースとしたカーネルトレーサー、デバッ
ガを提案する。 本システムではデバッグ対象のカーネルプログラムをBitVisor
上で動作させながらトレースし、それを元にデバッガで詳細な動きを追う事がで
きる。これによりカーネルソフトウェアのデバッグ効率を圧倒的に向上させ、早
期のバグ発見を支援する。 また既存のデバイスドライバの解析、脆弱性やバグ
の発見にも利用できる事を示す。

[2017-12-05 10:35]

  • Kernel Anylysis Platform based on Thin Hypervisor / @RKX1209
  • https://speakerdeck.com/rkx1209/kernel-analysis-platform-based-on-thin-hypervisor
  • 背景
    • Thin hypervisor ゲストシステムの監視を目的として軽量なhypervisor
      • sandobx, TCB削減, resource isolationの手間を省く.
    • カーネルの解析 静的なコード検証(linux driver verifier), エージェントをしこんでのIn-VMな動的解析, エミュレータやハイパーバイザーをつかったOut-of-VM
    • カーネルDBI (dynamic binary instrumentation for kernel)
      • 動的に検査コードをいれる メモリを監視したいならload/store命令の前後にコールバックをいれたり
      • 評価指標: performance concurrency reentrancy(監視コードがカーネルコードを使う場合) consistency(対象と解析データ整合性) availability(解析対象のバージョンに対する安定性)
    • drk いまのところいちばんよくできている In-kernel
  • kltracer: drkがkernel moduleだったのをVMM内にもってきて reentrancy向上 availability向上(複数linux version対応)
    • カーネルコードを実行するときだけ動的バイナリ変換(DBT)する
  • 設計/実装
    • システムコール(syscall/ssyenter) MSRかきかえてスタブにとばす
    • 割り込み IDTRをかきかえ
    • 例外処理 コールゲートをかきかえ
    • コードブロック(ベーシックブロック)をコピーして検査コードをついか
    • プラグインでコールバックを実装する(C++) 関連ライブラリはC++に移植した (実は未踏で時間があまったので。。)
      • static linkされる (ring -1でうごくダイナミックリンカはまだ存在しない。。)
      • Itanium ABIにしたがって実装 なぜかstd::mapをつかうとフリーズするバグが..
    • kltraceビルドシステム DBIエンジン・プラグイン・C++ライブラリ bareflankプロジェクトをベースに開発
  • 応用
    • timeless debugging すべての命令実行をトレースして記録 逆実行もできる qira(キーラ)がリファレンス実行
    • timeless debugging for kernel qemu -> kltracer lwipでリモートでみることもできる
  • 今後の課題
    • BitVisor for ARM? (組み込み業界向け)

[2017-12-05 11:06]

  • Q: MSR/IDTRにスタブをいれている理由は? exception bitを設定するとvmexitできて早くなるのでは?
  • A: それは知見ですね
  • Q: FJ: kltracerつかいたい
  • A: どこかのカンファレンスに出すタイミングで公開したい
  • Q: クローズドなソフトなデバッグに便利そう (ソースがあればKGDBでなんとかなりそうだし)
  • A: ですね
  • Q: nested VMでhypervisorのデバッグにつかえるか?
  • A: たぶん kltracer のフックにひっかからないけど、対応できるんじゃないかと
  • Q: ARM対応のモチベーションはどのくらい?
  • A: splatoonにあきたら。。。 今30%くらい

[2017-12-05 11:14]

[2017-12-05 11:16]

「BitVisor 2017年の主な変更点」 / 榮樂 英樹(株式会社イーゲル)image

11:10-11:40(30分)
2017年は、大規模PC環境向けOS配信管理ソリューションの開発に伴い、BitVisor
に含まれていた細かい問題が修正されています。その修正には、UEFI用ブートロー
ダーの改良、PCI configuration spaceアクセスの改良、一部環境で発生する問
題への対応などが含まれます。これらの変更内容について紹介します。
  • https://www.bitvisor.org/summit6/slides/bitvisor-summit-6-3-eiraku.pdf
  • ファームウェアドライバー切断機能 UEFIがデバイスをつかっていることがあるので一度来ってvirtioにきりかえ
  • UEFIブートローダ改良 パスワード認証 暗号化は未対応
  • PCI configuration spaceアクセス改良
  • Broadcom Thunderbolt Ethernet対応 macOSではPCIeブリッジのバスをいじっていた Windowsでは内蔵etherで対応済だった
  • デバッグ機能改良 dbgsh-uefi ieee1394logにリトライ機能追加
  • 一部環境での問題に対応 macOSでVT-dをつかっているのはどうやらアクセス制限するのにつかっているだけのようだ
  • バグ修正
  • コンパイル問題修正
  • 未解決問題
    • ACPIの解釈でいちぶ問題 ACPIを切ると回避できる

[2017-12-05 11:42]

  • Q: IOMMUをつかってbitvisorを保護するときに4GB以上のメモリをもっていると動かない
  • A: パッチ歓迎
  • Q: vThriiにも入る?
  • A: 基本的にはメンテコストをかけたくないので入るとおもう(というかすでに入っているとおもう) 一部のハック以外は。

[2017-12-05 11:46]

11:40-13:00 昼休み(80分)

駅ビルのマックで昼食。時間があまっていたのでQBハウス散髪。20分待ち。

image

「Implementation and Status of 'mruby in BitVisor'」 / 中田 裕貴(公立はこだて未来大学)image

13:00-13:30(30分)
現在のBitVisorでデバイスI/O監視などの機能を実装する場合,主にC言語でプロ
グラミングする必要があります.抽象度の高いオブジェクト指向スクリプト言語
をBitVisorの機能実装に使えるようすることを目指して,mrubyコンパイラと仮
想マシンをBitVisorへ組み込みました.本発表では,BitVisorへのmruby組み込
みの際に遭遇した課題とその解決法について紹介します.また,Rubyスクリプト
によるデバイスI/O監視の実装例を示し,BitVisorにおける Ruby言語仕様の有効
性について議論したいと思っています.

[2017-12-05 13:00]

中田さんはB2で授業を休めないため松原さん発表

@chikuwa_IT

  • https://speakerdeck.com/chikuwait/implementation-and-status-of-mruby-in-bitvisor
  • ハードウェアのプログラマグル化がすすんでいる SDN/ホワイトボックススイッチ/FPGAエクストリームコンピューティング
  • 組み込み用言語フレームワーク lua ELC micropython mrubyなど
  • なぜmrubyなのか? ruby大好きだから。
  • 技術的課題
    • libc, float, bitvisor API, mrib, mrbgem
  • libc
    • コンパイルしてみてないものを移植していく。(コンパクトなlibcをまるごと移植するのではなく)
    • mrb_allocate() BitVisor用意する
  • float
    • DISABLE_FLOATを指定しても完全には排除されず
    • とりあえず dummy のを用意 #define pow(x) (x)
    • やっぱりひどいので berkeley SofFloat をつかった
    • MRB_WIthout_FLOAT でできるようになった。
  • API
    • mrb_define_class_methodで呼べるようにラッピング
  • mirb
    • dbgsh経由でmirbにつながっている
  • mrbgem
    • 正規表現 mruby-pcre-regexp を移植
  • とりあえずうごいている。
  • mirbデモ
    • 出力はログにでるのがちょっと残念
  • TODO
    • 任意のmrubyのコードがBitVisorで動くのはいやなので、mruby VMを別プロセスにしたい。

[2017-12-05 13:21]

QA

[2017-12-05 13:24]

「BitVisorに「移植」する」 / 市川 遼(東京農工大学)image

13:30-14:00(30分)
BitVisorにLuaの処理系を移植し,LuaからBitVisorの機能を呼び出せるようにす
ることでそのインターフェースを提供する仕組み「LVisor」を提案した.その際,
libcだけでなくGLibなど外部のライブラリを移植する必要が生じ,大量に修正作
業が発生した.本発表ではLVisorの実装方法を通じて,BitVisorに新しくプログ
ラムを移植する汎用的な方法について説明する.

[2017-12-05 13:26]

@icchyr

  • LVisorの背景
    • 複雑な記述ができる
    • evalで動的にプログラムを追加
    • VMMに動的機能追加
    • VMI(Virtual Machine Introspection)があるとうれしい
  • Luaの特徴
    • 依存ライブラリがすくないとか
  • Luaはプロトタイプベースなので動的にメソッド追加
  • 実装方針 できるだけ Ring 0 ではうごかさないようにする。Luaを移植してからLibVMIを移植。
  • Luaのビルドシステムは単純なので移植がらく
  • 既存のlibc musl libcを移植した (eglibc, uClibc, newlib, musl libc)
    • stdout: __fwritex()をputcharで実装
    • stdin: 対応せず
  • LibVMIの移植
    • Glib,json-cにも依存
    • Xenをベースにdriverを実装
    • jsonが3MBと大きいのでtextに埋め込む方法はなんとかしたい(ファイルシステムがあつかえないので)
  • デモ

image

[2017-12-05 13:54]

  • Q: LibVMIをつかうのが目的だがLuaはなぜ必要なのか?
  • A: Luaをつかうことで複雑なことが書けるようになる
  • Q: BitVisorでつかう目的は?
  • A: パフォーマンスと現場で利用するには便利
  • Q: /tmpの例は timeobject timeuse問題があるのでは?
  • A: おっしゃるとおり
  • Q: Luaの新バージョンに追従するコストは?
  • A: musl libcでの対処がほとんどなので lua の改造コストはbitvisorのAPIをたたくところだけで少ない。
  • Q: libcを公開してくれるとうれしいけど、そうなるとBitVisorがOS化してしまうジレンマ

[2017-12-05 14:00]

「BPFを利用したBitVisor内部でのパケットフィルタリング」 / 味曽野 雅史(東京大学)image

14:00-14:20(20分)
ハイパーバイザ内でパケットフィルタリングを実行することで,ゲストOSによら
ない,強制的なフィルタリング可能になります.動的な設定変更が可能でかつ軽
量・安全なフィルタリングを実現するために今回BitVisorとBerkeley Packet
Filter (BPF) を組み合わせたフィルタリングシステムを作成しました.本発表
では,その技術詳細と応用例に関してお話しします.

[2017-12-05 14:01]

  • https://speakerdeck.com/mmisono/bpfwoli-yong-sitabitvisornei-bu-defalsepaketutohuirutaringu-plus-a
  • intermediate bufferをつネットワークAPIがある
  • BitVisorがshadow descriptorとshadow bufferをもっているのでpass moduleでフィルタしたらよい
  • BPFをつかう理由: 効率 JIT 十分な記述力 負方向のジャンプがない 検証が容易
  • classic BPF(cBPF; libpcap), extended BPF(eBPF; linuxでつかわれている; clang)
    • eBPFだとCで書ける
  • BPFプログラムの設定方法: VMcall, lwIP.
  • 1GbE
    • thruputは差が出ず
    • ping RTTはbaremetalとippassで差はあるがフィルタかけても悪化はしない。
  • eBPF Tracing in BitVisor
    • VMexit reasonの統計をとったりMMIOのアドレスの統計をとったり
  • デモ

image

[2017-12-05 14:20]

  • Q: 利用予定は? eBPFのコードをring -1になげこめるのは問題になるとおもう。jit spray
  • A: 利用予定はない。 検証はやろうとおもえばできる。
  • Q: 外部の関数を呼べるようになったらBPFはLua/mrubyになっちゃう?
  • A: 安全な外部関数しかよべないようにするのがふつう。
  • Q: VMexitでとれる情報は?
  • A: BitVisorからBPFに渡す引数しだい(基本的にはBPFでは引数しかみられない)

[2017-12-05 14:26]

14:20-14:40 休憩(20分)

「大学の教育研究用端末上でのベアメタルハイパバイザの運用」 / 大山 恵弘(筑波大学)image

14:40-15:10(30分)
筑波大学が全学の教育研究用に提供している計算機システム(全学計算機システ
ム)では,学内の16拠点に配置された1000台以上の端末でBitVisorベースのベア
メタルハイパバイザであるvThriiが稼働している.本発表では全学計算機システ
ムの概要,および,全学計算機システムの導入や運用で得られた経験について述
べる.

[2017-12-05 14:45]

  • https://www.bitvisor.org/summit6/slides/bitvisor-summit-6-7-oyama.pdf
  • 全学計算機システム 筑波大学全学の教育等(not 研究)のために提供されるシステム
  • 1000台以上の端末でvThriiが動いている
  • 筑波大学には31サテライトもある
  • OSのデュアルブート Win 10 Enterprise or Ubuntu
  • vThriiの採用動機
    • winとlinuxのデュアルブート・価格もそこそこ・性能もそこそこ・東大で実績
    • ネガティブな理由もない
  • 学園祭の広告に vThrii がでてた。だれ向け?
  • windowsは電源をいれて90秒でワードが起動する。linuxは60秒。初回ログインは10分たってもログインできないということも。
  • ユーザのプロファイル情報をとってくるのに時間がかかっている
  • 起動できなかったりフリーズしたらvProで再起動。だめならケーブルチェック。それでもだめならハード故障としてエスカレーション。
  • vThriiがはいることで障害の原因候補が1つふえるが、一般ユーザはWindowsを疑う(vThiiの知名度のひくさと存在感のなさ)。
  • 性能・互換性は導入前に評価した
    • ubuntuでUnixBench -> vThriiのオーバヘッドは0.1GHzくらいの差でしかない
    • Paranoid fish (Pafish)などでVM検出をこころみたが、ほとんどで実機と判定された。

[2017-12-05 15:11]

  • Q: (情報系の人は実は教育計算機はつかわないのですが)virtioはつかってない?
  • A: virtioになってる (NICは2このってるけど1つはvPro用になっている)
  • Q: 障害の統計(障害理由とか)はとっているか? 他大学での更改での参考になる。
  • A: とってない。スタッフの間では暗黙知がたまっているとおもうので報告したい。
  • Q: (ユーザは1,2年の共用課程)BitVisorならではの機能はあるか?
  • A: hypervisorがあることでのメリットがあるといいかも。一時的に実験用のOSを配るとか、いいかもしれない。
  • Q: 24時間稼働のところでwindows updateはどうなる? アンチウィルスは?
  • A: 端末ではwindows updateがうごかないようにして、vThriiでイメージを配布している。 アンチウィルスも週1でしか更新してないのでログインすると警告がでる。。。
  • Q: イメージは1種類?
  • A: 1種類。配信サーバは複数用意している。正確には図書館用のイメージが別途あったりする。long terml service branch(LTSB)をつかっているのでedgeはつかえない。
  • vThriiが起動しなかったときは都度イーゲル社に報告しているが、原因判明にはいたらず。

[2017-12-05 15:24]

[2017-12-05 15:26]

「Unsafe Nested Virtualization on Intel CPU」 / 深井貴明(筑波大学)image

15:10-15:40(30分)
Unsafe Nested Virtualization は,仮想化支援機能を用いる VMM をBitVisor
上で動作させる機能です.通常の Nested Virtualization と異なり,ゲスト
VMM に悪意がないことを前提に様々なエミュレーション処理を省き,比較的シン
プルな実装になっています.この機能はこれまで AMD CPU にのみ対応していま
したが,現在 Intel CPU への対応を進めています.発表では,Intel 対応にお
ける実装の詳細,現在の対応状況,および簡単な性能評価の結果について説明し
ます.
  • https://www.slideshare.net/DeepTokikane/unsafe-nested-virtualization-on-intel-cpu-83409391
  • L2 VM / L1 VMM / L0 VMM
    • L1にfull emulationのをもってくれば動くのはあたりまえ。仮想化支援で速度向上したい。
  • L2->L1にvmentryしたいときでもL0を経由している。
  • L1を信用してL0ではアドレス変換しない。
  • BitVisorはnon GPU(BSDライセンス)なはじめてのnested VMM。 bhyveはBSDライセンスだがnestedがうごかない。
  • 榮樂さんがAMD版(AMD-V)のnested VMMをつくったが、手間がかかるIntel版(VT-x)はあとまわしになっていた。
  • intel版はVMX命令が多い。
  • vCPUのマイグレーション 物理コアでキャッシュしているVMCSをVMCLEARしてメモリに吐かないといけない。

[2017-12-05 15:49]

  • Q: VMCSはふつうのキャッシュ?
  • A: VMCS専用のキャッシュ
  • BitVisor Advent Calendar 2017 がBitVisorのドキュメントになるので、みんな埋めてほしい。
  • ぎりぎりまで空けとくと、神が降臨して知らなかった情報が書き込まれるという。。。
  • VMCS shadowingはVMREAD/VMWRITEの肩代わりをしてくれるものらしい。

[2017-12-05 16:00]

「Introducing NVMe driver for BitVisor」 / Ake Koomsin(IGEL Co.,Ltd)image

15:40-16:00(20分)
In this presentation, we will talk about an overview of NVMe driver
implementation for BitVisor.

[2017-12-05 16:02]

(in English)(英語ききとり能力ゼロのため、発表はさっぱりわからずorz)

  • https://www.bitvisor.org/summit6/slides/bitvisor-summit-6-9-ake.pdf
  • admin queues と I/O queues がある。それぞれに submission queueとcompletion queueがある。
  • submissonQのtailに書いたらdoorbellたたいて、コントローラがheadから処理してcompletionQに書いて割り込みいれてホストが処理したらdoorbellたたいてhead更新、というながれっぽい。

[2017-12-05 16:19]

(QA in English...)

[2017-12-05 16:23]

ライトニングトーク(LT) 16:00-17:30

「自作OSもくもく会の紹介」 / cybozu 内田 image

[2017-12-05 16:28]

@uchan_nos

  • 低レイヤーの勉強会
  • もくもくとコード書くとか本を読むとか、相談したり

[2017-12-05 16:31]

[2017-12-05 16:32]

学会のの宣伝 / 産総研 秋山 image

  • Euro Sys
  • non-volatile memory

[2017-12-05 16:33]

[2017-12-05 16:35]

nested vm デモ / 深井

BIOSのプライマリを外部画面にしておくとgrabの画面が出せるらしい

bitvisor上でKVMがうごく

bitvisor上でVMware playerがうごく

[2017-12-05 16:42]

  • Q: 出荷しないならL0 VMMがBSDライセンスにこだわらなくてもよいのでは?
  • A: 神経質になるならクリーンルーム開発でGPLのコードを参照できないので、あった方がよい。

デモ

  • L0のBitVisorがうごいているのを確かめる方法がない。
  • dbgshはL1のがうごいているはず。
  • VMM 3段はむりだった。

フリーディスカッション

[2017-12-05 16:53]

自己紹介タイム

[2017-12-05 17:20]

クロージング

[2017-12-05 17:22]

懇親会@木村屋本店 武蔵中原

imageimageimageimage

終了タイムは23:00ということだったが終電が気になるので22時くらいに先に抜けてきた。

P1160348x

BitVisor Summit 5

一ッ橋から靖国神社を抜け歩いて25分だった。

P1110379P1110388P1110393

工事中で地上はごちゃごちゃしていたが、26階からはスカイツリーや新宿副都心がきれいにみえた(曇天だったけど)。

imageP1110397

昼飯は地下1階の食堂で。まとまって座れそうな席が奥のほうにあったので座ったらドア から風が吹き込んでクソさむいし、外の喫煙場所からガスが流れこんでくるし、空いているのには理由があった。

imageimage

受付はとくになし。

image

[2016-11-30 13:00]P1110398

「BitVisorの現状と今後」 / 品川高廣

  • 最近の動向
    • 東大で実運用開始
      • 1300台くらい
      • ユーザ数25000
      • 月1でイメージ配信をしている。夜に起動して配信。
    • IPSJ-ONE 高校生向け宣伝
    • CANONのプロビジョニングシステムで宣伝
      • 資源管理をどうするか(端末管理)
      • canon in campus device
      • vThrii Seamless : networkboot, persistent cache, install, freeze, 差分配信, rollback,
  • 課題:
    • nested VMができない・遅い。OSをインストールする演習があるので。
    • ハード依存: ストレージ(NVMeは調査中), ネットワーク。
  • 学術的成果
    • デバイスドライバはハードウェアの故障(ビット反転など)を想定してない(しきれてない)。ポインタがこわれたら? fault-injectionでHW故障をおこす。
    • ベアメタルクラウドで不揮発なものがあると困る(リブートでリセットできない)。NICとかファームウェアとか。MACアドレス書き換え防止。
    • 分散フィルタリング。のっとられた(攻撃側)PCにbitvisorがはいっていれば攻撃パケ ットを止める。
  • 今後の課題
    • WLANとか。
  • 筑波大にもvThriiが入る。

[2016-11-30 13:30]

[2016-11-30 13:31]P1110399

「BitVisor 2016年の主な変更点」 / 榮樂英樹

  • PCIeデバイスの割り込み:
    • INTx: INTA,INTB,INTC,INTDをメッセージでエミュレーションl
    • MSI: バス経由でメモリ書き込み
    • virtio-netではIDやベースアドレスレジスタを偽装、わりこみはスルー。MSIを隠す。→INTxがでないPCがある→MSI対応するしか。MSIはvirtioの仕様がわからないのでMSI-X で。
  • 性能改善
    • thread
      • spinlockにはfairness問題がある。lockfree版はまれにpanic。ticketlockは遅い。
    • nested paging
      • 2MiBページ
    • mm_lockレースコンディション
      • bitvisor 0.?くらい昔からのバグ。ページの状態繊維でlockしてないところがあった。
    • UEFI アラインメントが途中から必須になってた。
    • virio-netわりこみステータス
  • iMAC SDカードリーダ対応: nicとsdがマルチファンクションになってたが,bitvisorが かくしすぎてた。
  • EFI variableエラー
  • intel最新CPU対応 x2APIC
  • BitVisor 2.0
    • unsafe nested virtualization

[2016-11-30 13:53]

  • Q: ページテーブルつかいきったらクリアする処理はそのまま?(じょじょに差し替えるようにならない?)
  • A: yes.
  • Q: ばあたりすぎない?
  • A: 。。。
  • Q: 割り込み変換はドライバ発狂しなかった?
  • A: エッジトリガなのか、たまたまうまくいっている。

[2016-11-30 13:57]

[2016-11-30 13:57]P1110400

「Virtualize APIC accessによるAPICフック手法」 / 富田崇詠

  • マルウェアの挙動の正確な解析が重要 → Alkanet
  • 感染したメモリを経由してシステムコールが発行されたのかどうか判定したい。BTS(intelのBranch Trace Store)で関数の呼出階層を特定。
  • BTSはバッファあふれの可能性 → バッファあふれのタイミングで割り込み発生、蓄積 する。
  • LPIC LVT(Local Vector Table)を変更する必要があるがゲストOSにさわらせないようにするためAPICをフックする。
    • bitvisor MMIOフック (EPT violationで)
    • intel VT Virtualize APIC access (APICページアクセスでVM exit)
    • 起動時間を比較してみた → 大差なし
      • virtualize apic accessではVM Exitを減らすための機能がある(改善余地あり): TPR shadow, apic register virtualization.
  • TPR: 割り込み優先度でマスクするときの閾値 (優先度 = ベクタ / 16)
    • windows起動時の9割以上がTPR
  • TPR shadowはまだ起動中にとまってしまう。

[2016-11-30 14:20]

  • Q: shadow apicと物理apicのどっちでルーティングされる?
  • A: ?
  • Q: どうやって感染領域を知る?
  • A: マルウェアを感染させるときに既知。
  • Q: 非完成領域からのsysenterでもシステムコール自体を変えられてしまったらダメで は?
  • A: ?
  • Q: alkanetを回避する方法はある?
  • A: しらず。
  • Q: XPでも書き込み多い?だとするとshadowからリアルにも反映する必要があるので性 能はあまり改善されないのでは?
  • A: 書き込みが多い。。。

[2016-11-30 14:36]

休憩10分

[2016-11-30 14:45]P1110402

「xHCI Driver Implementation」 / Ake Koomsin

  • ((おれの英語力0なので聞き取れず))
  • MMIO registers: capability, operational, ex.capability, runtime, doorbell.

[2016-11-30 15:17]

  • QA

[2016-11-30 15:28]

[2016-11-30 15:29]P1110404

「TinyVisorを動作させる際に体験したエラーの共有,解説」 / 安岡亮輔

  • tinyvisorはbitvisor summit 2で発表されたもの。
  • tinyvisorを動かせる人が少ない。tinyvisorが動いたという報告は安岡が初めて。→ 増やして素人にやさしくしたい。
  • 半年かかってtinyvisorがうごくようになった。ハード依存が激しいため?
  • snprintf(buf, size, str) -Werror=format-string
  • AMLパーサ(NetBSD由来のコード)でパニック → PCを変えてみた → やっぱり原因不明(傾向つかめず)
  • 今後の予定: nested VM, tinyvisorの動的on/off, migration(VMMの動的update).

[2016-11-30 15:55]

  • Q: tinyvisorのVM0とVM1はいまでも非対称?
  • A: yes. VM1は補助的(機能制限がきつい) 上のVMM1が機能差を吸収してくれるのを期待。
  • Q: やりはじめた動機は?
  • A: VMMを動的にupdateするためにノード内マイグレーションをつかいたい。tinyvisor のon/off(パススルー)ができるとうれしい。

[2016-11-30 16:06]

10分休憩

[2016-11-30 16:15]P1110408

「BitVisor内蔵のlwIPでAlkanetのログ送信を試みる」 / 山下雄也

  • alkanet: アンチデバッグ機能のあるマルウェアでもスレッド単位で解析可能
  • IEEE1394でログを転送している → ハードをえらぶため ethernet版alkanet を開発中
  • UDP使用
  • lwIP(lightweight IP): bitvisorに移植されている。
  • VMMでip隠蔽するかしないかを選べる。TCPチューニング(MSS,sndbufなど)できる。
  • 性能測定(nic=pro1000)
    • tuning+ippassするとパフォーマンス向上
  • ARPで解決するまでパケット待ちキューサイズが1pktに設定されているためARP解決前に2パケット以上送信しようとすると上書きされてしまう。 → tcp_connect()をつかう。
  • UDPの場合はARP replyを待てるように改造するかqlenを伸ばすか。

[2016-11-30 16:38]

  • Q: IEEE1394でのスピードは?
  • A: 400Mbps。最新規格でも実測800Mbpsで頭打ち。
  • Q: ログがおいつかないケースはあるか?
  • A: 400Mbpsでおいつかないケースはるときいている。
  • Q: アンチデバッグとは?
  • A: VMCALLの反応をみるとわかる。ゲストがVMCALLをだしたらbitvisorは未定を返すよ うにする。時刻をみられるとわかっちゃうかも。
  • Q: NIC増やすと速くなる?
  • A: わからず。
  • Q: 10Gは? etherフレーム生送信すればできる
  • Q: syslogも送信できるようになっている。
  • Q: IEEE1394
  • A: メモリを直接読み書きしている

[2016-11-30 16:50]

[2016-11-30 16:50]P1110409

「BitVisor と KVM の性能比較の落とし穴」 / 深井貴明

  • BitVisorとKVMの性能比較時に陥いった問題の紹介
  • sysbenchでKVMが1kBアクセスがやたら遅い
    • タイマよみだしが頻発 → kvm-clockがおそかった。tscにするとはやくなった。
  • KVMは最大メモリ量がわからないのでメモリサイズをどうしたらいいかtry&errになってしまう。
  • KVM host64bit guest32bitだと 64bitの方がドライバやレジスタが多いなので速くなることも。
  • turbostat
  • processor.max_cstate=0にしてCステート下がらないようにしたらACPI idleが走って遅くなった。idle=pollが速い。oracleチューニング
  • EPTバッファあふれ
  • 割り込みが1CPUに集中してしまってもKVMが分散させてくれる。
  • YCSB ベンチマーク
  • 便利ツール: perf, strace/ftrace/dtrace, turbostat
  • iPXE,sshをつかって下まわり(baremetal/bitvisor/KVM)の切り替えを自動化しよう。

[2016-11-30 17:11]

  • Q: overcommit

[2016-11-30 17:14]

「BitVisor Advent Calendarについて」

  • コミュニティのもりあげ
  • ドキュメント
  • 2015年はそこそこ成功した。
  • 2016年は、まだカレンダーが埋まってない。

[2016-11-30 17:20]

  • Q: カレーンダーはあとから埋めてもよい?
  • A: 当日までに埋めるのが文化。
  • Q: 割り込みの分散は、baremetalでLinuxカーネルが分散させる機能が必要なんでは?
  • A: ふつうはHWがやるべき。やる価値はあるかも。
  • ネットワークではRSSがある。(割り込みをちらしつつ同じフローが同じCPUに行くよう に)
  • APICにアイドルCPUに割り込みなげる機能があったかも。

[2016-11-30 17:29]

フリーディスカッション

  • どこかにwikiみたいなものがあるといいかなぁ。
  • HWの動作確認リストがあるといいかな。
  • bitbucketだとダウンロード数が取れない? sourceforgeだと国別に統計情報がとれた りしたんだけど。
  • (オフレコ)機能追加を依頼できるところない?(iGEL以外で) 研究ネタなら大学ででき るけど、開発は未来大学では卒論修論で開発論文が認められている。
  • VM上のguestOSの具合がわるいときのデバッグ方法。
    • CONFIG_EARLY_PRINTK
  • bitvisor自体にデバッグ機能を入れてほしい。
  • 掲示板かなにかでクラウドソーシング?
  • iPXE: UEFIをkernel、initrdをimageに指定すると、ファイルがみられる。
  • floating pointをbitvisor内でつかいえないのはguestとぶつかるので。退避してbitたてたらok。
  • bitvisorのパッチをとりこむポリシーは決まってないなぁ。えいらくさんがパッチをとりこむときに修正するのでえいらくさんの時間がないととりこまれないという。

[2016-11-30 18:06]

檀上背後のカーテンをあけると夜景が。

BlogPaintP1110415image

市ヶ谷駅へ移動。。。

P1110416

BitVisor Summit 4

imageimageimageimageimage

朝は雨だったので電車が遅延ぎみ。予定より10分くらい遅れて到着。人生2度目(今年2度目)の女子大潜入。WLANは使えないという事前アナウンスがあったのでモバイルルーターをもっていったが、理学部3号館2FにはWiMAXの電波は来てなかった。いつものようにNexus7をdocomo 4G(IIJmioクーポン切れなので200kbps)でつないでおいてBluetoothでテザリング。参加者は20人ほど。

[2015-11-26 10:00]

「BitVisorの現状と今後」 / *品川高廣(東京大学) _1030476

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でマイグレーション。(仮想デバイスじゃないところが肝)
  • 東京大学への導入 (教育用計算システム 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」 / *榮樂英樹(株式会社イーゲル) _1030478

最近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が軽快に動作している。

_1030481

[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]

「ライブマイグレーション実装で体験したデバッグの解説」 / *深井貴明(筑波大学),竹腰開(筑波大学), 品川高廣(東京大学) _1030482

これまで,研究で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ソースが遅いので性能評価するときには注意。

_1030483

[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。

imageimage_1030511

[2015-11-26 13:01]

「不要なデバイスを無効化するハイパーバイザー DeviceDisEnabler」 / *須崎有康(産業技術研究所) _1030484

不要なデバイスを無効化するハイパーバイザー”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

_1030486

[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上の独自機能に対するテストの試み」 / *竹腰開(筑波大学) _1030489

プログラムの質を担保する手法の1つとして、プログラムとは別途記述したテストによりプログラムが仕様通りに動作するか確認する手法が一般に知られている。本発表では、BitVisor上に独自に実装した機能の開発過程において、vmcall命令を用いてゲストから当該機能を呼び出し動作を確認する事で簡易なテストを適用した試みについて発表する。

  • bitvisorでもテストしたいなぁ。
  • VMMのテストは困難
    • 内部構造が複雑・初期化コストが高いなど
  • 自分の実装したところだけでもテストしたい。VMMCALLでテストを呼べるようにした。
  • リファクタリングの助けになった・潜在バグがみつかった。
    • マルチコアのタイミングバグ(実は全コアのTSCは一致してない)
    • メモリリーク(異常系でメモリリーク→メモリ破壊)
  • テストハンドラをちまちま定義するのがめんどくさい
    • ゲストから任意の関数を呼べるようにしたい→ELFシンボル情報を見ればok
  • debug interactive shell で任意の関数呼出。
  • https://www.youtube.com/watch?v=up13acsw3UA

_1030490

[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シール配布など

_1030492

[2015-11-26 14:20]

「ADvisor機能を応用した有害画像の視覚的規制」 / *宮元景冬(電気通信大学) _1030493

近年では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」 / *米司伊織(筑波大学) _1030496

各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になった。

_1030497

[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通信を監視し警告するハイパバイザ」 / *平井成海(電気通信大学) _1030499

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
    • 通信の切断

_1030502

[2015-11-26 15:46]

  • Q: ハイパーバイザーで実装するメリットは? OSでもよくない? (脅威モデル)
  • A: ユーザによる無効化を難しくしたい。
  • Q: サーバ証明書のチェックは?
  • A: ルート証明書のストアとチェインの検証がたいへんだったので避けた。
  • Q: 公開は?
  • A: 機会があれば。
  • Q: wgetおそいのは?
  • A: transmit bufferがどうのこうのとシリアルに出てくるのが関係してる? (メモリコピーが多いので遅い?)

[2015-11-26 15:55]

休憩

デモセッション

[2015-11-26 17:00] _1030504

  • 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

_1030503

BitVisor Summit 3

寝坊して予定より15分遅い電車になり京王線は座れず、有楽町線ではA型ベビーカーにおとなしく座ってない中華系クソガキにガンガン蹴られ、芝浦工大についたら入る建物を間違え遠回り、結局5分ほど遅刻。

_1240987
image_1240988_124098920141121190843419_0001

「BitVisorの現状と今後」 / 品川高廣(東京大学)

DSC08227

BitVisor はSingle-VMというユニークな特徴を活かして、通常のハイパーバイザとは異なる様々な目的を実現するための汎用プラットフォームとして活用されることを目指しています。本発表では、まず BitVisor の現在のアーキテクチャの概要を説明し、次に BitVisor を活用した研究や開発をいくつか紹介します。また、BitVisor の今後の方向性についてもお話します。

  • クライアントからサーバへ
    • ベアメタルでも保護
  • ASPLOS2015に論文とおった。
  • 東大で特殊な応用
    • ついに大規模導入事例!
    • ECCS:教育用計算機システム
    • 1321台のiMac。MacOSXとWin7のデュアル。
    • DeepFreezeで再起動時に環境を復元している。
    • メンテナンス時はDeepFreezeを解除。閉館時にマシンはshutdownしているので自動起動させたい。
    • 問題:
      • iMacがwake on lanに非対応。
      • ファームにタイマ機能がない。
      • windowsの仕様でシャットダウン後のスケジュール起動しない(windowsがスケジュールを消している) → メニューからシャットダウンを消して対応! 再起動させてMacにしてからシャットダウンさせる → 学生はめんどくさいので電源ボタン長押しで止めちゃう orz
    • bitvisorで電源offをフックしてスケジュール起動を設定することで解決し。
    • まったくなにもしてないはずだが、ちょっと遅くなる。。
  • vThrii(ブイスリー): BitVisorの知財をもっている筑波大学が商用利用なら(けっこうな)金をとるっていったので名前変えた。
  • Q: サーバ向けとクライアント向けと分けていく? コードベースが大きくなってしまうとメンテコストが。。。
  • A: シンプルが売りなのでコア部分は大きくならないようにした。モジュールが(ディレクトリで)増えるだけの予定。

[2014-11-21 10:35]

「The Current Status of BitVisor 1.5(仮)」 / 榮樂英樹(株式会社イーゲル)

DSC08231

BitVisor 1.4は2014年5月にリリースされました。その後、これまでに多くの変更が加えられています。次バージョン1.5(仮)には、TCP/IPスタックの追加、ドライバーの指定方法の大幅な変更、性能改善などが含まれる予定です。これらの変更点について詳しく紹介します。

[2014-11-21 10:35]

  • PCIデバドラ
    • おおきく変わった。
    • デバイスをslotやclassで指定できるようになった。
    • そのほか多数
  • TCP/IP
    • network APIをつくった
    • lwIP: オープンソースの組込向けTCP/IP
      • NOSYSモードでのみで
    • 性能はモードによる。ippassだとゲストの割り込み処理で受信。BitVisorがポーリングしてもGpsにはほどとおい。。。
  • 性能改善
    • CPUIDが遅い。VMMなし81,BitVisor2887,KVM1700. VT-xのMSR(model-specific register)を必要なところだけ切り替えるようにした。
    • VM entry/exitの回数削減
    • スレッドスケジューラをロックフリーにしてスピンロックをなくした。(スタベーションすることがあった)
  • デバッグ機能
    • IEEE1394でログを対向のlinuxにおくる
    • UDPでsyslog。相手のMACアドレスは指定する。ARPしてないので。
    • vmmstatusでVMexitの理由を表示するようにした。
  • そのほか
    • ASSERTオフにしても式を評価するようにした。
  • BitVisor1.5は近々発表できるはず。例年は12月。..

[2014-11-21 11:06]

  • Q: コンフィグの変更はPCIのみ?マニュアルほしいです。
  • A: ドキュメントはigelでつくった1.1くらいまでのはあるけど、手間がかかるのでやれてない。。。

[2014-11-21 11:09]

「OSb: OSv on BitVisor」 / 表祐志(筑波大学),品川高廣(東京大学)

DSC08232

OSvは仮想化環境を前提に機能を最小化した軽量OSであり,既存VMM上で多くのLinuxアプリケーションを高速実行できることが確認されている.そこで高速な軽量VMMであるBitVisor上でOSvを動作させることでアプリケーションをより高速に実行できるかを探る.本発表ではBitVisorでOSvをサポートするための最小限の実装について説明する.

[2014-11-21 11:10]

  • BitVisor: たとえるならスライドガラス
  • OSv: たとえるならカバーガラス
  • くっつけてみた→OSb(オーエスビー)
  • BitVisorにVertioをいれた。
    • 理由: bitvisor summitだから。発展中のOSvをいじらなくてよい。管理はbitvisorで。
  • OSvのブートプロセスはふつうのOSとほぼおなじ。物理マシンで動きそうなイメージだが。
  • そのままだとACPIまわりでこける→一箇所なおしたらブートした。
  • でもデバイスはつかえない。
  • ディスクにインストールするのはめんどくさいのでネットワークブートにした。
  • ベアメタルのLinuxよりもOSbの方がCPU性能がでる。(単純ループで)
  • Para Pass-through Virtio
    • QEMUとかのvirtioをもってくるのはイヤだ。
    • pro1000の必要なところだけvirtioで、msi-xはスルー。
    • PCIコンフィグを偽装。
    • PIO空間も偽装。
    • 割り込みなどそのほかはパススルー。
    • virtio ringをエミュレート。
    • Tx: OSvはvirtioのringにデータをつっこむ→PIOたたく→BitVisorがpro1000のバッファにつっこむ
    • Rx: pro1000の割り込みはOSvにくる(パススルーなので)。それをフックしてVMexit。リングバッファにつっこむ。
    • netperf: OSb 816Mbps, Linux 941
    • VMexitが2箇所(送信PIOと受信割り込み)あるのが遅い理由。
    • Exitlessにするには? 1コアをホスト専有にしてしまう方法。VMexitでつかまえるのではなくポーリングで監視する。
    • 816→921Mbpsになったが、まだちょっとLinuxにとどかかない。
    • pingは速い! OSb 0.12ms Linux 0.16ms。
    • 最適化(今後):
      • pro1000からのデータをコピーしているのをzero copy化したい。VMDqがつかえないか。
      • 割り込みを減らす。
      • TCP offloading.
  • 10GbE/40GbEでやってみたい。

[2014-11-21 11:34]

  • Q: スループットはポーリングの頻度による? pingレイテンシが短かいし。
  • A: 全力でポーリングしてるので。intr moderationと関係する。
  • Q: 1コア専有するとトータルの性能は落ちる?OSvはエンタープライズなので1コアも減らしたくない?
  • A: ユースケースによる。IOが多ければ専有しても元がとれるかも。
  • Q: キャッシュミスが多くなるかも。
  • Q: BitVisorのコアとちがうコアでVMexitするとNUMAだと影響あるか?
  • Q: pro1000以外では?
  • A: virtioに近いからpro1000をえらんだが、他のでもだいじょうぶそう。さすがにinfinibandはむりそうだけど。
  • Q: linuxでもvirtioがうごく? そうするとbitvisorとlinuxでNICを共有できる?
  • A: 今はできないけど。
  • Q: リングバッファのメモリアクセスはbitvisorはフックできないので辛い?
  • A: SRIOVとかVMDqとかつかうしかないか。

[2014-11-21 11:44]

昼休み(80分)

3階の学食にてランチ。12時5分前だったので楽々着席。レシートをみると

  • エネルギー 993kcal
  • 塩分 4.5g
  • 赤 3.0 (たぶん肉)
  • 緑 0.9 (たぶん野菜)
  • 黄色 7.4 (たぶん炭水化物)

と書いてあった。塩分多いし野菜すくない。

image

めしくったあとは外に出て日向ぼっこ。日光あびてほんわかしてたら、背後からマクド臭。。。

_1250001

2階の生協で缶コーヒーを買って部屋に戻る。

_1250002

「BitVisor 用のストレージスナップショット機能の実装」 / 奥野航平,大月勇人,瀧本栄二,毛利公一(立命館大学)

DSC08233

スナップショット機能は,仮想マシンの状態を保存・復元する機能である.この機能により,仮想マシンを瞬時に元の状態へ復元できるようになる.現状のBitVisor には,このようなスナップショット機能が実装されていない.そこで,ストレージに対するスナップショット機能を BitVisor に実装した.この機能により,再起動によって仮想マシンの状態を復元できるようになる.

[2014-11-21 13:00]

  • とりあえずストレージを元にもどす。alkanetでマルウェアの解析をして改変されたのを元にもどしたい。
  • AHCIコントローラをエミュレーションする。
  • ベースディスクとスナップショットディスク(microsoft VHDを簡素化したもの)の2つを持つ。
  • concealドライバでスナップショットドライバを隠す。
  • 読み出し
    • guestのread reqはよこどりして、bitvisorがベースかスナップショットをreadしてguestに返す。geustが出したreadはそのままデバイスにいって、結果を破棄して、割り込みはguestにわたす。
  • 書き込み
    • guestのwriteではbitvisorのバッファに書かせる。
  • VHD:
    • LBA 48bit MSB16bitは無視。index 20bit, offset 12bit。
    • BAT: block allocation table.
    • 2MiBアラインメント
  • 課題
    • win7のブートで90秒ほど止まる。ディスクの接続を調べてるっぽい。
    • 1世代しか管理できない。
    • 割り込み待ちの時間。bitvisorで割り込みをエミュレーションすれば解決。
  • 1100行くらいでできた。

[2014-11-21 13:18]

  • Q: 90秒問題が解決したらつかえる?
  • A: IO待ち時間が長いのが問題。とても遅い。
  • Q: AHCIだけ?AHCI前に原始的なアクセスがあるとこまる?
  • A: レガシーでなんとかなる
  • Q: 2台に分けてるのは1台にできない?
  • A: 原理的にはできるが。1台をベースにして型番や容量をguestにまる見せしている。
  • conceleは空きポートとしてエミュレーションしている。現実装では。PIレジスタをエミュレーションする方法もある。windowsは90秒問題があるがLinuxではおこらない。謎。
  • Q: シャドウバッファへのコピーは減らせないか?ベースディスクのreadは直接できないか?
  • A: あまり考えてない。もともとのストレージドライバがバッファをつかうようになってたから。
  • Q: シャドウバッファの読み込み完了は?
  • A: ポーリング。
  • Q: どのくらいかかったか?
  • A: 資料探し2ヶ月、実装1ヶ月。趣味で。研究とはかんけいない。

[2014-11-21 13:27]

「BitVisor によるライブマイグレーション機構のNIC対応」 / 深井貴明(筑波大学),表祐志(筑波大学),品川高廣(東京大学)

DSC08234

OSのライブマイグレーションは,IaaSにおける事前メンテンナンスなどに用いられる技術である.ライブマイグレーション機能は主にデバイスを仮想化するVMMで提供される.しかし,デバイスの仮想化は性能劣化を生む.そこで,BitVisorを用い,デバイスを仮想化せずにOSをライブマイグレーションする機構を実現する.このうち本発表では,一部のネットワークインターフェイスカードの状態を転送する実装について述べる.

[2014-11-21 13:28]

  • ベアメタルIaaS: 高い性能があるがライブマイグレーションできない。
  • 既存
    • PCI-Pssthroughしながらライブマイグレーション or OSそのものに実装
      • OSに改変が必要なのでベアメタルIaaSに向かない。
      • ゲストOSからの実行なので事業者で実行できない。
    • コンテナ(dockerなど)
      • ゲストkernelを選べないのでIaaSにむかない。
    • ライブラリOS
      • 複雑な構成はむつかしい。
  • 物理IOデバイスの状態復元がむつかしい。。。
    • write onlyレジスタは書き込みを監視する。
    • read onlyレジスタはbitvisorがエミュレーションする。
  • (↑ここまでsummit2の話)
  • 今回RTL8169に対応した。
    • レジスタ・Rxヘッドポインタ・Txテイルポインタ。ポインタはreadもwriteもできない内部状態。
  • 受信処理
    • own bitたててhead pointerをずらす
    • 割り込み生成
    • OSはISR(intr status reg)をよむ。bitvisorはここをフックしてディスクリプタテーブルをスキャンして境界を探す。
    • OSはデータをよんでownbitをもどす。
  • 受信ポインタをずらすために移動元マシンから移動先マシンにダミーパケットを送りつける!
  • 送信ポインタは適当に送信するだけ。
  • 性能測定
    • スループットはbaremetal,vanilla bitvisor,proposl,kvmで違いほとんどなし。
    • 遅延: baremetal=vanilla bitvisor

[2014-11-21 13:51]

  • Q: テーブルスキャンはタイミングによってはずれてしまわない?
  • A: マイグレーションがおわったらNICを止めてしまうので、だいたいだいじょうぶ。全部ownbitがたってると困るので定期的にスキャンしている。
  • pro1000もポインタがreadできるらしいがwriteはできなかたかも。
  • Q: NICのloopback機能はつかえない?
  • A: わからない。
  • Q: MACアドレス
  • A: スワップする。EEPROMを書き換える。マイグレーション中は二人しかMACアドレス知らない状態になる。ダミーパケットを送るときはbcastを受け取らないようにしてる。
  • ポインタはOSもNICももっているので意識があってないとこまる。
  • Q: シャドウテーブルにしちゃう?bitvisorがOSとNICの意識をすりあわせるのは?
  • A: オーバヘッドはあまりかわらないかもしれない。あまりがんばるとvirtioでよくなっちゃう。
  • Q: OSにサスペンド・レジュームさせればどうか?
  • A: hotplugとかつかえるかもしれない。

[2014-11-21 14:06]

休憩

「ブランチトレース機能を用いたゲストOS上のプロセス観測手法」 / 大月勇人(立命館大学),瀧本栄二(立命館大学),齋藤彰一(名古屋工業大学),毛利公一(立命館大学)

DSC08236

最近のマルウェアは,他のプロセスのメモリ上に潜んで動作する.プロセスのメモリ空間内にマルウェアと正規のソフトウェアが混在するため,従来のプロセスやスレッドが発行するシステムコールを観測する手法では個々の動作の区別が困難である.そこで,本発表では,CPUに搭載されているブランチトレース機能により取得した分岐命令の情報に基いてシステムコールを呼び出したコードを特定する手法について述べる.

[2014-11-21 14:15]

  • タイトルにbitvisorがはいってない唯一
  • ほかのプロセスのメモリに潜んで動作するものが出てきた → スレッド単位ではマルウェア判定ができない。
  • どのメモリからsyscallが発行されたか調べる必要がある。
  • alkanet: スタックの戻りアドレスから得る。
    • 改竄されている可能性や、最適化で変わっている可能性がある。
  • BTS(branch trace store): intelにのっている。カーネルメモリに記録。フィルタ機能あり。
  • BTINT: バッファあふれたら割り込み。
  • bitvisorのトレースはいらない。ゲストのトレースがほしい。スレッド毎にトレースをとりたい。
  • windowsのページテーブルをむりやり書き換えてバッファを用意。windowsからは書き込み禁止にみせかける。
  • branchの記録のうちcall/retがおわっているものは消してスタックトレースを作成する。
  • 大域脱出・callが本来とは違う使い方・call以外での関数呼出に課題。
  • パフォーマンスは10%くらい低下。
  • LBRなど他のブランチトレース機能の活用。

[2014-11-21 14:31]

  • Q: マルチコアでもうごく?
  • A: いちおう考えている。ロックかけているのが速度低下の原因か?つかっているbitvisorのバージョンが古い。
  • Q: ROP
  • A: スタックトレースの形になってないものは解析できてない。BTS自体には問題がないが。
  • Q: Windowsのバージョンは?
  • A: XP。alkanet自体がXPべったりなので。いまwin7対応をすすめている。

[2014-11-21 14:38]

「BitVisor on KVM?」 / 竹腰開(筑波大学), 品川高廣(東京大学)

DSC08237

現在公開されているBitVisorは、KVMの上でnested VMとして動作させる事が出来ない。これをソースコードを修正する事でnested VMに対応させる事を目指して現在作業中である。現時点では、KVM上でのBitVisor自体の起動とmemtest86+といった単純なソフトウェアの起動には成功し、現在Linuxの起動に向けて作業を行っている。本発表では、KVMのnested VM環境におけるBitVisorの問題とその解決方法について、発表時点までに対応が完了したものを紹介する。

[2014-11-21 14:41]

  • デバッグの関係でlinux on bitvisor on kvmをやろうとしている。nested VM
  • KVMがサポートしているがbitvisorがサポートしてないとかある。LinuxがKVM用の最適化機能を発動して死亡するなど。
  • コードが書き換えられてることがあるので、disassする価値はあり。
  • no-scrollオプション: ドイツの点字リーダ向けの機能。スクロールのためのmemcpyで落ちてた。VRAMのwriteはできてるがreadができない模様。

[2014-11-21 14:57]

  • qemuだと動いてるらしい。
  • Q: KVM側の問題っぽいのはあったか?
  • A: いまのところバグっぽいのはない。

[2014-11-21 15:05]

休憩

パネルセッション

_1250010

[2014-11-21 15:20]

  • パネリスト: 品川高廣、表祐志、榮樂英樹
  • モデレータ: 松原克弥
  • コミュニティを活性化するためには?
    • 品川:つかう人を増やす。一般人向けではない。敷居が高い。簡単にインストールできるようにする。暗号化でなく応用を。
    • 表:軽くVM上で動かせるとよい。
    • 榮樂:開発者むけだから。
    • MLにパッチがきたことはほぼなし。
    • 榮樂: あまり使っているアピールがないのはライセンスがBSDなのもあるか。
    • インストールしたことない人挙手→3人くらい
    • インストールむつかしい。コンフィグの書き方はドキュメントはなくコード読め、になっている。
    • ハングオン的なものをやってはどうか。
    • 授業で強制的にBitVisorをつかわせる? OSを下から見れる。
    • BitVisorでIOを可視化するとか。なんとなく触るモチベーションとして。
  • 取り組むべき課題
    • 産業界からはARM対応の声がある。
    • 対応デバイスが限られてるとか仕様表に書かれてないところでひっかかるので、入れてみないと分からないところ。
    • 自分で組み立てると問題はおこりにくいがノートPCだとハマりやすい。
    • VMware上で動く動かないとか。Nested環境で動くようにする。
    • 一般ユーザがつかえるアプリをビルドして配布する。
      • full disk encriptionとか
    • boot optionがない。
  • 不満は?
  • リリース方法
    • 今はtar-ball配布、hg repoを公開すべきか? 著作権・特許がからむところは外したりする必要はある。
    • リリース間隔が伸びて活動が見えなくなってきている。
    • バグフィックスがリポジトリにあるのに公開されてない。
    • 基本公開する方向で。
    • 挙手: git/hgは半々

[2014-11-21 16:26]

_1250011_1250012_1250013_1250014_1250015_1250016_1250017_1250018_1250019_1250020

DSC08240

デモセッション

  • vThrii/igelのプロセス切り替えのデモ
  • ライブマイグレーションのデモ

[2014-11-21 17:25]

_1250021_1250025_1250026_1250030_1250033image

記事検索
月別アーカイブ
アクセスカウンター

    タグ絞り込み検索
    ギャラリー
    • フルグラ 抹茶あずき味
    • フルグラ 抹茶あずき味
    • フルグラ 抹茶あずき味
    • 今日の練習 2019-08-18
    • 今日の練習 2019-08-18
    • 今日の練習 2019-08-12
    Amazon
    楽天市場
    adby google
    LINE読者登録QRコード
    LINE読者登録QRコード
    • ライブドアブログ