現場での教訓:サイバーセキュリティレイクハウスで効果的な検索に使用される統一されたイベントのタイムスタンプを抽出する方法
によって デレク・キング による投稿
この4回にわたるブログ・シリーズ"Lessons learned from building Cybersecurity Lakehouses,"では、サイバーセキュリティ・データ用のレイクハウスを構築する際に、組織がデータ・エンジニ アリングで直面する多くの課題について説明し、それを克服するために私たちが現場で使用したソリューション、ヒント、コツ、ベスト・プラクティスを紹介する。 このシリーズでは、サイバーセキュリティのレイクハウスを作りたいとお考えの方に、課題を学び、進むべき道を提案します。
Databricksは、サイバーログを効率的に処理し、標準化するための実用的なローコード・コンフィギュレーション・ソリューションを構築した。 当社のLakehouseプラットフォームは、データエンジニアリングを簡素化し、検索、分析、ストリーム型脅威検知への迅速な移行を促進します。 既存のSIEMやSOARシステムを補完し、不必要に複雑化することなくサイバーセキュリティ運用を強化します。
第1部では、サイバー分析エンジンの最も基本的な要素である、統一されたイベントのタイムスタンプ抽出から始めます。 正確なタイムスタンプは、セキュリティ運用とインシデント対応において最も重要な要素の一つである。 正確さがなければ、システム利用者や悪意ある行為者が起こした一連の出来事を生成することは不可能である。 このブログでは、イベントのタイムスタンプ情報を特定し、抽出し、デルタ湖に変換し、サイバーコンテキスト内で使用できるようにするために利用可能な戦略のいくつかを見ていきます。
機械が生成したログデータは、よくても厄介だ。 特定のファイル・タイプ(JSON、YAML、CSVなど)には明確に定義された構造があるが、それらのファイルを構成するデータの内容と形式は、大部分が開発者の解釈に任されている。 時間フォー マットは存在するが(ISO 8601)、それらに準拠することは限られており、主観的である。おそらく、ログフォーマットはこれらの標準よりも前に存在したものであるか、特定のフォーマットに対する地理的バイアスがタイムスタンプの書き方を左右しているのだろう。
ログに報告される様々な時間形式にもかかわらず、私たちは、どのようなサイバーエンジンでも受信され分析されるすべてのログデータとの相互運用性を確保するために、それらを正規化する責任がある。
タイムスタンプ間の相互運用性の重要性を強調するために、典型的なセキュリティ・オペレーション・センター(SOC)が毎日答えなければならないタスクのいくつかを考えてみよう。
正確で統一されたタイムスタンプがなければ、これらの質問に効果的に答えるために発生した活動のタイムラインを作成することは不可能である。 以下では、いくつかの課題を検討し、それらにどのようにアプローチするかについてアドバイスする。
複数列か単一列か:イベントのタイムスタンプを解析する方法を考える前に、まずそれを分離しなければならない。 これは、ログフォーマットやスパークリード操作によっては、すでに自動的に行われ ている場合がある。 しかし、そうでない場合もある。 例えば、カンマ区切り値(CSV)ファイルは、個々の列としてSparkによって抽出される。 もしタイムスタンプがこれらのどれかで分離されているなら、素晴らしいことだ! しかし、syslogデータを生成するマシンは、単一のカラムとしてランドされる可能性が高く、タイムスタンプは正規表現を使って分離されなければならない。
日付と時刻のフォーマット:これらはログファイルに多くの混乱を引き起こす。 例えば、「12/06/12」と「06/12/12」。 どちらの形式も有効だが、ローカルシステムのログ形式を知らなければ、日、月、年を特定するのは難しい。
タイムゾーンの特定:データと時刻のフォーマットと同様に、タイムスタンプのタイムゾーンを報告するシステムもあれば、ローカル時刻を想定してタイムゾーンをまったく表示しないシステムもある。 すべてのデータソースが同じタイムゾーン内で報告され、分析されるのであれば、これは問題ではないかもしれない。 しかし、組織は、今日の接続されたグローバルな世界では、複数のタイムゾーンから数十、数百のログソースを分析する必要がある。
イベントのタイムスタンプを識別、抽出、解析するには、ストレージシステム内で時間を一貫して効果的に表現する必要があります。 以下は、syslogスタイルのApacheウェブサーバーからタイムスタンプを抽出して解析する方法の例である。
次の例では、標準的なアパッチ・ウェブ・サーバーのログ・フォーマットを見てみましょう。 データはテキストレコードとして生成され 、Databricksでは単一のカラム(値)として読み込まれます。 したがって、正規表現を使ってイベントのタイムスタンプを抽出する必要がある。

