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 ダッシュボードを作成できます。 ダッシュボードは、ログを視覚的に表現し、潜在的なネットワークの脆弱性に関する分析情報をすばやく得る方法を提供します。
どちらのオープンソース ツールも Azure 仮想マシン (VM) 上に設定できるので、この分析は独自の Azure ネットワーク環境内で実行できます。
Suricata のインストール
VM のコマンドライン ターミナルで、次のコマンドを実行します。
sudo add-apt-repository ppa:oisf/suricata-stable sudo apt-get update sudo apt-get install suricata
インストールを確認するには、コマンド
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 のインストール
Elastic Stack バージョン 5.0 以降には Java 8 が必要です。
java -version
コマンドを実行して、現在のバージョンを確認します。 Java がインストールされていない場合は、Azure でサポートされている Java 開発キットに関するドキュメントを参照してください。お使いのシステムに適合するバイナリ パッケージをダウンロードします。
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 ページを参照してください。
次のコマンドを使用して、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 のインストール
次のコマンドを実行して、Logstash をインストールします。
curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-5.2.0.deb sudo dpkg -i logstash-5.2.0.deb
Logstash を、eve.json ファイルの出力を読み取るように構成します。 次のコマンドを使用して、logstash.conf ファイルを作成します。
sudo touch /etc/logstash/conf.d/logstash.conf
次のコンテンツをファイルに追加します。 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" } }
Logstash がファイルを取り込めるように、適切なアクセス許可を eve.json ファイルに付与します。
sudo chmod 775 /var/log/suricata/eve.json
次のコマンドを実行して、Logstash を起動します。
sudo /etc/init.d/logstash start
Logstash のインストール方法の詳細については、Elastic の公式ドキュメントを参照してください。
Kibana のインストール
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
次のコマンドを使用して、Kibana を実行します。
cd kibana-5.2.0-linux-x86_64/ ./bin/kibana
Kibana Web インターフェイスを表示するには、
http://localhost:5601
に移動します。ここでは、Suricata ログに使用されているインデックスのパターンは
logstash-*
です。Kibana ダッシュボードをリモートで確認する場合は、受信ネットワーク セキュリティ グループ (NSG) ルールを作成して、ポート 5601 にアクセスできるようにします。
Kibana ダッシュボードの作成
この記事には、アラートのトレンドと詳細を確認するためのサンプル ダッシュボードが用意されています。 使用方法:
ダッシュボード ファイル、視覚化ファイル、保存された検索ファイルをダウンロードします。
Kibana の [Management] (管理) タブで、[Saved Objects] (保存されたオブジェクト) に移動して、3 つのファイルすべてをインポートします。 これで、[Dashboard] (ダッシュボード) タブでサンプル ダッシュボードを開いて読み込むことができます。
関心のあるメトリックに合わせて独自の視覚化とダッシュボードを作成することもできます。 Kibana の視覚化を作成する方法の詳細については、Kibana の公式ドキュメントを参照してください。
IDS アラート ログの視覚化
サンプル ダッシュボードでは、Suricata アラート ログを複数の方法で視覚化できます。
GeoIP によるアラート: (IP で特定された) 地理的な場所に基づいて、発信元の国または地域別でアラートの分布を示すマップ。
上位 10 個のアラート: 最も頻繁にトリガーされた上位 10 個のアラートの概要と説明。 個別のアラートを選択すると、ダッシュボードにフィルターを適用して、特定のアラートに関する情報のみを表示できます。
アラートの数: ルール セットによってトリガーされたアラートの総数。
上位 20 個の ScrIP - アラート、上位 20 個の DestIP - アラート、上位 20 個の SrcPort - アラート、上位 20 個の DestPort - アラート: アラートがトリガーされた上位 20 個の IP とポートのソースと宛先を示す円グラフ。 特定の IP またはポートでフィルターを適用して、トリガーされているアラートの数と種類を表示できます。
アラートの概要: アラートごとの詳細な情報を要約した表。 この表をカスタマイズして、アラートごとに関心のある他のパラメーターが表示されるようにできます。
カスタム視覚化とカスタム ダッシュボードの作成の詳細については、Kibana の公式ドキュメントを参照してください。
まとめ
Network Watcher から取得したパケット キャプチャと、Suricata などのオープンソース IDS ツールを組み合わせることで、広範な脅威を対象としたネットワーク不正侵入検出を実行できます。
ダッシュボードを使用することで、ネットワーク内の傾向や異常をすばやく特定できます。 また、ダッシュボードを使用してデータを調べて、悪意のあるユーザー エージェントや脆弱なポートなどのアラートの根本原因を検出することもできます。 この抽出されたデータを使用すると、次の方法に関して情報に基づいた意思決定を行うことができます。
- 有害な不正侵入試行からネットワークを守る。
- ネットワークへの今後の不正侵入を防ぐためのルールを作成する。
次のステップ
アラートに基づいてパケット キャプチャをトリガーする方法について説明します。