Trance Shift 8 - Tech

@skyriserの技術系ネタメモ。とりあえずCTFのWriteup書いていく

Docker for Mac上にKali LinuxのGUI環境を作成する (2023/12更新)

DockerでXfce4が使える。とても便利

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環境下だと便利なものがない。ので、構築する必要がある。

Docker for Windowsの場合はそもそも、WSL2の方が良いと思うので割愛。でも同じ手順で出来ると思う。 ちなみにVirtual Box(6.X)はなんか画面の不具合があるらしくてGUI環境だとすげえ重たくて使うのやめた。

lkaszlachさんのkali-desktopがすごく理想に近いので参考にした。

目標

やりたいことはKeXと同じ。

    1. Docker環境下のコンテナであること
    1. GUI環境(Xfce)がVNC or noVNC経由で使えること
    1. ホストとのファイル共有が簡単であること
    2. 具体的にはカレントディレクトリをボリュームマウントする

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:5905VNCクライアントで接続確認。 問題なければ進む。

ボリュームの永続化

コンテナは終了しちゃうと初期化されちゃうので、少なくともホームディレクトリだけは永続化しておく。 また、ホストとファイルをやりとりしたいので、ホスト側の特定のディレクトリをマウントしておく 今回は 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ではコマンドが変更されていた)