Kali LinuxをDocker Desktopにインストールします。
https://www.kali.org/get-kali/#kali-containers
Dockerイメージの取得
Docker イメージのリポジトリは下記となりますが、
https://hub.docker.com/u/kalilinux/
Docker Desktop 最上部の検索バーからも探すことができます。
「Kali」と検索してイメージをダウンロード(Pull)。
イメージ一覧に「kalilinux/kali-rolling」ができました。
追記 (systemd を使ったバージョン)
Kali 公式のイメージ(kalilinux/kali-rolling)では起動プロセスに systemd ではなく SysVinit (SystemV) を使っています。そのため systemctlコマンドが使えません。これは WSLの仕様で、WSLでは最近まで initシステムの既定値が SystemV でした。現在はwsl --installコマンドの既定値を使用してインストールされる最新バージョンの Ubuntu のデフォルトはsystemdとなっていますが、Kali Linux 公式はまだ未対応のようです。
「Windows Subsystem for Linux」が「systemd」に対応へ - 窓の杜
Serviceコマンドの方でなんとかなる物も多いのですが、Metasploit Framework の初期化などが systemctlでないと失敗します。
下記を参考にしてsystemdを有効にすることができるか試したのですがうまくいきませんでした。
systemd を使用して WSL で Linux サービスを管理する | Microsoft Learn
systemd を使用して WSL で Linux サービスを管理する | Microsoft Learn
そこで最終的には systemd を採用した Kali Linux イメージを見つけたのでそれを使うことにしました。(オフィシャルの kalilinux/kali-rolling を元に作成されたようです)
https://github.com/jz543fm/kali-dockerized
Docker Desktopでコンテナイメージ名「lostcauze7/kali-dockerized」で検索すると出てきます。
こちらを使うと systemd での起動となります。
# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 20476 12216 ? Ss 11:55 0:00 /lib/systemd/systemd --show-status=false --unit=docker-entrypoint.target
以下の作業はイメージ名などを置き換えて読んでください。また所々で挙動が違います。rdp の起動などもservice
コマンドではなくsystemctl start xrdp
となります。
コンテナを生成して起動する
初めはGUIで起動を試したのですがうまくいかなかったため、一旦CUIで起動だけ行いました。
Using Kali Linux Docker Images | Kali Linux Documentation
PowerShellでの実行例
(後のGUI操作をVNCを使ったリモートログインで行う予定です。VNCをポート3390に公開することとし、sharedメモリのデフォルトサイズ64MBではGUIを使うのに心許ないので512MBに拡張しています。)
PS C:\> docker run -it --name Kali-Linux -p 3390:3390 --expose=3390 --shm-size=512m kalilinux/kali-rolling /bin/bash
またはGUIが不要な場合はマニュアル通り下記のコマンドでOKです。
PS C:\> docker run --name Kali-Linux --tty --interactive kalilinux/kali-rolling ┌──(root㉿7f44c2e44f47)-[/] └─# exit exit
コンテナが生成できたらPowerShellは閉じて、再度DockerDesktopの端末で操作していくことにします。コンテナを起動。
端末を開く。シェルを変更。(デフォルトでbashのはずで、念のためコンテナ生成時にも /bin/bash と指定したのですがうまくいきませんでした)
アップデート
# apt update # apt full-upgrade -y
続けて、一度に複数のパッケージをインストールできるメタパッケージというものがあるので適宜インストール。今回は「kali-linux-default」にしました。
Kali Linux Metapackages | Kali Linux Documentation
# apt install -y kali-linux-default
途中の選択
- Install Kismet "setuid root"? [yes/no]
WiFiのアナライザーのKismetはいくつかの機能でroot権限を必要とします。しかし、root権限("sudo kismet")で実行 することは推奨されません。そこでKismet用のユーザを作りKismetグループに追加します。「Yes」を選択しました。
- Users to add to the kismet group:
端末右上の「Open in external terminal」をクリックして新規端末を開きます。
# adduser hoge(適宜設定。"kismet"にはしない方がよいです。ユーザー作成のグループ名とシステムが作るグループ名が被るため後でエラーが出て面倒です)
で新規ユーザを作って閉じ「Users to add to the kismet group: hoge」として登録しました。
- Change MAC automatically? [yes/no]
イーサネットケーブルを接続したり無線LANを再有効化したりするたびに、自動的にMACアドレスを変更するかどうか。「yes」を選択しました。
- Should non-superusers be able to capture packets? [yes/no]
スーパーユーザでなくても WireSharkを使えるようにするか。Wiresharkをroot権限で直接実行する方法よりも推奨されます。「yes」を選択しました。
- Character set to support:
コンソールで使用されるフォントの選択。「23」Guess optimal character set(最適な文字セットを推測する)を選択しました。
- Run sslh:
443などの同じポートでsshやssl、openvpnなどの接続を受け入れることができる多重化サービス。
『sslhはinetdのサービスとして実行することも、スタンドアロンサーバーとして実行することもできます。一日に数回しか接続しない場合はリソースを節約するために、おそらく inetd から sslh を実行する方がよいでしょう。一方、多くの接続がある場合は、sslhをスタンドアロンサーバーとして実行し、接続が来るたびに新しいプロセスが生成されるのを避けるべきである。』
「1」from inetd を選択しました。
地域と言語の設定
# dpkg-reconfigure tzdata Geographic area:「5」. Asia を選択 Time zone:「78」.Tokyo を選択 # dpkg-reconfigure locales Locales to be generated:「167」. ja_JP.UTF-8 UTF-8 を選択 Default locale for the system environment:「3」. ja_JP.UTF-8 を選択
確認
# cat /etc/os-release PRETTY_NAME="Kali GNU/Linux Rolling" NAME="Kali GNU/Linux" VERSION_ID="2023.3" VERSION="2023.3" 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" # nmap --version Nmap version 7.94 ( https://nmap.org ) Platform: x86_64-pc-linux-gnu Compiled with: liblua-5.4.4 openssl-3.0.11 libssh2-1.11.0 libz-1.2.13 libpcre-8.39 libpcap-1.10.4 nmap-libdnet-1.12 ipv6 Compiled without: Available nsock engines: epoll poll select
GUIをXfceとし、リモートデスクトップ接続を行う
Setting up RDP with Xfce | Kali Linux Documentation
# apt update # apt install kali-desktop-xfce xorg xrdp # sed -i 's/port=3389/port=3390/g' /etc/xrdp/xrdp.ini RDPログイン用に新しいユーザーを作成します # adduser fuga(適宜設定) RDPサービスを開始 # /etc/init.d/xrdp start Starting Remote Desktop Protocol server: xrdp-sesman xrdp. systemdの場合 # systemctl start xrdp # systemctl enable xrdp # systemctl status xrdp ● xrdp.service - xrdp daemon Loaded: loaded (/usr/lib/systemd/system/xrdp.service; enabled; preset: disabled) Active: active (running) since Sun 2024-04-07 20:36:59 JST; 25s ago
ホストコンピュータから 127.0.0.1:3390 へ接続する。
「プラグイン"電源管理プラグイン"は予期せずパネルから失われました。このプラグインを再起動しますか?」とのエラーが出た場合は「削除」でよいです。
15666 – Plugin "Power Manager Plugin" unexpectedly left the panel
『プラグインがコンテナ内で動作しないのは、dockerにupowerがないためであり、これはバグではなくdockerの制限である。』
追記
たまにxrdpがうまく起動しないことがある。原因捜索中。
# /etc/xrdp/sesman.ini の killDisconnected=false ↓ killDisconnected=true としておいた方がよいかも? (every session will be killed within DisconnectedTimeLimit second after the user disconnects.) (すべてのセッションは、ユーザーが切断してからDisconnectedTimeLimit秒以内に強制終了されます。)
以下は正常時のメモ
# netstat -epl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name tcp 0 0 127.0.0.11:33721 0.0.0.0:* LISTEN root 37752 - tcp6 0 0 127.0.0.1:3350 [::]:* LISTEN root 39744 101/xrdp-sesman tcp6 0 0 [::]:3390 [::]:* LISTEN xrdp 45391 - udp 0 0 127.0.0.11:53859 0.0.0.0:* root 37751 - Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node PID/Program name Path
メモ
日本語入力設定
Kali Linux - demandosigno → 「日本語入力用」
ユーザーでsudoを使えるようにする
sudo を使えるようにする - demandosigno
$ id kali # visudo ~略~ # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL ~略~ # usermod -a -G sudo kali $ sudo -l
VS Code のインストール
Download Visual Studio Code - Mac, Linux, Windowsから".deb"フィアルをダウンロード。
$ sudo dpkg -i code_1.87.2-1709912201_amd64.deb # バージョン部分は適宜合わせる $ dpkg --list code 要望=(U)不明/(I)インストール/(R)削除/(P)完全削除/(H)保持 | 状態=(N)無/(I)インストール済/(C)設定/(U)展開/(F)設定失敗/(H)半インストール/(W)トリガ待ち/(T)トリガ保留 |/ エラー?=(空欄)無/(R)要再インストール (状態,エラーの大文字=異常) ||/ 名前 バージョン アーキテクチ 説明 +++-==============-=================-============-================================= ii code 1.87.2-1709912201 amd64 Code editing. Redefined.
その他、Xdebugのインストールなど。
Debian 12 (bookworm) PHP8.2 Xdebug3.3 - demandosigno