BitVisor

BitVisor Summit 11

東大柏キャンパスはまだ行ったことなかったので、せっかく現地参加ありなので行ってみることに。しかし遠いな。上溝から東大柏キャンパスまで片道2.5時間。交通費も片道1500円弱。(産総研つくばだと東京駅から産総研前まで高速バス一本でいけるので便利がいいんだが)

P_20221207_111132

柏の葉キャンパスから東大まではシャトルバスで。「図書館に行きます」と行ったら乗れた。

P_20221207_112702P_20221207_113820

P_20221207_114905P_20221207_115049

1時間前に着いたので食堂「プラザ憩い」で日替わりランチ(590円)。混雑してるかとおもったら案外空いてた。食べおわったあと、となりの食堂「カフェテリア」をみにいってみたらこっちは行列ができるくらい混んでた。ぱっとメニューをみたかんじこっちの方がボリュームがあるからかな。

P_20221207_120923

現地参加7人。

[2022-12-07 13:00]

開会挨拶 / 品川 高廣

  • armがでてきたのは時代のながれ
  • bitvisor論文(VEE'09)は参照数がここ1,2年で増えてきた。セキュリティ関係か。

P_20221207_130430

[2022-12-07 13:09]

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

  • nobody cared問題の対応
  • intel nic e1000e
  • broadcom nic
  • PKRU state
  • moveabs
  • DMA_...
  • earlyprintk
  • msgregister
  • NVMe ANS2
  • NVMe namespace
  • SQLiteの時刻
  • https://bitvisor.sf.net
  • 新機能としてはearlyprintkくらい。
  • TEEとかSGXとかSEVとかVMMでは対応が必要?
    • VMMがなにかしようとしない限りはなにもしなくてよいはず。
    • いまのところ用途がおもいつかない。
    • メモリがどうつかわれるかはbitvisorからはわからないし。
    • single vmなら暗号化するのありかなぁ。(考えてないわけではない by 品川)

[2022-12-07 13:38]

[2022-12-07 13:40]

BitVisor on Aarch64 / Ake Koomsin(株式会社イーゲル)

英語リスニング能力ゼロなので雰囲気だけ感じた

  • demoあり

[2022-12-07 14:16]

  • QA

[2022-12-07 14:22]

休憩

[2022-12-07 14:32]

Thin Hypervisor on AArch64 / 森 真誠(産業技術総合研究所)

MilvusVisor 今年の進捗

[2022-12-07 14:51]

  • 高速リストアでPOSTとUEFI初期化がなくなってFX70ではブート時間が半分になった。
  • 性能としては高速リストア(カーネルの入れ替えはできない)とkexecとの比較
    • 高速リストアの目的としてはユーザがkexecでカーネル入れ替えても元にもどせる。
  • SIGOS 9月 http://id.nii.ac.jp/1001/00220014

[2022-12-07 15:00]

[2022-12-07 15:01]

BitVisorであやつるコンテナネットワーク / 中田 裕貴(さくらインターネット株式会社)

  • スライド
  • sandbox
    • kata: 起動が遅くなる
    • gvisor: アプリがおそくなる
  • sandbox tailoring
    • アプリにあわせて隔離する(過剰にならないように)
  • subaco: ネットワーク隔離
  • TCPは性能が落ちないがUDPはけっこう落ちる
  • nginx,memcachedはsubacoで速くなる(隔離の範囲が狭いから当然ともいえる)
  • virtio-netがスケールしないとコンテナ隔離でつかえない

[2022-12-07 15:31]

  • busをふやすのはpci bridgeをつくる時間がなかった
  • 基盤系の研究は有用性を示すのはけっこむつかしい
  • bitvisorのvirtio-netはメモリコピーを盛大にやっているが、subacoではいろいろコピーを削除している。

[2022-12-07 15:39]

[2022-12-07 15:40]

閉会

トイレにいったら帰りシャトルバスがちょうど行ってしまったあとだったので1時間弱ちんたら仕事して時間つぶしするなど。

P_20221207_160913P_20221207_163954

帰りのシャトルバで 先を告げよう と「駅に行きます」といったらハァって顔されたので「図書館です」っていったら何とか通じた。シャトルバス運行案内シャトルバス時刻表にちゃんと帰り方を書いておいてほしい。

P_20221207_170049

P_20221207_170152

いってきた: 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

いってきた: BitVisor Summit 2

_1130520

新宿→市ヶ谷→豊洲経路で。途中、新富町でたくさん降りる人がいたがなにかあるのかな。はじめての豊洲。だだっぴろいところに高層ビルが林立してる感じ。

_1130502_1130504

芝浦工大の教室棟のエスカレータを登って会場へ。すでに講義がはじまってる。ガラス張りなので中はまるみえだ。みんなまじめに聞いてるように見える。さすが朝から勉強するやつらは違うぜ、と自分が学生だったころを思いだしながら。

_1130509

10:00-10:10
[2013-12-06 10:01]_1130511

オープニング

  • 開催趣旨 前回と同じ
  • bitvisorを題材とした低レイヤーの交流をはかる。
  • 一般発表者が筑波に偏ってる?
  • 発表登録にスパムが来たらしい。
  • 企業からの参加が減っている。夏にミニサミットとか土日開催とか。
10:10-10:40

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

BitVisor はSingle-VMというユニークな特徴を活かして、通常のハイパー

バイザとは異なる様々な目的を実現するための汎用プラットフォームとし

て活用されることを目指しています。本発表では、まず BitVisor の現在

のアーキテクチャの概要を説明し、次に BitVisor を活用した研究や開発

をいくつか紹介します。また、BitVisor の今後の方向性についてもお話

します。

[2013-12-06 10:07]
  • 去年のスライドをみたけど、あまり変化がない...
  • 2006年開始 もう7年 年1回リリースしてきた 1.4はちょっと遅れてる
  • もともとはSecureVMのためにBitVisorはつくられたが、汎用な方向にむかっている。
  • H22から資金が途絶えたがH25に
    • 総務省から「広域分散ベアメタル・クラウド環境のためのハイパーバイザーの開発」
    • JST A-STEP 「高セキュリティ・高信頼のクラウドコンピューティング環境実現に...」
    • あと3年は続く
  • BitVisorとは -- A Single-VM Lightweight Hypervisor (でもTiniVisor..)
  • BitVisor Tシャツもあるよ (学生さんがつくった)
  • singleのメリット
    • セキュリティ: OSよりもVMの方がシンプルなので破られにくいはず
    • 互換性: ゲストOSをいじらずに機能追加
    • VMMを小さくできる(→セキュリティ・オーバヘッド)
    • でも他のVM(non-single)も最適化をがんばってるので負けるケースもないわけではない...
  • 準パススルー型が特徴
    • 基本はパススルー 部分的に仮想化
    • デバイスメディエータ
      • 中継・フィルタ
      • 準パススルードライバとも
      • デバイスドライバの1/5〜1/10のサイズで実装できるメリット
    • 保護ドメイン(sandbox)で動かすのでアタックされても安心
    • 応用: IDS(侵入検知)とか iMacのスケジュール起動
  • iMacのスケジュール起動問題
    • windowsからシャットダウンすると使えない(windowsの仕様で、BIOS的には未定義)
    • 最後にwindowsでシャットダウンすると機能しない問題。
    • windowsのデバイスドライバでは回避できない
    • BitVisorでIOポートを監視して電源OFFのときにスケジュール起動をつっこむ。VMをつかうのはややオーバースペックなかんじだが。
  • VMMにVMEXITで制御がもどってくる条件のon/offをAPIで簡単にできるようにしたい devirtualization
  • 準パススルーのレベル
    • 監視のみ(IDS,デバッグ(アナライザは高い))
    • 監視+変換(暗号化,RAID,SSDの遅延書込)
    • 多重化[Piggyback](ICカードアクセス、OSのアクセスにのっかってなにかする)
      • DMAシャドウイングとか
  • 世界の研究: TCVisor, HyperSafe, "Return-less"VMM
  • 2012年のrefer: 62件 → 2013年のrefer: 87件
    • われわれの論文はなかなか通らない...
  • BitVisor1.4
    • リリースは技術的ではない理由で遅れていた
    • UEFI対応
    • オーバヘッド削減 (タイマーアクセス・スレッドスケジューリング・外部割り込み)
    • タイマーアクセス
      • IOは遅い ACPI PMTをつかっていた
      • TSCは安定しないものがあって採用してなかった
      • invariant TSCに対応したCPUではこれを使うように
    • スレッドスケジューリング
      • 無条件に動いていた タイマーをつかってなくても
    • 外部割り込み
      • 毎回VMExitしていた
      • 外部割り込みをフックしないと長時間制御がとれないことも
      • preemption timerでCPUクロック単位でVMExitができるようになった
    • netperfでためしてみると効果あり
[2013-12-06 10:40]
  • Q: iMacスケジュール起動問題でmacのときは?
  • A: windowsのときだけbitvisorを起動する
  • Q: preemption timerはVMMの中でつかえる?
  • A: ゲストから戻るためのタイマーなので保護ドメインのプロセスをプリエンプトするのにはつかえない
[2013-12-06 10:43]
10:40-10:50

休憩(10分)

10:50-11:50

【招待講演】「TinyVisorの開発と設計」/ 渡辺祐一_1130516_1130517

TinyVisorは、OSを二個動作させることが可能な、BitVisorベースのハイ

パーバイザです。CPU、メモリ、I/Oなどのリソースを各OSに割り当て、OS

が直接制御することで、ホストOSなしで各OSが独立動作します。割り当て

られたリソースのみをOSに認識させ、かつ、割り当てられていないリソー

スへのアクセスを制限することが設計のポイントです。開発の経緯や今後

の目標、具体的な設計について説明します。

[2013-12-06 10:51]
  • 数年年から趣味で開発 去年公開
  • ホストOSなしに各OSが独立動作
  • ゲストBIOSは seaBIOS(GPL)を使用
  • 使い方: display,keyboard,mouse,video,hdd,hbaカード,nicは二組用意する。それぞれのHDDにOSをインストール。USBメモリにVMMとゲストBIOSをインストール。
  • ここまでは去年にできていた。今年はVM1(2つめの方)をリブートできるように。
  • VM0の再起動はホストのBIOSを再起動する必要があって難しい。
  • VMの独立性向上: 片方がパニックしてもまきこまれないようにしたい。
  • VMMの部分アップデート: 片方づつVMMを更新できるようにしたい
  • 夫婦でパソコンを共用? 喧嘩しても隣あわせ
  • 重複するCPU,memory,IO:
    • CPUはマルチコア・ハイパースレッディング
    • メモリたっぷり
    • IOはチップセットのAHCIとマザーボード、USB3とUSB2、PITとHPET
    • けっこう二重にもってる
    • root port (PCI-exのスロット単位)で資源割り当て
  • APIC IDでプロセッサ識別
  • MADTテーブル書き換え: VM0はVM1の論理プロセッサストラクチャを無効化
  • IPI: 指定ならパススルー、ブロードキャストなら割り当てたプロセッサに変換
  • 論理ディスティネーションモード(local APIC ID)・物理ディスティネーションモード(APIC ID)
    • VM1は物理〜しかつかえないようにする。ACPI FADTのフラグで指定。local apic idが重複してしまうため。
  • メモリは4KB単位で物理アドレス範囲指定。
  • VM0の物理はホストとおなじ reservedで
  • IOはバス・デバイス・ファンクションIDで指定
    • 他のVMへのアクセスは、readはall FF、writeは無効化
    • rootから先はOSがスキャンする
  • MMIO領域 重複してる
  • マルチファンクションデバイス
    • OSはファンクション0がないと1以降を検出してくれない 0があれば歯抜けでもok。
  • IOデバイスからメモリは VT-d のIOMMUで。
  • 割り込み: VM0はINTとMSI、VM1はMSIのみ。 PCではIOAPICは1個しかないので。
  • PITはVM0に、HPETはVM1に。VM1でレガシーを要求したらエミュレート
  • USBメモリのVMMをロード→INT 18Hでブート失敗したことに→VM0がロードされる(ホストBIOSの挙動) 他の方法もあるが
  • VMMロード時にゲストBIOSをロードする
  • SeaBIOS: C言語 VMMにあわせてカスタマイズしている BIOSの中に問題があってもソースがみれるメリットがある
  • シリアルをポーリング 。。。 sttyプロセス 。。。
  • 設計のポイント
    • 割り当てあられたリソースのみをOSに認識させる
    • 割り当てられてないリソースへのアクセスを制限する
    • ホストBIOSでVM0、ゲストBIOSでVM1
[2013-12-06 11:41]
  • Q: bitvisor意外で参考にしたものは?
  • A: ない (Q:岡山大のMINTで似たようなこと(リソース分割)をやってたので)
  • Q: デバッグツール
  • A: printfデバッグのみ
  • Q: 2個用意しなくても簡単に多重化できるものはないか?
  • A: IOデバイスの仮想化はたいへんなのでやるつもりない。現状35k lineで、あまりおおきくしたくない。
  • Q: 本業は?
  • A: ふつうのソフトウェア開発(もうちょっと上のレイヤ)。
  • Q: 3つ以上に増やすにはハードを用意するしかない?
  • A: OS間で共有できる機能があるハードもあるし、まだ数に余裕があるデバイスもあるし。
  • VM1でwindowsを動かすのはたぶんたいへん。BIOSまでしか対応してない。VM0はなんとかなるかもしれない。
  • Q: 性能は?
  • A: VM0とVM1で体感では性能差はないかんじ。ビデオゲームとか片方が他方にひっぱられるかもしれないが、マウスが動いたら満足しちゃうので。
  • Q: どうやって勉強したか?
  • A: 仕様書を読んで。BIOSはネットで。すいすい読めるようになった。
  • Q: bitvisorの改造しやすさは?
  • A: globalをつかって読むには困らなかった。
[2013-12-06 11:54]

11:50-13:00 昼休み

生協食堂でランチ。チキンおろしだれ(290)、麦飯?ライス中200g(90)、豆腐とわかめの味噌汁(30)、ほうれん草のゴマあえ(50)。suicaで支払い。以外とICカード払いのレーンは空いてるようにみえた。

_1130519

生協購買でコーヒー買って時間まで外でのんびり。

_1130521

13:00-13:30 デモ・セッション

_1130530

  • スリープするとbitvisorが検出してOSを切り替える。
  • XPを動かしておきたい需要はあるがセキュリティを考えると社内ネットワークには繋ぎたくないとか、XPでしか使えないデバイスがあるとか。
  • 1つ目のOSを立ち上げてスリープするとイメージをディスクに書き出してから2つ目のOSを立ち上げる。2つ目のOSをスリープすると1つ目のOSがディスクから読み込まれ、そのあとはメモリに常駐して切り替えが行われる。
  • 切り替え時のデバイスリセットはOSまかせなのでbitvisorは何もする必要がない。

_1130531

  • OSvのようなコンテナ仮想化とは途中のレイヤを抜いて軽くするという点は同じだが、目的が違うので共存できる。逆にKVMとかは廃れるのではないか?
  • 転送はUDP。

_1130532

13:30-14:30

【招待講演】「BitVisorのUEFI対応」/ 榮樂英樹(株式会社イーゲル)_1130526

BitVisorはバージョン1.3までUEFIに対応していませんでした。しかし、

UEFI対応PCは増加しており、近年はプリインストールされたオペレーティ

ングシステムもUEFIで起動するのが一般的になってきました。そこで、

UEFIでBitVisorを起動できるようにする対応を行いました。UEFI対応にあ

たり、ファームウェアの実装の違いによって発生する多くの問題が見つか

りました。特に、PCのファームウェアは通常ブラックボックスであり、原

因調査が簡単ではありません。そのような問題と対応方法について紹介し

ます。

[2013-12-06 13:32]
  • UEFI: OSとファームウェアのあいだのインタフェースを埋める仕様 元EFI IA64でつかわれていた。
    • ページ単位のalloc/freeeもある。
    • 不揮発メモリ(setup)へのアクセスも提供される。
    • ファイルシステム(FAT)もある。
    • UEFIアプリケーション: フォーマットはPE。サブシステムはちがって0x0A。relocatableにしておくべし。ABIはMS Windows。
    • エントリポイント: EFI_IMAGE_ENTRY_POINT(ImageHandle, *SystemTable) SystemTableにいろいろサービスが書いてある。
      • Boot Service, Runttime Service, Protocolなどが用意されている。
    • 開発環境:
      • gnu-efi(rEFIでつかわれている) ホストのgccでコンパイル(ELF)して、最後にobjcopyでPEに変換。関数呼出規約が違うので差異はじぶんで吸収する。
      • EDK
      • EDK2: bitvisorではこれをつかったほうがよかったかも。
  • BIOSでの起動方法: gnu gubかvmmローダ(bitvisor同梱のbootloader)。
  • UEFIでの起動:
    • GRUBはExitBootService()を呼ぶ → boot serviceがつかえない → GRUBはつかえない
    • bitvisorをUEFIアプリケーション化: リロケータブルにしないといけないなど、おおがかり
    • VMMローダをつくることに
  • VMMローダ: 最初にVMM(ELF)をロードして起動、そしたらローダは終了、次のOSが起動される。
    • 2 stageに分けた。1stはUEFIappで2ndをロード。2ndは1GB未満のところにロードされる。1GB未満の領域はVMMからみえるメリット。
  • UEFIではグラフィックモードになっていてpanicログをだせない。シルアルはUEFIがついてるマシンは限定される。etherはuefiのと衝突する可能性がある。text output protocolをつかう方法はブートにつかうCPUからしか呼べない。しかもブート中のみ。あとはVRAM直書き。
  • 32bitUEFIには対応してない。あまり環境がおおくないとか、windowsは64bitのみだし、intelのはVMX有効のままページングoffにできないとか。
  • ファームウェアはゲストOS上で実行される。
[2013-12-06 14:21]
  • Q: Windowsがうごかないときの対応は?
  • A: printf。VRAMらしいアドレスのところに書き込んで表示。
  • Q: boot loaderを起動するだけでよいのにUEFIは高機能すぎないか?
  • A: UEFIは16bitをきりしててシンプルになってるメリットはあるが、PEバイナリをつくらないといけないのは敷居が高い。
  • Q: TPM対応は?
  • A: UEFIでは対応してない。たぶんプロトコルが定義されているのではないか?(未調査)
  • Q: bitvisor自体には変更はない?
  • A: フックなど変更はない。
  • Q: MacとWindowsでブートに違いは?
  • A: どちらもおなじ感じ。(1年前、igelはMacのブート部分は知財にしようと思ってたが...あてがはずれた...)
  • Q: Macは低レイヤーはそう違いがないが、高レイヤのプロトコル部分は、Macは古いのを独自拡張しているから、苦労するかも。
  • A: 暗号化ディスクでどうなるか試してない。
  • Q: 1.4リリース予定は?
  • A: 大人の事情で遅れている... クリスマス... どうかなあぁ...
[2013-12-06 14:36]

14:30-14:40 休憩(10分)

14:40-15:10

「BitVisorにおけるゲストOS・保護ドメイン・USB ドングル間の遠隔手続き呼び出し」/ 新城靖、松下正吾(筑波大学)_1130533

BitVisorの保護ドメインは、耐タンパ性のある USB ドングルと同様に、

ゲストOS から隔離されており、機密性が高いコードを実行できる。この

発表では、ゲスト OS から保護ドメインと USB ドングルを利用するため

のメッセージ交換について述べる。

[2013-12-06 14:45]
  • 耐タンパデバイス Rockey6
  • 機密環境 と 通常環境
    • デジタル署名・著作権保護・コード隠しなど
  • 実現レイヤ: マイクロカーネル、VMM、intel SGX(software guard extensions)とか。
    • SGX: 暗号化されたままで実行できる。VMMよりも下のレイヤでやる。
  • 耐タンパデバイスは遅いのでアクセラレータとして機密プログラムを実装。
  • 環境間通信はどうすべきか? → RPCと逆RPC
    • 機密環境・耐タンパデバイスはサーバが普通だがたまにクライアントになりたい。
      • 暗号の委託計算 server-aided computation
      • ストレージとかUIとか
      • でもスリープできない問題。
  • 保護ドメインRPC: int vmmcall_rpc(desc,request,result);
  • msgsendbuf(): allocate_buffer()を毎回呼んでてムダ?
  • 保護ドメインはデバイスIO付きの機密環境としてユニークで耐タンパデバイスと組み合わせるとおもしろい。
[2013-12-06 15:06]
  • Q: 逆RPCはポーリング?
  • A: ポーリングだがRPCのつづきで逆RPCを出すなら無駄なループはない。
  • Q: nestしたら?
  • A: 保護ドメインのプログラムがシングルスレッドならnestしない。
[2013-12-06 15:09]
15:10-15:40

「ケーススタディ:BitVisorにおけるバイナリBLOB USBドライバの利用」/ 北村朋宏(株式会社イーゲル)_1130543

USBドングル製品Rockey6をBitVisorから利用可能にした事例について紹介

します。Rockey6のUSBドライバは、libusbの上で動作するユーザランドプ

ログラムであり、そのライブラリは、ソースコード未公開でした。しかし

、BitVisorはlibusb互換APIを備えており、バイナリBLOBとしてライブラ

リを利用できる可能性がありました。そのため、BitVisorにRockey6ドラ

イバを取り込む実装を試みましたが、その過程において幾つかの問題が生

じ、それらを解決する必要がありました。その内容について解説します。

[2013-12-06 15:10]
  • Rockey6のライブラリはソースコードが公開されていない。
  • Rockey6内部にCPUをもっていて乱数生成などができる。USB1.1のインタラプト転送。
  • API: DIC_File, DIC_Open, DIC_Command DIC_Set, DIC_Close
  • Rockey6の未定義シンボルを解決できればbitvisorにとりこめるはず。
  • bitvisorのlibusb互換実装はある。元はICカードをつかうために実装された。
    • 構造体の定義がちがっていてpagefaultとか。つかってないフィールドは削っていたため。
    • stack guardのカナリアが設定されてないためpagefault。32bit環境だとgsレジスタをつかって干渉するのでライブラリをstackguardなしで提供してもらって解決。n
    • GOT: リンカスクリプトにGOT,PLTが書いてなかった。-fPICなしでライブラリを提供してもらって解決。
    • usb_busses: リンクリストの先頭ポインタ。ライブラリがusb_get_busses()をつかってくれてなかった。
  • usb_device構造体の差異があってpagefault。
  • DIC_Openのデバッグ
    • 関数入口でスタックダンプ
    • あやしい関数をnopでおきかえ (strcpyをnopにしたら動いた)
[2013-12-06 15:34]
  • Q: libusbの実行速度の差異は問題になった?
  • A: ない。ゲストOSがUSBのわりこみを吸い込んでしまう問題があった。bitvisorはUSBのwriteを同期で処理するためにbusy waitしているので、linuxの実装よりも速いかも。
  • Q: バイナリのオプション抜きは?
  • A: メーカにたのんだらあっさりとやってもらえた。
[2013-12-06 15:38]

15:40-15:50 休憩(10分)

15:50-16:20

「BitVisorのためのOSの状態復元機能」/ 河崎雄大(電気通信大学)_1130544

BitVisorのためのOSの状態復元機能を提案する.OSの状態として保存,復

元するものはディスク内にあるデータとメモリ上にあるデータである.ま

た,データの保存,復元のトリガーはユーザが任意のタイミングでゲスト

OS上の特別なプログラムを実行させることによって引かれる.

[2013-12-06 15:50]
  • 暗号化・マルウェア検出・OS復元をOSの外でやる。
  • livewire,VMwatcher, BitVisor
  • 使用例: ゲストOS上でマルウェアを実行して挙動を観察したあと、チェックポイントを復元する。
  • 復元トリガーは VMCALL を呼ぶだけ。
  • チェックポイントではメモリとディスクを保存するがbitvisorでは簡単ではない。
    • メモリは別パーティションに保存。
    • ディスクはメインパーティションと差分パーティションを用意して復元では差分パーティションをすてる。
  • bonnie++
    • まばら状態だと性能が低下している。
  • BitVisor1.3のビルドベンチ
    • 2%程度のオーバヘッド
  • 類似
    • VMware,Hyper-V,KVMにも復元機能があるが、マルウェアがホストOSを検出して動作を止めてしまうかも。
    • BareBox
[2013-12-06 16:13]
  • Q: レジスタは
  • A: VMCSでやる予定
  • Q: バッファキャッシュは?
  • A: メモリごと保存しているのでフラッシュしなくてもok。
  • Q: VMCSをそのままコピペは動かなかったがだいじょうぶか?
  • A: まだ動いてない。(Q:VMCSにはホストの状態もはいっているため動かない)
  • Q: メインと差分と両方のreadのときにどうしてる?
  • A: 今は差分の方はbusy waitして完了をまっている。
  • Q: 2回目にチェックポイントをとったらどうする?
  • A: チェックポイントは1つだけなので。(Q:差分で記録すると差分を捨てるコストは安くなるが、チェックポイントを連続して取るコストは上がってしまう)
[2013-12-06 16:22]
16:20-16:40

「Live Migration on BitVisor」/ 深井貴明,表祐志(筑波大学システム情報工学研究科), 品川高廣(東京大学)_1130545

OS のライブマイグレーションは仮想マシンモニタ(VMM)が提供する機能の

一つであり,ハードウェアの障害対応や負荷分散などに有効な技術である

.しかし,ライブマイグレーション機能を提供するVMMはデバイスを仮想

化し,性能劣化を生む.そこで,デバイスを仮想化しない準パススルー型

VMMであるBitVisorによる,OSのライブマイグレーションを目指し,実装

している.現在,RamDisk上で動作し,一部デバイスのみを用いるLinuxを

マイグレーションすることに成功している.本発表では,ライブマイグレ

ーション機能のうち実装が完了している部分について述べる.

[2013-12-06 16:23]
  • メンテナンス性向上
  • bitvisorでやるメリット: OSに依存しない。オーバヘッドがすくない。
  • ハードウェア構成は同じでないと動かず。
  • メモリとCPUはふつうにコピーすればok
  • デバイスの状態は書き込み専用レジスタがあるためbitvisorで監視する。(めんどくさい)
    • 宛先ポート・IOタイプ・書き込みデータ(ビット) をみて判断。デバイスの状態や直近のIOによっても読み書きがかわる。
    • デバイスごとに状態取得コードを書かないといけない。
  • 応用: チェックポイント・クローン
  • 脱仮想化と再仮想化
    • マイグレーションのときだけ再仮想化してマイグレーションがおわった脱仮想化できたらよい。
[2013-12-06 16:37]
  • Q: すでにライブマイグレーションの実装はあるが?
  • A: bare-metalに近いところでやりたい。checkpointingは需要があるはず。
  • Q: DMAはどうする? (NICとか)
  • A: タイミングをえらんでやるが、bitvisorは割り込みをフックしてないし。
  • Q: デバイスをエミュレートするのは大変なので、いちどデバイスが抜けた(スリープ)ように見せかけるのはだめか?
  • A: OSに気づかれないようにしたい。(Q:ユースケースがほしい)
[2013-12-06 16:43]

16:40-16:50 休憩(10分)

16:50-17:10

「ネットワークによるADvisor機能の拡張」/ 山本航洋(電気通信大学大山研究室)_1130546

現在のBitVisorにはグラフィックハードウェアのメモリを書き換える事に

よりデスクトップ上に画表示させるADvisor機能が実装されている。

ADvisorで表示する画像データはBitVisorのバイナリに埋め込まれている

。そのため表示画像の変更を行うためにはビルドしなおす必要がある。そ

こでBitVisorとサーバで通信する機能を実装し、ADvisorで表示可能な画

像を動的に更新する拡張を行った。

[2013-12-06 16:51]
  • ADvisor: VMMが画像をむりやり表示する。
  • 利用例: 組織内における情報表示、広告表示。
  • 問題点: 画像データはVMMソースコードに埋め込み。 → 動的に変更できるようにした。
  • サーバからUDPで送られてきたデータを捕捉。
    • サーバは送るデータの大きさを伝えてから画像を分割して送信。
  • サーバ側でMTUを考慮して小さく送る。
  • CR3レジスタの更新をタイミングで画像がそろっているか確認(あんまりよくない)
  • 表示タイミング: ディスクやネットワーク中の文字列マッチングなど
  • テキストをサーバで画像化して表示など(マルチバイトもいける)
[2013-12-06 17:07]
  • Q: 認証とか?
  • A: UDPで送りつけると表示。表示中はパケット破棄している。
  • Q: HTTPパケットすべてをスキャンするコストは?
  • A: ポート80に制限しているが、性能測定はしてない。フラグメントして文字列が切れたら検出できない。
  • Q: パケットドロップしたら?
  • A: 表示されない。
  • Q: ちらついていたが?
  • A: 録画のつごうではないか?
[2013-12-06 17:11]
17:10:17:30

「TCP/IP on BitVisor」 / 表祐志,島田恭平,芹川大地,深井貴明(筑波大学システム情報工学研究科)_1130550

現在のBitVisorには汎用的なTCP通信機能は実装されていない.そこでオ

ープンソースの軽量 TCP/IP スタックであるlwIP (Lightweight TCP/IP

Stack)をBitVisorに移植し,TCP及び一部の上位層プロトコルによる汎用

的な通信機能を実装した.本発表では今回実装した通信機能を利用するた

めの基本的なAPIの使い方と,BitVisorサーバやクラウドサービスとの連

携といった応用例を,デモを交えながら説明する.

[2013-12-06 17:12]
  • 設定をリモートから変更したい・情報をつかわせたい・クラウドサービスと連携したい
  • フルスクラッチで書くか・移植するか?
  • フルスクラッチでCで4000行?
  • stackoverflowできくとlwIP(lightweight IP)がいいらしい。品川先生もおすすめ。
    • 3項BSDライセンス
    • プラットホーム側ですべて用意しなくても、それなりに動く。
    • ドキュメントが整備されてない、Makefileもない。
    • Raw API: もっとも低級。イベントドリブン。
  • サーバ: BitVisor HTTP Serverを実装してみた。
  • クライアント: cURL Visorを実装してみた。
  • TwitVisor改: クラウドサービスと連携できた。大きなタイムラインでもok。
  • FlickVisor: screenshotをとってflickrに送りつける。大きな画像でもok。
  • bitbucketで公開中
[2013-12-06 17:25]
  • Q: SSLは?
  • A: Raw APIでつなげられれば。
  • Q: bitvisor1.4にいれてもよい?
  • A: welcome!
  • Q: UDPのコードとは?
  • A: まったく共有してない。
  • Q: より便利なAPIをつかえるようにするには?
  • A: mutex,thread,timerが必要。再送はAPIを呼ぶ側が時間コントロールしてる。
[2013-12-06 17:29]

_1130551

帰り際に榮樂さんと松原さんに挨拶して帰社。そとはまっくら。豊洲駅までイルミネーションと月がきれいだったので写真をとりながら。

_1130552_1130559_1130572_1130585

いってきた: BitVisor Summit

新宿→池袋→茗荷谷で行くつもりがボケっとしてて新宿→茗荷谷の丸の内線に乗ってしまった。新宿→銀座→池袋ちょい手前という経路だからめっちゃ遠い.. 30分もかかったぜ。四谷でかなり人が減ったな。

DSC02408DSC02409

なんとか時間までに会場につけた。電源を取ろうとしたら電気がきてない。昼に復旧したが、どうやらブレーカーがトリップしてたようだ。(コーヒーメーカでもつかったか?)

DSC02485DSC02484

DSC02415

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]

