スキャンするために必要な設定

Kompira cloud Sonarでは、ksocket という連携プログラムを使用することにより、オンプレ環境やクラウド (AWS, Azure) 上の構成情報を収集することができます。この記事では、ksocketによって情報収集される機器側に必要な設定、確認方法について解説します。

スキャン対象の各機器に必要な設定

UNIX/Linux

UNIX/Linuxをスキャンする場合、SSHでのアクセスを有効にする必要があります。

SSHでの接続アカウント情報は、ksocketをインストールしたサーバの /opt/fixpoint/ksocket/etc/ksocket/credentials/ssh 以下にtomlファイルを作成することで指定できます。 詳しくは ksocketドキュメント をご覧ください。

Windows

Windowsをスキャンする場合、WinRMでのアクセスを有効にする必要があります。 また、WinRMでのログイン後に詳細情報を取得するため、WMIリソースへのアクセス権限を許可する必要があります。 WinRM 接続の有効化の方法 - Kompira cloud Blog に設定方法を詳しく記載しているので、ご確認ください。

WinRMでの接続アカウント情報は、ksocketをインストールしたサーバの /opt/fixpoint/ksocket/etc/ksocket/credentials/winrm 以下にtomlファイルを作成することで指定できます。

ネットワーク機器 (ルータ・スイッチなど)

ネットワーク機器からは、SNMP経由で情報を取得します。 ksocketからSNMP接続ができているか、また必要なMIB情報が取得できているかは以下のコマンドで確認することができます。

Linuxから確認する場合

  • SNMP Agentが動作しているかの確認
(ksocket server) $ snmpget -v 2c -c public 172.16.0.1 1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0 = STRING: BUFFALO BS-G3024MR

上記例のような出力が得られない場合やエラーが表示される場合は、「機器側がSNMPに応答しないようになっている」「コミュニティ名が設定と異なっている」などの原因が考えられます。

  • 必要なMIBが取得できるかの確認
(ksocket server) $ snmpbulkwalk -v 2c -c public 172.16.0.1 1.3.6.1.2.1.4.21.1.7
... Next HOP が設定されていれば出力される
(ksocket server) $ snmpbulkwalk -v 2c -c public 172.16.0.1 1.3.6.1.2.1.4.22.1.3
... ARP cache があれば出力される

SNMP Agentは動作している状態で、特定のMIBは取得できないような場合は、設定で制限されている可能性があります。

Windowsから確認する場合

  • SNMP Agentが動作しているかの確認
(PowerShellコンソールを起動)
> $snmp = new-object -ComObject olePrn.OleSNMP
> $snmp.open("172.16.0.1", "public", 2, 1000)
> $snmp.Get(".1.3.6.1.2.1.1.1.0")
EPSONCA929E
  • 必要なMIBが取得できるかの確認
(PowerShellコンソールを起動)
> $snmp = new-object -ComObject olePrn.OleSNMP
> $snmp.open("172.16.0.1", "public", 2, 1000)
> $nexthops = $snmp.GetTree(".1.3.6.1.2.1.4.21.1.7")
> $nexthops[(0..($nexthops.count/2) | ForEach-Object { ,@(0, $_) })]
... Next HOPが設定されていれば出力される

> $arps = $snmp.GetTree(".1.3.6.1.2.1.4.22.1.3")
> $arps[(0..($arps.count/2) | ForEach-Object { ,@(0, $_) })]
... ARP cache があれば出力される

SNMPでの接続アカウント情報は、ksocketをインストールしたサーバの /opt/fixpoint/ksocket/etc/ksocket/credentials/snmp 以下にtomlファイルを作成することで指定できます。

スキャン対象機器までの経路上に存在するネットワーク機器の設定について

ksocketは、SNMP接続ができる機器の上記のMIBからNext HOP, ARP cache情報を取得し、それらのIPアドレスに対して情報取得を行う、という処理を繰り返し行います。
例えばksocketとスキャンさせたいWindows機の間に、ネットワーク構成上あるルータが存在したとしましょう。
この時、ksocketはWindows機に対するWinRM接続だけでなく、ルータに対するSNMP接続ができる必要があります。
もしルータをSNMP応答可能であるように設定できない場合は、スキャンオプションの「追加起点アドレス」にWindows機のIPアドレスを入力することで、スキャンさせることができます。

