update.vulsは脆弱性確認を楽にしてくれる可能性を秘めた、サーバー運用者にとって期待のツールです。さんから有益な情報を頂いたのと、その後有益な記事を参考にしたのとで、大幅に文章を修正しました。(=簡略化できた)ので、別記事としています。上記変更に伴い、実行例や実行コマンド例も変えました。導入手順は基本的にオフィシャルに従えば良いのですが、AWSベースで書かれています。本記事はオンプレ用に端折った手順のメモです。以下、環境はCentOS7で、2016/06/14に実施した手順です。本手順で入るgo-cve-dictionaryおよびvulsのバージョンは以下です。0.1.4前回の記事で作ったサーバーで入れ直しをしているため、多少手順の記載漏れをしているかもしれません。事前準備ここでの作業はCentOS7上で、全てrootユーザーを想定しています。事前に必要なパッケージをインストールします。goはtarでダウンロードするので、ちょっとめんどくさいですね。go1.6.linux-amd64.tar.gz/etc/profile.d/goenv.shを作成してこのように記載します。PATH=$PATH:$GOROOT/bin:$GOPATH/bin一回ログアウトして再度ログインすれば、goenv.shが適用されてgoコマンドが使用できるはずです。SSH公開鍵認証の設定vulsはAnsibleやChefのように、公開鍵認証のSSHを使用しているようです。検査対象サーバー(ここではローカルホスト)には事前にSSH周りの設定をしておきましょう。このあたり、AnsibleやChefなどのSSHユーザー管理の話と同じですので、ここでは割愛します。私の環境ではAnsibleに使用しているユーザーを使用することにしました。以下はSSH公開鍵設定の手順例です。~/.ssh/authorized_keyssshuserで、SSHで対象サーバーにノーパスで入れることを確認しましょう。導入手順ここからの作業は、先ほどのsshuserで作業することを想定しています。sshusercve-dictionaryの初期構築go-cve-dictionaryインストールgo-cve-dictionaryをダウンロード&インストールしましょう。0.1.1go-cve-dictionaryがインストールされました。前回記事と違って、GOPATH(各自のホームディレクトリ以下)に実行ファイルがあれば十分です。ディレクトリの準備ログディレクトリおよび辞書ディレクトリを作り、sshuserに書込権限を渡しておきます。この部分はsudoしないと(root権限を取らないと)、おそらく権限不足で失敗するかと思います。/var/vuls/dict脆弱性辞書の準備2002年〜2016年に発生した脆弱性について、辞書を取得します。数分は時間が掛かるので注意しましょう。done辞書ディレクトリにsqlite3ファイルができたことを確認します。cve.sqlite3日本語の脆弱性情報も追加しておきましょう。こちらはもっと時間が掛かります。日本語でなくても良い、という方は、この項目は飛ばしてください。続く手順を先に眺めてください。github.com/future-architect/vulsCentOSの標準yumリポジトリでは、git-1.X系列しかダウンロード出来ないはずです。getが詰まってしまいます。そこでwandiscoのリポジトリからgit-2.xをインストールします。git-2.xのインストール本節の作業はrootユーザーで、あるいはsudoで実行してください。/etc/yum.repos.d/wandisco.repoを作成します。sshuserに戻るのを忘れないようにご注意を。0.1.4vulsも入りました。前回記事と違って、GOPATH(各自のホームディレクトリ以下)に実行ファイルがあれば十分です。先ほど作ったvulsサーバーにてconfig.tomlファイルを作成します。現在のvulsはカレントディレクトリ以下にあるconfig.tomlファイルを読み、カレントディレクトリ以下に結果を出力するのが基本動作です。-configオプションでconfig.tomlのパスを指定することもできます。以下は設定毎にディレクトリを作っている例です。config.toml中身はこのように書いていきます。詳しくはオフィシャルを参照してください。prepareを実行します。これにより、SSHの動作確認ができるとともに、動作に必要なyumプラグインが検査対象サーバーにインストールされます。scanここまで準備出来れば、脆弱性スキャンが実行できます。稼働中のホストへのスキャンは気をつけてください。レポートの出力形式はヘルプを見て、適当なものを選びましょう。ディレクトリに出力されています。results/current/*.txtall.txtホスト名.txt定期的な実行を考える定期的な実行をし続けることで、運用をもっと楽したいと思います。脆弱性情報の定期的な更新とりあえずcronに仕込んじゃいましょう。コマンドの中身そのものはそれぞれ簡単なワンライナーで、「過去2年間の最新情報を取得する」+「過去1週間の日本語脆弱性辞書を更新する」というものです。2>&1HOME環境変数及び実行ユーザーのsshuserは環境に合わせてください。負荷をかけないように適当に変えてください。定期的に診断を実行するなら、どうやって通知するのが適切か考える必要があります。vulsはslackに投げる機能もあるのですが、脆弱性発見時は結構な文章量になることを想定して、メール通知で始めてみることにしました。メール通知を設定するCronで実行するためのconfigファイルを作成します。/var/vuls/cron/config.toml自動実行して負荷をかけても問題ないサーバーをスキャン対象にしておきましょう。このとき、configファイルの先頭に[mail]ブロックを作成します。詳しくはオフィシャルの設定を見るとして、こんな感じでローカルのsmtpサーバーを使って送信してしまいます。以下スキャン対象のサーバーの指定なお、オフィシャルではsmtpPortオプションはintegerに見えるのですが、文字列(ダブルクォートで囲む)じゃないとうまく動作しませんでした。この辺は近々直るはずです。scanを実行する設定をCronに仕込みます。本書の手順では、先ほどのconfigファイルは/var/vuls/cronに置いているので、vulsコマンド実行前にcdしています。コマンド末尾の出力言語部分は好みで選んでください。毎朝嫌というほど脆弱性通知メールが来ることが期待できます。重要な脆弱性だけ知りたいすべて潰すのがツラい。重要な脆弱性だけ知りたい。・・・という場合は、-cvss-over=Xというパラメータを付けましょう。CVSSスコア7以上だけを通知する場合は以下の様なcron設定になります。2>&1もっとメール量を減らして差分だけを知りたいという場合はこちらの記事が参考になります。最後に以上で、脆弱性を自動スキャンしてメール通知する仕組みを構築しました。前回の記事よりはすっきりした手順になっているかな、と思います。数々の気付きを下記の記事から得ました。良い記事をありがとうございます。requestStockLike49@Etsインフラエンジニア。スクリプト系の言語を中心に勉強してます。ドラフト」および不動産情報サイト「IESHIL」などを開発・運営しています。upLoginユーザーは見つかりませんでした。