🔰

HTB Academyに挑戦:WSL2とKali Linuxでサイバーセキュリティの学習環境を作ろう

2024/06/15に公開

概要

この記事では、Windows Subsystem for Linux 2(WSL2)でKali Linuxをセットアップし、HTB AcademyでのVPNファイルの読み込みとSSHを用いて課題マシンへ接続する方法を解説します。

この記事の対象者

  • HTB Academyで体系的にサイバーセキュリティ理論を学びたい人
  • Windows11上でWSL2を使ってKali Linuxを利用したい人
  • 何から手を付ければいいか分からない未経験者
  • 上手くいかなくてもすぐに諦めない人

筆者自身が躓いたり疑問に思って調べたことを盛り込んでいます。初心者歓迎です。
この記事に辿り着いている時点で一定のリテラシーはあるという前提で書いています。


HTB Academy

https://academy.hackthebox.com/
サイバーセキュリティ理論のオンライン学習プラットフォーム
本家Hack The Boxがある程度出来る人向けの実践特化のプラットフォームなのに対して、こちらはOS基礎からネットワークモデル、WEBリクエストといったセキュリティを学ぶに際に必要となる基本的な知識から段階的に習得できる学習特化のサービスです。
各項目がモジュール形式で分かれており、体系的に学びたい人には学習パスという形で道筋が示されています。膨大な知識の海に放り出されることはなく、教材の質としては高いと思います。


WSL2

https://learn.microsoft.com/ja-jp/windows/wsl/about
Windows Subsystem for Linux 2 略してWSL2。
Windows上でLinux環境を実行するためのもので、別途自分で仮想マシン(VM)を用意しなくてもLinuxディストリビューションを実行することが出来ます。
実際にはWSL2も仮想化技術を使っていて、そのVMの中でLinuxカーネルが実行されます。


Kali Linux

https://www.kali.org/
ペネトレーションテストに特化したLinuxディストリビューション。
プラットフォーム構想であり、PC上だけでなくモバイルやクラウド、USBからの起動においても利用が出来、それぞれの特性を活かすという発想がされています。
脆弱性診断ツールが最初から大量に用意されています。今回はWSL2を使って動かします。


なぜ仮想環境を用意するのか

https://help.hackthebox.com/en/articles/5185608-introduction-to-pwnbox

Pwnboxには必要なツールがすべて備わっており、ターゲット システムを攻撃したり、Linux の練習に使用したりできます。自動的にネットワークに接続されるため、使用時に VPN への接続を心配する必要はありません。

実はHTBアカデミーで学ぶにあたって学習者が自前で仮想環境を作ることは必須ではありません。
Pwnboxという仮想環境が用意されているのでそちらで課題に取り組むことも可能なのですが...
動作がかなり重たいうえ、無料ユーザーの場合は1日1回のトークン消費で起動するため、何かしらでVMインスタンスが終了すると翌日まで利用できなくなります。
折角基礎から学ぶのであれば、いつでも起動できる仮想環境が欲しいですよね。
環境構築をするのも勉強の一環です!

準備

必要無い方は飛ばしてください。

Windows Terminal

Microsoft Storeから入手してください。
インストール後、タスクバーから検索して起動したらピン止め推奨。

PowerShell

同様にMicrosoft Storeから入手してください。

ターミナルを開いた状態でCtrl+,で設定を開き、スタートアップを画像のようにすると便利です。
PowerShellの項目からこのプロファイルを管理者として実行するオンにしておいてもいいですね。
必ず保存を押しましょう。

WSL2の有効化

タスクバーの検索から、Windowsの機能の有効化または無効化を開きます。

  • Linux用Windowsサブシステム
  • 仮想マシンプラットフォーム

それぞれチェックを入れて閉じます。その後PCを再起動。

実行するWSL のバージョンを2にする

wsl --set-default-version 2

Windows11なら既にWSL2が使えるようになっているはずですが、一応コマンドを実行。
操作を正しく終了しました というメッセージが表示されたらOKです。

Kali Linuxのインストール

Microsoft Storeかコマンドのいずれかでインストールします。
慣れてる人はストアからでいいですが、折角ですしコマンドからやってみるのもいいですね。

ストアから

https://apps.microsoft.com/detail/9pkr34tncv07?rtc=1&hl=ja-jp&gl=JP

コマンドから

wsl --install -d kali-linux

-d <Distribution Name>でkali-linuxを指定しています。
因みに指定無しだとUbuntuがインストールされます。

何れかの方法でインストールを開始すると、新しくインストールされたディストリビューションのユーザーアカウントとパスワードの作成を求められます。
Windowsのアカウントと一致する必要は無いので、自由に決めてください。
パスワードを決める際、タイピングした文字が表示されませんが正常です。

