Kompira cloud Sonarのノードとは何か?

この記事ではKompira cloud Sonar におけるノードとは何かをご紹介します。

Kompira cloud Sonar でネットワークのスキャンを行うと、各実行ごとに1つのスナップショットが作成されます。 スナップショットはスキャンした時点のネットワーク・各ホストの状態 (例えば アドレス情報やアドレスに紐づいたホストの持つパッケージ等の各情報) が含まれています。

しかしこのままでは各スナップショットは紐づいておらず、定期的にスキャンを行っていてもネットワークやホストがどのように変遷してきたのかを辿ることができません。 Kompira cloud Sonar ではこれを解決し、ネットワークやホストを追跡し続けるためにノード集積という機能を持っています。

このノードを使い、ネットワーク内の各機器が今どんな状態なのかをすぐに検索・チェックすることができます。 (ノード検索機能については ノードの検索 - Kompira cloud Blog をご覧ください。)

f:id:c255:20181010174435p:plain

f:id:c255:20181010175332p:plain

アドレス・ノードの同一判定

スキャンを跨ぎノードを追跡するため、複数アドレスが単一のノードを指しているのかを調べる必要があります。 これらアドレスが指すノードの同一性判定を、Kompira cloud Sonar では下記のような手法で判定を行っています。 *1

機器例 判定方法
Windows WinRM を用いて取得した Windows シリアル番号の比較
Linux ssh でテンポラリ領域へ乱数ファイル作成・その比較
ネットワーク機器 SNMP を用いて取得した 機器シリアル番号の比較

ノード集積

最新のスナップショットが正常に取得された後に、ノード集積という機能によりアドレスとノードを関連付けます。

  • 最新スナップショット中に既にノードになっているアドレスは存在するか?
    → 存在するならそのノードにアドレスを関連付ける

  • ノードになっていないアドレスは存在するか?
    → 存在するなら新たにノードを作り、それにアドレスを関連付ける

そして、関連付けられたアドレスを元に、ノードパッケージ等の内部情報を更新します。

ノード集積によって関連付けられたスナップショットは『関連するスナップショット』ボタンから見ることができます。

f:id:c255:20181010175724p:plain

*1:判定手法は一例であり、実際には複数の情報を用いた比較等も行っています。 また、今後検出精度向上のため変更する可能性があります。

Kompira cloudからZabbixへの連携ツールを作成しました

Kompira cloud Sonar では、収集した構成情報にAPI経由でアクセスすることができます。 API連携の一例として、Sonarでスキャンしたノード情報をZabbixに自動登録するPythonスクリプトを作成してみました。

github.com

主に下記の機能があります。

  • Sonarにてスキャンしたノード一覧をZabbixホストとして自動登録
  • Sonar側で取得した構成情報等をホストインベントリに埋め込み
  • 指定したテンプレートをデフォルトテンプレートとして自動割り当て
  • SNMPサービスが有効なノードに対して指定したテンプレートを自動割り当て
  • 自動登録したZabbixホストの構成情報更新

設定

インストール後、以下の設定を行う必要があります。 詳しくはリポジトリのREADMEをご覧ください。

  • zabbix
    データをインポートする先のzabbixサーバの設定を行います。 ホスト登録が可能な権限を持つユーザーを指定してください。

  • kompira_cloud
    データ取得元となるKompira cloudのAPIトークンの設定を行います。 Kompira cloudの全体設定からAPIトークンを作成して登録してください。

  • host_prefix
    Zabbixにホストを登録する際のprefixを設定することができます。

  • default_groups
    Zabbixにホストを登録する際、ホストに割り当てるグループを設定します。

  • default_templates
    Zabbixにホストを登録する際、ホストに自動で割り当てるテンプレートを設定します。 デフォルト設定ファイルではPing監視のモジュールを指定しています。
  • snmp_templates
    Kompira cloudでSNMPサービスが動作していることが把握できているホストに自動で割り当てるテンプレートを設定します。

Zabbixへの連携処理を実行する

zabbix_registrar.py を実行すると、Kompira cloudのデータをZabbixに連携させる処理が実行できます。 引数にはKompira cloudのノード一覧URL、もしくはスナップショットのアドレス一覧URLを指定します。 以下はノード一覧のURLを指定して実行したときの例です。