隣でオリンパスが特徴的な音をだしてた。

DSC02438

昼休憩

駅前のマクドナルドにいって、ハンバーガーとチキンクリスプ。チキンクリスプは名前がわからなかったので(メニューなくすなよ)「チキンのやつ」って言ったら通じた。席が埋まってたので喫煙席にしかたなく座ることになるかと絶望したが、幸いにも屋外の席が空いてたので女子高生の隣でランチ。

DSC02440DSC02444

会場に戻る途中でコンビニでおやつ買ったり、大学隣りの公園をふらついたり。

DSC02449DSC02461

会場に戻ったら電気屋のにーちゃんが配電盤をみてくれて電源復活。IGELさんとこのグッズを配っていたので1セットいただいた。

DSC02462

[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のリブートに時間がかかる...)
  • "実装したコードはオープンソースへ"
  • デモ:

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

休憩

昼に買った菓子パンを食べる。ヤマザキ まるで桃パン(福島県産桃の桃ジャム使用)(331kcal,たんぱく質6.3g,脂質8.9g,炭水化物56.5g)。

DSC02483DSC02486

[2012-12-04 15:32]

FFR GreenKiller - BitVisorをベースとしたカーネルマルウェアの自動解析システム / 村上純一(フォティーンフォティ技術研究所)

  • AVAR国際会議2009年で発表してから時間がたってしまっているが。(AVARはアンチウィルス系の会議)
  • 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]

DSC02518DSC02519

帰りは池袋経由で会社に戻って一服: フジパン ゴマンベール(101kcal,たんぱく質2.6g,脂質4.1g,炭水化物13.5g)*3。

DSC02521

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

    タグ絞り込み検索
    ギャラリー
    • 今日の練習 2024-12-05
    • 今日の練習 2024-12-05
    • 今日の練習 2024-12-02
    • Zoff: メガネの上からかけられるオーバーグラス(偏光機能搭載)
    • Zoff: メガネの上からかけられるオーバーグラス(偏光機能搭載)
    • Zoff: メガネの上からかけられるオーバーグラス(偏光機能搭載)
    Amazon
    楽天市場
    adby google
    LINE読者登録QRコード
    LINE読者登録QRコード