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
28
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Inside wsl
Introduce of the internal mechanism of Windows Subsystem for linux.
Satoshi MIMURA
October 09, 2019
More Decks by Satoshi MIMURA
See All by Satoshi MIMURA
Edomae 2015 - マルウェアを解析してみよう
mimura1133
0
53
Windows でも TeX 編集がしたい!
mimura1133
0
21
3本指ジェスチャの仮想デスクトップ機能を Windows に実装した話
mimura1133
0
26
Windows のカーネルモードドライバで填まった話
mimura1133
0
26
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
mimura1133
0
20
マシン語によるコード実行
mimura1133
0
15
Iron python と c sharp
mimura1133
0
21
Unix と windows 世界の融合
mimura1133
0
24
Windows Phone 7 と XNA の世界
mimura1133
0
18
Other Decks in Technology
See All in Technology
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
230
FinOps × AIエージェントで実現する コストインシデントの自動調査
oasis1994liveforever
0
130
自律型AIエージェントは何を破壊するのか
kojira
0
150
LLMと共に進化するプロセスを目指して
ymatsuwitter
13
4k
MIERUNE JCT 発表資料「宇宙から伊能忠敬ごっこ」
syuchimu
0
210
SIer20年! 培ったスキルがスタートアップで輝く時
shucho0103
0
840
失敗を資産に変えるClaude Code
shinyasaita
0
520
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development with AI-DLC
yoshidashingo
0
170
Dario Amodi『Policy on the AI Exponential』を理解する
nagatsu
0
230
AWSシリコン最前線 〜AI時代のチップ選択を読み解く〜
htokoyo
2
500
爆速でマルチプロダクトを立ち上げる時 事業・CTO目線で大事にしたい事
miyatakoji
0
100
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
610
Featured
See All Featured
30 Presentation Tips
portentint
PRO
1
320
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
540
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
210
Amusing Abliteration
ianozsvald
1
200
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
250
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
Abbi's Birthday
coloredviolet
2
8k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
730
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
220
Bash Introduction
62gerente
615
220k
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 の世界に
触れて頂く内容です