Posted at

ntopng + Elastic Stackによるネットワークトラフィック解析

More than 1 year has passed since last update.

本記事はWORDIAN Advent Calendar 2017の6日目の記事です。

WORDIANとは、筑波大学情報科学類において学類誌を発行する組織WORD編集部の部員のことを指します。WORD編集部のバックナンバーは、以下のリンクから読むことができます。

https://www.word-ac.net/

というわけで、本記事ではntopngを用いたネットワークトラフィック解析の方法を解説します。


ntopng

ntopngとは、ntop社により開発されているネットワークトラフィック解析ツールです。このツールは内部的にnDPIという同社開発のDeep Packet Inspectionツールを使用しており、これにより多様なプロトコルを判別することができます。また、最近のアップデートにより早速Nintendo Switchのプロトコルのサポートも追加されるなど、随時サポートするプロトコルを増やしています。nDPIがサポートするプロトコルのリストはこのページ (nDPI) に記載されています。

ntopngのようなトラフィック解析ツールの用法としては、以下のようなものが考えられます。


  • 管理しているネットワークの通信の統計情報の取得

  • マルウェアに感染したネットワークノードの検出 (C2CサーバへのアクセスやSMTPによるスパム等)

  • 違法なBitTorrent等ネットワークの悪用の検出

ntopngにはCommunity(無料), Professional, Enterpriseの3つのEditionがあり、有料のEditionではミドルウェアのサポートやスケーラビリティのための機能が追加されています。また、同社開発の有料のnProbeを併せて使うことでNetFlowの収集も行うことができます。

本記事では、ntopngからElastic Stackに解析したトラフィックのデータを出力し、データの閲覧、可視化を行う方法を解説します。


インストール

ntopngは、公式のリポジトリをパッケージマネジャに追加してインストールすることが推奨されています。

また、Macの場合はHomebrewからもインストールすることができます。

以下の公式ページにてインストールの方法が解説されています。

https://www.ntop.org/get-started/download/


実行

以下のようなコマンドでトラフィックのキャプチャを開始します。 eth0 の部分はキャプチャしたいインターフェース名で置き換えてください。

$ sudo ntopng -i eth0

キャプチャするインターフェースは通常のインターフェースでも問題ありませんが、より実用的な用例としてはミラーリングされたネットワーク内のトラフィックを受け取るpromiscuousなインターフェースをキャプチャすることが考えられます。その場合もntopng側では特別な指定の必要はありません。

ntopngには独自のウェブインターフェースが用意されており、現在アクティブなflowや統計情報が閲覧できます。デフォルトでは3000番ポートで動作しますが、 -w 3001 のように変更することもできます。

このウェブインターフェースでもトラフィック情報を閲覧できますが、これは以下の理由からあまり優れていません。


  • 無料のCommunity editionでは解析対象のflow数に制限がある

  • 無料のCommunity editionでは主な統計情報の閲覧ができない


    • Professional editionでも提供される統計の種類が少なく、またカスタマイズ性も低い



  • 検索機能が弱い

そのため、ここからはntopngから解析データをElastic Stackに出力する方法を解説します。

Elastic Stackであれば、トラフィックの解析データから自由に検索・可視化を行うことができます。

ntopngがLogstashへの出力をサポートしているため、これは容易に行うことができます。


Elastic Stack


インストール

Elastic Stack (Elasticsearch, Logstash, Kibana)は公式のドキュメントに従ってパッケージマネジャにリポジトリを追加してインストールすることが推奨されています。

Debian系:

https://www.elastic.co/guide/en/elasticsearch/reference/current/deb.html

Red Hat系:

https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html

他、環境を汚さずに試したい場合は全部入りのDocker Composeを使うのがおすすめです。

https://github.com/deviantony/docker-elk


設定


Logstash pipeline

ntopngからの出力を受け取る最低限の設定は以下のようになります。


/etc/logstash/conf.d/ntopng.conf

input {

tcp {
port => 5000
codec => json
type => "ntopng"
}
}

## Add your filters / logstash plugins configuration here

output {
elasticsearch {
hosts => "localhost:9200"
index => "ntopng-%{+YYYY.MM.dd}"
}
}


以上の設定を保存して、Elastic Stackを起動することができたら、次のようなコマンドでntopngからデータを出力します

$ sudo ntopng -i eth0 --community -F "logstash;localhost;tcp;5000"

ntopngとElastic Stackそれぞれのログに特にエラーが表示されず、数分待って次のように ntopng-YYYY.MM.dd のようなindexが作成されていたら大丈夫です。

$ curl 'localhost:9200/_cat/indices'

yellow open .kibana PAEnJSktQrGYLDNqJQrYDg 1 1 3 0 15.7kb 15.7kb
yellow open ntopng-2017.12.04 vWkqeq8CTjy3N7gyvrUbCg 5 1 9384 0 3.4mb 3.4mb

ntopngをsystemdなどで起動する場合は、次のように設定ファイルを書きます。


/etc/ntopng/ntopng.conf

-i=eth0

--community
-F="logstash;localhost;tcp;5000"

起動方法:

$ sudo systemctl start ntopng


Kibana

indexが作成されたら、Kibanaからデータにアクセスしましょう。デフォルトでは、 http://localhost:5601 に起動します。

初回アクセス時に"Configure an index pattern"と聞かれたらIndex patternにntopng-* , Time filter field nameに @timestamp を指定します。


分析

ntopngを使用すると、パケットから様々な情報が取得できます。例えば、以下ではSSLの通信であってもアプリケーションレイヤのプロトコル、通信先のドメイン名、IPアドレス、国などといった情報が取得できています。

ssl_twitter.png

DNSクエリの内容なども取得できます。

dns.png

他、BitTorrentの通信を判別した上で、BitTorrentのinfo hashも検出することができます。このinfo hashをGoogleなどで調べることで、これが違法なファイル共有の通信かどうかを調べることができます。例えば、以下の例では 145b85116626651912298f9400805254fb1192ae をGoogle検索することで、これがubuntu-16.04.3-server-amd64のインストールイメージのダウンロードだと分かります。

bittorrent.png

他にも、ntopngはSSH, LDAP, DHCP, SMB, Skype, 各種SNS等様々なプロトコルを判別することができます。


可視化

Kibanaの機能で統計情報を可視化することもできます。以下の画像は、本記事と近い構成で会場wifiのトラフィックの解析を行った某カンファレンスの画像を拝借しています。

https://twitter.com/codeblue_noc/status/928792818222473216

cbnoc_2017_day1.jpg


まとめ

ntopngを用いることでトラフィックから様々な情報が取得できます。また、Logstashへの出力をサポートしているためElastic Stackとの親和性も高く、数十行の設定を書くだけで実用的なシステムを構築することができます。


TODO

個人的には試したことがありませんが、最近はElastic StackのX-Packのおかげで時系列データの異常検知の敷居が下がっているらしいので、ネットワークトラフィックで試してみると面白いかもしれません。