- 日時: 2018-11-28 (水) 10:30〜17:00
- 場所: 法政大学市ケ谷キャンパス 26F A会議室
- 告知: https://bitvisor.connpass.com/event/100573/
- まとめ: https://togetter.com/li/1293136
[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件を越えた。
- 査読付き論文 5本
- 普及活動
- コミュニティを活性化したいが、
- ちょっと敷居がたかい。(一般ユーザ向ではないので)
- ひきつづき考えていく。
- 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はブロックされるが正しく処理できない問題があった。
- VMMの処理のなかでNMIが来てるかチェックしてからVMRUNでゲストに戻るまでにNMIをくらった場合、NMIがインジェクトされず、次回VMMに制御が移ったときにインジェクトされる(遅れる)問題。
(以降、話題についてゆけず 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]
昼休み
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]
休憩
[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 振り返り & 宣伝 & お願い
- 2017年はOSカテゴリーで(NetBSDに勝って)1位を獲得している。
- 今年も作りました。→ BitVisor Advent Calendar 2018
[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]