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
Windows のカーネルモードドライバで填まった話
Search
Satoshi MIMURA
September 11, 2014
Programming
0
23
Windows のカーネルモードドライバで填まった話
Satoshi MIMURA
September 11, 2014
Tweet
Share
More Decks by Satoshi MIMURA
See All by Satoshi MIMURA
Inside wsl
mimura1133
0
18
Edomae 2015 - マルウェアを解析してみよう
mimura1133
0
49
Windows でも TeX 編集がしたい!
mimura1133
0
15
3本指ジェスチャの仮想デスクトップ機能を Windows に実装した話
mimura1133
0
20
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
mimura1133
0
14
マシン語によるコード実行
mimura1133
0
11
Iron python と c sharp
mimura1133
0
14
Unix と windows 世界の融合
mimura1133
0
15
Windows Phone 7 と XNA の世界
mimura1133
0
14
Other Decks in Programming
See All in Programming
Deep Dive into ~/.claude/projects
hiragram
14
14k
「テストは愚直&&網羅的に書くほどよい」という誤解 / Test Smarter, Not Harder
munetoshi
0
200
Model Pollution
hschwentner
1
160
PHP 8.4の新機能「プロパティフック」から学ぶオブジェクト指向設計とリスコフの置換原則
kentaroutakeda
2
1k
ご注文の差分はこちらですか? 〜 AWS CDK のいろいろな差分検出と安全なデプロイ
konokenj
3
580
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
2
15k
明示と暗黙 ー PHPとGoの インターフェイスの違いを知る
shimabox
2
620
イベントストーミング図からコードへの変換手順 / Procedure for Converting Event Storming Diagrams to Code
nrslib
2
1.1k
Git Sync を超える!OSS で実現する CDK Pull 型デプロイ / Deploying CDK with PipeCD in Pull-style
tkikuc
4
350
フロントエンドのパフォーマンスチューニング
koukimiura
5
2k
AWS Summit Japan 2024と2025の比較/はじめてのKiro、今あなたは岐路に立つ
satoshi256kbyte
0
120
チームで開発し事業を加速するための"良い"設計の考え方 @ サポーターズCoLab 2025-07-08
agatan
1
470
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
Docker and Python
trallard
45
3.5k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Being A Developer After 40
akosma
90
590k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
21
1.3k
Embracing the Ebb and Flow
colly
86
4.8k
Designing Experiences People Love
moore
142
24k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
700
Transcript
Windows の カーネルモードドライバで 填まった話 みむら (@mimura1133) 1
自己紹介 2
こんなひと • みむら ( @mimura1133 / Satoshi Mimura ) •
http://mimumimu.net/ • セキュリティキャンプ 2014 ソフトウェアセキュリティクラス チュータ(予定) • SECCON 2014 CTF for Beginners の旗振り役 ( http://2014.seccon.jp/2014_07_CTF_for_Beginners2.html ) • wasamusume という CTF チームの旗振り役 • 最近は土足で WinRT に入れないかいろいろ実験中 3
余談:この前。 • セキュリティキャンプ ネットワークセキュリティクラスの問題を解く Write-up を書きました。 • 問題ファイルは pcap で、その中からファイルを出してきて解くもの。
• なんか怖い人からこんなこと言われたので: • がんばってみました。 • https://mimumimu.net/blog/ 4
余談:この前。 5
こういう話ではなくてですね →本題に戻る 6
Windows の カーネルモードドライバで 填まった話 みむら (@mimura1133) 7
はじめに • 話題がディープすぎるので 何となく雰囲気を感じて頂くような内容にしました。 • ガチなドライバ開発者さん: 目一杯マサカリを飛ばしたくなるかもしれません • カーネルモードドライバ書いてみたい!という人: 別所で。15分では無理です。
8
そもそも「カーネルモード」ってなんぞ • カーネル空間で動作するもの! • 簡単ですね • カーネルモードとユーザモードがあって・・。 9
カーネルモードとユーザモード • ユーザモード: • 普段使うアプリケーションはここで動く • よく見る Windows API はここで叩く。
• WoW64 もここ。 • 何かやろうとしたら Windows API や カー ネルモードドライバを経由して指示を出す • カーネルモード: • HAL に直接触れられる • Windows カーネルに必ずしもお伺いを立て る必要なし。 • 各ビット用にプログラムを書く ユーザモード カーネルモード ユーザモード ドライバ カーネルモード ドライバ Windows カーネル 10
つまり ユーザデータ ユーザモードの プロセス カーネルモードの プロセス 11
簡単なOS の知識おさらい • OSによるアプリケーションの保護 • OS は各アプリケーションに 仮想的な I/O と
仮想記憶 による資源を提供する。 • 各アプリケーション毎にアドレスは仮想化されており、 互いに互いの領域に侵入したり値を書き換えたりは出来ない。 • アプリケーションは個別に実行されるので落ちても大丈夫 12
カーネルモードドライバでは • メモリアドレスは仮想化される: • でも カーネル含んで全体で一つの仮想化テーブルを共有する • カーネルモードドライバから カーネルのメモリ空間にアクセスしたりその逆が出来る •
カーネルモードドライバが落ちるときは カーネル含めて落ちる。一心同体。 13
つまり ユーザモードの プロセス 障害発生 カーネルモードの プロセス 障害発生 14
15
16
つまり ユーザモードの プロセス 障害発生 カーネルモードの プロセス 障害発生 17
でもいろいろと出来る • ハードウェアに直接触っていじれる。 →ハードディスクに直接命令出せる。 • プロセスの起動を阻害する事とかできる。 • ファイアウォールとしてジャッジを下せる。 • ネットワークパケットを回収できる。
→正義の目的にも、悪い目的にもどちらにも使える。 18
そんな良さそうな環境にも カーネルならではの障壁が IRQL のはなし 19
IRQL (割り込みレベル) • 各コードの実行に関して IRQL というレベルが設定されている。 • 通常実行時は PASSIVE_LEVEL •
緊急度の高いコールバックは DISPATCH_LEVEL で呼び出される。 Source IRQL Hardware HIGH_LEVEL クリティカルなエラー POWER_LEVEL 電源周りのエラー IPL_LEVEL プロセッサ間割込 CLOCK2_LEVEL CLOCK1_LEVEL PROFILE_LEVEL プロファイルタイマー DIRQL I/O デバイス割込 Software DISPATCH_LEVEL ディスパッチャ APC_LEVEL 非同期処理 APC PASSIVE_LEVEL スレッド実行 20
たとえば • 普通に main 関数から実行されるコード PASSIVE_LEVEL • タイマーを設定して呼び出されるコード DISPATCH_LEVEL [WdfExecutionLevelPassive
を使って PASSIVE_LEVEL で呼び出すことも出来る] • PsSetCreateProcessNotifyRoutine で設定したコールバック PASSIVE_LEVEL • Windows のファイアウォールとして設定したプログラムの呼び出し DISPATCH_LEVEL 21
何か意味あるの • これって何か意味あるの? • 上のレベルから下のレベル のコードは直接呼べない。 • 呼ぶとどうなるの IRQL_NOT_LESS_OR_EQUAL で
BSoD. • 某R社のドライバで 一時期よくありました( Source IRQL Hardware HIGH_LEVEL クリティカルなエラー POWER_LEVEL 電源周りのエラー IPL_LEVEL プロセッサ間割込 CLOCK2_LEVEL CLOCK1_LEVEL PROFILE_LEVEL プロファイルタイマー DIRQL I/O デバイス割込 Software DISPATCH_LEVEL ディスパッチャ APC_LEVEL 非同期処理 APC PASSIVE_LEVEL スレッド実行 22
つまり • PASSIVE_LEVEL の例: • 中島くんによる カツオの呼び出し。 • クリティカルではない。 •
何してもとりあえずOK 23
つまり • DISPATCH_LEVEL の例 • 波平によるカツオの呼び出し。 • クリティカル。 • 「勉強しろ」というのに
「遊んでいる」と (許可されていない動作) 動作を強制停止させられる (ブルースクリーン) 24
どの状態なら何して良いかわからない • MSDN を見ると書いてある 25
詰まったところ。 • IRQL の問題 • ディスクI/O (ファイル書き込みとかファイル作成とか)が 全部 PASSIVE_LEVEL じゃないと呼び出せない。
• でも仕掛けておいたタイマーは DISPATCH_LEVEL! 26
どう解決したか • ExQueueWorkItem を DelayedItem を引数にとって動かすと 指定した関数を PASSIVE_LEVEL で呼び出せる! •
やった! 27
コード void hogeo(int i) { // PASSIVE_LEVEL!! } void main(){
WORK_QUEUE_ITEM item; ExInitalizeWorkItem(&item, hogeo,0); ExQueueWorkItem(&item, DelayedWorkQueue); } 28
イメージ • カツオ(実行中のコンテキスト)が 波平の監視下にある(DISPATCH_LEVEL) • 「終わったらお菓子食べるから取っといて」と サザエに依頼する ( ExQueueWorkItem )
• 処理が終わった時に、サザエがお菓子を持って現れる (関数のコール) • カツオ、お菓子を食べる(処理の実行) 29
コード void hogeo(OKASHI okashi) // サザエによって呼び出される { // PASSIVE_LEVEL!! }
void main(){ // ここは波平によって呼び出される WORK_QUEUE_ITEM item; ExInitalizeWorkItem(&item, hogeo,new OKASHI(“塩昆布”)); ExQueueWorkItem(&item, DelayedWorkQueue); // サザエにお菓子を依頼する。 } 30
まとめ • カーネルモードドライバは慣れると楽しい • サザエさんのカツオはいつになったら中学生になるのだろう • IRQL は 波平さんを思い出そう。 •
困ったらサザエさんを使おう ( ExQueueWorkItem ) • プロ生ちゃん is かわいい 31 Title : Windows のカーネルモード(ry Twitter : @mimura1133