立ち話

興味があることを書いてます。正確な内容は公式ドキュメントや参考文献を確認してください。ブログに示された意見はすべて個人の見解であり、所属する組織の公式見解ではありません。

Ubuntu20.04 に Docker Container として Kali Linux を導入して、GUIで使いたい

1. はじめに

とある事情で Kali Linux を入れる必要があったので、現在使っているノートパソコン (Ubuntu20.04) とデュアルブートしようとしていたが、何故かインストールがうまくいかなかった。そのため、Docker Container として環境を構築してみる。

ここでは、以下3つの要件を満たすようにしたい。

  1. Kali Linux の基本的なツールが使える (CUI)
  2. ノートパソコンが接続しているサブネットと同一のサブネットの機器と通信可能
  3. (可能であれば) GUIで使う

2. 準備

Docker Engineをインストールする。私は Ubuntu を使用しているので、コマンドラインから Docker をインストールする。インストールのためのシェルスクリプトを作成した1

上記シェルスクリプトの実行後、再起動をすると Docker Engine が使えるようになる。

Ubuntu18.04および20.04で動作することを確認している。スクリプトは私のGitHubリポジトリにも上げている2

3. Kali Linux の導入

3.1 イメージファイルのダウンロード

Kali Linux では、Docker Hub に公式の Docker Image を上げているそうなので、それを利用する (Official Kali Linux Docker Images | Kali Linux Documentation)。

Docker Hub の kalilinux/kali-rolling がデフォルトのイメージなので、これを使う。

docker pull をする。

docker pull kalilinux/kali-rolling

3.2 ネットワークの作成

Docker Container が接続するネットワークを作成する。ここでは、kali-network という名前のネットワークを作成する。

docker network create kali-network

上記コマンドでネットワーク作成後、docker network ls をすると、

tcbn@N14xZU:~$ docker network ls
NETWORK ID     NAME           DRIVER    SCOPE
8b1cc3352942   bridge         bridge    local
9aa1455f82a9   host           host      local
03cbc1bfd02b   kali-network   bridge    local
2f4c77efe200   none           null      local

のようになる。

3.3 コンテナの作成

まずは、要件1と2が満たされるようなコンテナを作成してみる3

docker run -dit --network kali-network -v "$PWD":/root/workspace/ -w /root/workspace/ --name kali-docker-cui kalilinux/kali-rolling:latest

このコマンドを実行すると、kalilinux/kali-rolling:latest をもとにコンテナが作成される。

各オプションの意味を以下の表に示す。

Option Meaning
-dit コンテナをバックグラウンドで実行させる (デタッチモード)
--network [network_name] Dockerネットワークを [network_name] で指定する
-v [local_path]:[container_path] [local_path]で指定されたボリュームをコンテナ内の[container_path]にマウントする
-w [workspace_path] コンテナ内のワークスペース[workspace_path] にする
--name [container_name] コンテナの名前を [container_name] にする

次に、コンテナ内部に入る。

docker exec -it kali-docker-cui /bin/bash

上記コマンドを実行すると、コンテナ内に入ることができる。

基本的なツールを使うためには、kali-linux-default をインストールすれば良いらしい (Kali Linux Metapackages | Kali Linux Documentation )。また、ping等も使えなかったので、インストールしておく4

apt-get update
apt-get -y install kali-linux-default iputils-ping net-tools

かなり時間がかかるので、暇なときや寝る前などに行うことを推奨する。途中何度かyes or noや番号で答える箇所があるが、英語を読んで良さそうな選択肢を選べばよい。

インストールが完了したら、Kali Linux のツールを使えるか確認する。例えば、msfconsole が使えるかを確認する。

また、ノートパソコンが接続しているサブネットと同一のサブネットの機器と通信可能かどうかを確かめる。ホスト側のIPアドレスを調べ、そのサブネットに接続できるかを確認する。

ping [IP address]

ここまでで要件1と2が満たされることが確認できた。

一旦 bash から抜けて、コンテナをイメージとして保存する。

exit
docker commit kali-docker-cui kali-docker-cui:v0.1
docker image ls | grep kali-docker-cui

保存し終えたことを確認したら docker stop でコンテナを停止し、docker rm でコンテナを削除する。

docker stop kali-docker-cui
docker rm kali-docker-cui

先ほど作成した kali-docker-cui からコンテナが作成できることが確認できる。

tcbn@N14xZU:~/Documents/Docker/kali_linux$ docker run -dit --network kali-network -v "$PWD":/root/workspace/ -w /root/workspace/ --name kali-docker-cui kali-docker-cui:v0.1 
90fe363923da00ef573ff45e3a58b85d4d83fa7a9602af4c4556880e68badaf7
tcbn@N14xZU:~/Documents/Docker/kali_linux$ docker exec -it kali-docker-cui /bin/bash
┌──(root㉿90fe363923da)-[~/workspace]
└─# 

4. GUIで使う

GUIとして利用するには、VNCがインストールされたイメージファイルを使う。いくつかのイメージファイルがあるが、ここでは iphoneintosh/kali-docker を使う。まずはデスクトップが使えるかテストする。

docker pull iphoneintosh/kali-docker:latest
docker run --rm -it -p 9020:8080 -p 9021:5900 iphoneintosh/kali-docker:latest

このコマンド実行後に、https://localhost:9020/vnc.html にアクセスすると、GUIとして表示される。パスワードはデフォルトで changeme となっているようだ。

このままでは Kali の基本的なツールが使えないので、3.3 と同様にインストールする。

一旦 exit でコンテナを抜けて (--rmオプションをつけているので、削除される)、ネットワーク、コンテナ名、ボリュームなどを指定して新しいコンテナを作成し、3.3と同様に基本的なツールをインストールする。コンテナ作成時は例えば、以下のように指定する。

tcbn@N14xZU:~/Documents/Docker/kali_gui$ docker run -it --network kali-network -v "$PWD":/root/workspace/ -w /root/workspace/ --name kali-docker-gui -p 9020:8080 -p 9021:5900 iphoneintosh/kali-docker:latest

そして、3.3と同様に、

apt-get update
apt-get -y install kali-linux-default iputils-ping net-tools

を実行する5。 基本的なツールは使うことができるようである (Wiresharkなど起動しないものもあった)。VNCクライアントから接続しようと思ったが、接続できなかったので今回は諦めた。ブラウザで接続することにする。

5. まとめ

ここでは、Docker Container として Kali Linux を導入する方法をまとめた。公式が Kali Linux のイメージを作っていてくれているのは大きい。

GUI の方は有志の方が作ってくださっていた。ありがたい。


  1. 参考: Docker Engine のインストールと使用法(Ubuntu 上)

  2. TIL/install_docker.sh at main · tcbn-ai/TIL · GitHub

  3. 追記: Ubuntu側のホームディレクトリをマウントしていたことに途中で気付き、新しくコンテナを作成し直したので、途中からIDが変わっている。

  4. 参考: docker イメージの中にpingとかないとき

  5. 後で気付いたが、default tools をインストールしたものを用意してくれていたので、iphoneintosh/kali-docker:default を指定すれば良かった。