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.6k
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
810
CAPTCHAとボットの共進化
ntddk
2
1.1k
マルウェアを機械学習する前に
ntddk
3
1.6k
Peeling Onions
ntddk
7
3.5k
仮想化技術を用いたマルウェア解析
ntddk
8
27k
Other Decks in Programming
See All in Programming
Re:PandasAI:生成AIがデータ分析業務にもたらすパラダイムシフト【増補改訂版】
negi111111
1
1k
モジュラモノリス、その前に / Modular monolith, before that
euglena1215
6
690
クラウドサービスの 利用コストを削減する技術 - 円安の真南風を感じて -
pyama86
3
390
コードレビューと私の過去と未来
jxmtst
0
280
Cohesion in Modeling and Design
mploed
3
200
ROS 2のZenoh対応とZenohのROS 2対応
takasehideki
2
300
Progressive Web Apps for Rails developers
siaw23
2
550
Vue :: Better Testing 2024
up1
1
400
個人開発で使ってるやつを紹介する回
yohfee
1
700
実践サーバーレスパフォーマンスチューニング ~その実力に迫る~ / Practical Serverless Performance Tuning ~A Close Look at its Power~
seike460
PRO
2
110
GitHub Copilot Workspace で我々のアプリ開発がどう変わるのか?
shuyakinjo
0
950
実践Dash - 手を抜きながら本気で作るデータApplicationの基本と応用 / Dash for Python and Baseball
shinyorke
2
460
Featured
See All Featured
How to Ace a Technical Interview
jacobian
275
23k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
How GitHub Uses GitHub to Build GitHub
holman
473
290k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
92
16k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
46
2k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
249
21k
Producing Creativity
orderedlist
PRO
341
39k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
1
290
YesSQL, Process and Tooling at Scale
rocio
167
14k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9k
Thoughts on Productivity
jonyablonski
67
4.2k
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
ありがとうございました