M1/M2 Mac に UTM で Kali Linux 2023.2a を立ち上げ、OpenVAS を設定する

## やりたいこと

M1/M2 Mac に VM で Kali Linux を立ち上げ、Nessus から派生した OSS な脆弱性スキャンツール OpenVAS をインストールする。

## 環境等

- Apple M2 Max
- Ventura 13.4.1 (c)
- UTM 4.2.5 (81)
- Kali Linux 2023.2a
- OpenVAS: 22.4.1

## UTM をインストール

VirtualBox の Apple Silicon 用は、Developer Preview で、試してみたけど良くなかったのでやめ（いま[ダウンロードページ](https://www.virtualbox.org/wiki/Downloads)に行ったら見当たらない）、UTM を利用することにした。
まずは、UTM をダウンロードする。

https://mac.getutm.app/

サイトからダウンロードすると無料、AppStore からダウンロードすると 10 ドルくらい。どちらも同じもののようだ。ファンになったら寄付もできるよくらいのスタンスが気持ち良い。知らんけど。

インストールで躓くことはないと思われるので、省略。
UTM の使い方は、基本的には、iso イメージを取ってきて、それを実行するだけだ。

インストール中に、パーティションがどうとか諸々あってちょっと不安になるが、Host マシン自体のシステムには何の変更も行われないので、気軽にトライして良い。

## Kali Linux をインストールする

まずは、Kali Linux のインストールイメージをダウンロードする。

https://www.kali.org/get-kali/#kali-installer-images

![Screenshot 2023-07-30 at 10.03.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245908/f0497f8c-1abd-0ada-1238-15994a632e63.png)

Apple Silicon (ARM64) のものをダウンロードすれば良い。

どうしても以前の特定のバージョンが欲しい人は、こちらから。

https://old.kali.org/kali-images/

今回は、2023.2a をインストールする。2022.2 以外手順は同じだ。
基本的な手順は、M1 Mac に Kali Linux 2022.2 をインストールする以下動画を参考にした。

https://www.youtube.com/watch?v=Z2e-fRLxXnU

この動画の説明に、2022.2 以外は UTM では動かないと書いてあるが、そんなことはないし、apt upgrade するとぶっ壊れて不便なので、最新版を入れる。

2022.2 以外をインストールしようとすると、インストールイメージを起動しても何も進まない。Kali Linux に限らず、こうなってしまう場合の対処方法は、Built-in Terminal で接続する。

イメージをロードしたら、設定で Devices > + New > Serial を追加する。

![Screenshot 2023-07-30 at 10.34.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245908/56967074-fd92-9b71-c667-88490f2c6d64.png)
![Screenshot 2023-07-30 at 10.08.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245908/a7df5e6a-cffa-87f3-8923-3c69152c7ccb.png)

これでインストールイメージを起動すると Window が 2 つ立ち上がるので、動く方で進めれば良い。
インストールが完了したら、この設定は不要なので、Remove してしまって良い。何かの理由でまた利用したくなったら、再度追加すれば良い。

![Screenshot 2023-07-30 at 10.43.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245908/f3867c96-ee00-8ef8-8a4c-0c7727c7c0ed.png)

というわけで、無事インストール完了。upgrade しても平気だ。


## OpenVAS をインストール・設定する

まずは、OpenVAS をインストールする。

```zsh
$ sudo apt install openvas
```

このあと設定、設定確認の流れだが、失敗する。

```zsh
$ sudo gvm-setup
```

と打つと、初っ端で PostgreSQL 関連でエラーが出る。エラーが出てもそのまま進むが、結果失敗するので、止めてしまって良い。最後まで見て、```sudo gvm-check-setup```とすると、出来てないと言われるだけ。

### Permission を付与する

今回は、ユーザは kali で作ったので、以下 kali で進めるが適宜読み替えてください。
```
could not change directory to "/home/kali"
```

エラー内容は、permission がなくて書き込めないというエラー。```sudo``` なのにと思うが、```postgres``` ユーザが書き込めないという話しなので、権限を与える。

```zsh
$ chmod og+rX /home /home/kali
```

### collation version を一致させる。

再度、```sudo gvm-setup``` をすると今度は別のエラーが出る。
エラーメッセージをメモるのを忘れたが、```collation version mismatch``` というエラーが出る。ググると、エラーメッセージに HINT がついていて、そこに答えが書いてあるみたいだが、そんなものはなかったような気がする。

この時点で、PostgreSQL は起動しているはずだが、起動していない場合は、起動して入る。

```zsh
$ sudo systemctl start postgresql
$ sudo -u postgres psql
psql (15.3 (Debian 15.3.0+deb12u1))
```

```\l``` で確認すると、```postgres, template0, template1``` の 3 つの Database が確認できる。```gvm-setup``` で作成されるはずの ```gvmd``` はまだない。

Collation version を一致させる。

```sql
ALTER DATABASE postgres REFRESH COLLATION VERSION;
ALTER DATABASE template1 REFRESH COLLATION VERSION;
```

template0 だったか template1 だったかアヤフヤ。どっちかは失敗する。このあと作る gvmd は template を元に？作成されるので、ALTER DATABASE は必要ない。

### gvmd データベースを作成する
```gvm-setup``` で作成に失敗したので、手動にて。

```zsh
$ sudo runuser -u postgres -- /usr/share/gvm/create-postgresql-database
```

### OpenVAS を設定する
これで準備が整ったので、再度

```zsh
$ sudo gvm-setup
```

を実行すると、時間はかかるが、今度はうまく行く。

```zsh
$ sudo gvm-check-setup

...
It seems like your GVM-22.4.1 installation is OK.
```

### admin パスワードを設定する

これで、インストール・セットアップが完了したので、ブラウザで、```https://127.0.0.1:9392``` にアクセスする。

![Screenshot 2023-07-30 at 19.41.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245908/3834f671-a7f0-9950-f681-ee1968ce4167.png)

おー、ちゃんと動いてると思うも、Username? Password?? 設定した覚えないけど…
```gvm-setup``` コマンドを実行した際に、PostgreSQL に ```admin``` ユーザを作成し、そこでパスワードも設定されているはずなのだが、画面に出てきたかな？出てきていたかも知れないが、メモらなきゃと思うほどはっきりは出てこなかった。

という訳で設定する。```sudo gvmd --user=admin --new-password=nimda``` と打つと、特にエラーも出ないが Reset には失敗するので、

```
$ sudo -E -u _gvm gvmd --user=admin --new-password=nimda
```

これでパスワードのリセットが完了する。

### Port List を取り込む

![Screenshot 2023-07-30 at 19.53.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245908/4f461f8a-91fc-f396-1f66-e67689016b18.png)

再度ブラウザで ```https://127.0.0.1:9392``` にアクセスし、ログイン。
Scans > Tasks > Task Wizard で自分自身を Scan してみる。

```
Failed to find port_list ‘33d0cd82-57c6-11e1-8ed1-406186ea4fc5‘
```

というエラーがでる。
これは公式のドキュメントに解決方法が書いてある。

https://greenbone.github.io/docs/latest/22.4/source-build/troubleshooting.html#failed-to-find-port-list-33d0cd82-57c6-11e1-8ed1-406186ea4fc5

そのままコピペでやると失敗するので以下で。
```zsh
$ sudo -E -u _gvm greenbone-feed-sync --type GVMD_DATA
$ sudo -E -u _gvm gvmd --rebuild-gvmd-data=all
```


これで、全て使えるようになったので、スキャン！

![Screenshot 2023-07-30 at 20.09.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245908/23769fbd-a16b-d7f3-eeaa-5615aa4c83f8.png)
![Screenshot 2023-07-30 at 20.12.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245908/a5aa59f5-3ebe-8308-1ee5-562a5b94ee39.png)

検知された笑

Happy Hacking!