Vuls〜OSSの脆弱性検知ツール〜
近年、個人・企業を問わず、様々な場面で「Open Source Software(オープンソースソフトウェア)」が利用されています。(以下OSS)OSSではソースコードが無料で公開されているため、誰でも利用できるうえに初期導入コストを抑えることができます。また、世界の優秀な開発者が集まった「開発コミュニティ」によって、日々高度な最新技術が提供されています。しかし、OSSの利用拡大とともに、ソフトウェアの脆弱性が日々発見されているのも事実です。そのためシステム管理者は、その情報を追従して対策を実施する必要があります。管理対象のサーバが多くなるにつれて作業負荷が大きくなり、そのため脆弱性対策の自動化が必要となってきます。
ここでは、OSSの脆弱性診断ツールであるVulsの紹介をします。
Vulsとは
Vulsとは「VULnerability Scanner」の略称で、LinuxやFreeBSDを対象にした脆弱性診断ツールです。フューチャーアーキテクトの神戸氏によって開発され、2016年4月からOSSとしてGithub8上に公開されています。開発言語は、Goでかかれています。
Vulsは脆弱性の対応を行ううえで、以下の3点を自動化する役割を担っています。
- 運用管理しているサーバにインストールされているソフトウェアの情報を把握する
- 公開されている脆弱性データベース等を参照し、ソフトウェアの脆弱性情報を入手する
- 脆弱性情報を入手した時、運用管理しているサーバに影響があるかどうかを調べる
Vulsの特徴
Vulsには、以下の特徴があります。
- 脆弱性関連情報の収集・診断を自動化
多くのサーバやソフトウェアを担当するシステム管理者にとって、脆弱性対策のための情報収集は手間のかかる作業です。Vulsでは、NVD(National Vulnerability Database)とJVN(Japan Vulnerability Notes)や、各ディストリビューションなどが提供する脆弱性情報を自動で取得します。その情報をもとに、管理下のソフトウェアに対する脆弱性診断を自動で行います。そのため、リアルタイムでの脆弱性診断が可能となり、システム管理者の負担を減らすことができます。
- 日本語への対応
Vulsは、情報収集元として、日本語版であるJVN iPediaに対応しています。JVN iPedia翻訳済みの情報があれば、診断結果を日本語で出力することが可能となっています。こうした面でも、利用者の負担を減らす工夫がされています。
- エージェントのインストールは不要
Vulsではエージェントレスのアーキテクチャを採用しており、簡単に導入することができます。Vulsを導入したサーバに、一連のソフトウェアパッケージをインストールするだけで、複数のシステムの脆弱性診断が可能となります。
- コンテナの脆弱性診断が可能
VulsはDocker・LXD・LXCといったコンテナの脆弱性診断にも対応しており、コンテナが動作中でも診断が可能です。ただし、コンテナイメージの脆弱性診断には対応していません。
Vulsの機能
Vulsのもつ主な機能は以下の通りです。
脆弱性データベースの入手
脆弱性に関する情報は日々公表され、右肩上がりで増加しています。自身で運用管理するサーバの脆弱性について調べようと大量の情報の中から、自身に影響がある脆弱性のみを適切に収集するのは困難です。Vulsは、NVD・JVDをはじめとした、多種多様な脆弱性データベースを入手して診断を行います。最新の情報も含んだ上で診断が可能となり、利用者の負担を減らすことができます。
以下が、Vulsが利用する脆弱性データベースの一例です
|
|
脆弱性スキャンの実施
Vulsは、入手した脆弱性データベースをもとに、対象サーバの脆弱性スキャンを実施します。
OSをスキャンする場合
以下が、VulsでサポートされているOSです。
|
|
また、OSの機能であるcronで別途設定を行えば、定期的な脆弱性のスキャンが可能となります。脆弱性の情報を漏らすリスクを防ぐことができるので、積極的に行ったほうがいいでしょう。スキャンの方法については次に記載をします。
ローカルサーバをスキャンする場合
Vulsをインストールしたサーバ自体をスキャンしたい場合、SSH接続は不要です。本体で設定を行うだけでスキャン可能です。
リモートサーバをスキャンする場合
スキャンしたいサーバに、SSH接続を行うだけでスキャンが可能です。非破壊スキャンで実行されるため、サーバの設定変更やアプリケーションのインストールなどが必要ありません。システムに影響を及ぼすことがないので、安心して利用できます。
コンテナ・コンテナイメージをスキャンする場合
コンテナ
ここでは、コンテナのうち「Docker」でのスキャン実施についてお伝えします。コンテナは、通常SSH接続でのログインができません。そのため、Vulsでは「docker exec」コマンドを利用してスキャンを行います。Dockerコンテナ内にSSHデーモンも必要ありません。ただし、通常の場合Dockerコンテナの操作を一般ユーザで行うことはできませんスキャンにはrootユーザを利用するか、もしくは一般ユーザでDockerコンテナ内の操作を可能にする設定が必要です。
コンテナイメージ
動作中のコンテナだけでなく、コンテナイメージにもスキャン可能です。コンテナイメージのスキャンには、Trivyやfanalなどのツールを内部的に利用しています。Vulsが対応するコンテナイメージのスキャン対象は以下の通りです。
- ローカルリポジトリ
- Docker HUB
- Amazon ECR
- GCR
プログラミング言語のライブラリやフレームワーク、ミドルウェアをスキャンする場合
通常Vulsでは、OSパッケージマネージャでインストールしたソフトウェアをスキャンします。しかし、スキャン対象のソフトウェアがCPE(Common Platform Enumeration)に登録されていれば、プログラミング言語のライブラリやフレームワーク、ミドルウェアもスキャンが可能となります。
診断結果のレポート出力
脆弱性診断が完了した後に、結果のレポートを出力することができます。以下のように、診断結果のサマリを出力することが可能です。
$ vuls report -format-one-line-text -config vuls-config.toml (中略) target01 Total: 250 (High:66 Medium:139 Low:45 ?:0) 0/250 Fixed 447 installed, 1 updatable 0? ,!exploits en: 6, ja: 3 alerts target02 Total: 143 (High:40 Medium:71 Low:32 ?:0) 4/143 Fixed 418 installed, 35 updatable 0? ,!exploits en: 0, ja: 0 alerts
- 一覧の出力
以下のように、検出された脆弱性の一覧を出力することができます。
- 詳細の出力
以下のように、診断結果の詳細を出力することができます。
JVNの情報を利用し、日本語での出力も可能です。
- TUIでの出力確認
脆弱性の検知結果を確認する際に、TUI(Terminal-Based User Interface)を利用することができます。
- WEB UI(VulsRepo)での出力確認
VulsRepoを利用すると、WEB UIで診断結果を確認できます。診断結果を表やグラフで表示することができるため、非常に見やすいです。
表やグラフの縦軸・横軸はオペレータが自由に変更でき、欲しい情報を見やすい形で表示できる設計となっています。
他にも、ExcelやElasticSearchと連携することができ、レポート1つ取り上げても、その幅広さがうかがえます。
スキャン結果の通知
Vulsは、作成した診断結果レポートを、Emailで送信することができます。診断対象サーバごとに1通ずつ送れたり、診断対象サーバ全てを1通にまとめて送ることも可能です。また、チャットサービスであるSlackにも診断結果を投稿できます。以下は、通知方法の一覧です。
|
|
Vulsではできないこと
ソフトウェアアップデート
脆弱性診断とレポート作成を行ってくれるVulsですが、ソフトウェアのバージョンアップは行ってくれません。Vulsで利用するソフトウェアのバージョンを上げたい場合は、再インストールが必要となります。手順書のアップデートもその都度必要となり、手間がかかります。導入にあたっては、この点についても考慮したほうがよいでしょう。
デージーネットの取り組み
脆弱性が発見された場合にはその対策を検討しますが、影響が少ない、該当する機能を利用していない等の理由から対策を見送ることがあります。対策を見送った脆弱性については、後に実施する診断では報告されないようにするため、Vulsの除外設定の機能を使用しています。また、Vulsはインストールされているソフトウェアはすべて診断対象としているため、使用していないソフトウェアについても脆弱性の報告が上がってしまいます。できるだけ脆弱性の報告を少なくするために、必要なソフトウェアだけしかインストールしないようにしています。
デージーネットでは、上記のような工夫を行い、より安全に、よりシステム管理者の負担を減らせるようなVulsの使い方を推奨しています。
「情報の一覧」
Vuls調査報告書 1.01版
Vuls(VULnerability Scanner)は、オープンソースソフトウェアの脆弱性診断ツールです。Vulsはgolangで作成されており、LinuxやFreeBSDで動作します。本書は、Vulsの機能と使用方法について調査した内容をまとめたものです。
Docker〜コンテナ型仮想化〜
Dockerとは、docker社が開発しているコンテナ型仮想化の実装の1つです。オープンソースソフトウェアとして公開されていて、コンテナ型仮想化としては、事実上のデファクトスタンダードとなっています。
Kubernetes〜コンテナ管理の課題を解決するOSS〜
Kubernetesとは、コンテナの管理を自動化するためのソフトウェアです。コンテナは完全仮想環境化に比べ、ディスク、メモリ消費量を少量で利用できます。またサービスの起動が高速でバージョン管理を容易に行うことができます。Kubernetesを使用すると、コンテナの長所を最大限に活用することができます。
Falco〜コンテナの侵入・改ざん検知ツール〜
Falcoとは、OSSのコンテナランタイムセキュリティソフトウェアです。主にKubernetesを代表するコンテナ環境をターゲットにされています。ここではFalcoの特徴や利用方法などについて説明いたします。
Trivy〜コンテナイメージの脆弱性診断ツール〜
Trivyとは、コンテナイメージの脆弱性診断ツールです。ここではTrivyの機能や特徴などについて説明いたします。
構築事例:OpenVASによるセキュリティ診断
お客様から費用を抑えるためにご自身で診断を行いたいというご要望をいただきました。そこで、自身で継続してセキュリティ診断を行えるOpenVASを導入しました。しかし、OpenVASのGUIは英語のため、利用に不安を感じられていました。そのため、OpenVASのセキュリティ診断の手順を作成し提供しました。
サーバ仮想化とは?仮想基盤で使えるソフトウェアまとめ
仮想化環境を構築すると、物理リソースの削減による社内スペースの確保、リソースの効率的な管理、運用コストの削減などが実現できます。この記事では、仮想化に関連したソフトウェアを、4つのカテゴリでご紹介します。