【詳細版】NSM(ネットワークセキュリティモニタ)、Zeekとは?

mieruka.link読者の皆様、こんばんわ!

管理人の伊集院です。前回簡易版と称してZeekとは?を解説しました。前回の記事は、【簡易版】OSSネットワークセキュリティモニタZEEKとは?をご一読ください。

今回は、さらに詳細にZeekとは?を解説しているページがありましたので、意訳してご紹介します。

今回意訳してご紹介する記事は、本家サイトのAbout Zeekというページです。それでは早速ご紹介いたします。

少々長いので、章ごとに区切りをつけて読むのがよいかと思います。

それでは、よろしくお願いします。

Zeekについて

Zeekとは?

Zeek は、パッシブなOSSのネットワーク トラフィックアナライザーです。多くのオペレーターは、Zeek をネットワーク セキュリティモニター(NSM)として活用し、疑わしい/悪意のあるアクティビティの調査に利用しています。

Zeekですが、パフォーマンス測定やトラブルシューティングなど、セキュリティの分野を超えた幅広いトラフィック分析タスクもサポートしています。

新規ユーザーがZeek から得る最初の利点は、ネットワーク アクティビティを説明する広範なログです。Zeekのログは、ネットワーク上で確認される全接続の包括的な記録だけでなく、アプリケーション層のトランスクリプトも含まれます。

これらには、要求されたURI、キーヘッダー、MIME タイプ、およびサーバー応答を含むすべての HTTP セッションが含まれます。

応答のある DNS 要求、SSL 証明書、SMTP セッションの重要な内容等々、デフォルトでは、Zeek はこのすべての情報を適切に構造化されたタブ区切りのログファイルまたは外部ソフトウェアによる後処理に適した JSON ログ ファイルに書き込みます。

ユーザーは、外部データベースまたは SIEM 製品を選択して、クエリ用のデータを消費、保存、処理、および提示することもできます。

ログに加えてZeek は、HTTP セッションからのファイルの抽出、外部レジストリとのインターフェイスによるマルウェアの検出、ネットワーク上で見られるソフトウェアの脆弱なバージョンの報告、人気のある Web の特定など、さまざまな分析および検出タスクのための組み込み機能が付属しています。アプリケーション、SSH ブルートフォーシングの検出、SSL 証明書チェーンの検証などがあります。

このような強力な機能を「すぐに」実現できることに加え、Zeek は完全にカスタマイズ可能で拡張可能なトラフィック分析用のプラットフォームです。

Zeek は、任意の分析タスクを実現するためのドメイン固有の完全にチューニング可能なスクリプト言語をユーザーに提供します。Zeek 言語を「ドメイン固有の Python」(または Perl) と考えてください。Python と同様に、システムには多数のビルド済み機能 (標準ライブラリ) が付属していますが、カスタムコードを書くことで斬新な方法でユーザーは Zeek を使用することもできます。実際、ログを含む Zeek のデフォルトの分析はすべてスクリプトを介して行われます。システムのコアに特定の分析がハードコードされているわけではありません。

Zeek はコモディティハードウェア上で動作するため、高価な専用ソリューションに代わる低コストの代替手段を提供します。多くの点で、Zeek は他のネットワーク監視ツールの機能を超えていますが、これらのツールは通常、ハードコードされた分析タスクの小さなセットに限定されています。Zeek は、従来の署名ベースの侵入検知システム (IDS) ではありません。このような標準機能もサポートしていますが、Zeek のスクリプト言語は、悪意のあるアクティビティを検出するための非常に幅広いさまざまなアプローチを容易にします。これらには、セマンティック誤用の検出、異常検出、行動分析が含まれます。

多くの大学、研究所、スーパーコンピューティングセンター、オープン サイエンス コミュニティ、大企業、政府機関など、さまざまなサイトがインフラストラクチャを保護するためにZeek を導入しています。Zeekは特に高速で大容量のネットワーク監視をターゲットにしており、システムを使用して10GE ネットワークを監視するサイトが増えており、一部はすでに100GEリンクに移行しています。

Zeek は、スケーラブルな負荷分散をサポートすることで、高性能設定に対応します。大規模なサイトでは通常「Zeek クラスター」が実行されます。このクラスターでは、高速フロントエンド ロード バランサーが適切な数のバックエンド PC にトラフィックを分散し、すべてが個々のトラフィックスライスで専用の Zeek インスタンスを実行します。中央管理システムはプロセスを調整し、バックエンド全体で状態を同期し、構成および集約されたログへのアクセスのための中央管理インターフェイスをオペレーターに提供します。Zeek の統合管理フレームワークである ZeekControl は、このようなクラスターのセットアップをすぐにサポートします。

