ローカル・リモートスキャン

FutureVulsでサーバの脆弱性をスキャンするためには、スキャナプログラムのインストールが必要です。
FutureVulsでは、2種類のモードを備えております。

  • ローカルスキャン

    • スキャナプログラムをインストールしたサーバ自身のみスキャンを行います。
      • インストーラはデフォルトではローカルスキャンに設定します。
      • ローカルスキャンではSSHによるログイン設定は不要です。
  • リモートスキャン

    • スキャナプログラムをインストールしたサーバをスキャン実行サーバとし、同じネットワークに接続されたサーバへSSHログインしてスキャンを行います。
    • コンフィグファイルへ設定を追加することにより、各サーバへスキャナプログラムをインストールすることなくスキャンが行えます。
    • スキャン対象サーバへSSHでログインするため、スキャン実行サーバからリモートログイン可能なユーザアカウントが必要です。

ローカルスキャン

1. グループ管理者権限を持つユーザでFutureVulsへログインしたあと、右上にあるアイコンをクリックし「グループ設定」へアクセスしてください。

2. 左のリストから「スキャナ」をクリックします。インストール用コマンドが表示されるため、それをコピーします。

3. スキャナプログラムのインストールを行うサーバ上にて「2.」でコピーしたコマンドを実行します。このとき以下のように特権を持ったユーザで実行してください。

  • Linuxの場合 :「root権限」を付与されたユーザでログイン

以下のメッセージが出力された場合は、root権限を付与されたユーザにスイッチし再実行してください。

2017/11/08 06:04:19 [START      ]:      chkRootUser
2017/11/08 06:04:19 [ERROR      ]:      Please run as root user.
  • Windowsの場合 : コマンドプロンプト起動時に右クリックし「管理者として実行」から起動

install

4.インストール後、定期実行が行われると自動的にスキャンが行われ、スキャン結果がFutureVulsへアップロードされます。

リモートスキャン

リモートスキャンの設定方法を説明します。 スキャナをセットアップしたサーバを「スキャナサーバ」、 脆弱性スキャン対象のサーバを「スキャン対象サーバ」と記載します。 スキャナサーバはLinuxのみ対応、スキャン対象サーバはLinux, Windowsに対応しています。

スキャン対象サーバ上での準備

リモートスキャンでは、スキャン対象サーバ上にて下記の設定が必要です。(Linuxの場合のみ)

スキャナのインストール

スキャナサーバに上記ローカルスキャンの手順のとおり、スキャナプログラムを導入します。

FutureVulsではリモートサーバのスキャンを行う際は、RSA公開鍵認証によるSSHログインを行います(パスワード認証には対応しておりません)。 リモートサーバにログインできるユーザと秘密鍵、公開鍵をご用意ください。

コンフィグファイルの修正

リモートのサーバをスキャンする場合は、以下のとおりコンフィグファイルに設定を追加します。

  • コンフィグファイルパス:/opt/vuls-saas/config.toml
$ vi /opt/vuls-saas/config.toml

[servers]

[servers.localhost]
  host = "localhost"
  port = "local"
# ↑↑ ローカルスキャンの設定はインストーラにより自動設定されます ↑↑

# ↓↓ スキャン対象サーバの設定をお使いの環境に合わせて追記します ↓↓
# ex)
[servers.<サーバ名>]
  user = "vuls-saas"                          ←<リモートログインに使用するユーザ名>
  host = "192.168.0.100"                      ←<リモートログイン先サーバ:IPアドレスまたは名前解決できるサーバ名>
  port = "22"                                 ←<リモートログイン先のポート番号>
  keyPath = "/opt/vuls-saas/vuls-saas.pem"    ←<秘密鍵の配置場所>

  ~~~~

keyPathにはスキャン対象サーバのSSH秘密鍵を指定します。 重複する内容は「default」に記載することで省略できます。

[default]
#port        = "22"
#user        = "username"
#keyPath     = "/home/username/.ssh/id_rsa"

複数のサーバをリモートスキャンする場合

以下のようにスキャン対象サーバを複数定義します。 UUIDは定義されていなければreport時に自動生成されます。

  • コンフィグファイルパス:/opt/vuls-saas/config.toml
[default]
  port = "22"
  keyPath = "/home/vuls-saas/.ssh/stg.pem"
  scanMode = ["fast-root"]

[servers]

  [servers.ama2]
    user = "ec2-user"
    host = "13.113.92.xx"
    [servers.ama2.uuids]
      ama2 = "xxxxxxxxxxxxxxxxxxxxxxxxx"

  [servers.dev]
    user = "ubuntu"
    host = "54.248.62.xx"
    [servers.dev.uuids]
      dev = "zzzzzzzzzzzzzzzzzzzzzzzzzz"

CIDRレンジを指定して範囲内のサーバを一斉にリモートスキャンする場合

設定ファイル内にCIDRレンジを指定することで、範囲内のすべてのサーバに対してリモートスキャンが可能です。 以下のように定義します。

  • コンフィグファイルパス:/opt/vuls-saas/config.toml
