リモートスキャン#
リモートスキャンは、スキャナプログラムをインストールしたサーバをスキャン実行サーバとし、同じネットワークに接続されたサーバへSSHログインしてスキャンする方法です。
コンフィグファイルへ設定を追加することにより、各サーバへスキャナプログラムをインストールすることなくスキャンが行えます。
スキャン対象サーバへSSHでログインするため、スキャン実行サーバからリモートログイン可能なユーザアカウントが必要です。
リモートスキャンの意味
リモートスキャンは、FutureVulsからインターネット越しに遠隔スキャンする、という意味ではありません。 ご自身の管理サーバからsshを使って同じネットワーク内のサーバをスキャンすることを、ここではリモートスキャンと呼んでいます。
リモートスキャンには、ローカルスキャンと比べて以下のようなメリットがあります。
- スキャナプログラムをサーバ上に配置できない場合でもOK
- SSHトンネル等を用いることで、スキャナからSSHで到達できるサーバをスキャンできる
- スキャナサーバの設定ファイルにスキャン対象サーバを複数記入しておくことで、1回のコマンド操作で複数台のサーバをスキャン可能
- CIDRレンジを指定することで、あるネットワーク内のサーバを一括でスキャン可能
以下の項目に関してはローカルスキャンと共通なため、ローカルスキャン ページをご覧ください。
- スキャン対象
- インストール方法
- スキャン方法・スキャン結果確認方法
- スキャン設定の記載箇所
- モード選択について
- スキャナバージョンの確認方法
- スキャナのアップデート
- その他スキャン時の注意点
以下では、リモートスキャンを利用するために必要な追加の設定について説明します。
スキャン対象サーバ上での準備#
リモートスキャンでは、スキャン対象サーバ上にて下記の設定が必要です。(Linuxの場合のみ)
SSH ログインの準備#
リモートスキャンを実行する際、FutureVuls ではRSA公開鍵認証によるSSHログインを実行します(パスワード認証には対応しておりません)。 リモートサーバにログインできるユーザと秘密鍵、公開鍵をご用意ください。
事前準備
リモートスキャンでは、事前に一度、 スキャナサーバからスキャン対象サーバに対して手動でSSH接続してください。
スキャン対象サーバのホストフィンガープリントをSSHのknown_hostsに登録するためです。
スキャナサーバがWindowsの場合
スキャナをインストールしているマシンがWindowsの場合、一度スキャン対象サーバの管理者権限ユーザで手動SSH接続してください。
config.tomlに指定するSSH接続のユーザも管理者権限のものとしてください。 その後 C:\Users\<手動でSSH接続したユーザ名>\.ssh\known_hosts
とスキャン対象サーバの秘密鍵を C:\Windows\System32\config\systemprofile\.ssh
に配置してください。
config.tomlで秘密鍵のパスを指定する際には、上記のパスに配置した秘密鍵を指定してください。
コンフィグファイル修正方法#
リモートスキャンを利用するには、コンフィグファイル( /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秘密鍵を指定します。
スキャン対象サーバがWindowsの場合
スキャン対象サーバがWindowsの場合、リモートログインに使用するユーザには管理者権限を持つユーザを指定することを推奨します。
管理者権限を持たないユーザを指定した場合、一部の適用済みKBと一部のインストール済みパッケージが検知できない可能性があるためです。
また、重複する内容は以下のように「default」に記載することで省略できます。
[default]
#port = "22"
#user = "username"
#keyPath = "/home/username/.ssh/id_rsa"
複数のサーバをリモートスキャンする場合#
以下のようにスキャン対象サーバを複数定義します。 UUIDは定義されていなければreport時に自動生成されます。
[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"
UUID の重複に注意
自分でUUIDを指定する場合はconfig.toml内で他に定義しているものとの重複に注意してください。 FutureVulsではサーバの識別はUUIDを用いて識別するという仕様です。 定義ミスによりUUIDが同じ場合は同じサーバとして認識されますのでご注意ください。
スキャナサーバをスキャン対象から省きたい場合
スキャンが実行される前(デフォルトでスキャナをインストール後、5分でスキャンが実行)にコンフィグファイルからスキャナサーバの情報を削除してください。コンフィグファイルに情報が記載されているサーバのみスキャン対象となります。
[saas]
GroupID = XXXX
Token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
URL = "https://auth.vuls.biz/one-time-auth"
[servers]
//スキャン対象サーバの情報のみ記載する
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回目以降のスキャンでは、設定ファイルに記載の情報を基に、各サーバへリモートスキャンが実行されます。
CIDR レンジ指定リモートスキャンの注意点
- 指定したCIDRレンジ内のサーバいずれかのスキャンに失敗すると、処理は中断され、設定ファイルも更新されません。
- 既にリモートスキャンの設定済みでUUIDが発行されているサーバが指定したCIDRレンジに含まれる場合、スキャン後新しいUUIDで上書きされ、FutureVuls上では別のサーバとして管理されます。
- もしUUIDが書き変わってしまった場合は、設定ファイル(
/opt/vuls-saas/config.toml
)を直接編集し、元のUUIDに戻してください - UUIDはFutureVulsコンソールのサーバタブ>サーバ詳細ページで確認できます。
- もしUUIDが書き変わってしまった場合は、設定ファイル(
特定のサーバを指定してリモートスキャンする場合#
/opt/vuls-saas/vuls-saas.sh
で、./vuls scan
を実行している箇所を以下のように変更します。
diff vuls-saas.sh
< ./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
その他の設定について#
リモートスキャン結果をコンソール上で確認する方法#
リモートスキャン実行後、サーバタブにて各サーバの情報をご確認いただけます。 一行一サーバ情報の表示となり、サーバの台数だけ課金対象となることにご注意ください。 詳しくは、マニュアル > サーバ ページをご覧ください。
スキャン対象サーバの数が多い場合の対処法#
スキャン対象となるサーバの数が多く、スキャンプロセスに時間がかかる場合は、
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
config.toml分割時の推奨事項#
複数のグループ(例:Group-A、Group-B など)を同一サーバ上の vuls-saas.sh で同時刻に実行すると、タイムスタンプの重複や JSON ファイルの競合が発生し、「アップロード対象が見つからない」「他グループのサーバが混在する」などの不具合が生じやすくなります。
このような競合を避けるため、実行時間をずらしつつ、結果ディレクトリも分割することを推奨します。
グループごとに実行時間をずらしながら、-results-dir
オプションでそれぞれ別のフォルダを指定すれば、競合が大きく減り、より確実な運用が可能になります。
crontabの設定は以下のようにできます。
# Group-A は 02:00 に実行し、専用のresults-dirを指定
0 2 * * * vuls-saas /opt/vuls-saas/vuls-saas.sh -config config.group-a.toml -results-dir /opt/vuls-saas/results/groupA > /dev/null 2>&1
# Group-B は 02:05 に実行し、別の専用results-dirを指定
5 2 * * * vuls-saas /opt/vuls-saas/vuls-saas.sh -config config.group-b.toml -results-dir /opt/vuls-saas/results/groupB > /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
Windowsのリモートスキャン#
Windows をスキャン対象にする場合は、以下のブログも参考にしてください。
また、インターネット上またはWSUSのようなWindows Updateサービスに接続できない環境でも、Cabファイルとリモートスキャンを組み合わせることで、未適用な更新プログラムを検出し脆弱性を検知できます。
以下で示す手順で一度登録すれば、累積更新プログラムが提供されたタイミングでそれに含まれる脆弱性がFutureVulsで継続的に検知されます。 ただし、「累積更新プログラムではないKBの脆弱性」を検知するためには、新規にWindowsアップデートが提供されたタイミングで新しいCabファイルを取得してスキャンする必要があります。
詳細はFutureVuls Blogを参照してください。
Cabファイルを用いたスキャンの設定#
ファイルサイズに注意
スキャンに必要な Cabファイルのサイズは 800MB 程度ありますので、ネットワーク帯域やディスクの空き容量に注意してください。
設定とスキャンは下記の手順で行います。
-
Microsoft社が運営する windowsupdate.com から
wsusscn2.cab
を入手(cabのURL)例として、
curl
で取得する場合は以下のようになります。curl.exe -sS -o C:\wsusscn2.cab http://download.windowsupdate.com/microsoftupdate/v6/wsusscan/wsusscn2.cab
-
C:\Program Files\vuls-saas\config.toml
を修正「Windows Updateにcabを用いる」という意味の
serverSelection=3
と、CabPath
に上で取得した Cabファイルのフルパスを指定します。~ 略 ~ [servers] [servers.localhost] host = "localhost" port = "local" [servers.localhost.uuids] localhost = "xxxx-xxxx-xxxx" [servers.localhost.windows] serverSelection = 3 cabPath = "C:\\wsusscn2.cab" ~ 略 ~
上記の config.toml
を用いて、管理者権限で C:\Program files\vuls-saas\vuls-saas.bat
を実行してスキャンします。
すると、Cabファイルを用いて未適用なKBのリストを取得し、スキャナプログラムが FutureVuls SaaS へ構成情報をアップロードして検知処理が行われ、未適用なKBに含まれる脆弱性が検知されます。