Docker for Mac上にKali LinuxのGUI環境を作成する (2023/12更新)
CTFなりRedTeamingなりにとても便利なKali Linux。 Try Hack MeとかHack the Boxとかやるのに環境をちゃんと整えてやりたい。というわけで備忘録的にメモ。
Macとかなら普通にコンソール使えるじゃん?という話ではあるのだが、 ペネトレーションテストとかやるためのツールは何かとOSネイティブで動かすと相性が悪く、 例えばMetasploitとかの一部のソースはマルウェアだ!とその手のウイルスプロテクションに怒られたりする。 なので、1枚仮想化して使うことにしてる。
Kali LinuxのOfficalなDocker Imageは kali-rolling
という最小イメージしかない。
WindowsのWSL2環境なら、Kali Linuxが用意されてるし、 kex
というコマンド一発でGUI環境が準備出来るのだが、Mac上のDocker for Mac環境下だと便利なものがない。ので、構築する必要がある。
- WSL2使ってるならノーチョイスでKeXが良い: https://www.kali.org/docs/wsl/win-kex/
Docker for Windowsの場合はそもそも、WSL2の方が良いと思うので割愛。でも同じ手順で出来ると思う。 ちなみにVirtual Box(6.X)はなんか画面の不具合があるらしくてGUI環境だとすげえ重たくて使うのやめた。
lkaszlachさんのkali-desktopがすごく理想に近いので参考にした。
目標
やりたいことはKeXと同じ。
- Docker環境下のコンテナであること
- ホストとのファイル共有が簡単であること
- 具体的にはカレントディレクトリをボリュームマウントする
Kali Linuxの基本セットアップ
# Image pull docker pull kalilinux/kali-rolling # Launch/detouch docker run -itd --rm kalilinux/kali-rolling => コンテナIDをメモ (CONTAINER_IDとする) # ログイン docker exec -it CONTAINER_ID zsh
# コンテナ内でパッケージのインストール apt update # コア (結構時間かかる) apt install -y zsh apt install -y kali-linux-core kali-defaults kali-tools-web # XとVNC周り apt install -y kali-desktop-xfce x11vnc xvfb novnc dbus-x11
ユーザーも忘れずに作成しておく。
以後は root
ではなく kali
ユーザーで作業する。
kali
ユーザーにしてるのは他の配布イメージと合わせてるのでそうしてる。
# kaliユーザー作成、sudoers登録 adduser kali usermod -G sudo kali
終わったら忘れずに一旦保存。今回は kali-xfce
とした。
# 別名で保存 docker commit CONTAINER_ID kali-xfce # ログイン確認 docker run -it --rm kali-xfce zsh # 元のイメージは削除 docker container stop CONTAINER_ID
イメージは13GBぐらいになった。
XとVNCチェック
とりあえずVNCクライアントで動くようにする
# ユーザーログイン 5900はMacのVNCと衝突するので避けた docker run -p "5905:5900" -it --rm kali-xfce zsh -c 'su - kali'
# DISPLAY env export DISPLAY=:1 # Xfvb Xvfb :1 -screen 0 1280x720x24 & # Start X & VNC startxfce4 & x11vnc -display :1 -xkb -forever -shared -repeat -listen 0.0.0.0 -nopw -reopen
localhost:5905
にVNCクライアントで接続確認。
問題なければ進む。
ボリュームの永続化
コンテナは終了しちゃうと初期化されちゃうので、少なくともホームディレクトリだけは永続化しておく。
また、ホストとファイルをやりとりしたいので、ホスト側の特定のディレクトリをマウントしておく
今回は host:~/dev
=> container:/mnt/dev
とした。
docker volume create kali-xfce # 起動コマンドを変更 docker run -it --rm \ -p "5905:5900" \ -v "kali-xface:/home/kali" \ -v "$HOME/dev/:/mnt/dev" \ --name kali \ kali-xfce zsh -c 'su - kali'
noVNC使えるようにする
ブラウザでGUI環境にアクセス出来るのでとても便利。遅延もないし。 ただ、コピペとか出来ないので、その場合はVNC使う
# TCP8081を追加 docker run -it --rm \ -p "5905:5900" \ -p "8081:8081" \ -v "kali-xface:/home/kali" \ -v "$HOME/dev/:/mnt/dev" \ --name kali \ kali-xfce zsh -c 'su - kali'
# DISPLAY env export DISPLAY=:1 # Xfvb Xvfb :1 -screen 0 1280x720x24 & # Start X & VNC startxfce4 & x11vnc -display :1 -xkb -forever -shared -repeat -listen 0.0.0.0 -nopw -reopen & # noVNC /usr/share/novnc/utils/launch.sh --listen 8081 --vnc localhost:5900
上記でnoVNCで使えるはず。 コピペはクリップボード機能経由で。
コマンドまとめ
スクリプトとかにしておくと良い。
# Host docker run -it --rm \ -p "5905:5900" \ -p "8081:8081" \ -v "kali-xface:/home/kali" \ -v "$HOME/dev/:/mnt/dev" \ --name kali \ kali-xfce zsh -c 'su - kali'
# Container export DISPLAY=:1 Xvfb :1 -screen 0 1280x720x24 & startxfce4 & x11vnc -display :1 -xkb -forever -shared -repeat -listen 0.0.0.0 -nopw -reopen & /usr/share/novnc/utils/novnc_proxy --listen 8081 --vnc localhost:5900
2023/12更新
- 最新のDocker Desktopに併せてコマンド体系を一部変更
- zshインストール手順を追加
- novncコマンドの変更 (最新のkaliではコマンドが変更されていた)