インストールが完了するとInstalling Successfullyと表示されてkali-linuxが新規タブかウインドウで開かれます。
色々進めていきたいところですが、ここで一旦閉じます。


エラー回避のために起動方法を変える

https://qiita.com/kk0128/items/8c567c0aad0623eb7627
筆者自身もこの問題に直面し、解決するのに苦労しました。
もし同じ問題が起きたらこの人の記事を参考にしてみてください。

ターミナルの設定を変更する

筆者がとった回避方法です。
ターミナルの設定から、今回はプロファイルのKali-Linuxを選択して変更していきます。
一覧にない場合は新規でインスタンスを追加しましょう。

コマンドラインの項目がkali-linux.exe等になっているはずなので書き換えます。
~を挟むことでホームディレクトリから開始するようになります。割と重要です。
ついでに管理者として実行するよう設定しておくことをお勧めします。

# コマンドライン
wsl ~ -d kali-linux
# 管理者として実行する
オン

Kali Linuxの初期設定

ターミナルからKali Linuxを起動します。
アップデートとツール類の追加を行いましょう

アップデート

https://www.kali.org/docs/general-use/updating-kali/

cat /etc/apt/sources.list

# See https://www.kali.org/docs/general-use/kali-linux-sources-list-repositories/
deb http://http.kali.org/kali kali-rolling main contrib non-free non-free-firmware
# Additional line for source packages
# deb-src http://http.kali.org/kali kali-rolling main contrib non-free non-free-firmware

と表示されていれば以下のコマンドを実行します。

sudo apt update
sudo apt full-upgrade -y

&&でまとめてもいいですがトラブルを避けるために個別でやることをお勧めします。
初心者向けの補足ですがsudoはsuperuser doを意味しています。重要なのでググってみよう。


アプリケーションのインストール

sudo apt install -y kali-linux-large

公式の Kali Linux イメージにデフォルトで含まれているアプリケーションをインストールし、それらの上にさらに多くのアプリケーションを追加します。

WSL版には通常版にあるアプリケーションの一部しか含まれていないので追加しておきましょう。
アプリケーションの設定の確認ダイアログが出るので、y/nで回答します。
英語なので頑張って読んで望む方を選びましょう。基本的にはyesでいいと思いますが。
kismetのUser入力欄には設定したユーザー名と同じものを入力します。

Win-Kexのインストール

次はWin-Kexを利用してGUIで操作できるようにします。
https://www.kali.org/docs/wsl/win-kex/

sudo apt install -y kali-win-kex

Win-Kexを実行する

早速実行してみましょう。
起動オプションが複数ありますが、今回はウインドウモードで起動します。

kex --win -s -m

ウインドウモード:kex --win -s -m
セッションモード:kex --esm --ip -s
シームレスモード:kex --sl -s
-sはサウンドサポート
-m--multiscreenの略で、フルスクリーンで起動する場合は省略しましょう。

起動時にパスワード設定を求められます。
verifyは確認のための再入力、view-only passwordはお好みで。筆者はnにしました。


このようにウィンドウ表示が出来れば成功です!


キーボード設定を日本語配列に対応させる。

人によっては不要なので飛ばしてください。
日本語配列のキーボードを使っている人は設定を変更しておきましょう。

Settinng > Keyboard
Layout > Keyboard layout > +Add > Japanese


ターミナルにショートカットを登録

毎回CLIから起動するのは面倒ですよね。
直接GUIを利用できるようにショートカットを作成しましょう。
ターミナルの設定からプロファイルを新規作成して設定します。
各項目を入力しましょう。

# 名前
Kali-Kex-Window
# コマンドライン
wsl -d kali-linux kex --wtstart -s -m
# 管理者として実行する
オン


リストから直接起動できるようになります。

これでKali Linuxの準備は完了です。
次項からはHTB Academyに接続していきます。

HTB Academyに接続

ユーザー登録は済んでいるものとします。面倒ならグーグル経由でログインしてもいいです。
ガイダンスを一通り済ませた状態にしておきましょう。

それでは、自分の仮想環境とHTBアカデミーが用意してくれたVMを繋いでみます。
本記事のゴールはもうすぐです。頑張りましょう。

VPN ファイルのダウンロードと接続

まずはHTBアカデミーのサイトからVPNファイルをダウンロードしましょう。
学習モジュール内、あるいはユーザーページのVPN Settingから可能です

Windows上でダウンロードしたacademy-regular.ovpnファイルをKali Linux内に保存します。
ファイルが保存されているディレクトリに移動し、以下のコマンドを使用して接続します。

初心者向け どうやってファイルを保存すればいいの?

