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
39k
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
HTML/CSS超絶浅い説明
yuki0329
0
190
PHPカンファレンス 2024|共創を加速するための若手の技術挑戦
weddingpark
0
140
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
28
4.2k
情報漏洩させないための設計
kubotak
5
1.3k
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
410
return文におけるstd::moveについて
onihusube
1
1.4k
shadcn/uiを使ってReactでの開発を加速させよう!
lef237
0
300
watsonx.ai Dojo #6 継続的なAIアプリ開発と展開
oniak3ibm
PRO
0
170
PHPUnitしか使ってこなかった 一般PHPerがPestに乗り換えた実録
mashirou1234
0
420
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
450
rails newと同時に型を書く
aki19035vc
5
710
良いユニットテストを書こう
mototakatsu
11
3.6k
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
66
11k
Automating Front-end Workflow
addyosmani
1366
200k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.5k
Designing Experiences People Love
moore
139
23k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.4k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
230
52k
Mobile First: as difficult as doing things right
swwweet
222
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
ありがとうございました