1列のデータからイベントのタイムスタンプを抽出する正規表現例:
PySparkのregexp_extract関数を使用して、イベントのタイムスタンプを持つ文字列の部分を抽出し、一致する文字で_raw_timeカラムを作成します。
結果のデータフレーム:

イベントのタイムスタンプが新しいカラムとして抽出されたので、ISO 8601標準のタイムスタンプに正規化することができます。
タイムスタンプを正規化するには、日付/時刻フォーマット修飾子を使ってフォーマットを定義し、ISOフォーマットのタイムスタンプフォーマットに変換する前にunixスタイルのタイムスタンプに変換する必要がある。
ISO 8601フォーマットのイベントタイムスタンプへの変換例:
PySparkの関数unix_timestampと to_timestampを使って、新しいメタデータカラム_event_timeを生成します。
結果のデータフレーム:

結果のカラムはTimestamp Typeにキャストされ、一貫性とデータの整合性が確保される。
サイバーアナリティクスで多くのお客様を支援する過程で、インジェスト体験を大幅に向上させる貴重なアドバイスやベストプラクティスをいくつか集めました。
明示的な時刻フォーマット:パーサーを構築する際、時刻フォーマットを明示的に設定することで、正確なタイムスタンプカラムを返すフォーマットを見つけるために多くのフォーマットをテストする必要があるジェネリックライブラリにカラムを渡す場合と比較して、パースタスクが大幅にスピードアップします。
カラムの命名:メタデータのカラムの前にアンダースコアを付ける。 これにより、機械が生成したデータとメタデータを簡単に区別することができ、データフレームやテーブルではデフォルトで左寄せで表示されるという特典もある。
イベント時間とインジェスト時間の比較:データ伝送に遅延が生じる。 インジェスト時間に関する新しいメタデータ・カラムを追加し、現在遅れて いる、あるいは欠落しているデータ・ソースを特定するための運用上の厳密性を確立する。
デフォルト:タイムスタンプの欠落や未確定に対して戦略を立てる。 物事はうまくいかないこともあるし、うまくいかないこともある。 欠落したタイムスタンプをどのように処理するかについて、判断の判断を下す。 私たちが目にした戦術のいくつかを紹介しよう:
サイバー脅威を調査するためにイベントシーケンスとタイムラインを生成するために、整った正確なイベントタイムスタンプは、企業のセキュリティオペレーションとインシデントレスポンスにとって非常に重要です。 すべてのデータソースにおける相互運用性がなければ、効果的なセキュリティ態勢を維持することは不可能である。 正規表現の抽出やデータソースの不一致の解析など、複雑な作業がこれを支えている。 多くの顧客がサイバーセキュリティ・レイクハウスを構築するのを支援する中で、我々はこのプロセスをスピードアップする実用的なソリューションを生み出してきた。
このブログでは、半構造化ログファイルで遭遇する可能性のあるタイムスタンプ抽出の問題を、一つの例として取り上げた。 Databricksのサイバーソリューションが、サイバー脅威を特定し、軽減するためにどのようにあなたの組織を強化できるかについてもっと知りたい場合は、cybersecurity@databricks.comまでご連絡ください。 そして、サイバーセキュリティ・アプリケーションのための新しいレイクハウスのウェブページをご覧ください。
ブログを購読して、最新の投稿を受信トレイにお届けします。