セキュリティスキャナーのVulsが便利です。
セキュリティスキャナーは脆弱性がないかチェックする為のツール。Vulsサーバから各サーバをクライアントとしてスキャンすることでサーバ群のパッケージの脆弱性情報を一元管理出来ます。
Vuls TUIモード
エージェントレスで、Zabbixと同じようなイメージで脆弱性監視が出来るのです。何が良いかというと、脆弱性が発表される度に各種サーバにログインを行い、発表された脆弱性に該当しないか手動でチェックする手間がなくなることです。パッケージの脆弱性については、Vulsサーバから管理下にあるサーバ群を見渡せます。
また、脆弱性スキャンをかける為の脆弱性データベースをNVD, JVNから通常取得しますが、今回は更にRedHatディストリビューション系の脆弱性データベース取得のTipsです。
環境
- CentOS7(Vulsサーバ)
- goバージョン 1.9
- Vuls構築済 構築手順御参考:
https://github.com/future-architect/vuls/blob/master/README.ja.md
RedHat系脆弱性データベース取得方法
1 |
$ cd $GOPATH/src/github.com/kotakanbe |
1 |
$ git clone https://github.com/kotakanbe/goval-dictionary.git |
1 |
$ cd goval-dictionary |
1 |
$ make install |
1 |
$ goval-dictionary fetch-redhat -dbpath=$HOME/oval.sqlite3 5 6 7 |
他、Debian, SUSEなどディストリビューションに合わせたOVALが用意されています。
https://github.com/kotakanbe/goval-dictionary
ここではい、おしまい。
となっても少々物足りないので、NVD, JVNの取得も書いておきます。
NVD の場合
1 |
$ for i in `seq 2002 $(date +"%Y")`; do go-cve-dictionary fetchnvd -years $i; done |
National Vulnerability Database (NVD)
NISTが管理している脆弱性情報データベースである。米国が2002年に発表した「サイバーセキュリティ国家戦略」において、「国土安全保障局は一般市民に対して、脆弱性情報を通知する義務がある」という理由によって、ICATをベースに機能強化されたものとして作成された。
NISTはMITRE/CVEのスポンサーであり、CVEで命名された脆弱性情報の詳細情報をNVDで提供するという住み分けを行なっている。また、他の脆弱性情報データベースとの違いとして、Common Vulnerability Scoring System(通称CVSS)による危険度の採点を行なっている点が挙げられる。
JVNの場合 日本語脆弱性辞書
1 |
$ for i in `seq 1998 $(date +"%Y")`; do go-cve-dictionary fetchjvn -years $i; done |
Japan Vulnerability Notes (JVN)
JPCERT/CCと情報処理推進機構(IPA)が共同で管理している脆弱性情報データベースである。公式略称はJVN。CVEの管理団体が米国であるために日本での脆弱性情報が網羅されているわけではなく、そのような事情を鑑みて日本の脆弱性情報に焦点を置いたものとなっている。
構築の検討は2002年から行なわれており、当初は「JPCERT/CC Vendor Status Notes」の名前で作成される予定であった[4][5]。その後の検討の結果、「Japan vendor status notes」(この略称もJVN)の名前で2004年7月より正式に運用を開始する。この頃は一般向けに脆弱性情報を公開するものではなく、サイト管理者向けのものであった。しかし2007年4月25日、現在の名前である「Japan Vulnerability Notes」に名前を変えるとともに、内容も一般向けのものとしてリニューアル公開し、現在に至っている。
取得したOVALを利用してVulsでスキャンしてみよう!
-ovaldb-path $HOME/oval.sqlite3など、環境によって異なりますが脆弱性情報データベースの絶対パスを指定してあげましょ~!
1 |
$ vuls report -format-full-text -cvedb-path=$PWD/cve.sqlite3 -ovaldb-path $HOME/oval.sqlite3 -cvss-over=7 |
脆弱性データベースの更新方法
1 2 3 4 5 |
$ go-cve-dictionary fetchnvd -last2y -dbpath=$HOME/cve.sqlite3 > /dev/null 2>&1 $ go-cve-dictionary fetchjvn -last2y -dbpath=$HOME/cve.sqlite3 > /dev/null 2>&1 $ goval-dictionary fetch-redhat -dbpath=$HOME/oval.sqlite3 5 6 7 > /dev/null 2>&1 |
定期更新スクリプトの作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# vi /root/vulscheck.sh #!/bin/bash ## =========================== VULS_USER=hogeuser ## =========================== cd /home/$VULS_USER # CVE, OVALアップデート go-cve-dictionary fetchnvd -last2y -dbpath=$HOME/cve.sqlite3 > /dev/null 2>&1 go-cve-dictionary fetchjvn -last2y -dbpath=$HOME/cve.sqlite3 > /dev/null 2>&1 goval-dictionary fetch-redhat -dbpath=$HOME/oval.sqlite3 5 6 7 > /dev/null 2>&1 # スキャンとメール送信 /home/$VULS_USER/go/bin/vuls report -format-full-text -cvedb-path=$PWD/cve.sqlite3 -ovaldb-path $HOME/oval.sqlite3 -cvss-over=7 --lang=ja -format-one-email -to-email > /dev/null 2>&1 |
実行権限の付与
1 |
# chmod +x /root/vulscheck.sh |
定期実行設定
1 2 3 4 |
# vi /etc/crontab ## 朝6時30分にVulsによるチェックを行う 30 6 * * * hogeuser /root/vulscheck.sh |
反映を行います。
1 |
# systemctl restart crond |
これでメールが届けば大成功ですね!
今回のようにOSのディストリのOVALも設定してあげれば、より適切にスキャンが出来るかと思います。
お疲れ様です。
システムガーディアンのVulsへの関わり
社内のESXi上にVulsサーバを設置し、許可を頂いているお客様のサーバ群に対してパッケージへの定期的な脆弱性スキャンを行っております。
また、外部のセキュリティ専門会社と業務提携を行い、オプションサービスとして、
- サーバへのプラットフォーム診断
- アプリへの脆弱性診断
- 目視によるコードレビュー
といった総合的な脆弱性診断サービスをお客様に提供しています。