Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Inside wsl
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Satoshi MIMURA
October 09, 2019
Technology
41
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
59
Windows でも TeX 編集がしたい!
mimura1133
0
25
3本指ジェスチャの仮想デスクトップ機能を Windows に実装した話
mimura1133
0
32
Windows のカーネルモードドライバで填まった話
mimura1133
0
35
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
mimura1133
0
27
マシン語によるコード実行
mimura1133
0
27
Iron python と c sharp
mimura1133
0
30
Unix と windows 世界の融合
mimura1133
0
33
Windows Phone 7 と XNA の世界
mimura1133
0
30
Other Decks in Technology
See All in Technology
「事実」を「計測」して、「解釈」する 〜AWS Lambdaのメモリ最適解の見つけ方〜
maimyyym
0
150
会社説明資料
persolserverworks
0
9.7k
実践!Cloud Run ハンズオン!! / Cloud Run handson
y0hgi
2
270
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
440
AI時代のPRレビューにどう向き合うか?
kairim0
1
230
スプシの手作業からの解脱 ~更新はClaude Codeに、見せ方と使い方はGASアプリに任せる~
kentarofujii
0
140
パスキーの自動テストはどこまでいけるのか
teamlab
PRO
0
130
子育てエンジニアの可処分時間が減っても成長を諦めない戦い方
sudoakiy
6
4.6k
Persisting Massive Data with Rails ~Designing for 60 billion rows, and fighting the bottlenecks~ Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
0
680
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
530
Claude の新機能を、 出た日に触って社内に届けるまで
rfdnxbro
1
160
その Valkey 使いこなしていますか?
onk
PRO
5
1.2k
Featured
See All Featured
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Abbi's Birthday
coloredviolet
4
10k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Designing for Performance
lara
612
70k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
620
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
600
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
380
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
580
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
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 の世界に
触れて頂く内容です