経緯
自宅のサーバ(CentOS 7.9)のリプレースに伴って、共用で入れていたOpenVASが無くなるので、それを機に新しいツールを使ってみようと思ったので立ち上げてみました。
今までのマシンを止めてリプレースに至った理由
- セキュリティを担当しているのに長年自宅で使っているサーバが、サポート期限が切れていた事(理由は後述)
- OpenVASが何故かバージョンを上げると動かない
- 元々別用途として使っていた個人の音楽ストリーミングシステムがCentOS8以降(もしくは互換OS)が非対応なこと
- 色々なOSSを駆使して、WAFとLoggingの要塞と化していたこと
がありました。
一番メインで作ってるストリーミングのOSSがCentOSの8以降は動かない、個人で保有している音楽要領が数百GBに及んでクラウドで稼働させるにはちょっと金額がという状態だったため、リプレースを踏み悩んでいたのですが、少し前(前々職)で退職の際に、古いSynologyのDS916+と引っ越し後にGMKTecという最新機を手に入れていたのでちょっとずつ機能移管をして先日リプレースが完了したので入れたという状態です。
余談
それでもCentOS7系はもうだいぶ古いでしょって突っ込みがあるかも知れませんが、記載しているWAFとrsysglogが少しやっかいで、内部及び外部からのアクセス時に特定通信をウィルススキャンをする様にしていたので簡単に止められた無かったのもあります。
ですが、今回CentOS7の当該システムのサポート及び定義データの更新が終了に伴って停止するという事も必要でした。
リプレース時に使ったOS
今回、色々ベースOSについては悩んだのですが、どうしても移管しないと行けない物で
は必須で必要だったので、こちらが対応している物という前提条件があったので、Almah Linux 9を使うことにしました。
インストール
vulsは、OSSでできている脆弱性スキャナになります。
今後も利用するという事を前提にDockerとかではなく、Manualインストールを行います。
インストール手順はリンク先そのままを利用しましたが、詳細を軽く書いておこうと思います。
また、実際にやるときはsudo権限を保有しているユーザで実施してください。
記載しているユーザなどは各位で変えていただく必要があります。
GOのインストール
GOの最新版URLはこちら
$ export latest_version=1.14.2 # Latest Go release as of writing
$ sudo yum -y install sqlite git gcc make wget
$ wget https://dl.google.com/go/go$latest_version.linux-amd64.tar.gz
$ sudo tar -C /usr/local -xzf go$latest_version.linux-amd64.tar.gz
$ mkdir $HOME/go
環境変数にパスを通して、再ログインしても平気な設定を追加
$ sudo vi /etc/profile.d/goenv.sh
下記を追加して保存
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
変数読み込み
$ source /etc/profile.d/goenv.sh
脆弱性スキャナーと基本的な脆弱性情報をインストール 1
$ sudo mkdir /var/log/vuls
$ sudo chown <user> /var/log/vuls
$ sudo chmod 700 /var/log/vuls
$ mkdir -p $GOPATH/src/github.com/vulsio
$ cd $GOPATH/src/github.com/vulsio
$ git clone https://github.com/vulsio/go-cve-dictionary.git
$ cd go-cve-dictionary
$ make install
$ cd $HOME
$ go-cve-dictionary fetch nvd
$ ls -alh cve.sqlite3
$ cd $HOME
$ go-cve-dictionary fetch jvn
$ ls -alh cve.sqlite3
$ mkdir -p $GOPATH/src/github.com/vulsio
$ cd $GOPATH/src/github.com/vulsio
$ git clone https://github.com/vulsio/goval-dictionary.git
$ cd goval-dictionary
$ make install
$ ln -s $GOPATH/src/github.com/vulsio/goval-dictionary/oval.sqlite3 $HOME/oval.sqlite3
各OSごとの脆弱性情報のインストール
記載しておきますが、必要な物だけインストールすれば良いかと思います。
私は以下をインストールしましたが、それぞれ必要な物を公式Githubを参照にインストールしてください
Redhat系向け
$ goval-dictionary fetch redhat 5 6 7 8 9
Ubuntu向け
$ goval-dictionary fetch ubuntu 14.04 16.04 18.04 20.04 21.04 21.10 22.04 22.10 23.04 23.10 24.04
Amazon Linux向け
$ goval-dictionary fetch amazon 1 2 2022 2023
脆弱性スキャナーと基本的な脆弱性情報をインストール 2
$ sudo mkdir /var/log/gost
$ sudo chown <user> /var/log/gost
$ sudo chmod 700 /var/log/gost
$ mkdir -p $GOPATH/src/github.com/vulsio
$ cd $GOPATH/src/github.com/vulsio
$ git clone https://github.com/vulsio/gost.git
$ cd gost
$ make install
$ ln -s $GOPATH/src/github.com/vulsio/gost/gost.sqlite3 $HOME/gost.sqlite
こちらも派閥ごと単位で取得してます。
私は以下を取得
Redhat系
$ gost fetch redhat
Ubuntu系
$ gost fetch ubuntu
Windows系
$ gost fetch microsoft
侵入検査ツールのインストール
$ sudo mkdir /var/log/go-exploitdb
$ sudo chown <user> /var/log/go-exploitdb
$ sudo chmod 700 /var/log/go-exploitdb
$ mkdir -p $GOPATH/src/github.com/vulsio
$ cd $GOPATH/src/github.com/vulsio
$ git clone https://github.com/vulsio/go-exploitdb.git
$ cd go-exploitdb
$ make install
$ ln -s $GOPATH/src/github.com/vulsio/go-exploitdb/go-exploitdb.sqlite3 $HOME/go-exploitdb.sqlite3
$ go-exploitdb fetch exploitdb
$ go-exploitdb fetch awesomepoc
$ go-exploitdb fetch githubrepos
$ go-exploitdb fetch inthewild
$ sudo mkdir /var/log/go-msfdb
$ sudo chown <user> /var/log/go-msfdb
$ sudo chmod 700 /var/log/go-msfdb
$ mkdir -p $GOPATH/src/github.com/vulsio
$ cd $GOPATH/src/github.com/vulsio
$ git clone https://github.com/vulsio/go-msfdb.git
$ cd go-msfdb
$ make install
$ ln -s $GOPATH/src/github.com/vulsio/go-msfdb/go-msfdb.sqlite3 $HOME/go-msfdb.sqlite3
$ go-msfdb fetch msfdb
$ sudo mkdir /var/log/go-kev
$ sudo chown <user> /var/log/go-kev
$ sudo chmod 700 /var/log/go-kev
$ mkdir -p $GOPATH/src/github.com/vulsio
$ cd $GOPATH/src/github.com/vulsio
$ git clone https://github.com/vulsio/go-kev.git
$ cd go-kev
$ make install
$ ln -s $GOPATH/src/github.com/vulsio/go-kev/go-kev.sqlite3 $HOME/go-kev.sqlite3
$ go-kev fetch kevuln
$ sudo mkdir /var/log/go-cti
$ sudo chown <user> /var/log/go-cti
$ sudo chmod 700 /var/log/go-cti
$ mkdir -p $GOPATH/src/github.com/vulsio
$ cd $GOPATH/src/github.com/vulsio
$ git clone https://github.com/vulsio/go-cti.git
$ cd go-cti
$ make install
$ ln -s $GOPATH/src/github.com/vulsio/go-cti/go-cti.sqlite3 $HOME/go-cti.sqlite3
$ go-cti fetch threat
$ mkdir -p $GOPATH/src/github.com/future-architect
$ cd $GOPATH/src/github.com/future-architect
$ git clone https://github.com/future-architect/vuls.git
$ cd vuls
$ make install
$ rm -rf $GOPATH/pkg/linux_amd64/github.com/future-architect/vuls/
$ rm -rf $GOPATH/src/github.com/future-architect/vuls/
$ cd $GOPATH/src/github.com/future-architect
$ git clone https://github.com/future-architect/vuls.git
$ cd vuls
$ make install
インストールをしたマシンをスキャン
$ cd $HOME
$ vi config.toml
以下を記載して保存
[servers]
[servers.localhost]
host = "localhost"
port = "local"
作成したconfigの正常性確認
$ vuls configtest
実際のスキャン
$ vuls scan
レポートの取り出し
$ vuls report -format-one-line-text
レポートの出し方は色々あります。
公式ページを参照して出してみてください。
One Line Summary
================
localhost Total: 496 (Critical:5 High:77 Medium:398 Low:16 ?:0) 0/496 Fixed 994 installed 60 poc 0 exploits cisa: 0, uscert: 0, jpcert: 0 alerts
こんな感じで出ます。
リモートにスキャン
こっちがちょっと面倒です。条件は以下
- 鍵認証でSSHできること
- 接続先のユーザがsudo権限を持っていること
- 鍵のパスワードが無い事
となります。
設定を実施の上、ローカルスキャンをしたときに作ったconfigデータに追記します。
末尾に以下を追記
[servers."remote servername"]
user = "remote username"
host = "remote host"
port = "SSH port"
keyPath = "secrets_authorized_key"
そしてスキャンを実行
$ vuls scan "remote servername"
レポートの出し方は同じです。
雑談2
vuls tui
という物もあり、こちらを用いるとグラフィカルだったりCLIでも比較的見やすい状態でレポートを確認することができます。
試してみてください。
所感
OSS番 AWS Inspectorと言った感じでした。
内部脆弱性スキャンを行うときには少し重宝しそうです。
良くないなって思う点
リモートスキャンはSSHが必須となっているみたいです。
そのため、SSHが出来ない物にはスキャンでいないなー不便だなぁとは思いました。
なにか別の方法有るのかな?ともちょっと思って居ます。
良いなと思う点
比較的、設定は大変ですが一度設定してしまえば定期的スキャンは簡単だなぁと思っています。
また、同時に通知などもメールだけでは無くSlack等に飛ばせるというのはとても良いなと思いました。
総合的に思うこと
OpenVASが比較的動かない環境では動かない
みたいな状態になっているのもあって、可能ならOpenVASの代替になる物が欲しいなと思っています。
完全AgentLess、外部や内部にスキャンをかけられるもの(SSH等も不要)
スペックとか確認してだけど、元々OpenVASから袂別れしたNessusが再びCommunity Editonを出したと効いているので、実施してみたいなとも思ってたりします。