Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Introduction to Qubes OS(ja)
Search
Yuma Kurogome
March 09, 2014
Programming
3
1.7k
Introduction to Qubes OS(ja)
カーネル/VM探検隊@関西 6 発表資料
http://atnd.org/events/47388
#kernelvm
Yuma Kurogome
March 09, 2014
Tweet
Share
More Decks by Yuma Kurogome
See All by Yuma Kurogome
The Art of De-obfuscation
ntddk
16
27k
死にゆくアンチウイルスへの祈り
ntddk
55
38k
Windows Subsystem for Linux Internals
ntddk
10
2.9k
なぜマルウェア解析は自動化できないのか
ntddk
6
4.1k
Linear Obfuscation to Drive angr Angry
ntddk
4
820
CAPTCHAとボットの共進化
ntddk
2
1.1k
マルウェアを機械学習する前に
ntddk
3
1.6k
Peeling Onions
ntddk
7
3.6k
仮想化技術を用いたマルウェア解析
ntddk
8
27k
Other Decks in Programming
See All in Programming
テスト自動化失敗から再挑戦しチームにオーナーシップを委譲した話/STAC2024 macho
ma_cho29
1
1.3k
Keeping it Ruby: Why Your Product Needs a Ruby SDK - RubyWorld 2024
envek
0
190
DevFest Tokyo 2025 - Flutter のアプリアーキテクチャ現在地点
wasabeef
5
910
nekko cloudにおけるProxmox VE利用事例
irumaru
3
430
CSC305 Lecture 26
javiergs
PRO
0
140
短期間での新規プロダクト開発における「コスパの良い」Goのテスト戦略」 / kamakura.go
n3xem
2
170
menu基盤チームによるGoogle Cloudの活用事例~Application Integration, Cloud Tasks編~
yoshifumi_ishikura
0
110
fs2-io を試してたらバグを見つけて直した話
chencmd
0
230
Go の GC の不得意な部分を克服したい
taiyow
3
790
クリエイティブコーディングとRuby学習 / Creative Coding and Learning Ruby
chobishiba
0
3.9k
HTTP compression in PHP and Symfony apps
dunglas
2
1.7k
暇に任せてProxmoxコンソール 作ってみました
karugamo
2
720
Featured
See All Featured
Practical Orchestrator
shlominoach
186
10k
A designer walks into a library…
pauljervisheath
204
24k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
We Have a Design System, Now What?
morganepeng
51
7.3k
Fireside Chat
paigeccino
34
3.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
Making the Leap to Tech Lead
cromwellryan
133
9k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Transcript
Qubes OS 入門 カーネル/VM探検隊@関西 6 @ntddk
自己紹介 • Yuma Kurogome(@ntddk) • Takeda Lab @ KEIO Univ.
• セキュリティキャンプとか • EpsilonDeltaでCTFに出なかったり • 3/10 留年かどうか判明します • 3/22 誕生日です!!!!!!!!!! bit.ly/1hTbE8m
今回のお題: Qubes OS 知ってる人 ノ
Qubes OSとは • Invisible Things Labが開発中のセキュアVM • Xenベース • Isolationによるセキュリティ
• オープンソース(GPL v2ベース)
Invisible Things Lab
Invisible Things Lab • Joanna Rutkowskaが2007年に設立 – CitrixにXenClientのソース公開を迫ったのは彼女 – COSEINC在籍中にBlue
Pill[SyScan'06]を開発 • Blue Pill – 仮想化技術を悪用したrootkit • 従来のrootkitはRing 0で動作 – システムコールフック – カーネル構造体の改竄 – ゆえに検出が容易 • ハイパーバイザはRing -1で動作 – ゆえに*感染後の*検出が困難
Invisible Things Lab • 低レイヤーのセキュリティを研究 – rootkit – SMM(System Management
Mode) – Intel TXT(Trusted Execution Technology) • XenベースのセキュアVMとしてQubes OSを開 発中
あれっ XenとKVMの違いってなんだったっけ
おさらい: XenとKVMの違い • 仮想化の方式 • 割り込みの通知 • メモリマッピング
おさらい: XenとKVMの違い • Xen – Xenは準仮想化 – Intel VTの登場で完全 仮想化にも手を出す
Hardware Xen 準仮想化OS 特権ドメイン 準仮想化OS 完全仮想化OS
おさらい: XenとKVMの違い • KVM – KVMは完全仮想化 – virtioで一部を準仮想 化 Hardware
Linux + KVM 完全仮想化OS 完全仮想化OS 完全仮想化OS
おさらい: XenとKVMの違い • 仮想化の方式 – 準仮想化は仮想環境向けにOSを改変 • ハードウェアを完全にエミュレーションする必要がない ため高速 –
完全仮想化はOSの改変なし • 割り込みの通知 – Xenはevent channnel – KVMはMSI(-X)
おさらい: XenとKVMの違い • メモリマッピング – KVM Gest-Physicalなメモリ空間はQEMUのhost-virtual なメモリ空間の一部 – Xen
仮想マシンのGest-Physicalなメモリ空間をオンデ マンドでマッピング • ハードウェア仮想化支援機構が両者を支える – Intel VT, AMD-V
あれっ Intel VTってなんだったっけ
おさらい: Intel VT • センシティブ命令をなんとかしたい – 踏んだらまずいやつ – エミュレーションに移りたい •
わざわざ書き換えるのはもう嫌だよ
おさらい: Intel VT(VMX) 1.VMCSにゲスト環境の設定をロード 2.CPUにVMCS(AMDではVMCB)をセット 3.VMLAUNCHからVMEntryを発行、VMX non- root mode(ゲストモード)に切り替え 4.ゲスト環境実行
5.trap要因が発生、VMExitでVMX root modeに 遷移 6.VMExit要因を調べ、要因に合わせたエミュ レーション処理を行う 7.VMRESUMEからVMEntryを発行、VMX non- root modeに遷移, 4に戻る
おさらい: Intel VT(VMX) • VMCSってなに – Virtual Machine Control Structure
– 設定とマシンの状態を保存 • プログラムカウンタ • レジスタ • VMの開始位置 • trap要因(センシティブ命令)
おさらい: Intel VT(EPT) • ページングの扱いをなんとかしたい – 物理アドレスを引くのに二重の変換なんてやってら れない – 自前のページテーブルを用意して一発で引けるよう
に • Shadow Page Table • EPT – Extended Page Table – ハード側がアドレス変換をやってくれる – VMM側でやることが減ったのでオーバヘッド減少
おさらい: Intel VT • VTを前提にするとハイパーバイザが簡単に作 れるようになったよというのがKVM • XenはVTが無かった頃から頑張ってきた – センシティブ命令はHyperCallでハイパーバイザか
ら実行していたため、準仮想化ではOSを改変する 必要がある – VTのおかげで完全仮想化の導入ができた
Xenの仮想化 Hardware Xen VM(Dom0) VM(DomU 1) VM(DomU 2) ドライバ バックエンドドライバ
フロントエンドドライバ フロントエンドドライバ • XenはDom0(ホスト)とDomU(ゲスト)を持つ
Xenの仮想化 • XenハイパーバイザはDom0のOSを実行してか らDomUのOSを実行する • Dom0(ホスト)で他のDomU(ゲスト)を管理 – 特権ドメインであり、全ハードウェアへのアクセス 権限を持つ –
DomUはバックエンド/フロントエンドを介して Dom0にハードウェアアクセスを依頼する • Qubes OSはこの仕組みをセキュリティに応用
Qubes OSのコンセプト
デスクトップ環境のセキュリティ • デスクトップ環境に強固なセキュリティを提供 する • OS上で様々なアプリケーションが動く 仕事で使っている スプレッドシート ブラウザ メールクライアント
デスクトップ環境のセキュリティ • 普通は他のアプリケーションも同じ環境で実行 するよね 仕事で使っている スプレッドシート ブラウザ メールクライアント ゲーム
デスクトップ環境のセキュリティ • もしこれがマルウェアだったら? 仕事で使っている スプレッドシート ブラウザ メールクライアント ゲーム 情報流出
デスクトップ環境のセキュリティ • 脆弱性を突かれてブラウザが乗っ取られたら? 仕事で使っている スプレッドシート ブラウザ メールクライアント 情報流出
つらい
2つのアプローチ • Correctnessによるセキュリティ • Isolationによるセキュリティ
Correctnessによるセキュリティ • 正しさを担保する – コード監査 – デベロッパー教育 • Microsoft Security
Development Lifecycleとか – テスト • ファジング – “安全”なプログラミング言語 • 実際のところ徹底できてないよね
Isolationによるセキュリティ • アプリケーションを隔離したい • あるアプリケーションが脅威に晒されても他の アプリケーションに影響を与えなくしたい 仕事で使っている スプレッドシート ブラウザ メールクライアント
ゲーム 遮断
Isolationによるセキュリティ • 同じアプリケーションでも別の使い方がある • 例えばブラウザ – 社内インフラへのアクセス – ショッピング –
ニュースサイト – ググる • 違うアプリケーション同士はもちろん、同じア プリケーションも用途ごとに分離 • できたらいいよね
Isolationによるセキュリティ • OSが提供しているIsolationじゃだめなの? – アドレス空間の分離 – アカウントの分離 – ACL –
カーネル空間とユーザー空間の分離 – chroot – systrace – SELinux – BSDのセキュアレベル • でもOSの機能だけじゃ安全とは言えない
Isolationによるセキュリティ • モノリシックカーネル自体がバギー • サードパーティ製ドライバが無数に動作 “One bug to rule them
all!”
そこでQubes OS
仮想化技術によってさらなるIsolationを提供
仮想化技術を用いるメリット • バグや脆弱性はコード量に比例[SOSP01] • Linuxカーネルのソースコードは1500万行以上 • ベアメタルハイパーバイザは1000行~3000行
概念図 • App Domain • Strage Domain • Network Domain
• Domain 0 前述のIsolationを実現!
Dom0 • 管理とセキュアな環境を提供 • Dom0にはNetwork機能とStorage機能は含まれ ない • 通常ユーザが使用するアプリケーションは Dom0で起動する •
2500行のCコード
Strage Domain • Storage機能専用の(非特権な)VM • 物理レイヤをコントロール
Network Domain • Network機能専用の(非特権な)VM • 物理レイヤをコントロール
AppVM • 複数のアプリケーションを動作させるVM • Qubes OSの名前の由来 – Qube: ブロックのイメージ •
用途(ドメイン)に応じてVMを作成する – Work – Shopping – Personal • ドメイン同士は隔離されているためセキュア! • Read OnlyなTemplate VMを元に作成される • 管理コンソールからアップデート可能
AppVM • Disposable VM – ひとつのアプリ専用の使い捨てVM – 同じドメイン内の情報は読みだすことができてしま う –
PDFファイル閲覧などに使用 – マルウェアに感染しても抜き出される情報がない! – Disposable VMで確認してからWork VMなどでファ イルを開く
AppVM • Lightweight Virtual Machine – ドメイン毎にゲストを立ち上げるため、軽量 • VMを意識させないUI –
X Window System – アプリケーションのウィンドウにドメイン名とドメ イン固有の色を表示するだけ
AppVM “Work” VM “Shopping” VM “Work” VM Desktop ハイパーバイザによるIsolation
Screenshot 行 1 行 2 行 3 行 4 0
2 4 6 8 10 12 列 1 列 2 列 3 http://wiki.qubes-os.org/trac/attachment/wiki/QubesScreenshots/r2b2-kde-three-domains- at-work.png
GUIの仮想化 Introducing Qubes OS qubes-intro-apr-2010.pdf
GUIの仮想化 • X Windows Systemを噛ませる • Xenの共有メモリを経由してAppVMからDom0 にGUIを写す • Dom0からハードウェアを叩いて描画
• OpenGLには未対応
VMの保護 • VM保護に関連する研究 • Overshadow[ASPLO08] – VMMからゲストOSのコンテキストを取得 – メモリアクセス時にページを暗号化 –
プロセスには暗号化されていないメモリを見せる – 専用のプログラムローダが必要 • SP3[Vee08] – VMM からプロセスメモリの暗号化 – ページ毎にアクセス制御を設定 – 暗号化したページと暗号化していないページを保持 することでオーバヘッド軽減
VMの保護 • Qubes OSではIntel VT-dとIntel TXTによって VMを保護 • DMAをプロテクション –
Direct Memory Access – CPUを経由せずハードウェアから直接メモリを読み 書きする
Intel VT-dによるDMA仮想化 1.ハードウェアからDMAリクエスト発行 2.DMA Remapping EngineがDevice Assignment Structureを参照 3.Address Translation
Structureを取得
VMの保護 • VT-dによるアドレス変換の際にVMのアドレス レンジ以外からの読み書きを阻止 • VT-dが有効になっていないブートプロセスの 早期ではIntel TXTがVMを保護
Intel TXT • Trustという概念 – 全てが期待通りに動くこと – 身元を明らかにするIdentityとそれを獲得する Measurement –
仮想マシンのセキュリティにおいて重要視される • RTM(Root of Trust for Measurement)によって Trustを確立する – 信頼のおける完全性の計測を行うことができる演算 エンジン • Trustの確立には部分的なTrustを積み重ねる必 要がある – Root of Trustを起点にChain of Trustを繋げる
Intel TXT • 自身をMeasurementできないため何をRTMと おくかは重要 • Static RTM – RTMはファームウェア
– システム起動からChain of Trustを構築していく – BIOS/VMMの密接な関係 • Dynamic RTM – RTMはGETSEC[SENTER]命令の実行 – 命令の実行からChain of Trustを構築していく – SENTERはDMAプロテクションを有効化する → VMの保護に繋がる!
Intel TXT • Intel TXTはSRTMとDRTMの混合 • BIOS(チップ) → (SRTM) →
bootloader → (SRTM) → os → (DRTM) → hypervisor (thx @yuzuhara)
ストレージ Introducing Qubes OS qubes-intro-apr-2010.pdf
ストレージ 1.Intel TXTによる検証 2.Dom0のvmlinuzを読み込む 3.スマートカードのパスフレーズを照合 4.Strage Domainに展開 5.暗号化されたrootファイルシステムの復元 6.各AppVMに展開
VM間の通信 • Qubes OSは以下の機能を持つ – クリップボード共有 – 仮想ドライブを経由したファイル移動 • Cross
VM(VM間)の脆弱性は狙われやすい • LiveMigration時にrootkitを挿入する[BlackHat DC08] • 物理キャッシュから鍵を覗き見るCross VM Side Channel Attack[CCS12] – 悪意のVMから連続してキャッシュを叩いた時のレ スポンスで他のVMからのアクセスを推定
ファイルシステム Introducing Qubes OS qubes-intro-apr-2010.pdf
ファイルシステム • 全てのAppVMはrootファイルシステムを共有 – ReadOnly • AppVM毎にプライベートなストレージを保持 • VM固有のキーによってアクセスを検証
まとめ • アプリケーションを用途毎にドメイン化 • ドメイン単位でXenのVMを作るアプローチで セキュアVMを実現 • GUIの仮想化によるシームレスな操作 • Intel
VT-dによるDMAプロテクション • Intel TXTによるストレージの保護 • VM固有のキーによるファイルシステムの保護
詳しくは qubes-os.org
ありがとうございました