Zeekのクラスター機能は、単一システムと複数システムのセットアップをサポートします。これは、Zeek のスケーラビリティの利点の一部です。たとえば、管理者は 1 つのシステム内で Zeek を可能な限り拡張し、必要に応じてシステムを透過的に追加できます。

簡単に言うと、Zeek はネットワークトラフィックを解釈し、そのトラフィックに基づいてログを生成するように最適化されています。バイトマッチング用に最適化されていないため、シグネチャ検出アプローチを求めるユーザーは、Suricata などの侵入検出システムを試すことでより適切なサービスを受けることができます。また、Zeek は Wireshark のようなプロトコル アナライザーではなく、ネットワーク トラフィックのすべての要素をフレーム レベルで描写しようとしている、またはパケット キャプチャ (PCAP) 形式でトラフィックを格納するためのシステムです。むしろ、Zeek はコンパクトで忠実度の高いネットワーク ログを表す「満足のいく中間」に位置し、ネットワーク トラフィックと使用状況の理解を深めます。

なぜZeekなのか?

Zeek は、インフラストラクチャがどのように使用されているかをよりよく理解したいセキュリティおよびネットワーク チームに多くの利点を提供します。

一般に、セキュリティ チームは、疑わしい悪意のあるアクティビティを検出して対応しようとする際に、4 種類のデータ ソースに依存しています。これらには、法執行機関、同業者、営利または非営利の脅威インテリジェンス組織などのサード パーティソースが含まれます。ネットワークデータ、クラウド環境からのログを含む、インフラストラクチャおよびアプリケーション データおよびエンドポイント データです。Zeek は主に、2 番目の形式のデータであるネットワーク データを収集および分析するためのプラットフォームです。ただし、4 つすべてがセキュリティチームのプログラムの重要な要素です。

ネットワークから派生したデータを見ると、アナリストが利用できるデータには 4 つのタイプがあります。ネットワーク セキュリティ監視パラダイムで定義されているように、これら 4 つのデータタイプは、完全なコンテンツトランザクション データ抽出されたコンテンツ、およびアラート データです。これらのデータタイプを使用して、トラフィックの記録、トラフィックの要約、トラフィックの抽出 (より正確にはコンテンツをファイル形式で抽出)、およびトラフィックの判断をそれぞれ行うことができます。

4 種類のネットワークセキュリティ監視データを収集して分析することが重要です。問題は、この目標を達成するための最善の方法を決定することの 1 つになります。ありがたいことに、NSM プラットフォームとしての Zeek は、これらのデータ形式、つまりトランザクション データ、抽出されたコンテンツ、およびアラートデータのうち、少なくとも 2 つ、ある意味では 3 つを収集できます。

Zeek は、トランザクションデータで最もよく知られています。デフォルトでは、ネットワークインターフェイスを監視するように指示されて実行すると、Zeek は、コンパクトで忠実度が高く、豊富な注釈が付けられた一連のトランザクション ログのコレクションを生成します。

これらのログは、判断のないポリシーに中立な方法で、ネットワーク上で見られるプロトコルとアクティビティを記述します。このドキュメントでは、最も一般的な Zeek ログ ファイルについてかなりの時間をかけて説明し、読者が形式に慣れ、環境に適用する方法を学習できるようにします。

Zeek は、ファイル抽出機能のおかげで、ネットワークトラフィックからファイルを簡単に分割することもできます。その後、アナリストはこれらのファイルを実行サンドボックスまたはその他のファイル検査ツールに送信して、追加の調査を行うことができます。Zeek には、従来のバイト中心の侵入検知を実行する機能がいくつかありますが、そのジョブはオープン ソースの Snort や Suricata エンジンなどのパッケージに最適です。ただし、Zeek にはその通知メカニズムを通じて、アラートの形で判断を提供できる他の機能があります。

Zeek は、完全なコンテンツ データコレクションの精神でトラフィックをディスクに書き込むように最適化されていません。そのタスクは、その要件を満たすように作成されたソフトウェアによって処理されるのが最適です。

Zeek がネイティブに収集および生成できるネットワーク データの形式を超えて、Zeek には、「Zeek とは?」に記載されている利点があります。これらには、さまざまな分析および検出タスク用の組み込み機能、およびトラフィック分析用の完全にカスタマイズ可能で拡張可能なプラットフォームとしてのステータスが含まれます。Zeek は、コモディティハードウェア上で実行できるという点でも魅力的であり、あらゆるタイプのユーザーが少なくとも低コストで Zeek を試すことができます。

Zeekの歴史

Zeek には、1990 年代にさかのぼる豊かな歴史があります。Vern Paxsonは、1995 年にローレンス バークレー国立研究所 (LBNL)の研究者として最初のバージョンを設計し、実装しました。オリジナルのソフトウェアは「Bro」と呼ばれ、「監視はプライバシー侵害の可能性と密接に関連していることを Orwell が思い起こさせる」ものでした。

