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
Inside wsl
Search
Satoshi MIMURA
October 09, 2019
Technology
0
18
Inside wsl
Introduce of the internal mechanism of Windows Subsystem for linux.
Satoshi MIMURA
October 09, 2019
Tweet
Share
More Decks by Satoshi MIMURA
See All by Satoshi MIMURA
Edomae 2015 - マルウェアを解析してみよう
mimura1133
0
46
Windows でも TeX 編集がしたい!
mimura1133
0
13
3本指ジェスチャの仮想デスクトップ機能を Windows に実装した話
mimura1133
0
18
Windows のカーネルモードドライバで填まった話
mimura1133
0
21
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
mimura1133
0
12
マシン語によるコード実行
mimura1133
0
9
Iron python と c sharp
mimura1133
0
12
Unix と windows 世界の融合
mimura1133
0
13
Windows Phone 7 と XNA の世界
mimura1133
0
12
Other Decks in Technology
See All in Technology
[JAWS-UG新潟#20] re:Invent2024 -CloudOperationsアップデートについて-
shintaro_fukatsu
0
120
How to be an AWS Community Builder | 君もAWS Community Builderになろう!〜2024 冬 CB募集直前対策編?!〜
coosuke
PRO
2
2.8k
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
280
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
500
Wantedly での Datadog 活用事例
bgpat
1
590
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
1.1k
権威ドキュメントで振り返る2024 #年忘れセキュリティ2024
hirotomotaguchi
2
770
終了の危機にあった15年続くWebサービスを全力で存続させる - phpcon2024
yositosi
27
22k
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
38
16k
スタートアップで取り組んでいるAzureとMicrosoft 365のセキュリティ対策/How to Improve Azure and Microsoft 365 Security at Startup
yuj1osm
0
230
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
5
280
NilAway による静的解析で「10 億ドル」を節約する #kyotogo / Kyoto Go 56th
ytaka23
3
380
Featured
See All Featured
Unsuck your backbone
ammeep
669
57k
A Philosophy of Restraint
colly
203
16k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
Navigating Team Friction
lara
183
15k
For a Future-Friendly Web
brad_frost
175
9.4k
Designing for Performance
lara
604
68k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
1
100
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Become a Pro
speakerdeck
PRO
26
5k
Transcript
Inside WSL
Who am I? 三村 聡志 a.k.a. 親方 Twitter
: @mimura1133 Website : http://mimumimu.net/ 最近アプリ診断してる Windows + Visual Studio が いつものスタイル。
Who am I? 三村 聡志 a.k.a. 親方 Twitter : @mimura1133
Inside IT 主催 10月3日に仙台でも開催予定 IT初心者向けの勉強会
Inside WSL WSL でできること WSL の仕組み WSL 1 WSL 2
Hacking WSL
WSL でできること
WSL とは? Windows Subsystem for Linux の略 Windows 10 Fall
Creators Update (1709) 以降で 利用可能
WSL で出来ること WSL1, WSL2 Linux のユーザモード環境の提供 64bit ELF のネイティブ実行 WSL2
Linux のカーネルモード環境 Linux カーネルを利用した高度な処理 iftop, mount などなど.
Linux の資産がつかえる!
WSL で出来ること 他にもこういうことができます: WSL 内からの Win32 プログラムの実行 WSL で稼働している Linux
への ファイルアクセス WSL 内からの Windows への ファイルアクセス
WSL を使ってみる
WSL を使ってみる - 1 ストアからインストール
WSL を使ってみる – 2 インストールが終わったら あとは楽しむ。
WSL の仕組み – WSL1
WSL1 の仕組み Windows 10 の “Pico Process” という仕組みを利用して Windows 上で
ELF を実行する Windows の1プロセスの扱いのため プロセスがタスクマネージャーから見える
Pico Process? From MSDN
Pico Process? Windows のプロセスには下記3タイプがある Minimal Process プロセスID は付与されるが PEB,TEB, NTDLL
のリンク等は行われない NT Process 通常の Windows プロセス Pico Process Pico Provider と関連付いた Minimal Process.
WSL1 の仕組み
WSL1 の仕組み ELF ファイルを pico プロセスとして起動 Pico Provider は lxss.sys
(%SYSTEMROOT%¥SYSTEM32¥DRIVERS¥LXSS.SYS) 起動されると Windows 側では LX Session Manager Service が起動する (%SYSTEMROOT%¥SYSTEM32¥LXSS¥LxssManager.dll) (%SYSTEMROOT%¥SYSTEM32¥LXSS¥wslhost.exe) (%SYSTEMROOT%¥SYSTEM32¥wsl.exe) 表示側は conhost.exe (コマンドプロンプト等と同じ)
WSL1 の仕組み ELF ファイルを pico プロセスとして起動 Pico Provider は lxss.sys
(%SYSTEMROOT%¥SYSTEM32¥DRIVERS¥LXSS.SYS) Pico Provider が適宜システムコールを理解し Windows Kernel に指示を出す 実行権限は wsl.exe と同じ.
WSL1 の仕組み なおファイルについては すべてそのまま保存されている
WSL の仕組み – WSL2
WSL2 の仕組み From channel 9.
WSL2 の仕組み カスタマイズされた Linux Kernel を利用する ELF ファイルはその上で実行する Kernel Image:
通常は %SYSTEMROOT%¥System32¥lxss¥tools 以下のものを利用
余談ですが Windows 10 では Windows Hypervisor Platform が提供 Hyper-V の仕組みを利用して
VM を実行できる API 群 管理者権限は不要 C#, C++ 向けの API 実装は存在する https://github.com/mimura1133/WHVPSharp
WSL2 を利用するために 現時点で WSL2 用の ディストリビューションは出ていない 既存のものを変換して作る wsl --set-version ubuntu
2
WSL2 の仕組み
WSL2 の仕組み 起動時に Linux VM (Optimized) を起動 Lightweight VM が立ち上がる
WSL1 同様、起動されると Windows 側では LX Session Manager Service が起動する (%SYSTEMROOT%¥SYSTEM32¥LXSS¥LxssManager.dll) (%SYSTEMROOT%¥SYSTEM32¥LXSS¥wslhost.exe) (%SYSTEMROOT%¥SYSTEM32¥wsl.exe)
WSL2 の仕組み WSL を起動すると 下記のように “WSL” という名前の Docker が起動する WSL
を閉じても走り続ける wsl --terminate で止められる.
WSL2 の仕組み ファイルは VHDX の下に保存される Hyper-V の仮想ディスクイメージ (ext4) Win –
Linux は 9p Protocol. (Plan9)
Hacking WSL – WSL を使いやすくしよう
コマンドを使いやすくする 利用したい Linux コマンドと同じ名前の バッチファイルを作成する 下記の内容を書く: @bash -c "%~n0 %*"
コマンドを使いやすくする
コマンドを使いやすくする あとは PATH を通す Windows と Linux のコラボができる
ユーザディレクトリを合わせる Linux の userdir を Windows の %userprofile% に リンクさせる
/mnt/c/Users 以下に通常存在する “ln –s” でリンクを張れば OK.
Hacking WSL – WSL の深い挙動の違いを見る
挙動の違いを見る WSL1 と WSL2 は VM か Pico Process かの違いがある
それに合わせていくつかの挙動が異なる
プロセスの見え方 WSL1 Pico Process のため 1つ1つがタスクマネージャから見える WSL2 VM のため vmmem,
vmwp.exe が 起動する
Processes (WSL1) Windows 上からプロセスが見える WSL が起動すると wslhost.exe がドライバと通信し 結果を conhost.exe
が描画する
Processes (WSL2) Windows 上からはこれしか見えない ただし hcsdiag からは下記のように見える
mount の挙動の違い WSL1 root は wslfs (実体は NTFS 上にある) マウントできない
WSL2 root は ext4 (実体は VHDX 上にある) マウントできる
mount (WSL1)
mount (WSL2)
Tcpdump の挙動の違い WSL1 Pico Provider (lxss.sys) に ローパケット処理が実装されていない WSL2 動作する
同じ理由で iptables, nmap 等も動作する
tcpdump (WSL1)
tcpdump (WSL2)
ip addr の挙動の違い WSL 1 Windows とアドレス・ポートを共有 WSL 2 Windows
側で NAPT される
ip addr (WSL1) Windows とおなじアドレスが 付与されていることが分かる
ip addr (WSL2) NAPT されている
GDB の挙動の違い WSL1 Pico Process で Emulation しているため アドレスが Linux
らしいものとは異なる WSL2 Linux 上のためアドレスがキッチリ
gdb (WSL1)
gdb (WSL2)
WSL まとめ
WSL まとめ Windows Subsystem for Linux は Windows 上で Linux
の資産を活かす技術 WSL1 は 直接 Windows で実行 WSL2 は Docker 上で実行 再現度は WSL2 が高く、気軽さは WSL1 が高い
余談集
フォレンジックしたい WSL1 NTFS 上にファイルが書かれる 基本的にはWindows のフォレンジックでよい WSL2 vhdx ファイルを読む こういうツールを使って
raw にすればあとは楽 http://euee.web.fc2.com/tool/nhc.html
フォレンジックしたい プロセスのログとしては下記の起動ログを追う wslhost.exe
検知システムを書きたい! (WSL1) PsSetCreateProcessNotifyRoutineEx2 PsSetCreateThreadNotifyRoutineEx この関数を使ってフックを掛ける typedef enum _SUBSYSTEM_INFORMATION_TYPE
{ SubsystemInformationTypeWin32, SubsystemInformationTypeWSL, MaxSubsystemInformationType }
Inside WSL TWITTER : @MIMURA1133
宣伝 10月5日(土曜日)に Inside IT を仙台で開催します IT 初心者向けのかたに 分かりやすく IT の世界に
触れて頂く内容です