Azure Network Watcher とオープンソース ツールを使用してネットワーク侵入検出を実行する

パケット キャプチャは、ネットワークの侵入検出システム (IDS) を実装し、ネットワーク セキュリティ監視を実行するうえで重要なコンポーネントです。 パケット キャプチャを処理し、ネットワークへの侵入と悪意のあるアクティビティの可能性を示すシグネチャを検出するオープンソース IDS ツールはいくつかあります。 Azure Network Watcher が提供するパケット キャプチャを使用すると、害のある侵入または脆弱性に関してネットワークを分析できます。

そのようなオープンソース ツールの 1 つに Suricata があります。これは、ルール セットを使用してネットワーク トラフィックを監視し、疑わしいイベントが発生したときにアラートをトリガーする IDS エンジンです。 Suricata には、高速かつ高効率なネットワーク トラフィック分析を実行するマルチスレッド エンジンが備わっています。 Suricata とその機能の詳細については、Suricata の Web サイトを参照してください。

シナリオ

この記事では、Network Watcher、Suricata、Elastic Stack を使用して、ネットワーク不正侵入検出を実行する環境をセットアップする方法について説明します。

Network Watcher では、ネットワーク不正侵入検出を実行するためのパケット キャプチャを使用します。 Suricata でパケット キャプチャを処理し、脅威のルール セットに一致するパケットに基づいて、アラートをトリガーします。 これらのアラートは、ローカル コンピューターのログ ファイルに格納されます。

Elastic Stack を使用すると、Suricata によって生成されるログのインデックスを作成し、それらを使用して Kibana ダッシュボードを作成できます。 ダッシュボードは、ログを視覚的に表現し、潜在的なネットワークの脆弱性に関する分析情報をすばやく得る方法を提供します。

Diagram that shows a simple web application scenario.

どちらのオープンソース ツールも Azure 仮想マシン (VM) 上に設定できるので、この分析は独自の Azure ネットワーク環境内で実行できます。

Suricata のインストール

  1. VM のコマンドライン ターミナルで、次のコマンドを実行します。

    sudo add-apt-repository ppa:oisf/suricata-stable
    sudo apt-get update
    sudo apt-get install suricata
    
  2. インストールを確認するには、コマンド suricata -h を実行して、コマンドの完全な一覧を表示します。

その他のインストール方法については、Suricata のインストール クイックスタート ガイドを参照してください。

Emerging Threats ルール セットのダウンロード

この段階では、Suricata で実行するルールが 1 つもありません。 ネットワークに対する特定の脅威を検出したい場合は、独自のルールを作成できます。 また、Emerging Threats や Snort の Talos ルールなど、さまざまなプロバイダーが開発したルール セットを使用することもできます。 この記事では、無料で利用可能な Emerging Threats ルール セットを使用します。

ルール セットをダウンロードして、ディレクトリにコピーします。

wget https://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz
tar zxf emerging.rules.tar.gz
sudo cp -r rules /etc/suricata/

Suricata を使ってパケット キャプチャを処理する

Suricata を使用してパケット キャプチャを処理するには、次のコマンドを実行します。

sudo suricata -c /etc/suricata/suricata.yaml -r <location_of_pcapfile>

生成されるアラートをチェックするには、fast.log ファイルを確認します。

tail -f /var/log/suricata/fast.log

Elastic Stack の設定

Suricata によって作成されたログには、ネットワークで発生したイベントに関する貴重な情報が含まれていますが、これらのログ ファイルを読んで理解するのは簡単なことではありません。 Suricata を Elastic Stack に接続すると、Kibana ダッシュボードを作成して、ログから有用な情報を検索、グラフ化、分析、取得できます。

Elasticsearch のインストール

  1. Elastic Stack バージョン 5.0 以降には Java 8 が必要です。 java -version コマンドを実行して、現在のバージョンを確認します。 Java がインストールされていない場合は、Azure でサポートされている Java 開発キットに関するドキュメントを参照してください。

  2. お使いのシステムに適合するバイナリ パッケージをダウンロードします。

    curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.0.deb
    sudo dpkg -i elasticsearch-5.2.0.deb
    sudo /etc/init.d/elasticsearch start
    

    その他のインストール方法については、Elasticsearch のインストールに関する Elastic Web ページを参照してください。

  3. 次のコマンドを使用して、Elasticsearch が実行されていることを確認します。

    curl http://127.0.0.1:9200
    

    次のような応答が表示されます。

    {
    "name" : "Angela Del Toro",
    "cluster_name" : "elasticsearch",
    "version" : {
        "number" : "5.2.0",
        "build_hash" : "8ff36d139e16f8720f2947ef62c8167a888992fe",
        "build_timestamp" : "2016-01-27T13:32:39Z",
        "build_snapshot" : false,
        "lucene_version" : "6.1.0"
    },
    "tagline" : "You Know, for Search"
    }
    

Elasticsearch のインストールの詳細については、インストールに関する Elastic の Web ページを参照してください。