$ python zabbix_registrar.py https://hogefuga.cloud.kompira.jp/apps/sonar/networks/12345678-471f-4161-90a4-4b7dba5713a7/managed-nodes
2018-10-02 14:36:18,513 - [13975] - INFO - Get node list from KompiraCloud
2018-10-02 14:36:21,136 - [13975] - INFO - Zabbix login: http://192.168.120.64/zabbix
2018-10-02 14:36:23,055 - [13975] - INFO - Create Host: KompiraCloudNode-172.28.0.120
2018-10-02 14:36:23,704 - [13975] - INFO - Create Host: KompiraCloudNode-172.28.8.23
2018-10-02 14:36:24,660 - [13975] - INFO - Create Host: KompiraCloudNode-192.168.120.158
2018-10-02 14:36:25,276 - [13975] - INFO - Create Host: KompiraCloudNode-172.28.8.239
2018-10-02 14:36:25,881 - [13975] - INFO - Create Host: KompiraCloudNode-172.28.8.235
2018-10-02 14:36:26,701 - [13975] - INFO - Create Host: KompiraCloudNode-172.28.8.237
2018-10-02 14:36:27,274 - [13975] - INFO - Create Host: KompiraCloudNode-172.28.8.234
...

実行後にZabbixを確認すると、以下のように KompiraCloudNode- というprefixを持つホストが登録されていることが確認できます。

  • Zabbixホスト一覧 f:id:kompiracloud:20181002151324p:plain

  • Zabbixホストインベントリ一覧 f:id:kompiracloud:20181002151335p:plain

また、Zabbixのホストインベントリには、OS、MACアドレス、シリアル番号、ソフトウェア情報、ハードウェア情報などを入力できるフィールドがあり、本ツールではKompira cloudで取得してきたこれらの値を自動で挿入します。

  • Zabbixホストインベントリ詳細(Cisco C2950T) f:id:kompiracloud:20181002151346p:plain

  • Zabbixホストインベントリ詳細(Windows Server 2016) f:id:kompiracloud:20181002151355p:plain

構成情報の更新

上記の登録実行処理を再度行う事で、同一ノードであればホストの更新を、新規ノードであればホストの作成を行います。
また、IPアドレスの変更や増加があった場合にも自動的に反映を行います。 cron等で定期実行する事により、簡易的な自動同期が可能となります。

  • ノード一覧からの更新例(2ノードが追加、その他は更新)
$ python zabbix_registrar.py https://yourspace.cloud.kompira.jp/apps/sonar/networks/1d6425eb-471f-4161-90a4-4b7dba5713a7/managed-nodes
2018-10-02 14:39:48,656 - [14022] - INFO - Get node list from KompiraCloud
2018-10-02 14:39:50,178 - [14022] - INFO - Zabbix login: http://192.168.120.64/zabbix
2018-10-02 14:39:50,653 - [14022] - INFO - Update Host: KompiraCloudNode-172.28.0.120
2018-10-02 14:39:51,619 - [14022] - INFO - Update Host: KompiraCloudNode-172.28.8.23
2018-10-02 14:39:52,028 - [14022] - INFO - Create Host: KompiraCloudNode-Ubuntu開発機
2018-10-02 14:39:52,402 - [14022] - INFO - Update Host: KompiraCloudNode-192.168.120.158
2018-10-02 14:39:52,767 - [14022] - INFO - Update Host: KompiraCloudNode-172.28.8.239
2018-10-02 14:39:53,185 - [14022] - INFO - Update Host: KompiraCloudNode-172.28.8.235
2018-10-02 14:39:57,245 - [14022] - INFO - Update Host: KompiraCloudNode-192.168.120.100
2018-10-02 14:39:57,580 - [14022] - INFO - Update Host: KompiraCloudNode-192.168.120.71
2018-10-02 14:39:57,969 - [14022] - INFO - Create Host: KompiraCloudNode-pfSense.localdomain

ノードの検索ができるようになりました 他

ノードの検索ができるようになりました

Kompira cloudで収集したノードの情報を、様々な条件で検索することができます。

単純な文字列による検索、項目をキーワードで指定した検索、これらを組み合わせた複雑な検索が使用できます。
詳しくは以下の記事をご覧ください。
ノードの検索 - Kompira cloud Blog




ノード一覧の表示項目がカスタマイズできるようになりました

Kompira cloudでは、サーバやネットワーク機器の様々な項目を収集します。
一覧画面ではこれまで代表的なカラムを固定して表示していましたが、今回のアップデートで30以上の項目から表示したいものを自由に選択できるようになりました。

