はじめに
こんにちは、@rs_tukkiです。
これはラクス Advent Calendar 2022の19日目の記事です。
早いもので気付けば今年のアドカレも最後の一週間です。
今年は何のネタでカレンダーを書くか迷っていたのですが、
勉強の一環でWSL上にKaliLinuxのディストリビューションを構築する機会がつい先日にあったので、今回はその手順について一通りまとめてみることにしました。
用語解説
まずは、今回の話の肝となる「WSL」と「KaliLinux」について軽く解説しておきます。
WSL
WSLとは、Windows Subsystem for Linux
の略で、有り体に言うとWindows上でLinuxを動かすためのシステムのことです。
現在は2019年6月に発表されたWSL2が主流となっており、仮想マシン上でLinuxカーネルを動かし、インストールしたLinuxのディストリビューションを動かす仕組みになっています。
KaliLinux
KaliLinuxは、2013年に誕生したLinuxディストリビューションの一種で、ペネトレーションテスト1に必要な600以上のツールがあらかじめインストールされているやや特殊な環境です。
つまりはペネトレーションテストのスターターキットのようなやつです。
WSLにKaliLinuxをインストールしてみる
今回はWSLを利用してWindows上でデスクトップ環境のKaliLinuxを動かすところをゴールに、環境を構築していこうと思います。
PowerShellでwslコマンドを実行
今回はWindows11環境で試していますが、
Windows11環境下であれば、wsl --install
コマンドを実行するだけで
- WSLの有効化
- 仮想マシンプラットフォームの有効化
- WSL用Linuxカーネルのインストール
- WSLのデフォルトバージョンを2に設定
- 指定したディストリビューションのインストール
を一度にやってくれます。すごいやつです。
まず、PowerShellを起動しwsl
とだけ入力して実行してみます。
PS C:\Users\rs_tukki> wsl
Copyright (c) Microsoft Corporation. All rights reserved.
使用方法: wsl.exe [Argument]
引数:
--install <Options>
Linux 用 Windows サブシステムの機能をインストールします。オプションが指定されていない場合は、
既定のディストリビューションと共に、推奨される機能がインストールされます。
既定のディストリビューションおよびその他の有効なディストリビューションの一覧を表示するには、
'wsl --list --online' を使用してください。
オプション:
--distribution, -d [Argument]
ダウンロードしてインストールするディストリビューションを名前で指定します。
引数:
有効なディストリビューションの名前 (大文字と小文字は区別されません)。
例:
wsl --install -d Ubuntu
wsl --install --distribution Debian
--inbox
Microsoft Store で利用可能なバージョンではなく、オプションの Windows 機能をインストールします。
--enable-wsl1
Microsoft Store バージョンで WSL1 サポートを有効にします。
--no-distribution
ディストリビューションをインストールしません ( --distribution と一緒には使用できません)。
--no-launch, -n
インストール後にディストリビューションを起動しません。
--web-download
Microsoft Store ではなく、インターネットから WSL の最新バージョンをダウンロードします。
--list, -l [Options]
ディストリビューションを一覧表示します。
オプション:
--online, -o
'wsl --install' でのインストールに利用できるディストリビューションの一覧を表示します。
--status
Linux 用 Windows サブシステムの状態を表示します。
--help
使用に関する情報を表示します。
PS C:\Users\rs_tukki>
このように、コマンドの一覧が出力されました。
wsl --list --online
コマンドでインストールできるディストリビューションの一覧を確認できらしいので、今度はそちらを実行してみます。
PS C:\Users\rs_tukki> wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
既定の分布は ' * ' で表されます。
'wsl --install -d <Distro>'を使用してインストールします。
NAME FRIENDLY NAME
* Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
SLES-12 SUSE Linux Enterprise Server v12
SLES-15 SUSE Linux Enterprise Server v15
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
OracleLinux_8_5 Oracle Linux 8.5
OracleLinux_7_9 Oracle Linux 7.9
PS C:\Users\rs_tukki>
ディストリビューションを指定せずwsl --install
を実行した場合、Ubuntu
がインストールされるようです。
(CentOSはWSLコマンドではインストールできませんでした。以前は有料のWSL向けディストリビューションがMicrosoft Storeにありましたが、今はそれすらもなくなっています)
KaliLinuxのインストール
今回はKaliLinuxをインストールしたいので、
今度はwsl --install -d kali-linux
と明示的にディストリビューションを指定してコマンドを実行します。
PS C:\Users\rs_tukki> wsl --install -d kali-linux
要求された操作には管理者特権が必要です。
インストール中: 仮想マシン プラットフォーム
仮想マシン プラットフォーム はインストールされました。
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム はインストールされました。
インストール中: Kali Linux Rolling
Kali Linux Rolling はインストールされました。
要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。
PS C:\Users\rs_tukki>
先ほど説明したとおり、ディストリビューションだけでなくそれを動かすために必要な諸々まで一緒にインストールしてくれます。更にここでPCを再起動すると、自動的にShellが立ち上がり……
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: rs_tukki
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
┏━(Message from Kali developers)
┃
┃ This is a minimal installation of Kali Linux, you likely
┃ want to install supplementary tools. Learn how:
┃ ⇒ https://www.kali.org/docs/troubleshooting/common-minimum-setup/
┃
┗━(Run: “touch ~/.hushlogin” to hide this message)
┌──(rs_tukki㉿DESKTOP-9L54E7N)-[~]
└─$
初期ユーザ作成ののちKaliLinuxにログインできました!
思ったより簡単!
KaliLinuxでは/etc/os-release
にバージョン情報が格納されていますが、そちらを見てみると下記の通り最新版がインストール出来ているのが分かるかと思います。
なお、ID_LIKE=debian
の記載が示すとおり、KaliLinuxはdebian
系のディストリビューションとなっています。
┌──(rs_tukki㉿DESKTOP-9L54E7N)-[~]
└─$ cat /etc/os-release
PRETTY_NAME="Kali GNU/Linux Rolling"
NAME="Kali GNU/Linux"
VERSION="2022.4"
VERSION_ID="2022.4"
VERSION_CODENAME="kali-rolling"
ID=kali
ID_LIKE=debian
HOME_URL="https://www.kali.org/"
SUPPORT_URL="https://forums.kali.org/"
BUG_REPORT_URL="https://bugs.kali.org/"
ANSI_COLOR="1;31"
┌──(rs_tukki㉿DESKTOP-9L54E7N)-[~]
└─$
Win-Kexのインストール
最初に説明したとおり、KaliLinuxには以下のようなペネトレーションテストを行うための各種ツールがあらかじめインストールされています。
しかし、これらのツールはGUI上で動かすものが結構多いです。つまりインストールした直後の状態だとこれらのツールを十分には扱えません。
そのため、KaliLinuxをデスクトップ環境で動かすためのパッケージであるWin-Kexが別途必要になります。
まずは、sudo apt update
でパッケージ一覧を更新し...
┌──(rs_tukki㉿DESKTOP-9L54E7N)-[~]
└─$ sudo apt update
[sudo] password for rs_tukki:
Get:1 http://ftp.riken.jp/Linux/kali kali-rolling InRelease [30.6 kB]
Get:2 http://ftp.riken.jp/Linux/kali kali-rolling/main amd64 Packages [18.9 MB]
Get:3 http://ftp.riken.jp/Linux/kali kali-rolling/non-free amd64 Packages [239 kB]
Get:4 http://ftp.riken.jp/Linux/kali kali-rolling/contrib amd64 Packages [114 kB]
Fetched 19.3 MB in 7s (2,917 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
30 packages can be upgraded. Run 'apt list --upgradable' to see them.
┌──(rs_tukki㉿DESKTOP-9L54E7N)-[~]
└─$
kali-win-kex
パッケージをインストールします。
結構時間がかかるのでのんびり待ちましょう。
┌──(rs_tukki㉿DESKTOP-9L54E7N)-[~]
└─$ sudo apt install -y kali-win-kex
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
(中略)
aspell-autobuildhash: processing: en [en_US-wo_accents-only].
Processing triggers for initramfs-tools (0.142) ...
Processing triggers for dbus (1.14.4-1) ...
Processing triggers for libgdk-pixbuf-2.0-0:amd64 (2.42.10+dfsg-1) ...
Processing triggers for sgml-base (1.31) ...
┌──(rs_tukki㉿DESKTOP-9L54E7N)-[~]
└─$
実際にデスクトップ環境でKaliLinuxを起動する場合、上記のインストールが完了した後にkex
またはkex --win
コマンドを実行すると別ウィンドウが立ち上がります。
デフォルトだと全画面になってしまうので、-m
オプションを付与して縮小画面にするとよいでしょう。
┌──(rs_tukki㉿DESKTOP-9L54E7N)-[/mnt/c/Users/rs_tukki]
└─$ kex --win -m
Win-KeX server sessions:
X DISPLAY # RFB PORT # RFB UNIX PATH PROCESS ID # SERVER
1 5901 3639 Xtigervnc
You can use the Win-KeX client to connect to any of these displays.
┌──(rs_tukki㉿DESKTOP-9L54E7N)-[/mnt/c/Users/rs_tukki]
└─$
実際に立ち上がった状態がこちら。
各種ツールも既にインストールされているのが分かるかと思います。
トラブルシューティング
KaliLinuxのセットアップ中、いくつか詰まった点があるので解消方法も記載しておきます。
KaliLinuxのバージョンが古い
wsl --install -d kali-linux
でKaliLinuxをインストールした際、
そのバージョンが極端に古い場合があります。
VERSION="2019.2"
この状態だと複数のパッケージが古い状態であり、
KaliLinuxが保持するリポジトリキーも古いため、まず「apt update」が失敗します。
rs_tukki@DESKTOP-9L54E7N:~$ sudo apt update
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for rs_tukki:
Get:1 http://ftp.riken.jp/Linux/kali kali-rolling InRelease [30.6 kB]
Err:1 http://ftp.riken.jp/Linux/kali kali-rolling InRelease
The following signatures were invalid: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <devel@kali.org>
Fetched 30.6 kB in 1s (33.1 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://ftp.riken.jp/Linux/kali kali-rolling InRelease: The following signatures were invalid: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <devel@kali.org>
W: Failed to fetch http://http.kali.org/kali/dists/kali-rolling/InRelease The following signatures were invalid: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <devel@kali.org>
W: Some index files failed to download. They have been ignored, or old ones used instead.
そのため、リポジトリキーを更新しようとすると……
rs_tukki@DESKTOP-9L54E7N:~$ sudo wget -q -O - https://archive.kali.org.archive-key.asc | apt-key add
E: gnupg, gnupg2 and gnupg1 do not seem to be installed, but one of them is required for this operation
今度は、必要なパッケージがインストールされていないと怒られます。
しかし、そのパッケージのインストールも、やはりリポジトリキーに阻まれ結局堂々巡りになってしまいます。
このエラーを解消するには、
- KaliLinuxのリポジトリキーを(手動で)更新する
- 必要なパッケージを(手動で)更新する
- 「apt update」「apt upgrade」を実行
という手順を踏む必要があります。
偉大な先人が手順をまとめてくださっているため詳細はこちらをご確認ください。
Win-Kexの起動に失敗する
kex --win -m
コマンドでデスクトップを起動しようとした際に、以下のエラーが発生するケースがあります。
┌──(rs_tukki㉿DESKTOP-9L54E7N)-[/mnt/c/Users/rs_tukki]
└─$ kex --win -m
Error connecting to the KeX server.
Please try "kex start" to start the service.
If the server fails to start, please try "kex kill" or restart your WSL2 session and try again.
エラーメッセージの記載通りにkex start
やkex kill
コマンドで再起動を試みても同じエラーが繰り返されるばかりなのですが、こちらについては以下の記事が参考になりました。
どうやら、デフォルトで用意されているGUI用のシステムが邪魔をしているらしいです。
これをまるごと削除すれば動くようになるとのこと。
Read-only
ファイルなので削除してよいか不安になりますが、もし壊れても最悪一から再構築できるので気にせず削除していきましょう。
これで正常にkexコマンドが動作するようになります。
┌──(rs_tukki㉿DESKTOP-9L54E7N)-[/mnt/c/Users/rs_tukki]
└─$ sudo su
[sudo] password for rs_tukki:
┌──(root㉿DESKTOP-9L54E7N)-[/mnt/c/Users/rs_tukki]
└─# rm -r /tmp/.X11-unix
rm: cannot remove '/tmp/.X11-unix/X0': Read-only file system
┌──(root㉿DESKTOP-9L54E7N)-[/mnt/c/Users/rs_tukki]
└─# umount /tmp/.X11-unix/
┌──(root㉿DESKTOP-9L54E7N)-[/mnt/c/Users/rs_tukki]
└─# rm -r /tmp/.X11-unix
まとめ
今回は、WSLで一からKaliLinuxのディストリビューションを構築する方法を記事にしてみました。
今回、どうしてKaliLinuxを構築したかというと、ペネトレーションテストの学習のために「Hack The Box」を触ってみたかったからです。
こちらについての詳細はまた機会があれば紹介させていただきます。
参考
-
ツールを使って対象サーバへ侵入を試みることで、実際に攻撃を受ける可能性のある脆弱性を洗い出すテスト手法のこと ↩