超スローペース
dockerイメージ構築まで
ハッキングラボ
ちょっと前のセールで安く買えたので楽しく遊ぶ。
環境はWindows10pro 64bit + docker toolbox
dockerでkali linuxのコンテナ立ち上げてデスクトップ環境作ってリモートで遊びたい。
本書ではVirtualBoxが推奨されてるし、普段docker toolbox使ってるんだから別にそっちに直接インストールしても良かったんだけど、せっかくだからデスクトップ環境に親しみたかった。
(本当はhyper-v使いたいんだよ, 切実に)
docker初心者があれこれやってるだけの記事だぞ
環境
Windows10 Pro上にWSL(ubuntu 18.04)とDocker Toolbox(VirtualBox)を導入し、
WSL上のdockerクライアント(19.03.6)からVirtualBox上のdockerデーモンにフォワーディングする。
VMの起動とサスペンドを自動化するため、VBoxHeadlessTrayを導入する。
対応するVirtualBoxのバージョンを2020年4月現在最新の6.1.0にする。
VirtualBox6.1.0に対応するExtension Packを導入する。
https://download.virtualbox.org/virtualbox/6.1.0/Oracle_VM_VirtualBox_Extension_Pack-6.1.0.vbox-extpack
以下、基本的にdockerコンテナを構築してハッキングラボを作成する。
dockerのインストール
1. dockerのインストール。
大筋はhttps://docs.docker.com/install/linux/docker-ce/ubuntu/ に従う。
2. WSLのマウントポイントの修正を行う。
$ nano /etc/wsl.conf
[automount]
root = /
options = "metadata"
3. docker quickstart terminal等からdockerホストのIPアドレスを調べる
4. ~/.profileに以下を記述
$ nano ~/.profile export DOCKER_HOST=tcp://{dockerホストのIPアドレス, 上記画像なら192.168.99.100}:2376 export DOCKER_CERT_PATH=/c/Users/{ユーザー名}/.docker/machine/certs export DOCKER_TLS_VERIFY=1 export COMPOSE_TLS_VERSION=TLSv1_2
5. 自動起動設定
sudo systemctl enable docker
6. WSLの再起動
Kali Linuxコンテナの作成
本書で用いるペネトレーションテスト用のディストロだそうです。
Kali Linux公式を見ると、継続的にアップデートされるローリング版と、
複数回のアップデート毎に更新されるいわばリリース版とがあるらしい。
https://www.kali.org/docs/containers/official-kalilinux-docker-images/
後者のリリース版は更新間隔が長いため、
バグフィックス等のマイナーアップデートがどうしても欲しくなると予想してここはローリング版を選択。
docker pull kalilinux/kali-rolling
デスクトップ環境とRDPはLXDE + xorgxrdp + XRDPで構成してます。
Dockerfile群
デスクトップ環境の構築は先駆者が相当数いらっしゃったのでかなり参考にしました。
中でもyama07さんの物をベースにしています。
github.com
とりあえず本書を読み進めたいので、イメージの洗練は後でやります。
イメージサイズも肥大化(1.7GBほど)してるし、正直美しくないのですが、なんかいい感じのアドバイス貰えるかもしれないので晒します。
構成
. |-- .docker | |-- Dockerfile | |-- docker-entrypoint.sh | `-- env `-- docker-compose.yml
docker-compose.yml
version: '3.5' services: lab: container_name: lab build: context: . dockerfile: $PWD/.docker/Dockerfile tty: true stdin_open: true command: supervisord env_file: - $PWD/.docker/env networks: - lab ports: - 3390:3389 restart: always networks: lab: ipam: config: - subnet: 172.16.11.0/24
.docker/Dockerfile
FROM kalilinux/kali-rolling:latest # --------------- # Kali Linux setup # --------------- ENV DEBIAN_FRONTEND=noninteractive RUN apt update \ && apt install -y --no-install-recommends kali-linux-core kali-desktop-lxde \ gconf2 locales supervisor wget xorgxrdp xrdp \ && apt install -y --install-recommends task-japanese task-japanese-desktop uim uim-mozc \ && apt remove -y uim-anthy \ && apt autoremove -y \ && apt clean autoclean \ && rm -rf /var/lib/{apt,dpkg,cache,lists,log}/ \ && rm -rf /var/cache/apt/archives/* RUN echo 'startlxde' > /etc/skel/.xsession \ && install -o root -g xrdp -m 2775 -d /var/run/xrdp \ && install -o root -g xrdp -m 3777 -d /var/run/xrdp/sockdir \ && install -o root -g root -m 0755 -d /var/run/dbus \ && install -o root -g root -m 0777 -d /var/log/xorgxrdp RUN echo 'ALL ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers.d/ALL RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \ && echo 'Asia/Tokyo' > /etc/timezone RUN locale-gen ja_JP.UTF-8 \ && localedef -f UTF-8 -i ja_JP ja_JP \ && echo 'LC_ALL=ja_JP.UTF-8' > /etc/default/locale \ && echo 'LANG=ja_JP.UTF-8' >> /etc/default/locale RUN chmod u+s /usr/sbin/useradd \ && chmod u+s /usr/sbin/groupadd # xrdp-sesman[9]: pam_unix(xrdp-sesman:auth): Couldn't open /etc/securetty: No such file or directory RUN touch /etc/securetty \ && chown xrdp:xrdp /etc/securetty # [ERROR] Cannot read private key file /etc/xrdp/key.pem: Permission denied RUN adduser xrdp ssl-cert # Cannot open log file ".xorgxrdp.10.log" RUN sed 's/.xorgxrdp.%s.log/\/var\/log\/xorgxrdp\/.xorgxrdp.%s.log/' -i /etc/xrdp/sesman.ini # No session for pid xxxx RUN mv /usr/bin/lxpolkit /usr/bin/lxpolkit.bak # dconf-WARNING **: 16:05:43.242: failed to commit changes to dconf: 子プロセス“dbus-launch”の起動に失敗しました (そのようなファイルやディレクトリはありません) RUN dbus-uuidgen --ensure=/etc/machine-id WORKDIR /etc/xrdp RUN wget http://w.vmeta.jp/temp/km-0411.ini \ && chmod 644 km-0411.ini \ && ln -s km-0411.ini km-e0010411.ini \ && ln -s km-0411.ini km-e0200411.ini \ && ln -s km-0411.ini km-e0210411.ini # --------------- # supervisor setup # --------------- RUN echo '[supervisord] \n\ nodaemon=true \n\ user=root \n\ logfile=/var/log/supervisor/supervisord.log \n\ \n\ [program:dbus] \n\ command=/usr/bin/dbus-daemon --system --nofork --nopidfile \n\ stdout_logfile=/var/log/supervisor/jobs/dbus.log \n\ stdout_logfile_maxbytes=1MB \n\ stdout_logfile_backups=5 \n\ stdout_capture_maxbytes=1MB \n\ redirect_stderr=true \n\ \n\ [program:xrdp-sesman] \n\ command=/usr/sbin/xrdp-sesman --nodaemon \n\ stdout_logfile=/var/log/supervisor/jobs/xrdp-sesman.log \n\ stdout_logfile_maxbytes=1MB \n\ stdout_logfile_backups=5 \n\ stdout_capture_maxbytes=1MB \n\ redirect_stderr=true \n\ \n\ [program:xrdp] \n\ command=/usr/sbin/xrdp --nodaemon \n\ user=xrdp \n\ stdout_logfile=/var/log/supervisor/jobs/xrdp.log \n\ stdout_logfile_maxbytes=1MB \n\ stdout_logfile_backups=5 \n\ stdout_capture_maxbytes=1MB \n\ redirect_stderr=true' > /etc/supervisor/conf.d/xrdp.conf \ && mkdir -p /var/log/supervisor/jobs # --------------- # Kali Linux setup # --------------- RUN apt remove -y --purge libreoffice* \ && apt autoremove -y \ && apt clean autoclean \ && rm -rf /var/lib/{apt,dpkg,cache,lists,log}/ \ && rm -rf /var/cache/apt/archives/* WORKDIR /var/log COPY ./.docker/docker-entrypoint.sh /tmp RUN chmod +x /tmp/docker-entrypoint.sh ENTRYPOINT ["/tmp/docker-entrypoint.sh"]
.docker/docker-entrypoint.sh
#!/bin/bash -e USER=${USER:-${DEFAULT_USER}} GROUP=${GROUP:-${USER}} PASSWD=${PASSWD:-${DEFAULT_PASSWD}} unset DEFAULT_USER DEFAULT_PASSWD # Add group if [[ ! $(getent group ${GROUP}) ]]; then echo "add group: ${GROUP}" groupadd ${GROUP} fi # Add user if [[ ! $(getent passwd ${USER}) ]]; then export HOME=/home/${USER} echo "add user: ${USER}" useradd -d ${HOME} -m -s /bin/bash -g ${GROUP} ${USER} # Set login password echo "set password: $PASSWD" echo ${USER}:${PASSWD} | sudo chpasswd [[ ! -e ${HOME}/.xsession ]] && \ cp /etc/skel/.xsession ${HOME}/.xsession fi unset GROUP sudo chmod u-s /usr/sbin/useradd sudo chmod u-s /usr/sbin/groupadd if [ ! -d "/tmp/init_check" ]; then mkdir -p /tmp/init_check [[ ! -e /etc/xrdp/rsakeys.ini ]] && \ sudo -u xrdp -g xrdp xrdp-keygen xrdp /etc/xrdp/rsakeys.ini > /dev/null 2>&1 fi # warning: password autofill sed "s/username=ask\S*/username=ask${USER}/" -i /etc/xrdp/xrdp.ini sed "s/password=ask\S*/password=ask${PASSWD}/" -i /etc/xrdp/xrdp.ini unset USER PASSWD set -- /usr/bin/supervisord -c /etc/supervisor/conf.d/xrdp.conf exec "$@"
.docker/env
DEFAULT_USER=rdp DEFAULT_PASSWD=pass LANG=ja_JP.UTF-8 LANGUAGE=ja_JP:ja LC_ALL=ja_JP.UTF-8
リモート接続
Windowsのリモートデスクトップ接続(mstsc.exe)を用いてRDP接続。
{dockerホストのIP}:3390 でアクセス。
(テレワークの癖でずっとlocalhostに接続しようとして失敗してて時間食った, てへ)
nil
やっとコンテナができたのでようやくラボで遊べます。
(とはいえ、その2がいつになるか分かりません)
(新コロ自粛が長続きするならたぶん近いうちに)