DUICUO

ZeekとELKスタックの統合

本誌2022年3月号では、「Zeekでサイバーセキュリティ監視を簡単に実装」という記事で、Zeekの機能と導入方法について解説しました。今回は、その学習をさらに深め、ELK(Elasticsearch、Kibana、Beats、Logstash)との統合方法について解説します。

このために、ログを監視、収集し、Elasticsearchに転送できるFilebeatというツールを使用します。FilebeatとZeekを連携させ、Zeekで収集されたデータがKibanaダッシュボードに転送され、一元管理されるように設定します。

Filebeatをインストールする

まずZeekを使ってFilebeatをインストールしましょう。apt ​apt​使ってFilebeatをインストールするには、以下のコマンドを使用します。

 sudo apt でファイルビートをインストール

次に、 ​/etc/filebeat/​フォルダーにある​.yml​ファイルを設定する必要があります。

 sudo nano /etc/filebeat/filebeat.yml

ここで設定する必要があるのは2つだけです。Filebeatの入力セクションで、typeを​log​に変更し、 ​enabled:false​コメントを解除して​true​に変更します。また、ログを保存するパス​/opt/zeek/logs/current/*.log​ 」も指定する必要があります。

これらの手順を完了すると、セットアップの最初の部分は図 1 に示す内容のようになるはずです。

図1: Filebeatの設定(a)

次に変更する必要があるのは、Elasticsearchの出力セクションの「Output」です​output.elasticsearch​​hosts​コメントを解除します。ホストURLとポート番号は、ELKのインストール時に設定したものと一致するようにしてください。ここでは​localhost​ポート番号は​9200​のままにしておきます。

同じセクションで、下部にあるユーザー名とパスワードのフィールドのコメントを解除し、インストール後のELK設定時に生成されたElasticsearchユーザーのユーザー名とパスワードを入力します。これらの手順を完了したら、図2を参照して設定を確認してください。

図2: Filebeatの設定(b)

インストールと設定が完了したら、Zeek がログを JSON 形式で保存するように設定する必要があります。これを行うには、Zeek インスタンスが停止していることを確認してください。停止していない場合は、以下のコマンドを実行して停止してください。

 cd /opt/zeek/bin
./zeekctl 停止

ここで、 ​opt/zeek/share/zeek/site/​ディレクトリにある​local.zeek​に小さな行を追加する必要があります。

ファイルを root として開き、次の行を追加します。

ポリシー/チューニング/json-logs.zeek を @load します。

設定が正しいことを確認するには、図 3 を参照してください。

図3: local.zeekファイル

Zeek の構成の一部を変更したため、再デプロイする必要があります。これは、次のコマンドを実行して実行できます。

 cd /opt/zeek/bin
./zeekctl デプロイ

次に、FilebeatでZeekモジュールを有効にして、Zeekログを転送できるようにします。以下のコマンドを実行してください。

 sudo filebeatモジュールでzeekを有効にする

もうすぐ完了です。最後のステップは、 ​zeek.yml​ファイルに記録するデータの種類を設定することです。これは、 ​/etc/filebeat/modules.d/zeek.yml​ /zeek.yml ファイルを変更することで設定できます。

この .yml ファイルでは、これらのログが保存されるディレクトリを指定する必要があります。これらのログは現在のフォルダに保存されており、 ​dns.log​​conn.log​​dhcp.log​などの複数のファイルが存在することは分かっています。各セクションでそれぞれのパスを指定する必要があります。そのファイル/プログラムのログが不要な場合にのみ、 enable 値を​false​に変更することで不要なファイルを破棄できます。

たとえば、 ​dns​の場合、enable 値が​true​であり、パスが設定されていることを確認します。

変数パス: [ “/opt/zeek/logs/current/dns.log”, “/opt/zeek/logs/*.dns.json” ]

残りのファイルについてもこの手順を繰り返します。必要なファイルの一部については既にこの手順を実行しました。また、主要な必須ファイルはすべて追加しました。皆さんも同様に実行できます。図4をご覧ください。

図4: zeek.yml の設定

それではFilebeatを起動しましょう。以下のコマンドを実行してください。

 sudoファイルビートのセットアップ
sudo サービスfilebeat 開始

すべてが完了したら、Kibana ダッシュボードに移動して、Filebeat 経由で Zeek からデータを受信して​​いるかどうかを確認しましょう。

ダッシュボードにアクセスしてください。収集したデータの統計分析を明確に確認できます(図5および6)。

図6: Kibanaのダッシュボード(ネットワーク)

次に、「Discover」タブに移動し、クエリを使用して結果をフィルタリングして調べましょう。

このクエリは、特定の期間内に受信したすべてのデータをフィルタリングし、Zeek という名前のモジュールのデータのみを表示します (図 7)。

図7: event.moduleクエリでフィルタリングされたデータ

謝辞

著者らは、VIT-AP School of Computer Science and Engineering の Sibi Chakkaravarthy Sethuraman 氏と Sudhakar 氏に感謝します。
Ilango氏、Nantha Kumar R.氏、Anupama Namburu氏からの継続的な指導とサポートに感謝します。特に、人工知能・ロボティクス・センター(AIR)に感謝します。