LBNL は 1996 年に最初に Zeek を展開し、USENIX セキュリティ シンポジウムは 1998 年に Zeek に関する Vern のオリジナルの論文を発表し、その年の Best Paper Award を授与しました。

2003 年、国立科学財団 (NSF)は、国際コンピューター科学研究所 (ICSI)で Bro の研究と高度な開発の支援を開始しました。(Vern は今でも ICSI Networking and Security グループを率いています。)

何年にもわたって、ICSI の研究者と学生の成長するチームが Zeek に新しい機能を追加し続け、LBNL は エネルギー省 (DOE)からの資金提供を受けて支援を続けました。Zeek の能力の多くは学術研究プロジェクトに端を発しており、その結果は一流の会議で発表されることがよくあります。Zeek の成功の鍵は、学界と運用の間のギャップを埋めるプロジェクトの能力でした。この関係は、実際の課題における Zeek の基礎研究に役立ちました。

運用ユーザーコミュニティが拡大するにつれて、研究中心の開発モデルは最終的にシステムの進化のボトルネックになりました。研究助成金は、ソフトウェアの開発と保守のより平凡な部分をサポートしていませんでした。ただし、これらの要素はエンドユーザーエクスペリエンスにとって非常に重要でした。その結果、Zeekを導入するには、急な学習曲線を克服する必要がありました。

2010 年NSF はこの課題に対処するために、サイバーインフラストラクチャのソフトウェア開発基金から ICSI に助成金を授与しました。National Center for Supercomputing Applications (NCSA)がコア パートナーとしてチームに加わり、Zeek プロジェクトは 2012 年の 2.0 リリースに向けて、システムのユーザーに表示される部分の多くをオーバーホールし始めました。

Zeek 2.0 の後、このプロジェクトはさまざまな設定で新しい展開が大幅に拡大し、ICSI (共同 PI の Robin Sommer) と NCSA (共同 PI の Adam Slagel) の間の進行中のコラボレーションにより、多くの重要な機能がもたらされました。2012 年、Zeek は、多くのエンタープライズ ネットワーキング監視ツールよりずっと前に、ネイティブ IPv6 サポートを追加しました。2013 年、NSF は、ICSI と NCSA に Bro Center of Expertise を設立する 2 回目の助成金で支援を更新し、Zeek を研究および教育コミュニティ向けの包括的で低コストのセキュリティ機能として推進しました。デバッグと教育の両方を容易にするために、 try.zeek.org(以前の try.bro.org) は 2014 年に開始されました。これにより、ユーザーはさまざまな Zeek バージョンに対して独自のパケット キャプチャを使用してスクリプトをテストし、サンプル コードを他のユーザーと簡単に共有できるインタラクティブな方法が提供されました。Zeek クラスタと外部通信のために、Broker 通信フレームワークが追加されました。最後になりましたが、Zeek パッケージ マネージャーは 2016 年に作成され、Mozilla Foundation からの追加の助成金によって資金提供されました。

2018 年の秋、プロジェクト リーダー チームは、ソフトウェアの名前を Bro から Zeek に変更することを決定しました。リーダーシップチームは、コンピューティングの世界以外のいわゆる「仲間文化」の否定的な意味合いを避けながら、コミュニティの価値をよりよく反映する名前を望んでいました。このプロジェクトは、2019 年の秋にバージョン 3.0 をリリースしました。これは、Zeek という名前の最初のリリースです。2020 年は、ソーシャル メディア、ウェビナー、Slack チャネル、および関連するアウトリーチ活動を介した相互作用が増加し、コミュニティと Zeek コミュニティの成長に新たな焦点が当てられました。

1995 年から 2015 年までのプロジェクトの歴史については、BroCon 2015 での Vern Paxson のトーク、Reflecting on Twenty Years of Bro を参照してください。

Bro を Zeek に改名する決定の背景については、BroCon 2018 での Vern Paxson の講演、 Renaming Bro を参照してください。

Zeekのアーキテクチャ

非常に高いレベルで、Zeek はアーキテクチャ上、2 つの主要なコンポーネントに階層化されています。そのイベント エンジン(またはコア) は、着信パケットストリームを一連の高レベルイベントに分解します。
これらのイベントは、ネットワーク アクティビティをポリシーに依存しない用語で反映します。つまり、が見られた かを説明しますが、理由や重要性は説明しません。