[default]
  port = "22"
  scanMode = ["fast-root"]

[servers]

  [servers.testNW-target]
    user = "ec2-user"
    host = "192.168.0.60/31"
    keyPath = "/home/vuls-saas/.ssh/auth.pem"

スキャンが実行されると、スキャナは指定した範囲内のすべてのIPアドレスに対しリモートスキャンを試み、成功すると各サーバごとの設定情報で上書きします。

  • スキャン後のコンフィグファイル
[default]
  port = "22"
  scanMode = ["fast-root"]

[servers]

  [servers."testNW-target(192.168.0.60)"]
    user = "ec2-user"
    host = "192.168.0.60"
    keyPath = "/home/vuls-saas/.ssh/auth.pem"
    [servers."testNW-target(192.168.0.60)".uuids]
      "testNW-target(192.168.0.60)" = "bab806a2-59b7-628f-ff6b-c620df7191ca"

  [servers."testNW-target(192.168.0.61)"]
    user = "ec2-user"
    host = "192.168.0.61"
    keyPath = "/home/vuls-saas/.ssh/auth.pem"
    [servers."testNW-target(192.168.0.61)".uuids]
      "testNW-target(192.168.0.61)" = "dbad42bd-f045-5485-1189-f6a6e4d09a01"

2回目以降のスキャンでは、設定ファイルに記載の情報を基に、各サーバへリモートスキャンが実行されます。

特定のサーバを指定してリモートスキャンする方法

  • /opt/vuls-saas/vuls-saas.sh を以下のように変更します。
$ su - vuls-saas
$ cd /opt/vuls-saas
$ cp vuls-saas.sh vuls-saas.sh.bak
$ vim vuls-saas.sh
$ diff vuls-saas.sh*
diff vuls-saas.sh*
16c16
< ./vuls scan -ips ${@} > scan.log 2>&1
---
> ./vuls scan -ips > scan.log 2>&1
  • 特定サーバのスキャンを実行(前セクションの ama2, devの2台が定義されているものとする)
./vuls-saas.sh dev
  • 複数スキャンする場合はスペース区切りでサーバ名(config.toml内の[servers.xxx]のxxx)を指定
./vuls-saas.sh dev ama2
  • config.tomlに定義されている全サーバをスキャンする場合
./vuls-saas.sh

スキャン対象サーバの設定が正しいかの確認方法

リモートスキャンの対象サーバの設定が正しく行われており、Vulsからリモートスキャンが可能な状態かどうかは vuls configtest コマンドで確認できます。
vuls configtest コマンドはスキャナサーバにスキャナをインストール後、スキャナサーバにて実行可能です。

sudo su - vuls-saas
cd /opt/vuls-saas
./vuls configtest

リモートスキャン成功時の挙動

リモートスキャン実行後、サーバタブにて各サーバの情報をご確認いただけます。
一行一サーバ情報の表示となり、サーバの台数だけ課金対象となることにご注意ください。

(Tip) スキャン対象サーバの数が多い場合

スキャン対象となるサーバの数が多く、スキャンプロセスに時間がかかる場合は、 config.toml の分割、vuls-saas.sh のカスタマイズ、crontabの設定変更などを行うことで、 スキャンプロセスを分散させることができます。

config.tomlの分割

vuls コマンドはデフォルトで現在ディレクトリの config.toml を読み込みます。 config.toml を以下のように分割すると

config.group-a.toml
config.group-b.toml

-config オプションで明示的に指定することで、複数の設定ファイルを読み込むことができます。

./vuls scan -ips -config config.group-a.toml
./vuls saas -config config.group-a.toml

./vuls scan -ips -config config.group-b.toml
./vuls saas -config config.group-b.toml

これを応用して vuls-saas.sh を以下のように修正すると

※ この修正では特定のサーバを指定したリモートスキャンはできなくなります(アップロード失敗になるため)。

$ diff vuls-saas.sh*
65c65
< ./vuls saas ${@} > report.log 2>&1
---
> ./vuls saas > report.log 2>&1

vuls-saas.sh にも -config オプションを追加するが可能になり、crontabの設定は以下のようにできます。

22 05 * * * vuls-saas /opt/vuls-saas/vuls-saas.sh -config config.group-a.toml >/dev/null 2>&1
22 05 * * * vuls-saas /opt/vuls-saas/vuls-saas.sh -config config.group-b.toml >/dev/null 2>&1

Timeoutの設定

vuls scan コマンドはデフォルトで300秒のタイムアウトが設定されています。 以下のように vuls-saas.sh を修正することで、タイムアウトを明示的に指定できます。

$ diff vuls-saas.sh*
59c59
< ./vuls scan -ips ${@} > scan.log 2>&1
---
> ./vuls scan -ips -timeout 300 ${@} > scan.log 2>&1

参考: https://vuls.io/docs/ja/usage-scan.html