ランサーズ等のサービスを開発・運用する中で得た知識やノウハウを紹介しています。

Labels:  SRE, Vuls 投稿者:adachin

ランサーズで脆弱性スキャナVulsを導入しました!!

5月にランサーズのSREチームに入社しました@adachin0817(あだちん)と申します。
(ちなみに以下の写真は看護師さんに見えると言われましたがエンジニアです。)

さてさて皆さん以下のブログをお読みになられましたか?
https://engineer.blog.lancers.jp/2018/06/5267/
SREチームの発足

普段はインフラ改善、開発環境構築、新規インフラ構築、コードレビュー、分析基盤の運用などを行っています。そこで、今回SREチームが4人になったことで、セキュリティ強化のため、Linuxの脆弱性対応はマストで行おうと決めました。

皆さま日々Linuxの脆弱性対応をしていますでしょうか?..


・脆弱性を追いたいけどNVDやJVNを追うのは…(ツライ)
・Twitterやメールなどでアナウンスされてバタバタしちゃう…(脂汗)
・そういえば管理しているサーバの脆弱性ってどのくらいあるんだろう…(白目)

・そもそも脆弱性アップデートとかしていない…(ギグっ)
・とりあえず置いとこう…(諦め)

なんて経験ある方は多いと思います。
SREは日本語で「サイト信頼性エンジニア」と言われますが、もちろんセキュリティの担保も該当します。そこでVulsは脆弱性の検知や管理の手段として、今熱いOSSとなっています。

今回はランサーズでのVuls運用と今後の展望についてブログします!

脆弱性スキャナVulsとは/インストール方法

簡単にまとめますと、

・Linuxサーバに存在する脆弱性をスキャン
Ubuntu, Debian, CentOS, Amazon Linux, RHELに対応、dockerも

・OSパッケージ管理対象外のミドルウェアをスキャン
プログラミング言語のライブラリやフレームワーク、ミドルウェアの脆弱性スキャン
CPEに登録されているソフトウェアが対象

・エージェントレスアーキテクチャ
スキャン対象サーバにSSH接続可能なマシン1台にセットアップするだけで動作

・設定ファイルのテンプレート自動生成
CIDRを指定してサーバを自動検出、設定ファイルのテンプレートを生成

・EmailやSlackなど通知可能(日本語でのレポートも可能)

・付属するTerminal-Based User Interfaceビューアでは、Vim風キーバインドでスキャン結果を参照可能

・開発者はフューチャーアーキテクトの神戸氏

VulsはGolangでできています。基本Linuxの脆弱性をスキャンしますのでアプリケーションレベルでの脆弱性スキャンはできません。スキャン方法はSSHで接続するのでPull型となります。つまり、vulsユーザを作りansibleで公開鍵を配布するのがベストかと思います。

https://blog.adachin.me/archives/5540
【脆弱性スキャナ】Vulsをインストールしてみた!

インストール方法は非常に簡単でございます。
上記の私のブログを参考にしてもらえば幸いでございます!!

Lancers x Vuls

■環境

・Amazon Linux
・vuls v0.4.2 92f36ca

・vulsrepo
・go1.10.2 linux/amd64

本番環境と検証環境はAWSアカウントが別なので、各踏み台サーバにインストールして管理することにしました。

スキャン対象ホストですがホストもLB配下に置いてないからスキャンしないではなく、可動しているサーバ全てにスキャンするようにして、いつでも最新のKernelなどバージョンに保つようにしています。なぜ全て?と思われますが、実際弊社でどのくらいのサーバが運用されているのか、こんなサーバあったっけ?何動いてるっけ?などがないように、サーバ自体の管理も行えるからです。

また、コミュニケーションツールとしてChatWorkが主流となっています。
実は私が入社前に開発して下記のようにいい感じに通知しています。(脆弱性がない場合は再起動必要か,ホスト名,OS名と表示しています)もちろんSlackにも通知させていますが、今後Slackに完全移行することになりました!!(トホホ..)

Vuls 定期実行

$ sudo crontab -l
#run vuls-auto.sh
00 09 * * 3 sudo -u vuls bash -l /home/vuls/vuls/vuls-auto.sh /tmp/vuls.log 2&>1