f:id:kompiracloud:20180926173320p:plain:w600

f:id:kompiracloud:20180926180226p:plain:w600




プロフィール情報を編集できるようになりました

Kompira cloudの登録ユーザのプロフィール情報 (表示名、メールアドレス、パスワード) を編集できるようになりました。




「構成管理」機能の名称を「Kompira cloud Sonar」に変更しました

これまで、Kompira cloudとksocketが連携してサーバやネットワーク機器などの情報を収集する機能を「構成管理」としていましたが、 この度「Kompira cloud Sonar」と改めさせて頂くことに致しました。

これにあわせて、Kompira cloud上の表示名も「Sonar」に変更しております。

Kompira cloudでは、「Sonar」の他にも、運用をより便利にできるサービスをリリースできるよう計画しております。


引き続き、Kompira cloudをよろしくお願いいたします。

ノードの検索

Kompira cloudでは、ksocketを使用して収集したノード情報を、様々な条件で検索することができます。

Kompira cloudにログイン後、画面左側のアイコンから検索画面を表示することができます。

検索フォーム欄の下には、検索クエリのチートシートが表示されています。

曖昧な検索

例えば「CentOS」のノードだけを探したい場合、 cent とだけ入力すると、OS名、ホスト名、ベンダ名、パッケージ情報などの構成情報の中に cent という文字列が含まれるノードを全て探します。

キーワード指定による検索

system:centos のように、 system: というキーワードを指定すれば、「機種・OS名」の項目の中だけに限定して centos という文字列が含まれるノードのみを探すことができます。

指定できるキーワードには以下のようなものがあります。

キーワード 意味
system system:CentOS システム名に CentOS を含むノードを検索
addr addr:10.10.0.3 IP アドレスに 10.10.0.3 を含むノードを検索
host host:dns.your.domain.com ホスト名に dns.your.domain.com を含むノードを検索
macaddr macaddr:aa:bb:cc:dd:ee:ff MAC アドレスに aa:bb:cc:dd:ee:ff を含むノードを検索
nicVendor nicVendor:vmware NIC ベンタ名に vmware を含むノードを検索
package package:httpd httpd というパッケージを持つノードを検索
package (バージョン指定) package:httpd:2.6 httpd のバージョン 2.6 を持つノードを検索
windowsUpdate windowsUpdate:KB3124263 KB3124263 という Windows アップデートを持つノード検索
serial serial:4D9569ER0069B シリアル番号に 4D9569ER0069B を含むノードを検索

複雑な検索

さらに、AND/ORや「~を含まない」という検索を行うこともできます。

意味
-system:ubuntu システム名に ubuntu を含まないノードを検索
host:fixpoint AND package:apache ホスト名に fixpoint を含み apache を持つノードを検索
package:nginx OR package:apache nginx か apache を持つノードを検索
host:fixpoint AND (package:nginx OR package:apache) ホスト名に fixpoint を含み nginx か apache を持つノードを検索
system:"windows server 2016" AND -windowsUpdate:KB3124263 "windows server 2016" だが KB3124263 が適用されていないノードを検索

これにより、Kompira cloudで管理しているノードを条件によって簡単に見つけることができます。




実践的な検索の使い方

脆弱性が発見されたアプリケーションを持ったノードを見つける

実践的な例として、ある脆弱性が発見されたため、自分が管理しているサーバ群が脆弱性を持っていないか探さなければいけない、という状況を考えてみましょう。

最も代表的な脆弱性情報サイトであるCVE - Common Vulnerabilities and Exposuresでは、脆弱性情報がCVE番号 (CVE-XXXX-YYYY) で管理されており、ある脆弱性に関する「どの環境下、どのアプリケーションに含まれているものか」「攻撃の成立条件」「対策方法」などの情報がまとめられています。

例えば、適当な例として CVE-2018-12882 という脆弱性を見てみましょう。 この脆弱性はPHPに関するもので、PHP 7.2.7までの7.2.xに含まれます。

この脆弱性を検索機能で見つけるには、単に php と検索してもよいですし、より厳密に検索させたいのであれば package:php:7.2 と書くこともできます。

また、この脆弱性に対する対応方法はRed Hat/CentOS, Ubuntu, Debian など OSごとにそれぞれ公開されているため、以下のようにOSごとに結果を表示させるのも有効です。

  • PHP 7.2系がインストールされたUbuntu
    • package:php:7.2 and system:ubuntu
  • PHP 7.2系がインストールされたDebian
    • package:php:7.2 and system:debian
  • PHP 7.2系がインストールされたRed Hat Enterprise Linux, または CentOS
    • package:php:7.2 and (system:"red hat" or system:centos)

