Graylog でログを分析する

NmapNmapBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、サイバーセキュリティ監視用のオープンソースログ管理プラットフォームである Graylog を使用してログを分析する方法を学びます。Docker Compose を使用して Graylog をセットアップし、ログ入力を構成し、実践的な演習を通じてログ分析を行う練習をします。

この実験では、MongoDB と Elasticsearch とともに Graylog をデプロイし、そのウェブインターフェイスを使用してログデータを収集およびクエリする手順を案内します。これらの実践的なタスクにより、集中型ログ管理とセキュリティ監視に必要なスキルを習得することができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) nmap/NmapGroup -.-> nmap/udp_scanning("UDP Scanning Techniques") wireshark/WiresharkGroup -.-> wireshark/packet_capture("Packet Capture") subgraph Lab Skills nmap/udp_scanning -.-> lab-549925{{"Graylog でログを分析する"}} wireshark/packet_capture -.-> lab-549925{{"Graylog でログを分析する"}} end

Graylog のインストール

このステップでは、強力なオープンソースログ管理プラットフォームである Graylog を、LabEx の仮想マシン (VM) 環境にインストールします。Graylog は、様々なソースからログを収集し、検索および可視化機能を提供することで、セキュリティ監視とトラブルシューティングのためにログデータを集中管理および分析するのに役立ちます。

Docker コンテナを使用するため、簡単にセットアップできるように Docker Compose を使って Graylog をデプロイします。Docker Compose を使用すると、単一の設定ファイルでマルチコンテナアプリケーションを定義して実行できます。この方法により、インストールプロセスが簡素化され、必要なすべてのコンポーネントが適切に連携することが保証されます。以下の手順に注意深く従ってください。

  1. まず、正しいディレクトリにいることを確認します。project ディレクトリは、Graylog のインストールファイルを整理する場所です。
cd ~/project
  1. Graylog の設定用に新しい専用ディレクトリを作成します。これにより、インストールファイルが分離され、整理されます。
mkdir graylog && cd graylog
  1. nano を使用して、以下の内容の docker-compose.yml ファイルを作成します。このファイルは、Graylog を実行するために必要なすべてのサービスを定義します。
nano docker-compose.yml
  1. この設定を貼り付けます (Ctrl+O を押して保存し、Ctrl+X を押して終了します)。この設定には、3 つの主要なサービスが含まれています。
    • 設定データを保存するための MongoDB
    • ログのインデックス作成と検索を行うための Elasticsearch
    • ウェブインターフェイスと処理エンジンとしての Graylog そのもの
version: "3"
services:
  mongodb:
    image: mongo:4.2
    volumes:
      - mongo_data:/data/db
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
    volumes:
      - es_data:/usr/share/elasticsearch/data
    environment:
      - "discovery.type=single-node"
      - "bootstrap.memory_lock=true"
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  graylog:
    image: graylog/graylog:4.3
    volumes:
      - graylog_data:/usr/share/graylog/data
    environment:
      - GRAYLOG_PASSWORD_SECRET=somepasswordpepper
      - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
      - GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
    depends_on:
      - mongodb
      - elasticsearch
    ports:
      - "9000:9000"
      - "1514:1514"
      - "1514:1514/udp"
      - "12201:12201"
      - "12201:12201/udp"
volumes:
  mongo_data:
  es_data:
  graylog_data:
  1. Docker Compose で Graylog スタックを起動します。-d フラグを使用すると、コンテナがバックグラウンドで実行されます。
docker-compose up -d
  1. コンテナが正常に実行されていることを確認します。このコマンドは、docker-compose ファイルで定義されたすべてのサービスの状態を表示します。
docker-compose ps

ステータスが "Up" の 3 つのサービス (mongodb、elasticsearch、graylog) が表示されるはずです。Graylog のウェブインターフェイスは http://127.0.0.1:9000 で利用できます (ユーザー名:admin、パスワード:admin)。これで Graylog の基本的なインストールが完了し、次のステップでログ入力を構成する準備が整いました。

ログ入力の設定

このステップでは、Graylog で syslog メッセージを受信するためのログ入力を構成します。これは、Graylog が様々なデバイスやアプリケーションからログデータを収集できる「リスニングポート」を作成するようなものです。ログにはシステムの活動や潜在的な脅威に関する貴重な情報が含まれているため、これはセキュリティ監視に不可欠です。

  1. まず、前のセットアップで Graylog が正常に実行されていることを確認しましょう。コンテナの状態を確認するためにこのコマンドを実行します。
cd ~/project/graylog
docker-compose ps
  1. ブラウザを開き、http://127.0.0.1:9000 にアクセスして Graylog のウェブインターフェイスにアクセスします。以下の資格情報を使用します。

    • ユーザー名:admin
    • パスワード:admin
  2. Graylog のウェブインターフェイスで、新しい入力ソースを作成しましょう。

    • 上部メニューの「System」をクリックします。ここでは Graylog のコア機能を管理します。
    • ドロップダウンから「Inputs」を選択します。入力は Graylog がログデータを受信する方法です。
    • 「Select input」の下で「Syslog UDP」を選択します。UDP は TCP よりもログ収集が速いです。
    • 「Launch new input」をクリックして設定を開始します。
  3. ここで、以下の特定の設定で入力を構成します。

    • ノード:Graylog サーバーを選択します (これは利用可能な唯一のオプションであるはずです)。
    • タイトル:"Syslog UDP Input" (説明的な名前を付けます)。
    • バインドアドレス:0.0.0.0 (すべてのネットワークインターフェイスでリスンすることを意味します)。
    • ポート:1514 (標準的な syslog ポートの代替)。
    • 「Save」をクリックして入力を有効にします。
  4. 保存後、入力が正常に動作していることを確認します。

    • 新しい入力の横に緑色の「Running」ステータスが表示されていることを確認します。これは入力がアクティブであることを意味します。
    • 「Local inputs」セクションに「1 input running」と表示されていることを確認します。これは設定が成功したことを確認します。
  5. サンプルのログメッセージを送信して、新しい入力をテストしましょう。ターミナルでこのコマンドを実行します。

echo "<14>$(date +'%b %d %H:%M:%S') localhost labex: Test syslog message" | nc -w1 -u 127.0.0.1 1514

このコマンドは、優先度レベル 14 (情報) のテストログメッセージを作成し、netcat (nc) を使用して Graylog に送信します。メッセージには現在の日付と時刻が含まれ、ソースが「localhost」と識別されます。

これで、Graylog が syslog メッセージを受信するように正常に設定されました。次のステップでは、より複雑なログを送信し、それらを検索して重要なセキュリティ情報を見つける方法を探ります。

サンプルログの送信

このステップでは、先ほど構成した syslog 入力を通じて、サンプルのログメッセージを生成して Graylog に送信します。この実践的な演習は、実際のデータを分析する前に、ロギングパイプラインが正しく動作していることを確認するのに役立ちます。異なる重大度レベルとアプリケーションタイプをシミュレートするテストログを作成します。これは、Graylog がログエントリをどのように処理し、分類するかを理解するために不可欠です。

  1. まず、Graylog のコンテナが実行中であることを確認します。このコマンドは Docker コンテナの状態を確認します。すべてが正常に動作している場合、コンテナの状態は "Up" と表示されます。
cd ~/project/graylog
docker-compose ps
  1. サンプルログを生成するためのシンプルな bash スクリプトを作成します。このスクリプトは、タイムスタンプ、重大度レベル、およびアプリケーション名を含む構造化されたログメッセージを生成します。プロジェクトディレクトリに新しいファイルを作成します。
nano ~/project/generate_logs.sh
  1. 以下の内容をファイルに追加します。このスクリプトはいくつかの重要なことを行います。
    • ランダムな重大度レベル (0 - 7) のログメッセージを 10 件生成します。
    • syslog 形式の適切なタイムスタンプを含めます。
    • 'nc' コマンドを使用して、UDP を介してポート 1514 にログを送信します。
    • メッセージ間に 1 秒の遅延を追加して、より良い可視化を実現します。
#!/bin/bash
for i in {1..10}; do
  severity=$(((RANDOM % 8)))
  timestamp=$(date +'%b %d %H:%M:%S')
  echo "<$((severity + 8))>$timestamp localhost sample_app[$i]: Sample log message $i with severity $severity" | nc -w1 -u 127.0.0.1 1514
  sleep 1
done
  1. スクリプトを直接実行できるように、実行可能にします。chmod コマンドはファイルのパーミッションを変更します。
chmod +x ~/project/generate_logs.sh
  1. スクリプトを実行して、サンプルログを Graylog に送信します。ログは Graylog の syslog 入力に送信されるため、ターミナルに直接出力は表示されません。
~/project/generate_logs.sh
  1. ここで、ログが Graylog に到達したことを確認しましょう。ウェブインターフェイスで以下の手順に従います。

    • ブラウザを開き、http://127.0.0.1:9000 にアクセスします。
    • 上部メニューの "Search" をクリックして、受信したメッセージを表示します。
    • 数秒以内にサンプルログが表示されるはずです。
    • "sample_app" を検索して、テストログのみをフィルタリングして表示してみてください。
  2. (オプション) より包括的なテストのために、一般的なサーバーアプリケーションをシミュレートする追加のログメッセージを送信することができます。これらの例は、Graylog が処理できる異なるログ形式を示しています。

## Apache-style web server log
echo '<13>$(date +"%b %d %H:%M:%S") localhost apache: 127.0.0.1 - - [$(date +"%d/%b/%Y:%H:%M:%S %z")] "GET / HTTP/1.1" 200 45' | nc -w1 -u 127.0.0.1 1514

## SSH login attempt (common security event)
echo '<12>$(date +"%b %d %H:%M:%S") localhost sshd[1234]: Failed password for root from 192.168.1.100 port 22 ssh2' | nc -w1 -u 127.0.0.1 1514

ログデータのクエリ

このステップでは、Graylog のクエリ言語を使用して、Graylog 内のログデータを検索および分析する方法を探ります。Graylog の検索機能を使うと、大量のデータの中から関連するログをすばやく見つけることができます。先ほど送信したサンプルログを使って、これらのテクニックを練習しましょう。

  1. まず、http://127.0.0.1:9000 にアクセスして Graylog のウェブインターフェイスに入ります(ユーザー名:admin、パスワード:admin)。ここで Graylog のすべてのログ分析が行われます。

  2. 基本的な検索操作:

    • 上部メニューの「Search」をクリックして、検索インターフェイスにアクセスします。
    • 検索バーに source:localhost と入力すると、テストソースからのすべてのログが表示されます。これは、ログをソースフィールドでフィルタリングする方法を示しています。
    • 異なる検索パターンを理解するために、以下の基本的なクエリを試してみましょう。
      message:"Sample log message"  ## 正確なフレーズを含むログを検索
      severity:3                   ## 重大度レベル 3 のログをフィルタリング
      source:localhost AND severity:[2 TO 4]  ## 条件を組み合わせる
  3. 時間範囲のフィルタリング:

    • 時間範囲セレクターをクリックします(デフォルトは「Last 5 minutes」)。ログは時間に敏感なデータなので、これを使うと関連する時間帯に絞り込むことができます。
    • 「Last 15 minutes」に変更すると、最近送信したすべてのテストログが表示されます。
    • 正確な時間範囲が必要な場合は、「Absolute」時間範囲を選択して、正確な開始/終了時間を指定します。
  4. フィールド分析:

    • 任意のログメッセージをクリックすると、そのフィールドが表示されます。各ログには、さまざまな情報を持つ複数のフィールドが含まれています。
    • sourceseverity などの自動抽出されたフィールドに注目してください。これらは Graylog がログを処理する際に作成されます。
    • 「Quick values」タブをクリックすると、値の分布が表示されます。これは、ログ内で最も頻繁に出現する値を示しています。
  5. 検索を保存する:

    • 有用なクエリを実行した後、「Save search」をクリックします。後で同じ検索を再利用する必要がある場合に便利です。
    • 識別しやすいように、「Sample Log Analysis」と名前を付けます。
    • これは「Saved searches」セクションに保存され、将来アクセスできます。
  6. 検索クエリのショートカットを作成する:

    • 「Search」→「Edit search shortcuts」をクリックします。特定のフィルターを頻繁に使用する場合、ショートカットは時間を節約します。
    • クエリ severity:[4 TO 7] で「High Severity」という名前の新しいショートカットを追加します。
    • これで、検索のドロップダウンからこのフィルターされたビューにすばやくアクセスできます。
  7. (オプション) より複雑な検索パターンを探るために、以下の高度なクエリを試してみましょう。

    _exists_:severity AND severity:>3  ## 重大度フィールドが存在し、値が 3 より大きいログ
    message:/(sample|test)/i           ## 正規表現検索(大文字小文字を区別しない)
    NOT severity:5                     ## 重大度 5 のログを除外

ダッシュボードの作成

この最後のステップでは、収集したログデータを可視化して分析するための Graylog ダッシュボードを作成します。ダッシュボードは、セキュリティアナリストがシステムの活動を一目で監視し、パターンを特定し、潜在的なセキュリティ問題を迅速に発見するのに役立つ強力なツールです。

まず、ダッシュボードを作成する Graylog のウェブインターフェイスにアクセスしましょう。

  1. http://127.0.0.1:9000 で Graylog のウェブインターフェイスにアクセスします(ユーザー名:admin、パスワード:admin)。

  2. 新しいダッシュボードを作成します。

    • 上部メニューの「Dashboards」をクリックします。ここですべてのダッシュボードを管理します。
    • 「Create dashboard」をクリックします。新しい可視化を始めます。
    • 「Security Monitoring Dashboard」と名付けます。目的を反映したわかりやすい名前を選びます。
    • 「Create」をクリックします。空のダッシュボードが初期化されます。
  3. ダッシュボードにウィジェットを追加します。ウィジェットは、特定のデータ可視化を表示する個別のコンポーネントです。

    a. メッセージ数チャート(一定期間に受信したログの数を表示します):

    • 「Add widget」→「Message Count」をクリックします。
    • 以下のように設定します。
      • タイトル:「Log Volume」 - ウィジェットを簡単に参照できるように名付けます。
      • 時間範囲:「Last 15 minutes」 - 最近の活動を表示します。
      • 間隔:「Minute」 - 明確な傾向を把握するためにデータを分単位でグループ化します。
    • 「Save」をクリックします。

    b. クイックバリュー(フィールド内で最も一般的な値を表示します):

    • 「Add widget」→「Quick Values」をクリックします。
    • 以下のように設定します。
      • タイトル:「Top Sources」 - どのシステムがログを生成しているかを表示します。
      • フィールド:「source」 - ログの発生源情報を含むフィールドです。
      • データ表示形式:「Pie chart」 - 比率を明確に可視化します。
    • 「Save」をクリックします。

    c. フィールド統計(数値データを要約します):

    • 「Add widget」→「Field Statistics」をクリックします。
    • 以下のように設定します。
      • タイトル:「Severity Levels」 - ログに記録されたイベントの重大度を監視します。
      • フィールド:「severity」 - 重大度評価を含むフィールドです。
      • データ表示形式:「Bar chart」 - 値を並べて比較します。
    • 「Save」をクリックします。
  4. 最適な可視性を得るためにダッシュボードを配置します。

    • ウィジェットをドラッグアンドドロップして整理します。関連するウィジェットを互いに近くに配置します。
    • ウィジェットのエッジをドラッグしてサイズを変更します。重要な可視化を大きく表示します。
    • 完了したら「Done editing」をクリックします。レイアウトが固定されます。
  5. ダッシュボードを保存します。

    • 右上の「Save dashboard」をクリックします。作業内容が保存されます。
    • 説明を追加します:「Dashboard for monitoring security logs」 - 目的を説明します。
    • 「Save」をクリックします。
  6. (オプション) 利便性のためにデフォルトに設定します。

    • ダッシュボード名の横にある星アイコンをクリックします。
    • これにより、ログイン時にこのダッシュボードがデフォルトのビューになり、日常のチェック時の時間を節約できます。

まとめ

この実験では、Docker Compose を使用して Graylog をデプロイする方法、永続的なストレージを持つ MongoDB や Elasticsearch などの重要なサービスを構成する方法を学びました。スタックを正常に起動し、ウェブインターフェイスにアクセスし、コンテナの機能を検証して、集中型ロギングプラットフォームを構築しました。

この実験では、ログ入力の構成、サンプルデータを使ったテスト、および Graylog のクエリ機能を利用したログ分析の手順を案内しました。また、カスタマイズ可能なダッシュボードを作成してログの洞察を可視化し、Graylog の監視とトラブルシューティングにおける実用的なアプリケーションを実証しました。