やっつけ不定記

好きなときに好きなことをちゃっちゃと書いてます

Re: Kali LinuxのOpenVASをDockerでやってみた

https://chocopurin.hatenablog.com/entry/2020/04/30/232003
の続きです。
Dockerfileをもとにコンテナを作成し、OpenVASのコンソールに
ログインするところまで行ってみます。
コマンド中の[]内は任意のものを入れます。

なお、プロキシを考慮していないので、プロキシ配下の環境でやる場合は
それなりの追加準備がいると思います。

(1)ビルド
$ sudo docker build . -t [ImageName:Tag]

(2)コンテナ作成
後のopenvas-setup時にファイルオープン数の上限チェックがあるため、
デフォルトの1024から12000程度(正確な数値失念・・・)より大きい値にします。
少し余裕を見て15000を設定しています。
$ sudo docker run -d -it -p 9392:9392 --ulimit nofile=15000:15000 --name [ContainerName] [ImageName:Tag] /bin/bash

(3)openvas-setup準備
コンテナ内に入って、OpenVASをリモートから使えるようにする設定をかけています。
コンソールへのアクセス時にHostヘッダを厳しく見ているとかで、
起動コマンドに --allow-header-hostオプションをつけてあげます。
https://community.greenbone.net/t/after-login-the-request-contained-an-unknown-or-invalid-host-header/951/11
もうちょっとがんばれば、この辺も自動化できるかも。
$ sudo docker exec -it [ContainerName] /bin/bash
[Container]# vi /lib/systemd/system/greenbone-security-assistant.service
ExecStart=/usr/sbin/gsad --foreground --listen=0.0.0.0 --port=9392 --mlisten=0.0.0.0 --mport=9390

ExecStart=/usr/sbin/gsad --foreground --listen=0.0.0.0 --port=9392 --mlisten=0.0.0.0 --mport=9390 --allow-header-host (待ち受けIPないしFQDN)

(4)openvas-setup
初期設定時の鬼門openvas-setupです。裏でRedisが動いているとのことで、
これを事前に起動しておかないとハマります。
かなり大きなダウンロードとシグネチャDBの設定が走ります。
前回書いたAWSの環境クラウド環境が威力を発揮してくれました(t3a.mediumで10分弱)。
[Container]# redis-server /etc/redis/redis-openvas.conf
[Container]# openvas-setup
・・・
[*] Opening Web UI (https://127.0.0.1:9392) in: 5... 4... 3... 2... 1...

[>] Checking for admin user
[*] Creating admin user
User created with password 'xxxxxxxxxxxxxxxxxxxxxxxxxx'.
(↑これがadminユーザのパスワードになる)
・・・

(5)openvas-check-setup
openvas-setupがちゃんとできたかを確認します。
[Container]# openvas-check-setup
・・・
(10STEPのチェックが走る)
It seems like your OpenVAS-9 installation is OK.
が表示されていればセットアップは完了です。

(6)動作確認
ブラウザから
https://(待ち受けIPないしFQDN):9392/
にアクセスして、(4)で表示されたadminユーザでログインする。
参考までに、待ち受けポートの状態はこんな感じ。
[Container]# ss -ltn
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:9390 0.0.0.0:*
LISTEN 0 128 0.0.0.0:9392 0.0.0.0:*
LISTEN 0 128 0.0.0.0:80 0.0.0.0:*

(7)参考:コンテナイメージのバックアップ(エクスポート)
[Container]# exit
$ sudo docker stop [ContainerName]
$ sudo docker export [ContainerName] | gzip > [FileName].tgz

(8)参考:コンテナイメージのリストア(インポート)
別のサーバにインポートした場合はgreenbone-security-assistant.serviceをいじる必要があります。
以下はローカルPCのVirtualBox(CentOS7)で動かしています。
# cat [FileName].tgz | docker import - [ImageName:Tag]
# docker run -d -it -p 9392:9392 --ulimit nofile=15000:15000 --name [ContainerName] [ImageName:Tag] /bin/bash
# docker exec -it [ContainerName] /bin/bash
[Container]# vi /lib/systemd/system/greenbone-security-assistant.service
(3)のExecStart部分を移行先に合わせて再設定する。
[Container]# openvas-stop
[Container]# systemctl daemon-reload
[Container]# exit
# docker stop [ContainerName]
# docker start [ContainerName]
# docker exec -it [ContainerName] /bin/bash
[Container]# redis-server /etc/redis/redis-openvas.conf
[Container]# openvas-start

f:id:chocopurin:20200502222333j:plain

ここから先は実際のスキャンとなりますが、自分の管理しているサイト以外では
絶対に試さないでください。マジで捕まります。

(Appendix)
CentOS8のPodmanでは(8)でpodman runすることになるのですが、
ulimitオプションを受け付けてくれませんでした。
Podmanのバージョン的に
https://bugzilla.redhat.com/show_bug.cgi?id=1746538
の現象に近い気がしないでもないのですが時間切れ。