Logstash のインストール

  1. 次のコマンドを実行して、Logstash をインストールします。

    curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb
    sudo dpkg -i logstash-5.2.0.deb
    
  2. Logstash を、eve.json ファイルの出力を読み取るように構成します。 次のコマンドを使用して、logstash.conf ファイルを作成します。

    sudo touch /etc/logstash/conf.d/logstash.conf
    
  3. 次のコンテンツをファイルに追加します。 eve.json ファイルへのパスが正しいことを確認します。

    input {
    file {
        path => ["/var/log/suricata/eve.json"]
        codec =>  "json"
        type => "SuricataIDPS"
    }
    
    }
    
    filter {
    if [type] == "SuricataIDPS" {
        date {
        match => [ "timestamp", "ISO8601" ]
        }
        ruby {
        code => "
            if event.get('[event_type]') == 'fileinfo'
            event.set('[fileinfo][type]', event.get('[fileinfo][magic]').to_s.split(',')[0])
            end
        "
        }
    
        ruby{
        code => "
            if event.get('[event_type]') == 'alert'
            sp = event.get('[alert][signature]').to_s.split(' group ')
            if (sp.length == 2) and /\A\d+\z/.match(sp[1])
                event.set('[alert][signature]', sp[0])
            end
            end
            "
        }
    }
    
    if [src_ip]  {
        geoip {
        source => "src_ip"
        target => "geoip"
        #database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat"
        add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
        add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
        }
        mutate {
        convert => [ "[geoip][coordinates]", "float" ]
        }
        if ![geoip.ip] {
        if [dest_ip]  {
            geoip {
            source => "dest_ip"
            target => "geoip"
            #database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat"
            add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
            add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
            }
            mutate {
            convert => [ "[geoip][coordinates]", "float" ]
            }
        }
        }
    }
    }
    
    output {
    elasticsearch {
        hosts => "localhost"
    }
    }
    
  4. Logstash がファイルを取り込めるように、適切なアクセス許可を eve.json ファイルに付与します。

    sudo chmod 775 /var/log/suricata/eve.json
    
  5. 次のコマンドを実行して、Logstash を起動します。

    sudo /etc/init.d/logstash start
    

Logstash のインストール方法の詳細については、Elastic の公式ドキュメントを参照してください。

Kibana のインストール

  1. Kibana をインストールするには、次のコマンドを実行します。

    curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-5.2.0-linux-x86_64.tar.gz
    tar xzvf kibana-5.2.0-linux-x86_64.tar.gz
    
  2. 次のコマンドを使用して、Kibana を実行します。

    cd kibana-5.2.0-linux-x86_64/
    ./bin/kibana
    
  3. Kibana Web インターフェイスを表示するには、http://localhost:5601 に移動します。

    ここでは、Suricata ログに使用されているインデックスのパターンは logstash-* です。

  4. Kibana ダッシュボードをリモートで確認する場合は、受信ネットワーク セキュリティ グループ (NSG) ルールを作成して、ポート 5601 にアクセスできるようにします。

Kibana ダッシュボードの作成

この記事には、アラートのトレンドと詳細を確認するためのサンプル ダッシュボードが用意されています。 使用方法:

  1. ダッシュボード ファイル視覚化ファイル保存された検索ファイルをダウンロードします。

  2. Kibana の [Management] (管理) タブで、[Saved Objects] (保存されたオブジェクト) に移動して、3 つのファイルすべてをインポートします。 これで、[Dashboard] (ダッシュボード) タブでサンプル ダッシュボードを開いて読み込むことができます。

関心のあるメトリックに合わせて独自の視覚化とダッシュボードを作成することもできます。 Kibana の視覚化を作成する方法の詳細については、Kibana の公式ドキュメントを参照してください。

Screenshot that shows a Kibana dashboard.

IDS アラート ログの視覚化

サンプル ダッシュボードでは、Suricata アラート ログを複数の方法で視覚化できます。

  • GeoIP によるアラート: (IP で特定された) 地理的な場所に基づいて、発信元の国または地域別でアラートの分布を示すマップ。

    Screenshot shows a map for geographic IP alerts.

  • 上位 10 個のアラート: 最も頻繁にトリガーされた上位 10 個のアラートの概要と説明。 個別のアラートを選択すると、ダッシュボードにフィルターを適用して、特定のアラートに関する情報のみを表示できます。

    Screenshot that shows the most frequently triggered alerts.

  • アラートの数: ルール セットによってトリガーされたアラートの総数。

    Screenshot shows the number of alerts.

  • 上位 20 個の ScrIP - アラート上位 20 個の DestIP - アラート上位 20 個の SrcPort - アラート上位 20 個の DestPort - アラート: アラートがトリガーされた上位 20 個の IP とポートのソースと宛先を示す円グラフ。 特定の IP またはポートでフィルターを適用して、トリガーされているアラートの数と種類を表示できます。

    Screenshot that shows pie charts of the top 20 IPs and ports that alerts were triggered on.

  • アラートの概要: アラートごとの詳細な情報を要約した表。 この表をカスタマイズして、アラートごとに関心のある他のパラメーターが表示されるようにできます。

    Screenshot shows a summary table with details about individual alerts.

カスタム視覚化とカスタム ダッシュボードの作成の詳細については、Kibana の公式ドキュメントを参照してください。

まとめ

Network Watcher から取得したパケット キャプチャと、Suricata などのオープンソース IDS ツールを組み合わせることで、広範な脅威を対象としたネットワーク不正侵入検出を実行できます。

ダッシュボードを使用することで、ネットワーク内の傾向や異常をすばやく特定できます。 また、ダッシュボードを使用してデータを調べて、悪意のあるユーザー エージェントや脆弱なポートなどのアラートの根本原因を検出することもできます。 この抽出されたデータを使用すると、次の方法に関して情報に基づいた意思決定を行うことができます。

  • 有害な不正侵入試行からネットワークを守る。
  • ネットワークへの今後の不正侵入を防ぐためのルールを作成する。

次のステップ

アラートに基づいてパケット キャプチャをトリガーする方法について説明します。