1. はじめに
とある事情で Kali Linux を入れる必要があったので、現在使っているノートパソコン (Ubuntu20.04) とデュアルブートしようとしていたが、何故かインストールがうまくいかなかった。そのため、Docker Container として環境を構築してみる。
ここでは、以下3つの要件を満たすようにしたい。
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 の方は有志の方が作ってくださっていた。ありがたい。