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
4
1.8k
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
3.1k
なぜマルウェア解析は自動化できないのか
ntddk
6
4.3k
Linear Obfuscation to Drive angr Angry
ntddk
4
860
CAPTCHAとボットの共進化
ntddk
2
1.2k
マルウェアを機械学習する前に
ntddk
3
1.7k
Peeling Onions
ntddk
7
3.7k
仮想化技術を用いたマルウェア解析
ntddk
8
27k
Other Decks in Programming
See All in Programming
ソフトウェア設計の実践的な考え方
masuda220
PRO
3
490
Model Pollution
hschwentner
1
190
Back to the Future: Let me tell you about the ACP protocol
terhechte
0
130
Railsだからできる 例外業務に禍根を残さない 設定設計パターン
ei_ei_eiichi
0
350
クラシルを支える技術と組織
rakutek
0
190
CSC509 Lecture 06
javiergs
PRO
0
240
実践AIチャットボットUI実装入門
syumai
7
2.5k
開発生産性を上げるための生成AI活用術
starfish719
1
180
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
340
Чего вы не знали о строках в Python – Василий Рябов, PythoNN
sobolevn
0
160
タスクの特性や不確実性に応じた最適な作業スタイルの選択(ペアプロ・モブプロ・ソロプロ)と実践 / Optimal Work Style Selection: Pair, Mob, or Solo Programming.
honyanya
3
140
Advance Your Career with Open Source
ivargrimstad
0
360
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
188
55k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
Agile that works and the tools we love
rasmusluckow
331
21k
Music & Morning Musume
bryan
46
6.8k
Fireside Chat
paigeccino
40
3.7k
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
Designing for humans not robots
tammielis
254
25k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
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
ありがとうございました