毎週水曜日の午前9時にvuls-auto.shというシェルスクリプトを叩いています。
毎日スキャンしてもいいのですが、1週間に1回ということで、日々アップデートされるKernelなどは量がかなり多いため、1ヶ月に1回というペースでサーバ再起動をしています。

今までscan,reportをわざわざcrontabに直接書いていましたが、管理し難いことがあったので、
スクリプトにすることで「nvd,jvn,ovalらがupdate、scan、report」らが一つになりました。
下記のgistで管理しているのでぜひ使ってみてください!

・vuls-auto.sh

https://gist.github.com/RVIRUS0817/5228ead105329438f8f643d6b1849bd0

・vuls reportでオプションはどんな感じ?

$ vuls report -format-short-text -format-json -to-slack -to-chatwork -cvss-over=7 -lang=ja -ignore-unfixed

・ -cvss-over
CVSSスコアが7以上で通知させるようにしています。(鬼のようにくるので汗)
・ -ignore-unfixed
弊社は主にAmazon Linuxを使っていますが、一部Ubuntuもあります。Amazon Linuxは主に該当しませんが、下記のようにまだ脆弱性未対応なものは-ignore-unfixedを付け足すことで通知させないようにしています。

VulsRepo

VulsRepoというVulsでスキャンしたデータを可視化するOSSがあるのですが、もちろん弊社でも利用して、社内のみにアクセスできるようにしています。
実際に脆弱性のレベルやJVNなどのリンクに飛べたりなど詳細が細かく可視化されます。これにより、開発者やSREチームでも「この脆弱性は対応したほうがイイね!」など議論ができるので、今後の未知なる脆弱性にも対応しやすくなると思います。

今後Vuls運用でやっていきたいこと/まとめ

resultsで出力されるJSONファイルをBigQueryに同期して、Redashで今月どのくらいこのホストには脆弱性が出てるなど、簡単に可視化されたらSREチームでも共有できますし、さらに脆弱性対応も捗りそうです!

まだ運用して1ヶ月ですが、チーム内でアップデートすることでサービス影響ないのか!?などと議論していますが、ランサーズでも脆弱性対応をし続けることで、サービスの安全性を高められることは間違いないと思います。ユーザ様も安心/安全にサービスを使ってほしいのが我々弊社エンジニアの願いです。

Vulsは早いスピードで新機能がリリースされていっています。私も今後OSS活動として企業さんが導入されるよう広報していきますので、まだ導入していない方はぜひともおすすめします!!
今年のVuls祭りでは私もお手伝いなどやらせて頂くことになりましたので、その時はぜひお話しましょう!!

あ、

開発ランチ(Lunchers)で神戸さん(@kotakanbe)呼ぼう!!!!😁

お昼はボードゲームを主にやっているので、
オフィス近い方はぜひ!!!

ランサーズではサービスを成長させてくれるエンジニア、デザイナーを募集しています!
ご興味がある方は、以下URLよりご応募ください。


【中途採用】
サービスリードエンジニア
テックリード(アーキテクト)
フロントエンドエンジニア
サーバーサイドエンジニア
業務エンジニア(社内システム基盤・基幹システム)

【インターン・学生バイト】
19新卒対象サマーインターン
エンジニアインターン

その他採用情報

関連記事

ランサーズの社内Wi-Fi環境を改善した話 〜見えない無線との戦い〜

SREチームの上原と申します。 ランサーズのSREチームでは、社内インフラの整備も担当しています。 今回は社内Wi-Fi環境の改善を行いましたので事例として共有いたします。 社内Wi-Fiが抱えていた課題 ランサーズ社内のWi-Fiは、大きく2つの課題を抱えて …

SREチームの発足

SREチームの金澤です。 2018年度より、SREチームを発足しました。 その経緯をお話ししたいと思います。 インフラエンジニアとして 私は、2013年11月にランサーズに入社しました。 ランサーズ5年目にして、サービスが本格的に伸び始めた時期で、アプリエンジ …

ランサーズ開発合宿2018 バージョンアップチーム

SREチームの金澤です。 ランサーズ開発合宿のバージョンアップチームの成果についてお話させていただきます。 ランサーズのバージョンアッププロジェクト 現在、ランサーズのバージョンアップはSREチームが主導で行っています。 バージョンアップは、以下のフェーズにわ …