Molochを利用してPcapを解析する

Shun Kinoshita
Black304
Published in
12 min readNov 6, 2018
“person attaching RJ45 cable on white laptop” by rawpixel on Unsplash

皆さんはパケットを解析するときにどんなツールを使用しますか? tcpdump, wireshark, Scapy, shell script など優れたツールがいくつもありますが,大きなサイズのパケットキャプチャを分析するときはどうしても難しくなってしまいます.例えば,解析結果をメモリに保持するときメモリの制約から解析そのものができなかったり,解析をするたびにpcapを読み込むと解析に時間が多くかかってしまうなどの問題が挙げられます.

今回紹介するMolochは,大規模なパケットデータを保存,解析するために開発されているOSSです.Molochでは一度解析したデータはElasticsearchのデータベースに格納されるため,実行するたびにパケットを解析する必要がありません.加えてElasticsearchの便利な関数を利用したり,データベースに接続することさえできればどんな言語からでも解析できます.この柔軟性や効率性により,大きなサイズのパケットを解析しやすくなっています.これからいくつかの記事にて,molochを利用してjupyterからpacket解析をする方法をご紹介していきます.本記事はその初回として,Dockerを利用してmolochをセットアップする方法を書いていこうと思います.

はじめに

今回のゴールはMolochをインストールしてpcapを解析させることです.Packet captureも直接Molochから実行することもできますが,今回は取り上げず,pcapファイルの解析に主眼をおいていきます.環境はDockerが動作するLinuxであればどんな環境でもいいです.私の使用している環境は以下のとおりです.

Distribution: CentOS Linux release 7.5.1804 (Core)
Kernel: 4.16.12-1.el7.elrepo.x86_64
Docker Server:
Engine:
Version: 18.06.0-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: 0ffa825
Built: Wed Jul 18 19:10:42 2018
OS/Arch: linux/amd64
Experimental: false

構築していくElasticsearchとMolochのバージョンは,現時点で最も新しいMolochにあわせたものとし,以下のバージョンとします.

Moloch: 1.6.0
Elasticsearch: 6.4.2

Docker上でElasticsearchを構築

大規模なデータを解析するためにクラスタを構築する場合のものと,簡単に実行できるものと2つオプションを用意しました.お好みに合わせて選択してください.

共通部分としてはじめに,ElasticsearchとMolochを接続するためのネットワークをDockerを使用して作成します.名前は pcap-analysisとします.

docker network create pcap-analysis

続いて,Elasticsearchを実行するために必要な,Virtual memoryの設定をします.

sudo sysctl -w vm.max_map_count=262144

ここから,以下の1, 2のどちらかを実行してください.

  1. docker-composeを利用してクラスタを構築する

本家サンプルを多少改造した以下のdocker-composeを利用してElasticsearch cluster(もどき)を作っていきます.監視用に便利なKIBANAもついでに実行しちゃいます.以下のdocker-composeは,公式のガイドを参考に作っていますので,もし何か気になる部分があればそちらを参照ください.

以下のdocker-composeファイル,kibana.ymlとelasticsearch.ymlを同じディレクトリに保存し,そのディレクトリでdocker-composeコマンドを実行します.

実行するdocker-compose.yml (kibanaもついでにたてちゃいます)
elasticsearchの設定ファイル
kibanaの設定ファイル

各設定は,ご自身の環境に合わせて変更してください.例えば,こちらに掲載したdocker-composeでは, /mnt/es_storage/esdata[1-4] というディレクトリを各Docker containerにマウントするvolumeとして定義しましたが,他の場所を指定しても構いません.簡便のためセキュリティ機能であるCORSとXpackを最大限開いてあるので,外部に晒したり,重要なパケットを解析する場合は適切な設定に書き換えてください.elasticsearchを起動するdocker-composeに関しては,メモリが多く必要な場合には ES_JAVA_OPTS もしくは ES_HEAP_SIZE を大きくするなどしてください.参考に自分が数TBのpcapを解析した際の設定を紹介します.本記事とはElasticsearchのバージョンが異なっておりますが,そこさえ変更してもらえれば問題なく動作すると思います.

Elasticsearchが正しく実行されていることを確認するために curl localhost:9200/_cluster/health?pretty=trueを実行して,statusがgreenであることを確認してください.このようにdocker-composeでクラスタを立てるとき, primary nodeが起動するよりも早くほかのノードが起動してしまうことで,うまくクラスタを構成できない場合があります.その様な場合は, docker stop を使ってprimary以外のnodeを一回停止させて,primaryが立ち上がったあとにdocker startで他のnodeを実行するとうまくいきます.これ,本当はうまく待つ方法がありそうなので,ご存知の方は教えてください.