管理しているサーバ・ネットワーク機器が数百~数千単位になると、「1台1台ログインして脆弱性が含まれていないか確認する」という方法ではほとんど管理できなくなります。

Kompira cloudでは、構成情報が自動収集される環境下で様々な検索を簡単に試すことができるため、管理している機器台数が多いほどその効果も大きくなります。

WinRM 接続を簡単に有効化するスクリプトの紹介

WinRM 接続の有効化の方法 - Kompira cloud Blog

上記記事にて、手動によってWinRM接続の有効化手順を紹介しました。 今回、上記手順をPowerShell用のスクリプトとして用意しましたので、ご紹介します。

github.com

Setup-WinRMConfiguration.ps1

上記リンクからアクセスできるPowerShellスクリプトを右クリックし、WinRM接続を行わせたいWindows上に保存してください。 スクリプトを $env:USERPROFILE\Downloads にダウンロードしたと仮定し、以下にPowerShellでの適用手順を説明します。

(PowerShell 管理者権限)
# Setup-WinRMConfiguration.ps1 を配置したフォルダに移動する
> cd ~\Downloads

# ダウンロードしたスクリプトのため、実行のブロックを解除する
> Unblock-File .\Setup-WinRMConfiguration.ps1

# WinRMを有効化するアカウントを引数とし、スクリプトを実行する
# ローカルアカウント/ドメインアカウントに関わらず、コンピュータ名を忘れないようにしてください
> .\Setup-WinRMConfiguration.ps1 $env:COMPUTERNAME\YourAccountName

前提として、ネットワークプロファイルはPrivateまたはDomainAuthenticatedである必要があります。 ネットワークプロファイルがPublicである場合、スクリプト実行以前に以下のコマンドを管理者権限のPowerShellで実行してください。

> Set-NetConnectionProfile -NetworkCategory Private

以上の作業を実施したノードでは、ksocketによってWinRMを使用した構成情報の取得ができるようになります。

Azure Virtual Machine インスタンスの構成情報収集ができるようになりました

ksocket について、以下の内容を含むアップデートを行いました。

  • ksocket: 1.4.2
  • ksoperations-networks: 1.5.1

ksocket ではこれまでオンプレミス環境およびAWS EC2環境での構成情報収集に対応していました。 今回のアップデートでは、上記に加えて Microsoft Azure Virtual Machine の構成情報収集もできるようになりました。

Azure 上に ksocket がインストールされたVMインスタンスを用意することで、 VMと同じVirtual Network (VNET) 上にあるVirtual Machineの情報を取得できます。

例えば、以下はあるVNETをAzureポータル上で表示した画面です。 「ksocket-running」という名前でksocketをインストールしたVMを作成しています。 f:id:kompiracloud:20180903134334p:plain

この状態で、ksocketでスキャンを実行すると、Kompira cloud上で以下のように各機器の状態を取得することができます。 f:id:kompiracloud:20180903134547p:plain

例えばAWSとAzureそれぞれにksocketを配置すれば、Kompira cloud上で両方のインスタンス情報を管理することができるようになります。

最新の ksocket はこちらよりダウンロードすることができます。

スキャンオプションの指定方法を改善しました

スキャン設定のオプションは、これまでjson形式で指定していただくようになっていましたが、今回のアップデートで項目別に入力していただけるようになりました。

旧画面 f:id:fukuharax:20180814184856j:plain

新画面 f:id:fukuharax:20180815162315p:plain

入力項目は以下の3項目があります。

  1. 追加起点アドレス
    • スキャンの起点となる IPv4 アドレスの追加候補です。旧画面での「queries」と同等です。
  2. 許可アドレス・ネットワーク
    • パケットの送信を許可する IPv4 アドレス・ネットワークです。旧画面での「includes」と同等です。
  3. 禁止アドレス・ネットワーク
    • パケットの送信を禁止する IPv4 アドレス・ネットワークです。旧画面での「excludes」と同等です。

「設定」画面と同様に、「スキャン」画面でも以下のように同様の設定を行うことができます。

f:id:fukuharax:20180815161934p:plain

スキャンの設定や実行に関する説明は、ローカルネットワークのスキャンを参照してください。