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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Satoshi MIMURA
October 09, 2019
Technology
32
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
54
Windows でも TeX 編集がしたい!
mimura1133
0
21
3本指ジェスチャの仮想デスクトップ機能を Windows に実装した話
mimura1133
0
27
Windows のカーネルモードドライバで填まった話
mimura1133
0
27
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
mimura1133
0
21
マシン語によるコード実行
mimura1133
0
22
Iron python と c sharp
mimura1133
0
24
Unix と windows 世界の融合
mimura1133
0
25
Windows Phone 7 と XNA の世界
mimura1133
0
21
Other Decks in Technology
See All in Technology
PfEingのアプローチで働こう
rindrics
0
170
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
130
なぜSRE・セキュリティは評価されないのか?守りの組織を事業成長エンジンに変えた実践
cscengineer
PRO
3
2.2k
はじめてのDatabricks:技術者向けワークショップ / beginner-workshop
databricksjapan
PRO
0
150
DINO-EdgeQuery:Edge-First Polygon Decoding for Building Footprint Extraction from Satellite Imagery
lehupa
0
140
DGX Sparkを2台使って いろいろ動かす話
sonoda_mj
1
130
Sony-DroidKaigi2026
sony
1
320
V8コントリビュート超入門
riyaamemiya
0
140
AIで実装は速くなった。なのにプロダクトは速くならない。職能の壁を越えて価値のフローを設計する
nwiizo
6
7k
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
130
AI時代のAPI品質を支えるガードレール / API Guardrails for API quality in the AI era
yokawasa
1
110
「重なり」は迎える側がつくる ― 人もAIエージェントも歓迎するプロダクトエンジニアリング ―
go0517go
PRO
0
230
Featured
See All Featured
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
Paper Plane (Part 1)
katiecoart
PRO
1
10k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Thoughts on Productivity
jonyablonski
76
5.4k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
270
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
320
The browser strikes back
jonoalderson
0
1.6k
GitHub's CSS Performance
jonrohan
1033
470k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
470
Large-scale JavaScript Application Architecture
addyosmani
515
110k
[SF Ruby Conf 2025] Rails X
palkan
2
1.3k
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 の世界に
触れて頂く内容です