LINEで送る
Pocket

Vuls祭り#3 から酷く体調不良のあだちんです。
祭りの後に、Vulsパンフレットをもらい….
Zabbixと連携ができる!?と書いてあったので、
そっちのほうがいいじゃないかとなり試してみました。

が!

VulsRepoもあるしZabbixはZabbixでリソースモニタリングのみにして
VulsはVulsで動かそうと考えて結局、なしになり、
改めて運用方法(定期実行)を変えたのでブログします。


定期実行

定期実行方法は毎回脆弱性情報更新、スキャン、レポートをcronでいちいち指定していました。これ汚いしシェルでいいんじゃないと思ったわけです。

【脆弱性スキャン】vuls scanとreportを定期実行したい場合

↑以前紹介したブログでも


脆弱性スキャナVulsのスキャン結果をZabbixへ連携しアラート通知する

https://qiita.com/usiusi360/items/5a9341575d4901598658

うっしー様のQiitaに上記のフローをシェルで書いてたものを発見したので
改良してみました!


構成

今までvulsユーザ配下直で管理していたのでちゃんとvulsディレクトリを作成して管理しましたw
VulsRepoも同様に。

・vuls_autoscan.sh

#!/bin/bash
RETRY=3
PAST_YEAR=2
########################
VULS_HOME=`cd $(dirname $0) && pwd`
VULS_LOG="${VULS_HOME}/results"
my_logger() {
local priority="user.info"
logger -i -p $priority -t `basename $0` "$1"
}
update() {
local target=$1
local last_year=`date +%Y`
local first_year=`expr ${last_year}${PAST_YEAR} + 1`
local years=""
for i in `seq ${first_year} 1 ${last_year}`
do
years="${years} $i"
done
for i in `seq 1 ${RETRY}`
do
go-cve-dictionary fetch${target} ${PROXY} -years $years
if [ $? -eq 0 ];then
my_logger "[INFO] Update success. [${target}]"
break
else
if [ $i -lt $RETRY ];then
my_logger "[INFO] Update retry. [${target}] (count=$i)"
sleep 10
else
my_logger "[ERROR] Update retry over. [${target}] (count=$i)"
fi
fi
done
}
update_oval() {
local target=$1
local option="$2"
for i in `seq 1 ${RETRY}`
do
goval-dictionary fetch-${target} ${PROXY} ${option}
if [ $? -eq 0 ];then
my_logger "[INFO] Update-OVAL success. [${target}]"
break
else
if [ $i -lt $RETRY ];then
my_logger "[INFO] Update-OVAL retry. [${target}] (count=$i)"
sleep 5
else
my_logger "[ERROR] Update-OVAL retry over. [${target}] (count=$i)"
fi
fi
done
}
scan(){
vuls scan
}
report(){
#vuls report -format-short-text(v0.4.2) -format-json -to-slack -cvss-over=7 -lang=ja -ignore-unfixed
vuls report -format-one-line-text -format-json -to-slack -to-s3 -cvss-over=7 -lang=ja -ignore-unfixed
}
rotate(){
firstDay=`date '+%Y-%m-01'`
agoYear=`date -d "$firstDay 1 months ago" '+%Y'`
agoMonth=`date -d "$firstDay 1 months ago" '+%m'`
mkdir ${VULS_LOG}/$agoYear$agoMonth > /dev/null 2>&1
mv ${VULS_LOG}/$agoYear$agoMonth* ${VULS_LOG}/$agoYear$agoMonth > /dev/null 2>&1
}
#======
cd ${VULS_HOME}
if [ $? -ne 0 ];then
my_logger "[ERROR] path not found [${VULS_HOME}]"
exit 1
fi
## update ##
update nvd
update jvn
## update oval ##
update_oval redhat "5 6 7"
#update_oval debian "7 8 9 10"
#update_oval ubuntu "12 14 16"
#update_oval oracle
## vuls scan ##
scan
## vuls report ##
report
## rotate ##
#rotate
exit 0

view raw
vuls_autoscan.sh
hosted with ❤ by GitHub

こんな感じでzabbixの部分を外してreportにはslack、json、cvss-over、日本語化にも対応させました。

・cron

これでcronもキレイに!

・/tmp/vuls.log

 

ちゃんと脆弱性情報更新してスキャンしてるのでOK!


まとめ

zabbixと連携したほうがアラートで「脆弱性来たよ!」
と通知させるのもOKだし、zabbixのグラフでどのくらい脆弱性あるのか可視化するのもいいですね。

結局VulsRepoが可視化ぱないので、一旦これで運用してみます!
それにこのログをredashで可視化したら面白そう。
月にどのくらい脆弱性対応したとか。

LINEで送る
Pocket

カテゴリー: VulsZabbix

adachin

1989年生まれのLancers SRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わり、AnsibleやTerraformでのインフラコード化を推進。副業では数社サーバー保守、未経験によるエンジニアのメンターなども実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。現在はサービスの信頼性向上、可用性、レイテンシ、パフォーマンス、モニタリング、緊急対応、インフラコード化、リファクタリング、セキュリティ強化、新技術の検証、Docker開発環境の提供、AWSでのインフラ構築、グループ会社のインフラをECS/Fargateへ移行、CakePHP4での管理画面作成、メンター、分析基盤の運用を担当している。

0件のコメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください