紹介
このシリーズの前のチュートリアルでは、Suricataのインストールと設定方法について説明しました。また、SuricataサーバーからアラートをElastic Stackサーバーに送信するためのFilebeatの使用方法についても説明しました。これらは、組み込みのセキュリティ情報とイベント管理(SIEM)機能と一緒に使用されます。
このシリーズの最後のチュートリアルでは、カスタムのKibanaルールを作成し、KibanaのSIEMダッシュボードでアラートを生成します。ルールを作成し、Kibanaを使用してSuricataのログをどこでどのようにフィルタリングするかを理解したら、Kibanaのタイムライン分析ツールを使用してケースを作成および管理する方法を調査します。
このチュートリアルの最後までに、ネットワーク内のすべてのサーバーでセキュリティイベントを追跡および調査するために使用できるSIEMシステムが完成します。
前提条件
このチュートリアルシリーズに従ってきた場合、すでに少なくとも4GBのRAMと2つのCPUを搭載したサーバーと、設定済みの非rootユーザーがあるはずです。このガイドの目的のためには、お使いのオペレーティングシステムに応じて、最初のサーバー設定ガイドを以下から選択して設定してください。
また、サーバーにSuricataをインストールして実行する必要があります。Suricataをサーバーにインストールする必要がある場合は、次のオペレーティングシステムに応じて次のチュートリアルのいずれかを使用できます:
- Ubuntu 20.04: Ubuntu 20.04にSuricataをインストールする方法
- Debian 11: Debian 11にSuricataをインストールする方法
- Rocky Linux 8: Rocky Linux 8にSuricataをインストールする方法
また、SuricataサーバーからログをElasticsearchに送信できるようにElastic Stackを実行して構成したサーバーも必要です。Elastic Stackサーバーを作成する必要がある場合は、オペレーティングシステムに一致する以下のリストからのチュートリアルを使用してください:
- Ubuntu 20.04: Ubuntu 20.04でSuricataとElastic Stackを使用したセキュリティ情報およびイベント管理(SIEM)システムの構築方法
- Debian 11: Debian 11でSuricataとElastic Stackを使用したセキュリティ情報およびイベント管理(SIEM)システムの構築方法
- Rocky Linux 8: Rocky Linux 8でSuricataとElastic Stackを使用したセキュリティ情報およびイベント管理(SIEM)システムの構築方法
ElasticsearchサーバーでKibanaにログインできることを確認し、さまざまなSuricata Alerts and Eventsダッシュボードにイベントがあることを確認します。
すべての前提条件が整ったら、KibanaサーバーにSSHトンネルを開き、以前のチュートリアルで生成した資格情報を使用してブラウザーでKibanaにログインします。
ステップ1 — ElasticsearchでAPIキーを有効にする
Kibanaでルール、アラート、およびタイムラインを作成する前に、xpack
セキュリティモジュール設定を有効にする必要があります。
/etc/elasticsearch/elasticsearch.yml
ファイルをお好みのエディタで開きます。
ファイルの最後に次の行を追加します:
. . .
discovery.type: single-node
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
編集が完了したら、ファイルを保存して閉じます。nanoを使用している場合は、CTRL+X
、次にY
、ENTER
で確認できます。
新しい設定が有効になるように、Elasticsearchを再起動します。
これで、Kibanaでルールを構成し、アラートを調査し、タイムラインとケースを作成する準備が整いました。
ステップ2 — Kibanaにルールを追加する
Suricataイベントデータを使用してKibanaのSIEM機能を利用するには、受信イベントに関するアラートを生成するルールを作成する必要があります。Kibanaのセキュリティアプリページのルールダッシュボードを訪れて、ルールを作成またはインポートしてください。
このチュートリアルでは、サーバーへのトラフィックを検出するために、次のシグネチャを使用します(それぞれSSH、HTTP、TLSトラフィックに対して):
alert ssh any any -> 203.0.113.5 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000000;)
alert ssh any any -> 2001:DB8::1/32 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000001;)
alert http any any -> 203.0.113.5 !80 (msg:"HTTP REQUEST on non-HTTP port"; classtype:misc-activity; sid:1000002;)
alert http any any -> 2001:DB8::1/32 !80 (msg:"HTTP REQUEST on non-HTTP port"; classtype:misc-activity; sid:1000003;)
alert tls any any -> 203.0.113.5 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; classtype:misc-activity; sid:1000004;)
alert tls any any -> 2001:DB8::1/32 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; classtype:misc-activity; sid:1000005;)
独自のシグネチャまたはルールセットから使用している場合は、アラートを生成でき、KibanaのデフォルトのSuricataダッシュボードで対応するイベントにアクセスできることを確認してください。
今度は、Kibanaのセキュリティアプリの[ルール]ページを訪れてください。http://localhost:5601/app/security/rules/。ページの右上にある新しいルールを作成ボタンをクリックしてください。
カスタムクエリルールタイプのカードが選択されていることを確認してください。ページのカスタムクエリ入力フィールドまでスクロールし、以下の内容を貼り付けてください。
rule.id: "1000000" or rule.id :"1000001"
rule.id
の値が、警告を出したい攻撃のSuricataのsid
値と一致していることを確認してください。
クエリのクイックプレビュードロップダウンメニューを先月に変更し、結果のプレビューをクリックしてください。Suricataログに一致するイベントがある場合、ページは直接グラフを更新し、先月の警告を示します。ページは以下のスクリーンショットのようになります。
続行をクリックして、追加するルールのルール名フィールドに名前を追加してください。すべての追加するルールに必要なフィールドです。ルール名フィールドに名前を追加してください。この例では、SuricataルールSSH TRAFFIC on non-SSH port
からのメッセージの説明を使用します。ルールの説明も追加してください。この例では非標準ポートでのSSH接続試行をチェック
とします。
また、高度な設定セクションを展開して、ルールに関する詳細を追加することもできます。たとえば、ルールによって生成された警告の処理方法の説明を追加したり、特定の攻撃タイプに関するセキュリティ研究者の記事へのリンクを追加したりできます。
ルール名、説明、およびオプションの追加フィールドを入力したら、続行 をクリックして、ルールの作成手順のステップ 3 に進んでください。
次の スケジュールルール セクションの設定はデフォルト値のままにして、続行 をクリックしてください。
最後に、ルールアクション ステップで、ルールを作成してアクティブにする をクリックしてください。
次に、ルールの詳細が表示される新しいページにリダイレクトされます:
注意: 最初にアラートデータが表示されるまで数分かかる場合があります。この遅延は、ルールのデフォルトのスケジュールが 5 分ごとに実行されるためです。
他にアラートを受け取りたい Suricata ルールがある場合は、上記の手順を繰り返して、Kibana のカスタムクエリ rule.id
フィールドにシグネチャの sid
を代入してください。
ルールまたは複数のルールが設定されたら、次のステップに進んでアラートを調査し、それらを管理するためのケースを作成します。
ステップ 3 — SSH トラフィック関連アラートを追跡するタイムラインの作成
いま、KibanaのSIEMアプリでアラートを生成するためにルールが設定されている場合、アラートをさらにグループ化して管理する方法が必要です。始めるには、Kibanaのアラートダッシュボードを訪問してください:http://127.0.0.1:5601/app/security/alerts。
Suricataシグネチャまたは使用しているシグネチャに一致する無効なトラフィックを生成していることを確認してください。たとえば、ローカルマシンから次のようなコマンドを実行して、sid:1000000
の例示Suricataルールをトリガーすることができます:
このコマンドは、デフォルトのポート22ではなく、ポート80を使用してSSHでサーバに接続しようとします。そして、アラートが表示されるまでに数分かかる場合があります。なぜなら、それはElasticsearchによって処理され、そしてKibanaで作成したルールによって処理される必要があるからです。
次に、ページの下部に表示されるアラートのテーブルにcomnunity_id
フィールドを追加します。最初のチュートリアルから、このフィールドがSuricataによって生成され、ネットワークフローに含まれる一意のIPアドレスとポートを表すことを思い出してください。Fieldsボタンをクリックし、ポップアップするモーダルダイアログにnetwork.community_id
を入力し、フィールド名の横にあるチェックボックスをオンにします:
モーダルを閉じると、フィールドがアラートのテーブルに追加されます。そして、同じcommunity_id
値を持つアラートの上にマウスを置いて、community_id
をSuricataがイベントに追加したすべてのアラートがさらなる調査のためにタイムラインに追加されるようにタイムライン調査に追加アイコンをクリックします。
次に、ブラウザの左下にあるUntitled Timelineリンクをクリックします。このリンクをクリックすると、調査したいSuricata community_id
フィールドを持つアラートのみが表示されるページに移動します。
タイムラインページでは、アラートやネットワークフローに関連する個々のパケットの詳細が表示されます。タイムラインを使用して、疑わしいネットワークフローがいつ始まり、どこから発信されたか、そしてどのくらい続いたかをより良く把握できます。
ページの右側にある全データソースボタンをクリックし、検出アラートボタンを選択し、保存をクリックします。このオプションにより、Kibanaが生成するアラートのみがタイムラインに表示されます。このオプションがない場合、Suricataのアラートもタイムラインに含まれます。
新しいタイムラインを保存するには、タイムラインページの左上にある鉛筆アイコンをクリックします。以下のスクリーンショットは、鉛筆アイコンと全データソースボタンの場所を示しています:
追加情報をタイムラインに追加したい場合は、説明フィールドにテキストを追加できます。タイムライン名と説明の編集が完了したら、ダイアログモーダルの右下にある保存ボタンをクリックします。
後で詳細を調べたい他のアラートのために、上記の手順を繰り返します。
次の手順では、イベントのタイムラインビューを使用して、KibanaのCasesアプリにアラートを添付します。
ステップ4 — SIEMケースの作成と管理
前のステップでは、Suricataのcommunity_id
フィールドに基づいて個々のアラートとパケットをグループ化するためのタイムラインを作成しました。このチュートリアルのこのセクションでは、タイムライン内のアラートを追跡および管理するケースを作成します。
タイムラインから新しいケースを作成するには、ブラウザのタイムラインページにいることを確認してください。タイムラインページの右上にあるケースに添付ボタンをクリックし、表示されるリストから新しいケースに添付ボタンをクリックします。
これにより、調査中のインシデントに関する情報を入力するページにリダイレクトされます。次の例のスクリーンショットでは、ケースはSSHトラフィックが非SSHポートでのアラートであることが示されています。
記述的な名前とオプションのタグを入力します。この例では、ケースの名前はSSH TRAFFIC on non-SSH port from 203.0.113.5
です。これは、調査しているトラフィックの特定の種類とホストです。SIEMシステムで調査するイベントが多い場合、このような命名スキームは、ケース、タイムライン、およびアラートを追跡するのに役立ちます。なぜなら、名前がKibanaアラートとSuricataシグネチャのメッセージフィールドに対応するからです。
ページの一番下までスクロールし、ケースを作成ボタンをクリックしてください。ブラウザは保存されたケースが表示されるページになります。ここで、追加情報としてMarkdown形式でコメントを追加したり、このページからケースを編集したりできます。
次に、前の手順で追加したケースのタイムラインに移動するために、説明文中のリンクをクリックしてください。
ケースに含めたい各アラートについて、そのアラートのその他のアクションアイコンをクリックします。そして、既存のケースに追加をクリックします。
ポップアップするモーダルで、アラートをケースに追加するためにケース名をクリックしてください。調査しているタイムラインとアラートに対応するケースを選択してください。リスト内の各アラートを既存のケースに追加する操作を繰り返してください。
次に、Kibanaのケースアプリに再度アクセスしてください。ページの左側のナビゲーションメニューを使用します](http://localhost:5601/app/security/cases)。ケースをクリックし、追加したアラートがケースの詳細にリストされていることに注意してください。
ここから、ケースの一番下までスクロールし、追加情報を入力できます。たとえば、アラートまたはアラートの調査に取った手順、Suricataの構成変更(新しいルールの追加や編集など)、他のチームメンバーへのエスカレーション、またはケースに関連するその他の情報などが挙げられます。
さまざまな種類のアラートのためにケースを作成することに慣れたら、KibanaのSIEMツールを使用して、すべてのアラートの調査を1か所で組織化し、調整できるようになります。
結論
このチュートリアルでは、既存のSuricataとElastic Stack SIEMシステムにルールを追加して、特定のトラフィックに関するアラートをKibanaに生成しました。また、それらのcommunity_id
に基づいてアラートのセットをグループ化するためのタイムラインを作成しました。最後に、ケースを作成し、そのタイムラインと興味のある個々のアラートにリンクしました。
このSIEMシステムが設置されていると、ほぼ任意のスケールでシステム全体のセキュリティイベントを追跡できるようになります。Suricataをより詳しく知り、Kibana SIEMで生成されたアラートを追跡するにつれて、Suricataのアラートとデフォルトのアクションをカスタマイズして、特定のネットワークに適合させることができるようになります。
KibanaのSIEMツールの詳細については、公式の
より軽量なSIEMインターフェースをご希望の場合は、EveBoxも興味があるかもしれません。これは、すべてのSuricataイベントデータとSIEM機能を1つのページで表示します。