Squidプロキシのパース処理

皆さんこんにちは。国井です。
いよいよMicrosoft Sentinelのトレーニングコースの開催が迫ってきたのですが、
そのときに絶対に話題になりそうな気がしたので前もってTipsをあげておくことにします。
内容はMicrosoft Sentinelを利用してSquidプロキシのログを取り込んだときに行うパース処理についてです。

Microsoft Sentinelにおけるログの収集

Microsoft SentinelではSIEMとして様々なログを収集することができますが、ログ収集の設定はデータコネクタを使って行います。データコネクタ自体の追加はコンテンツハブというところから行うのですが、追加されたデータコネクタはご覧のように一覧でご覧いただけます。ここではSquidプロキシのログを収集するため、Squidのデータコネクタを追加しておきました。

image

データコネクタが追加されたら、あとは勝手にログが集められてきます。ただし、SquidのようにSyslogから収集するようなログの場合、ひとつの列にまとめてデータが格納されてしまい、データが扱いづらくなるのです。実際、下の画面のようにRawData列にデータがひとまとめになってしまっていることがわかります。

image

このように1つの列にデータがまとめて入ってしまった場合、パースと言ってデータを別々の列に分割して表示するようにクエリで指定することができます。パース処理はKQLのparseオペレーターを使って、新しい列の名前とそれぞれの列に入れるデータの区切り(ここでは” “と書いてスペースを指定)を指定します。

SquidProxy_CL
| parse kind=regex RawData with * " " EpochTimeExtended " " Duration " " SrcIpAddr " " ResultStatusCode " " Bytes " " HttpRequestMethod " " Url " " Username " " PeerStatusHost " " ContentType
| project TimeGenerated, Duration, SrcIpAddr, ResultStatusCode, Bytes, HttpRequestMethod, Url, Username, PeerStatusHost, ContentType

実行結果はこんな感じ。

image

RawDataの内容が分割されてキレイに表示されていることが確認できます。
parseオペレーターそのものについてはこちらでも解説しているので参考にしてみてください。