Vuls・OpenVAS・Amazon Inspectorを徹底比較

この資料は2016.11.22（火）[OSSユーザーのための勉強会 < OSS X Users Meeting > #16 Vuls](https://www.scsk.jp/event/2016/20161122_2.html) のLT資料です。

# はじめに

脆弱性スキャナ「Vuls」と同様に、OSに含まれる脆弱性をチェックするツールとして「OpenVAS」がよく知られています。またAWS上では2016年4月より「Amazon Inspector」が正式にリリースされています。

これら３つのツールを機能及び検知結果で比較し、どれが最適なのか探りたいと思います。

***
# 概要・機能

***
# ターゲット
- Vuls
    - クラウド、オンプレミス、**Docker**
- OpenVAS
    - クラウド、オンプレミス、**ESXi**、**Cisco OS**
- Amazon Inspector
    - AWSでホストされた **EC2インスタンスのみ**
    - <div class='alert alert-warning'>InspectorはDirect Connectで繋がった**オンプレ環境**をスキャン対象に出来ない。</div>

***
# 収集アーキテクチャー
- Vuls
    - エージェントレス
        - 一般権限ユーザでSSH + **sudo（sudoerでyum or aptコマンドのみに制限可能）**
    - dockerコンテナに対しては「docker exec」。SSH不要。
    - スキャン対象サーバにSSH接続可能なマシン1台にセットアップするだけで動作

- OpenVAS
    - エージェントレス
        - **root権限を持ったユーザ**でSSH（Linux、Cisco OS）
        - Windows（SMB）
        - スキャン対象サーバにSSH接続可能なマシン1台にセットアップするだけで動作
        - <div class='alert alert-warning'>マニュアルでは下記のように書いてあるが、OSパッケージ（.rpm、.deb）に含まれているCVEの検知には一般ユーザで実施しても結果は変わらなかった。</div>

> http://docs.greenbone.net/GSM-Manual/gos-3.1/en/scanning.html#requirements-on-target-systems-with-linux-unix
> ■ 7.4.2. Requirements on Target Systems with Linux/UNIX
> For scans that include policy testing root permission or the membership in specific groups (often wheel) might be necessary. For security reasons many configuration files are only readable by super user or members of specific groups.


- Amazon Inspector
    - マニュアルより抜粋
        - Amazon Inspector の評価ターゲットを構成する EC2 インスタンス のセキュリティを評価するには、**各インスタンスにAWS エージェントをインストール**する必要があります。エージェントは、ネットワーク、ファイル システム、プロセス アクティビティなど、インストールされる EC2 インスタンス の動作をモニタリングして一連の動作や設定のデータ (テレメトリー) を収集し、このデータを Amazon Inspector サービスにパスします。
    - <div class='alert alert-warning'>InspectorはEC2インスタンスに**タグ**を設定し、該当タグを持つインスタンスを検査対象とする。仮にdockerコンテナ内にAWSエージェントをインストール出来たとしても、タグを振れない**dockerコンテナに対して検査することは出来ない**。</div>

***
# 対応OS
- Vuls
    - Amazon Linux（All）
    - Ubuntu（12, 14, 16）
    - **Debian**（7, 8）
    - RHEL（6, 7）
    - CentOS（5, 6, 7）
    - **FreeBSD**（10）

- OpenVAS
    - Linux（Debian系、RedHat系）
        - http://docs.greenbone.net/GSM-Manual/gos-3.1/en/scanning.html#requirements-on-target-systems-with-linux-unix
        - <div class='alert alert-success'>対応するディストリビューションの詳細の記載がないが、AmazonLinux、Ubuntu、RHEL6.X/7.X、CentOS6.X/7.Xで試して検知は出来た。</div>
    - Windows
        - http://docs.greenbone.net/GSM-Manual/gos-3.1/en/scanning.html#requirements-on-target-systems-with-windows

- Amazon Inspector
    - Amazon Linux (2015.03 以降)
    - Ubuntu (**14.04 LTS**)
    - Red Hat Enterprise Linux (**7.2**)
    - CentOS (**7.2**)
    - Windows Server 2008 R2 および Windows Server 2012【プレビュー】
        - <div class='alert alert-warning'>サポートされるディストリビューション及びバージョンの幅が狭い。CentOS6.8で試しに評価。エージェントのインストール・評価実行は正常にできるが、CVEを一つも検知出来なかった。</div>

***
# コスト
- Vuls
    - OSS（GPLv3）
- OpenVAS
    - OSS（GPLv2）
- Amazon Inspector
    - [従量課金](https://aws.amazon.com/jp/inspector/pricing/)
        - （2016/11/12現在）
        - <img width="500px" alt="" src="https://qiita-image-store.s3.amazonaws.com/0/54952/97de106d-5db2-b48d-abaf-fe59ddf447fd.png">
        - <div class='alert alert-info'> 10エージェントｘ30日ｘ0.25USD＝75USD（約8千円/月）</div>
        - <div class='alert alert-info'> 100エージェントｘ30日ｘ0.15USD＝450USD（約4万8千円/月）</div>

***
# スキャン内容
- Vuls
    - OSパッケージ（.rpm、.deb）に含まれているCVE
    - 下記OSパッケージ管理対象外の要素
        - CPEが明示されているプログラミング言語のフレームワークやライブラリ、ソースからインストールしたミドルウェア、ネットワーク機器
        - OWASP dependency checkと連携可能

- OpenVAS
    - 対象のマシンに導入されているソフトウェアのバージョンや設定、構成などを確認してそれらに脆弱性がないかどうかをチェック
    - 「Network Vulnerability Tests (NVTs)」というシグネチャーに基づいた脆弱性チェック
- Amazon Inspector
    - [共通脆弱性識別子](https://docs.aws.amazon.com/ja_jp/inspector/latest/userguide/inspector_cves.html)
    - [CIS オペレーティングシステムのセキュリティ設定ベンチマーク](https://docs.aws.amazon.com/ja_jp/inspector/latest/userguide/inspector_cis.html)
    - [セキュリティのベストプラクティス](https://docs.aws.amazon.com/ja_jp/inspector/latest/userguide/inspector_security-best-practices.html)
    - [実行時の動作の分析](https://docs.aws.amazon.com/ja_jp/inspector/latest/userguide/inspector_runtime-behavior-analysis.html)

***
# スキャン検証

***
- 検証日：2016/11/9
- スキャンターゲット
    - AWS EC2インスタンス
        - AMI：amzn-ami-hvm-2015.09.1.x86_64-gp2 (ami-383c1956)
        - インスタンス作成時に以下のオプションを付けて自動アップデートを無効化

             `#cloud-config`
             `repo_upgrade: none`

    - Vuls・OpenVASは上記スキャンターゲットホストとは別に用意したインスタンスにインストール
    - Amazon Inspectorのagentはスキャンターゲットホストに事前にインストールしておく。
    - インンストール済みrpm数：386個

***
# スキャン設定

OS内部スキャンの診断機能のみで比較する

- Vuls
    - v0.1.7（コミットハッシュ：e40ef656d6285148d5ac55a02516312e265bac90）
    - NVDのデータ全部をスキャン直前にfetch。

- OpenVAS
    - docker image「[mikesplain/openvas:latest](https://hub.docker.com/r/mikesplain/openvas/)」を使用
    - Scanner: OpenVAS Default (Type: OpenVAS Scanner)
    - Scan Config: Full and very deep ultimate

- Amazon Inspector
    - ルールパッケージ：Common Vulnerabilities and Exposures-1.1
    - 所要時間：15分

***
# スキャン結果

***
# スキャン時間

|  | 時間 |
|:-:|:-:|
| Vuls | 約5秒 |
| OpenVAS | 約8分  |
| Amazon Inspector | 15分  |

- Inspectorは指定した時間で終わるよう自動でスケールする模様。大規模環境だと逆転する可能性はある。

- Inspectorの実行の時間について
    - マニュアルには以下のように記載されている。
    - 「ルールパッケージ：Common Vulnerabilities and Exposures-1.1」を使い、「15 分・1 時間・8 時間」でそれぞれチェックしてみたが、検知されたCVEの数は変わらなかった。

```
時間は次のいずれかの値に設定できます。
15 分
1 時間 (推奨)
8 時間
12 時間
24 時間
評価テンプレートの時間が長いほど、Amazon Inspector は、より詳細かつ包括的なテレメトリーのセットを収集して分析します。
つまり、分析時間が長くなることで、Amazon Inspector は評価ターゲットの動作を細部にわたって確認し、より詳細な結果を提示
できるようになります。同様に、ターゲットに含まれる AWS リソースが評価の実行中により広く使用されているほど、
Amazon Inspector はより詳細かつ包括的なテレメトリーのセットを収集して分析します。
```

***
# 検知数比較方法
- VulsとAmazon InspectorはCVEベースで通知されるので、それを集計
- OpenVASはローカルスキャンに関してはALASベースのため、「References」の「CVE」を抜き出して重複を除いて集計
    - <img width="500px" alt="ファイル名" src="https://qiita-image-store.s3.amazonaws.com/0/54952/9a2ac650-1f0f-1462-868f-422c19b1f675.png">

***
# 検知数

|  | Vuls | OpenVAS | Amazon <br> Inspector |
|:-:|:-:|:-:|:-:|
| 検知数 | 180 | 165 | 169 |
| 誤検知の疑い | 0 | 12 | 3 |
| **正常検知数**<br>(=検知数－誤検知の疑い) | **180** | **153** | **166** |
| 未検知の疑い | 0 | 27 | 14 |



## [検知結果詳細リスト(PDF)](https://drive.google.com/open?id=0B8TOw0mslzP5WFVHa1gzdUh1T3M)
- コメント抜粋
    - <div class='alert alert-danger'>項番2、35はALASの説明文に誤りがあると思われるが、OpenVASはそれを参照してしまっているように思われる。</div>
    - <div class='alert alert-danger'>~~Inspectorは項番44 **CVE-2016-5195(Dirty COW)を検知できていない**。~~
        - 2016/11/12追試：Inspectorで検知できず。
        - 2016/11/21追試：Inspectorで検知。
        - [ALAS-2016-757](https://alas.aws.amazon.com/ALAS-2016-757.html)に本脆弱性が掲載され修正版が提供されたのは2016/10/20であり11/12の時点では検知しなかったことから、最低でも22日程度は検知できていない。このことからALASとInspectorは同期していないことがわかる。</div>
        - <div class='alert alert-success'>項番53 **CVE-2016-1000110(httpoxy)を検知出来たのは、Vulsだけ**。
            - 2016/11/21追試：変わらずVulsしか検知出来ていない</div>
    - <div class='alert alert-warning'>Inspectorが検知できるCVEのリストは以下に記載されている。どのぐらいの間隔で更新されているかは不明。</div>

```
このパッケージに含まれるルールは、EC2 インスタンス が次のリストの CVE に曝露されているかどうかを評価するのに役立ちます。
https://s3-us-west-2.amazonaws.com/rules-engine/CVEList.txt. CVE ルールパッケージは定期的に更新されます。
このリストには、このリストが取得されるときに同時に発生する評価の実行に含まれる CVE があります。
```

- AWS Discussion Forumsにて確認中
    - [Amazon Linux AMI Security Centerの記載誤りについて](https://forums.aws.amazon.com/thread.jspa?threadID=242957&tstart=0)
    - [Amazon Inspectorの検知結果についての疑問](https://forums.aws.amazon.com/thread.jspa?threadID=242929&tstart=0)


***
# レポーティング
- Vuls
    - CUI、WebUI、mail、slack、text、json、XML
    - **日本語表示可能**

- OpenVAS
    - WebUI、mail、HTML、CSV、XML、PDF
    - 英語のみ

- Amazon Inspector
    - WebUI、CSV（CSVで結果出力するAPIは無い？）
    - 英語のみ

***
# レポーティング画面の比較

- Vuls

<img width="700px" alt="" src="https://qiita-image-store.s3.amazonaws.com/0/54952/36289be1-3e97-a31a-8bf8-64f53bda504a.png">
<img width="700px" alt="" src="https://qiita-image-store.s3.amazonaws.com/0/54952/e39cd29f-d824-0b78-c41c-3a599e14e92e.png">
<img width="700px" alt="" src="https://qiita-image-store.s3.amazonaws.com/0/54952/da5eb140-bccb-4e7e-23c0-054439ffae31.png">

- OpenVAS

<img width="700px" alt="" src="https://qiita-image-store.s3.amazonaws.com/0/54952/8f2199cc-2604-b0a5-955b-0c53317ae54e.png">
<img width="700px" alt="" src="https://qiita-image-store.s3.amazonaws.com/0/54952/aa086b83-fbd9-81ca-a1a1-a95b3eb3a54f.png">

- Amazon Inspector 
<img width="700px" alt="" src="https://qiita-image-store.s3.amazonaws.com/0/54952/266a6bd6-737c-b8ce-e5aa-f63180ebf842.png">

    - 2016/11/13追記 結果リンクの下に、Severity別にフィルタできるようにインターフェースが追加された。
    - <img width="700px" alt="" src="https://qiita-image-store.s3.amazonaws.com/0/54952/903a2b05-2e09-ca13-06ff-27250aef912b.png">

- 検知結果のレポートについて
    - OpenVAS、Inspectorは結果をインタラクティブに集計する機能はない。CSVでダウンロードして他ツール（Excel等）で集計すべきか。
    - 日本語の説明を表示できるのはVulsだけ。

***
# まとめ

Amazon Linuxをスキャン対象に選んだのは、VulsやOpenVASが基本的に修正済みの脆弱性しか検知できないのに対し、Inspectorならば未修正パッケージの検知もできるのでは？という期待がありましたが、結果は振るいませんでした。

ただしOpenVAS、Inspectorは今回検証対象としなかったネットワーク脆弱性やプロセス アクティビティ、設定監査等の機能を持っており、Vulsとそれらを併用することで、より精度の高い脆弱性診断ができるようになると思います。