ウインドウ間でのドラッグアンドドロップを試してみても、上手く出来ませんね。
ではどうやってファイルのやりとりをするのでしょうか?
\\wsl.localhost\kali-linux\home\<登録したユーザー名>をエクスプローラーのアドレス欄にペーストしてみましょう。Linuxのユーザーフォルダに辿り着くはずです。
その中に新規でVPNフォルダを作り、先程の.ovpnファイルを保存します。
その後、KaliのデスクトップにあるHOMEディレクトリをクリックしてみます。すると...?
確認出来たら次へ進みましょう。

初心者向け ディレクトリ移動の仕方が分からない

Kali内のTerminal Emulaterを開きます。
ホームディレクトリへ移動 cd ~ 
保存先のVPNフォルダへ移動 cd VPN

sudo openvpn academy-regular.ovpn

色々と返ってくると思いますが、下から4~5行目を探してみてください。
Initialization Sequence Completedと表示されたら成功です。
手元のKali LinuxとHTBアカデミーのVMがVPNで接続できる状態になりました。


SSHでの課題マシンへの接続

VPNで接続が出来た状態から、SSH接続を使ってターゲットへ接続します。
基礎理論を学んでいる段階では、最初からターゲットのユーザー名とパスワードが教えられた状態で課題に取り組むことになります。実際にやってみましょう。
https://academy.hackthebox.com/course/preview/linux-fundamentals

Target(s):からターゲットを生成してIPアドレスを得ます。
下段に書かれている指示に従います。

SSH to 10.129.***.*95 (ACADEMY-NIXFUND)
with user "htb-student" and password "HTB_@cademy_stdnt!"

指定のIPアドレスに対して提示したユーザー名でSSH接続しろということですね
新しく開いたターミナルから接続してみましょう

ssh [username]@[IP address]

今回の場合は[username]にはhtb-student[IP address]にはあなたの画面で表示されたIPアドレスを置き換えます。

This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '<IP address>' (*****) to the list of known hosts.
htb-student@<IP address>'s password: パスワードを入力
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-123-generic x86_64)

質問にyesと答え、パスワードを求められるので入力します。今回はHTB_@cademy_stdnt!ですね。
以下の表示になれば成功です。SSH接続でターゲットにログインした状態です。

htb-student@nixfund:~$
htb-student@nixfund:~$ uname
Linux

unameコマンドを打ってみましょう。ターゲットはUbuntuで動いているのでカーネル名としてLinuxが返ってきます。

さぁこれで準備は整いました!


問題を見てみる

最後に実際の問題をいくつか見てみましょう。
解説なんていらないよ!という人もいると思うので、一応折りたたんでおきます。

Linux Fundamentals > The Shell > System Information の課題

Find out the machine hardware name and submit it as the answer.

マシンのハードウェア名って何でしょうか?

カーネル名を得るのと同じようにシステムに関する情報を得る方法もありそうですね。
コマンドのオプションを調べる方法があればいいんですが...

Which shell is specified for the htb-student user?

htb-studentに指定されたシェルとは?

(良問だけどこの段階で出題するものではないと思う...)
意地悪な問題です。質問の意味を理解出来ないと答えに辿り着けません。
実行を許可された何らかのシェルなのか、あるいは指定すること自体を指しているのか。
とあるおまじないを知っていれば即答出来ますが、初学者は頑張って探すしかない。
実は今回の答えを見つける方法は何通りかあります。
ユーザーの設定の表示や指定ができるコマンドってあるんでしょうか...
指定されているなら既に実行されているものを確認してみるのも手かもしれません。

What is the name of the network interface that MTU is set to 1500?

MTUが1500に指定されているネットワークインターフェースの名前は?

前の2つを解けたあなたなら、問題を見た瞬間に多分解けそうだと思ったのではないでしょうか。
該当するコマンドの候補も絞れているかもしれませんね。
実はこの問題を解くまでに既に一度答えを目にしています。 思い出せるでしょうか。

まとめ

お疲れ様でした!新たなスタートへの架け橋となれたなら幸いです。
記事を書くこと自体はじめての経験でしたが、どうにか投げ出さずに最後まで書けました。
拙文、ご拝読ありがとうございました。

この記事では、WSL2を用いたKali Linuxのセットアップから、HTBアカデミーでのVPN接続、SSHでの課題マシンへの接続までの手順を説明しました。
さらなる学習のために、以下のリソースも参考にしてください。

Kali公式ドキュメント
HTBヘルプ
MSLearn/WSL
SSH接続について

VMに興味が湧いた人はVirtualBoxについても調べてみるといいかもしれません。
WSLとはまた違ったメリット・デメリットがあります。


自己研鑽でやってきたことをアウトプットしてみようと思い立ち、挑戦してみた次第です。
構成のアドバイスや内容のフィードバック、ご意見等頂けたら喜びます。

Discussion