
Microsoftのクラウドベースのセキュリティ情報およびイベント管理ソフトウェアであるSentinelは、Azure Monitorとその組み込みLog Analyticsを含むAzureのデータ管理ツールを基盤として構築されています。このスイートの主要機能の一つがAzure Data Explorerです。これは、複数のストアにまたがるクエリを使用してデータを探索・分析し、データレイク内の構造化データと非構造化データを混在させるツールです。
参照: Microsoft Azure をオンラインで学ぶ (TechRepublic Academy)
Data Explorerの中核を成すのは、Kusto(通常KQL)と呼ばれるクエリ言語です。これは、データ内のパターンを発見するために設計されています。SQLとは異なり、KQLはデータの読み取りのみを目的としています。これは、ログデータを純粋に情報源として扱い、非破壊的に作業する必要があるSentinelのようなSIEMツールにとって重要な機能です。
これは大規模なデータ ウェアハウスで使用されるアプローチとよく似ており、クエリを使用してできるだけ早くデータを見つけ、重要なビジネス上の意思決定を支援します。
ジャンプ先:
- Kustoクエリ言語はインシデント対応時間を短縮します
- KQLクエリの構築
- Sentinel の KQL を使用して KQL を学習する
Kustoクエリ言語はインシデント対応時間を短縮します
Kusto の大量データ処理サポートは、ログやその他のセキュリティデータが急速に巨大なリポジトリとなるSentinelでの使用において鍵となります。悪意のある人物やマルウェアの行動は、いわばログの山から針を探すようなものです。そのため、この種のクエリに最適化されたツールは不可欠です。
Sentinelの自動化ツールに頼りすぎると、プロアクティブな対応ではなく、リアクティブ(事後対応)な対応に陥り、不利な状況に陥る可能性があります。独自の調査を実施できることは、セキュリティ体制を常に最新の状態に保つだけでなく、将来のSIEMルールセットのトレーニングに役立つ情報を提供するためにも重要です。
企業のセキュリティはビッグデータの問題となっており、特に特定のログファイルやログの組み合わせを定期的に調査する場合は、ビッグデータツールを活用して洞察を得ることが理にかなっています。KQLはこの種のタスク向けに設計されており、Sentinelに統合されている一部の分析ツールでも使用されているため、最適な選択肢です。アドホッククエリだけでなく、KQLはRunbookに組み込むことで、レスポンスの自動化やカスタム分析にも役立ちます。
KQLクエリの構築
KQLはスクリプトとクエリツールを組み合わせた興味深いツールで、データサイエンスにPython、データベース操作にSQLを使ったことがある人なら誰でも馴染みがあるでしょう。KQLはデータテーブルを扱うように設計されており、変数や定数を作成して一連のKQLステートメントのフローを制御できます。
KQLクエリはパイプラインと考えると分かりやすいでしょう。まずデータを取得し、次にフィルタリングし、次に要約と並べ替えを行い、最後に必要な結果を選択します。PowerShellコマンドの構造と類似点があり、ステートメントの順序付けがより厳密に求められます。フィルタと要約の順序を変更すると、出力に大きな影響が出る可能性があるためです。
フィルターの順序を正しく設定することが効果的なKQLを構築する鍵となる
KQL を実行するために使用されるパイプラインはフィルターを連続して接続するため、クエリの開始時にデータをフィルター処理し、後続のステージに渡されるデータ量を最小限に抑えることが重要です。Microsoft は、Sentinel データの操作に役立つ KQL フィルターの使用に関する詳細なベストプラクティスを公開しています。以下にその一部をご紹介します。
- 最初に時間フィルターを使用します。
- 部分文字列の検索を回避します。
- テキスト検索には特定の列のみを使用します。
つまり、Kusto クエリを構築する前に、データ ソースと探している結果の両方を理解することが重要です。
KQLのパイプラインモデルにより、クエリの構築と設計が比較的簡単になります。
KQLは扱いやすいですが、データの構造を理解していないと良い結果は得られません。まず、Sentinelのワークスペースで使用されているすべてのテーブルの名前を知っておく必要があります。これらのテーブルは、データの取得元を指定するために必要であり、修飾子を使用することで、取得する行数や返されるデータの量を制限できます。
次に、このデータを並べ替え、最新の結果のみを取得するオプションを選択します。次に、データをフィルタリングして、例えば特定のIP範囲のデータや特定の期間のデータのみを取得することができます。
データを選択してフィルタリングすると、集計が行われます。これにより、フィルタリングしたデータと選択した列のみを含む新しいテーブルが作成されます。列名は必要に応じて変更でき、KQL関数(例えば、データの合計やデータの最大値と最小値の使用など)の結果を集計することもできます。
利用可能な関数には基本的な統計演算が含まれているため、クエリを使用して重要なデータを検索できます。これは、ギガバイト単位のログから侵入の疑いのあるデータを探す際に便利なツールです。より複雑な演算は、データサイエンスタスクを処理するプラグインを使用するevaluate演算子を使用して実行できます。
参照: 採用キット: データサイエンティスト (TechRepublic Premium)
ほとんどのKQL操作は単一のログテーブルに対して実行されますが、union文またはjoin文を使用することで、複数のテーブルを同時に操作できます。これにより、攻撃の兆候がより顕著になる可能性のあるログ間でのデータの相関関係の分析が可能になります。
Sentinel の KQL を使用して KQL を学習する
その結果、強力なツールセットが誕生しました。ある程度の経験を積めば、ログファイルを繰り返し調査し、攻撃や攻撃者の兆候を探すための手段となります。クエリはSentinelワークブックに埋め込むことができるため、セキュリティオペレーションセンターの全員で共有できます。
便利なことに、Sentinel には、言語の学習をスピードアップするために使用できるトレーニング ワークブックが組み込まれており、さまざまなユース ケースで KQL を使用する方法の例も提供されています。
始める前に実験したい場合は、Sentinel をインストールする必要はありません。Microsoft は Azure ポータルにデモ用の Azure Log Analytics 環境を提供しており、KQL クエリの設計を実験できます。こちらも無料でご利用いただけます。必要なのは Azure へのログインだけです。
SentinelのようなSIEMツールは、ログファイルからのデータの取得とそれに基づく対応を簡素化します。しかし、機械学習は、特に新たな攻撃や高度な持続的脅威(APT)の微妙な兆候を見抜く際には、経験豊富なセキュリティアナリストの目には到底及びません。
だからこそ、SentinelにKQLを組み込むことは非常に理にかなっています。高度な分析ツールとスクリプト言語のシンプルさを兼ね備えているからです。Power BIなどのツールと組み合わせることで、ギガバイト単位のログデータを迅速に分析・可視化し、ネットワークのセキュリティ維持に必要な情報を見つける手段が生まれます。
データ分析スキルを習得したい場合は、TechRepublic Academy の以下のリソースを確認してください。
- データ分析エキスパート認定バンドル
- ビッグデータと分析のマスターツールキット