Kompira cloud 製品紹介ページはこちら
Kompira cloud 資料ダウンロードはこちら

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

Kompira cloud 製品紹介ページはこちら
Kompira cloud 資料ダウンロードはこちら

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

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

www.youtube.com

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

さらに、登録したZabbixホストに自動でテンプレートの割り当ても行います。
本ツールでは、Kompira cloudでSNMPサービスが動作していることが把握できているホストには SNMP監視テンプレート + Ping監視テンプレート を、
それ以外のホストには Ping監視テンプレート をそれぞれ設定します。

f:id:kompiracloud:20190301204142p:plain

これにより、Kompira cloudからのデータインポートと同時に監視を始めるようにすることができます。
本ツールをさらにカスタマイズすることで、より多くの様々な条件ごとにテンプレートを割り当てるようにすることも可能かと思います。

構成情報の更新

上記の登録実行処理を再度行う事で、同一ノードであればホストの更新を、新規ノードであればホストの作成を行います。
また、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 資料ダウンロードはこちら

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

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

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 製品紹介ページはこちら
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では、構成情報が自動収集される環境下で様々な検索を簡単に試すことができるため、管理している機器台数が多いほどその効果も大きくなります。

Kompira cloud 製品紹介ページはこちら
Kompira cloud 資料ダウンロードはこちら

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

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

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

github.com

使い方

ファイルのダウンロード

Releasesページ より最新のファイルをダウンロードし、ksocketからのWinRMアクセスを有効にしたいWindowsに配置してください。

スクリプトの実行

Setup-WinRMConfiguration.bat を管理者権限で実行してください。

実行するとコンソールが開き、アカウント名の入力を求めます。
コンピュータに登録されたアカウント名を入力してください。

WinRM接続のための設定を開始します。よろしいですか (y/n)?y
アカウント名を入力してください。
アカウント名は「コンピュータ名\アカウント名」または「ドメイン名\アカウント名」で指定できます。
>

アカウント名を入力すると、そのアカウントでのWinRMアクセスに必要な設定が自動で行われます。

WinRM サービスは、既にこのコンピューターで実行されています。
このコンピューター上でのリモート管理には、WinRM が既に設定されています。
Auth
    Basic = true
    Kerberos = true
    Negotiate = true
    Certificate = false
    CredSSP = false
    CbtHardeningLevel = Relaxed

Service
    RootSDDL = O:NSG:BAD:P(A;;GR;;;IU)(A;;GA;;;BA)(A;;GXGR;;;S-1-5-21-1561492669-3598970178-1692085620-1001)(A;;GXGR;;;S-1-5-21-1561492669-3598970178-1692085620-1002)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
    MaxConcurrentOperations = 4294967295
    MaxConcurrentOperationsPerUser = 1500
    EnumerationTimeoutms = 240000
    MaxConnections = 300
    MaxPacketRetrievalTimeSeconds = 120
    AllowUnencrypted = true
    Auth
        Basic = true
        Kerberos = true
        Negotiate = true
        Certificate = false
        CredSSP = false
        CbtHardeningLevel = Relaxed
    DefaultPorts
        HTTP = 5985
        HTTPS = 5986
    IPv4Filter = *
    IPv6Filter = *
    EnableCompatibilityHttpListener = false
    EnableCompatibilityHttpsListener = false
    CertificateThumbprint
    AllowRemoteAccess = true

WinRMサービスを有効化しました
WinRM RootSDDLセキュリティ設定を更新しました
WMIセキュリティ設定を更新しました
WinRM接続の設定が完了しました。セットアップを終了します。
続行するには何かキーを押してください . . .

上記のようなメッセージが出力された場合、設定は完了となります。
ksocketにWinRMのアカウント設定を行い、スキャンをしてみましょう。

Kompira cloud 製品紹介ページはこちら
Kompira cloud 資料ダウンロードはこちら