VMware Aria Operations for Networks (vRealize Network Insight) により、VMware 仮想基盤の全ての通信ログが収集されておりまして、さまざまなフロー解析ができるようになっています。ですが、「何ができるかサンプルを見ないと、自分たちにどう活用できるのか発想できない」というご意見もよく伺います。運用の課題は日々あり、フロー解析を試みても、解析ツールで何ができるのか、どの結果見れば良いのかわからないことはよくあります。
このブログでは、日々基盤を運用されている VMware ユーザの皆様からいただいたフィードバックをもとに、フロー解析でよく利用される可視化機能をサンプル集の形でご紹介したいと思います。
さまざまなユースケースにご活用いただけるよう、今回のサンプル集では3つのシナリオに整理してご紹介します。
・障害シナリオ
・セキュリティシナリオ
・サイジングシナリオ
それぞれのサンプルには、ユースケースの簡単な解説と解析クエリのポイントとなる部分もハイライトして解説しています。この記事を通して少しでも解析クエリの構文にも慣れていただき、サンプル以上の カスタム解析クエリをたくさん自作していただけたらと思っています。このクエリはダッシュボードに登録しておきたいなと思っていただけるクエリがもし見つかりましたら、是非そのクエリをコピーしてご自身のダッシュボードに追加してみてください。
目次
- 障害シナリオ
- セキュリティシナリオ
- サイジングシナリオ
- まとめ
物理サーバから物理サーバへのフローの確認 (トラフィック総量順)
基盤にある物理サーバから物理サーバへの通信のフローを監視したいというニーズから、こちらのクエリはよく使われます。物理サーバから物理サーバへの通信は、物理スイッチのフルサンプル Netflow・IPFIX をデータソースにすることで、以下のようにフローの解析ができます。
1 flows where flow type = 'Physical-Physical' order by Total Traffic
・クエリには、「flow type」を 「Physical-Physical」を用いています。フローの送信元と宛先は、IP アドレスが表示されます。
物理サーバから物理サーバへのフローの確認 (トラフィック総量順)
物理スイッチのインターフェイスの負荷状態の確認
1 top 20 switch ports by Network rate in last 2 days
・「in last XX days 」のクエリによって、過去XX日間といった解析期間を任意に変更できます。
・「top xx」のクエリによって、Top 3, Top 5 など表示させるエントリー数を任意に変更できます。
仮想マシンの通信負荷状態の確認
1 top 5 VMs by Network Rate in last 2 days
・仮想マシンのトラフィックレート [bps]、VM 名、IP アドレス、デフォルトゲートウェイ、ESXi ホスト、vCPU、メモリ、ポートグループ など
アクセス元の国の調査
1 flows group by Source Country
・「group by」のクエリ によって、指定したカテゴリごとにまとめることができます。
アクセス元の国の調査(国ごとのフロー数でのリスト)
[確認できること]
・国ごとのフロー数
フローごとの詳細(アクセス元の国)
アクセス先の国の調査
1 flows group by Destination Country
・「group by」のクエリ によって、指定したカテゴリごとにまとめることができます。
アクセス先の国の調査(国ごとのフロー数でのリスト)
[確認できること]
・国ごとのフロー数
アクセス先の国の調査(国別グラフ)
基盤へのセキュリティ対策として外部への情報漏洩や未知のアクセスや不正なアクセスがないかを検証したいというニーズに対応するサンプルです。前述のクエリよりもさらに具体的な情報を同時に表示させる応用ができます。以下の例は、どこの国からどの程度の流量と総量のデータの送受信があるかの調査として国ごとの総トラフィック量の順でリストしています。
1 series(sum(bytes rate)) of flows group by Destination Country order by sum(Total Traffic)
・「order by sum(Total Traffic)」のクエリ によって、総トラフィック量の順でリストしています。
・「series(sum(bytes rate)) of」のクエリ によって、トラフィックレートの時系列を表示に加えることができます。
アクセス先の国の調査(国ごとのフロー数でのリスト)
+(国別トラフィックレートグラフ+総トラフィック量順)
アクセス先の国の調査(国別グラフ : 帯域/パケット数/セッション数)
前述のクエリよりもさらに具体的な情報を同時に表示させる応用ができます。以下の例は、前述からさらにパケット数、セッション数の時系列グラフを追加しています。
1 <span style="font-size: 1rem; font-family: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;">series(sum(session count)), series(sum(packets)), series(sum(bytes rate)) of flows group by Destination Country order by sum(Total Traffic)</span>
・「series(sum(sum (packets)) 」のクエリ によって、パケット数の時系列を表示に加えることができます。
アクセス先の国の調査(国ごとのフロー数でのリスト)
+ (国別トラフィックレート・パケット数・セッション数グラフ+総トラフィック量順)
インターネットへのアクセスのあるサブネットの調査
基盤へのセキュリティ対策として外部への情報漏洩がないかを検証したいというニーズに対応するサンプルです。以下の例は、インターネットへアクセスのある基盤のサブネットを表示し、サブネットごとの流量・パケット数・セッション数の時系列グラフを表示させ、総トラフィック量の順でリストしています。
1 series(sum(session count)), series(sum(packets)), series(sum(bytes rate)) of flows where Flow Type = 'Source is VM' and flow type = 'Destination is internet' group by Source Subnet order by sum(Total Traffic)
・「series(sum(sum (packets)) 」のクエリ によって、パケット数の時系列を表示に加えることができます。
・「Flow Type = ‘Source is VM’ and flow type = ‘Destination is internet’」のクエリ によって、仮想マシンからインターネットへのアクセスと指定することができます。
・「group by Source Subnet」のクエリ によって、送信元のサブネットのごとにまとめることができます。「group by Source DVPG」などの応用もできます。
インターネットへのアクセスのあるサブネットの調査(サブネットごとのフロー数でのリスト)
+ (トラフィックレート・パケット数・セッション数の時系列グラフ)+ (総トラフィック量順)
アクセス先サブネットの調査
1 flows group by Destination Subnet
アクセス先サブネットの調査(拠点ごとのフロー数でのリスト)
アクセス元サブネットの調査
1 flows group by Source Subnet
アクセス元サブネットの調査(拠点ごとのフロー数でのリスト)
[確認できること]
・拠点(サブネット)ごとのフロー数
このように、どこの拠点からのアクセスがあるかを把握することで、平時のアクセスの多さや、拠点ごとのアクセス数の違いを把握することができたり、平時を理解することで普段見慣れない拠点からの異常なアクセスを見つけたり、異常の予兆を捉えるきっかけに活用できたりします。
アクセス元サブネットの調査(拠点グラフ : 帯域/パケット数/セッション数)
以下の例は、前述の国別のアクセスと同じ構成のクエリとなっています。国ではなく、社内(庁内)などのプライベートアドレスのサブネットでリストしています。
1 series(sum(session count)), series(sum(packets)), series(sum(bytes rate)) of flows group by Source Subnet order by sum(Total Traffic)
・「series(sum(sum (packets)) 」のクエリ によって、パケット数の時系列を表示に加えることができます。
・「series(sum(bytes rate)) 」のクエリ によって、トラフィックレート[bps]の時系列を表示に加えることができます。
・「group by Source Subnet」のクエリ によって、送信元のサブネットのごとにまとめることができます。
アクセス元サブネットの調査(拠点ごとのフロー数でのリスト)
+(トラフィックレート・パケット数・セッション数の時系列グラフ)+ (総トラフィック量順)
使用しているポート番号の調査
以下の例は、前述の「国別」や「拠点別」と同じ構成のクエリとなっています。国ではなく、ポート番号でリストしています。
1 series(sum(session count)), series(sum(packets)), series(sum(bytes rate)) of flow group by Port order by sum(Sessions) in last 7 days
・「series(sum(sum (packets)) 」のクエリ によって、パケット数の時系列を表示に加えることができます。
・「series(sum(bytes rate)) 」のクエリ によって、トラフィックレート[bps]の時系列を表示に加えることができます。
・「group by Port」のクエリ によって、ポート番号のごとにまとめることができます。
・「in last XX days」のクエリ によって、過去XX日間といった解析期間を任意に変更できます。
+(トラフィックレート・パケット数・セッション数の時系列グラフ)
+ (セッション数順)+(過去7日間)
・ポート番号ごとのフロー数、トラフィックレート、パケット数の時系列変化、セッション数の時系列変化
特定の外国へ通信したサーバをリスト
基盤へのセキュリティ対策として特定の外国へアクセスしたサーバがないかと監査するニーズから、こちらのクエリが使われます。以下の例は、特定の外国へ通信したサーバをリストしています。
1 series(sum(session count)), series(sum(packets)), series(sum(bytes rate)) of Flows Destination Country = 'United Kingdom' group by Source VM in last 7 days
・「group by Source VM」のクエリ によって、仮想マシンのごとにまとめることができます。
・「in last XX days」のクエリ によって、過去XX日間といった解析期間を任意に変更できます。
どのポートが使われているかの調査(使われてるポート番号リスト)
+(トラフィックレート・パケット数・セッション数の時系列グラフ)
+ (セッション数順)+(過去7日間)
外部からの SSH、Telnet、RDP でのアクセスの調査
基盤へのセキュリティ対策として不正なアクセスがないかを検証したいというニーズから、こちらのクエリが使われます。特に、外部からのアクセス制御が設計されているにもかかわらず、すり抜けている通信がないかを監査する目的やで利用することもできます。以下の例は、外部からの SSH、Telnet、RDP でのアクセスがあるかの調査のために、該当のフローをリストしてます。
1 flows where Flow Type = 'Source is Internet' and Port in ('22', '23', '3389') group by Source Country
・「Port in (’22’, ’23’, ‘3389’)」のクエリ によって、ポート番号を指定することができます。
・「group by Source Country」のクエリ によって、アクセス元の国ごとにまとめることができます。
ラテラルムーブメントの調査
基盤へのセキュリティ対策としてラテラルムーブメントのような内部の不正アクセスがないかを検証したいというニーズに対応するため、以下のようなクエリが使えます。以下の例は、ラテラルムーブメントの調査として、SSH、Telnet、RDP を合算してのトライックレート、パケット数、セッション数を時系列で確認しています。その際に、、業務時間外(深夜21時から早朝6時半まで)で生じたフローがないかを調査する目的のために、下図の上部にあるように時間指定を行っています。
1 series(sum(session count)), series(sum(packets)), series(sum(bytes rate)) of flow where port in (22, 23, 3389) and flow type = 'east-west'
・「series(sum(sum (packets)) 」のクエリ によって、パケット数の時系列を表示に加えることができます。
・「series(sum(bytes rate)) 」のクエリ によって、トラフィックレート [bps] の時系列を表示に加えることができます。
・「where port in (’22’, ’23’, ‘3389’)」のクエリ によって、ポート番号を指定することができます。
・「flow type = ‘east-west’」のクエリ によって、内部通信を指定することができます。
+(トラフィックレート・パケット数・セッション数の時系列グラフ)+(時間枠指定)
1 flow where port in (22, 23, 3389) and flow type = 'east-west'
・「flow type = ‘east-west’」のクエリ によって、内部通信を指定することができます。
1 series(sum(session count)), series(sum(packets)), series(sum(bytes rate)) of flow where port in (22, 23, 3389) and flow type = 'east-west' group by source vm
・「series(sum(sum (packets)) 」のクエリ によって、パケット数の時系列を表示に加えることができます。
・「series(sum(bytes rate)) 」のクエリ によって、トラフィックレート[bps]の時系列を表示に加えることができます。
・「where port in (’22’, ’23’, ‘3389’)」のクエリ によって、ポート番号を指定することができます。
・「flow type = ‘east-west’」のクエリ によって、内部通信を指定することができます。
・「flow type = ‘east-west’」のクエリ によって、内部通信を指定することができます。
・「group by Source Subnet」のクエリ によって、送信元のサブネットのごとにまとめることができます。
+(トラフィックレート・パケット数・セッション数の時系列グラフ)+(時間枠指定)
上図の結果から、8台の仮想マシンが該当していることがわかりました。フロー情報と仮想マシンがリンクされて解析されているため、結果を表示しf確認するだけでもどのサーバが該当しているか判断しやすくなっています。この結果から、調査が必要なサーバをより迅速に絞り込むことができます。
※ 今回の表示例では、リストされたサーバはすべて管理コンポーネントでした。これらはすべて常時フローが発生することが想定された運用通信で、調査が必要なサーバはないと判断できました。実際に脅威となるラテラルムーブメントの場合は、攻撃活動の中でスキャニングや水平展開が行われるため、単独のサーバから通常では見られない数のフローが発生したり、通常見られないサーバ間でのフローが発生したりします。こうしたフローは、週次や月次の調査で抽出しやすく、攻撃の予兆の有無を監査する目的に非常に有用です。
N-S通信量の調査
特定セグメント(ポートグループ)の外部への通信( L3 通信や N-S 通信とも表現される)量を調査し、将来の L3 通信や FW のキャパシティプランニングやサイジングするニーズのために、以下のクエリが使えます。以下の例は、特定セグメント(ポートグループ)の外部への通信フローをリスト、時系列にして確認しています。
1 flows where Source L2 Network in ( 'vlan-1105' ) and Destination L2 Network not in ( 'vlan-1105' ) order by Total Traffic
・「where Source L2 Network in (ポートグループ名) and Destination L2 Network not in (ポートグループ名)」のクエリ によって、セグメント内通信を排除したセグメント間通信のみを指定しています。
1 series(sum(session count)), series(sum(packets)), series(sum(bytes rate)) of flows where Source L2 Network in (vlan-1105) and Destination L2 Network not in ( 'vlan-1105' )
・「series(sum(sum (packets)) 」のクエリ によって、パケット数の時系列を表示に加えることができます。
・「series(sum(bytes rate)) 」のクエリ によって、トラフィックレート[bps]の時系列を表示に加えることができます。
・「where Source L2 Network in (ポートグループ名) and Destination L2 Network not in (ポートグループ名)」のクエリ によって、セグメント内通信を排除したセグメント間通信のみを指定しています。
(トラフィックレート・パケット数・セッション数の時系列グラフ)+ (トラフィック総量順)