たとえば、ネットワーク上のすべての HTTP 要求は http_request、関連する IP アドレスとポート、要求されている URI、および使用中の HTTP バージョンを運ぶ対応するイベントに変わります。ただし、このイベントは、その URI が既知のマルウェアサイトに対応するかどうかなど、それ以上の解釈を伝えません。
イベント エンジン コンポーネントは、特に、入力ソース、パケット分析、セッション分析、およびファイル分析で構成されるパケット処理パイプラインを含む、いくつかのサブコンポーネントで構成されます。
入力ソースは、ネットワークインターフェイスから着信ネットワーク トラフィックを取り込みます。パケット分析は、リンク層から始めて、下位レベルのプロトコルを処理します。
セッション分析は、HTTP、FTP などのアプリケーション層プロトコルを処理します。ファイル分析は、セッションを介して転送されたファイルの内容を分析します。イベントエンジンは、必要に応じてZeek の機能を拡張できるように、コア Zeek コード ベースの外部からこれらのいずれかを追加するためのプラグインアーキテクチャを提供します。

イベントに関連するセマンティクスは、Zeek の 2 番目のメインコンポーネントであるスクリプトインタープリターによって導出されます。スクリプトインタープリターは、Zeek のカスタムスクリプト言語で記述された一連のイベントハンドラーを実行します。これらのスクリプトは、モニターがさまざまな種類のアクティビティを検出したときに実行するアクションなど、サイトのセキュリティポリシーを表すことができます。
より一般的には、スクリプトは入力トラフィックから必要なプロパティと統計を取得できます。実際、Zeek のデフォルト出力はすべて、ディストリビューションに含まれているスクリプトからのものです。Zeek の言語には、広範なドメイン固有の型とサポート機能が付属しています。
重要なことは、Zeek の言語を使用するとスクリプトは長期にわたって状態を維持できるため、接続とホストの境界を越えて観察したものの進化を追跡し、関連付けることができます。
Zeek スクリプトは、リアルタイムのアラートを生成し、オンデマンドで任意の外部プログラムを実行することもできます。この機能を使用して、攻撃に対するアクティブな応答をトリガーすることができます。
非常に高いレベルで、Zeek はアーキテクチャ上、2 つの主要なコンポーネントに階層化されています。そのイベントエンジン(またはコア) は、着信パケット ストリームを一連の高レベルイベントに分解します。これらのイベントは、ネットワークアクティビティをポリシーに依存しない用語で反映します。つまり、が見られたかを説明しますが、理由や重要性は説明しません。

たとえば、ネットワーク上のすべての HTTP 要求は http_request、関連する IP アドレスとポート、要求されている URI、および使用中の HTTP バージョンを運ぶ対応するイベントに変わります。ただし、このイベントは、その URI が既知のマルウェア サイトに対応するかどうかなど、それ以上の解釈を伝えません。
イベント エンジン コンポーネントは、特に入力ソース、パケット分析、セッション分析、およびファイル分析で構成されるパケット処理パイプラインを含む、いくつかのサブコンポーネントで構成されます。入力ソースは、ネットワーク インターフェイスから着信ネットワーク トラフィックを取り込みます。
パケット分析は、リンク層から始めて、下位レベルのプロトコルを処理します。セッション分析は、HTTP、FTP などのアプリケーション層プロトコルを処理します。ファイル分析は、セッションを介して転送されたファイルの内容を分析します。イベント エンジンは、必要に応じて Zeek の機能を拡張できるように、コア Zeek コード ベースの外部からこれらのいずれかを追加するためのプラグイン アーキテクチャを提供します。

イベントに関連するセマンティクスは、Zeek の 2 番目のメインコンポーネントであるスクリプトインタープリターによって導出されます。スクリプトインタープリターは、Zeek のカスタムスクリプト言語で記述された一連のイベントハンドラーを実行します。これらのスクリプトは、モニターがさまざまな種類のアクティビティを検出したときに実行するアクションなど、サイトのセキュリティ ポリシーを表すことができます。

より一般的には、スクリプトは、入力トラフィックから必要なプロパティと統計を取得できます。実際、Zeek のデフォルト出力はすべて、ディストリビューションに含まれているスクリプトからのものです。Zeek の言語には、広範なドメイン固有の型とサポート機能が付属しています。重要なことに、Zeek の言語を使用すると、スクリプトは長期にわたって状態を維持できるため、接続とホストの境界を越えて観察したものの進化を追跡し、関連付けることができます。Zeek スクリプトは、リアルタイムのアラートを生成し、オンデマンドで任意の外部プログラムを実行することもできます。この機能を使用して、攻撃に対するアクティブな応答をトリガーすることができます。

(Visited 606 times, 1 visits today)
The following two tabs change content below.
【好きなもの】 インフラ技術が好き。古いものが好き。 【生きてきたフィールド】 システム運用、ソフトウェア開発、ミドルウェア検証、OSSサポート、プリセールスエンジニア、プロジェクトマネジメント 【このサイトでの役割】 サイト管理者。