2. ElasticsearchのDockerをひとつだけ立てる

簡単に実行するには,以下のコマンドを実行してください.

docker run -d --name elasticsearch -p 9200:9200 --network=pcap-analysis elasticsearch:6.4.2

こちらの場合も,正しく実行されていることを curl localhost:9200/_cluster/health?pretty=trueのstatusがgreenかどうかで判断してください.

Docker上でMolochを実行

次のコマンドでMolochを実行します.このとき,先程作成した pcap-analysis ネットワークに追加する事に気をつけてください.

* 注意: -e MOLO_MODE="INIT" は,DBを初期化するオプションとなっているので,DBがすでに存在した状態で実行するときは取り除くよう気をつけてください.

docker run -e MOLO_MODE="INIT" --name moloch -p 8005:8005 -d --network=pcap-analysis -v /path/to/host/pcapdir:/data/pcap:rw shunkin/moloch:latest

/path/to/host/pcapdir は,解析したいpcapのあるDirectoryを指定してください.無事に起動したら, http://<実行しているマシンのIPアドレス>:8005 へアクセスしてください.認証を求められるので,Docker containerの中で指定した ID: admin, Password: THEPASSWORD を利用してログインしてください.

Molochでpcapを解析する

最後に,Molochを利用してpcapを解析します.解析するpcapファイルですが,今回の記事のために適当なサンプルを作ったので,自分で解析してみたいpcapが特に無い方はお試しください.

wget --no-use-server-timestamps -O sample.pcap https://gateway.ipfs.io/ipfs/Qma3Xfao5hyaxsVBRgrk32RPcHLTugVSCHEkBYwTDdQoZA

こちらのpcapファイルを,/path/to/host/pcapdir に配置してください.続いて,以下のコマンドで,pcapファイルをMolochで解析します.

docker exec moloch capture -r /data/pcap/sample.pcap -t sample 

-t のあとは解析結果につけるタグなので,プロジェクト名などをつけると良いです.

MolochのViewerから解析結果を見る

解析が終わったら改めて,

http://<動かしているマシンのIP>:8005

へアクセスします.認証を求められますが,ID: admin, Password: THEPASSWORDなのでそれで入ってください.

するとMolochのダッシュボード画面にアクセスできます.注意点として,pcapの解析結果は,pcapについているタイムスタンプをもとにデータベースに保存されるため,Viewerで表示されている日時を調節する必要があります.

Molochを開いたところ(Sessions)

あとはポチポチして遊んでみてください.国別のトラフィックマップなどは見応えありますね.

一応,sample.pcapには私があるウェブサイトにアクセスして検索したトレースが含まれるので,その検索クエリを探してみましょう.

  1. SPIViewのタブをクリック
  2. 中段のHTTPのところから, Load Allをクリック
  3. 各種解析結果がみれるので,HTTP methodの部分を見つけ,POSTの項目をクリック後,開くメニューよりand POSTを選択し,フィルタに追加
  4. Sessionsのタブに戻り,リクエストパラメーターを含むセッションを発見できるはずなので,+をクリックして情報を表示
  5. たくさん出てきてよくわからない… → CyberChefを使ってみよう!
  6. 用意した検索パラメーターが読めます めでたし
POSTでFilter後にHTTP Requestの中身を見る

CyberCefは,Sessionの要素の最後尾にあるボタンから開きます.

特に理由はありませんがクエリの部分は隠しています 確かめてください!

といったように,色々なフィルタや,自動的な集約によって様々な角度からネットワークトラフィックを見ることが出来ます.一応ですが,本記事と今回pcapに含めたサイトは,HTTPで検索を実行でき,かつ自分のブラウズ履歴に有ったサイトということ以上の関係はありません。

今回は,Molochをセットアップする,パケットを解析して結果をブラウザから見る,方法をご紹介しました.今回のサンプル程度のサイズだと,Wiresharkの方が楽じゃん,となってしまうかもしれませんが,もっと大きな規模になると便利さを実感します.是非お手元のpcapで試してみてください.また,MolochはIDSとしての使用も想定されているため,pluginを使ってSuricataと連携したりしてそういう使い方をしてもいいかもしれません.

次回は,Molochの解析結果を,PythonとElasticsearchの力を使って分析する方法を書きます.

Continue to: MolochのDB内の解析結果をJupyterから分析する

Resources:

Sample pcap: https://gateway.ipfs.io/ipfs/Qma3Xfao5hyaxsVBRgrk32RPcHLTugVSCHEkBYwTDdQoZA

References:

--

--