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
49
Windows でも TeX 編集がしたい!
mimura1133
0
15
3本指ジェスチャの仮想デスクトップ機能を Windows に実装した話
mimura1133
0
20
Windows のカーネルモードドライバで填まった話
mimura1133
0
22
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 Technology
See All in Technology
生まれ変わった AWS Security Hub (Preview) を紹介 #reInforce_osaka / reInforce New Security Hub
masahirokawahara
0
280
登壇ネタの見つけ方 / How to find talk topics
pinkumohikan
5
540
本が全く読めなかった過去の自分へ
genshun9
0
640
自律的なスケーリング手法FASTにおけるVPoEとしてのアカウンタビリティ / dev-productivity-con-2025
yoshikiiida
0
110
標準技術と独自システムで作る「つらくない」SaaS アカウント管理 / Effortless SaaS Account Management with Standard Technologies & Custom Systems
yuyatakeyama
3
1.3k
生成AI時代 文字コードを学ぶ意義を見出せるか?
hrsued
1
660
ドメイン特化なCLIPモデルとデータセットの紹介
tattaka
1
210
データプラットフォーム技術におけるメダリオンアーキテクチャという考え方/DataPlatformWithMedallionArchitecture
smdmts
5
660
生成AI時代の開発組織・技術・プロセス 〜 ログラスの挑戦と考察 〜
itohiro73
1
330
より良いプロダクトの開発を目指して - 情報を中心としたプロダクト開発 #phpcon #phpcon2025
bengo4com
1
3.2k
強化されたAmazon Location Serviceによる新機能と開発者体験
dayjournal
3
230
フィンテック養成勉強会#54
finengine
0
180
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
107
19k
Speed Design
sergeychernyshev
32
1k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.4k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Visualization
eitanlees
146
16k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
Optimizing for Happiness
mojombo
379
70k
A Modern Web Designer's Workflow
chriscoyier
694
190k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
60k
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 の世界に
触れて頂く内容です