NHN Cloud Meetup 編集部
オープンソースMolochの紹介
2016.10.06
1,148
はじめに
最近、多くのIT企業が高価な商用ソリューションの代替として、オープンソースを積極的に活用しています。オープンソースとして使用する場合、コストも削減できますが、ユーザーのインフラ環境に合うようにカスタマイズして使用できるという利点があります。
今回はそのようなオープンソースの1つであるMolochを紹介しましょう。
Molochとは?
Molochは、オープンソース基盤の大規模なipv4キャプチャ(pcap)ツールです。語源を探ってみるとmolochはヘブライ神話書に出てくる恐怖の飲み物とありますが、Molochのシンボルは、上記のようなフクロウ(?)です。
Scalability
Moloch自体がIDSに取って代わるものではありませんが、それらのソリューションと共に速いアクセスを提供し、標準PCAP形式で、すべてのネットワークトラフィックを保存してインデックスを作成します。数多くの他のシステムと簡単に構築でき、SWの性能で10G以上の規模のトラフィックもハンドリング可能です。PCAPはセンサーのディスクに保存され、メタデータ情報は、Elasticsearchと連動して使用できます。
Interface
PCAPを参照して取得し、データを抽出する簡単なWebインターフェイスを提供しています。すべてのパケットがPCAPに保存され、抽出されるので、希望するセッションを探して、Wiresharkのような他のツールが簡単に使用できます。
API
PCAPデータとJSON形式のセッションデータをダウンロードできようにAPIを提供しています。
Security
FrontでApacheを使って、簡単なHTTP、HTTPS、パスワード認証が可能です。センサーで保存されたすべてのPCACPは、APIやMolochインターフェースからのみアクセスできます。
Session Tab
SPI View Tab
Molochの活用方法
Molochの構築が完了したら、これからどのように活用するか悩むことになるでしょう。収集された膨大な量のデータを活用するための基本的な内容をまとめてみました。
まず、基本的な演算子の入力は以下の通りです。
演算記号
演算記号 | 説明 | 使用例 |
---|---|---|
< | よりも小さい | packetsが1000未満 packets < 1000 |
<= | 同じか小さい | packetsが1000以下 packets <= 1000 |
> | より大きい | packetsが1000を超える packets > 1000 |
>= | 同じか大きい | packetsが1000以上 packets >= 1000 |
== | 同じ | ソースIPが192.168.1.1の場合 ip.src == 192.168.1.1 |
!= | 同じではない | ソースIPが192.168.0.1ではない場合 ip.src! = 192.168.0.1 |
&& | かつ(AND) | ソースIPが192.168.1.1で、目的地Portが80である場合 ip.src == 10.77.159.128 && port.dst == 80 |
II | または(OR) | ソースIPが192.168.1.1または10.1.1.1である場合 ip.src == 192.168.1.1 II ip.src == 10.1.1.1 |
主要な検索条件
条件名 | 条件 | 使用例 |
---|---|---|
開始時刻 終了時刻 |
start stop |
[時間の条件カスタム選択] Beginning Time入力フォーム Ending Time入力フォーム |
IP(双方向) ソースIP 宛先IP |
ip ip.src ip.dst |
ip == 192.168.1.1 ip.src == 192.168.1.1 ip.dst == 192.168.1.1 |
Port(双方向) 出発地Port 到着地Port |
port port.src port.dst |
port == 80 port.src == 80 ip.src == 80 |
packets(MAX 10,000) | packets | packets> 1000 |
出発地IP国 目的地IP国 |
country.src country.dst |
country.src == JPN country.dst == USA |
プロトコル種類 | protocols | protocols == tcp |
ドメイン | host | host == nhnent.com |
実務で活用する
上記を利用して、さまざまな検索ができます。例を挙げてみよう。
□状況1. 内部で外部にリモートアクセスするユーザーを確認する
1)Windows OSのリモートアクセスをしようとするユーザーを検索
検索:port.dst == 3389 && protocols == rdp
説明:Windows OSの基本的なリモートアクセスポート3389とリモートプロトコルであるRDPをAND検索する。リモートポートを変更して使用している場合は、RDPプロトコルのみ検索してフィルタ検索。
□状況2. 内部で海外IP、FTPを利用した資料流出を確認する
1)海外FTPで接続ユーザー確認
検索:protocols == ftp && country.dst! = JPN
説明:FTPプロトコルのユーザーのうち、国内(JPN)以外の目的地国で接続する対象を検索
2)海外FTPユーザーのデータ転送推移を確認
検索:ip.src == 10.1.1.3 && protocols == ftp && country.dst! = JPN && bytes>100000
説明:1)の検索で宛先IPと約100KB以上の場合についてAND検索
□状況3. Torrentを使用している内部Hostを確認する
1)torrentユーザー検索
検索:protocols == bittorrent
説明:torrent使用bittorrentプロトコルを利用すると、検索可能
2)torrent利用推移を確認
説明:検索後のグラフから全体Hostの使用状況をおおまかに把握でき、世界地図の上にマウスを乗せると接続状態分布も確認できる。
□状況4. User-Agent情報を利用した不正なセキュリティツールの使用を確認する
1)スキャンツールであるAcunetixとpangolinを使用した内部ユーザーを検索
検索:http.user-agent == Acunetix || http.user-agent == pangolin
説明:User-AgentにTool情報があるときhttp.user-agentの検索を使用してユーザーを確認できる。
□状況5. マルウェアに感染した内部ユーザーPCの感染経路と拡散内訳を確認する
1)感染の疑いがある時間を設定し、感染PC IP(10.1.1.2)が接続されたドメイン情報を検索
検索:ip.src == 10.1.1.2 && http.uri == *
説明:感染PC IPを指定して、対象時間に接続したWeb URI情報を確認
2)疑われるドメインに接続しているユーザーを確認
検索:http.uri == malware_site.com && ip.dst! = 10.0.0.0/8
説明:疑われるドメインに接続したユーザーのうち、目的地が内部IPである場合は除く。
http .uriの代わりにhostで検索しても結果は出るが、http以外のDNS情報も一緒に出力されるので、http.uriを使用する。
Connectionsメニューをクリックすると、下図のように全体的な状況が一目で分かる。
3)パケットの分析
検出結果のパケット内容を分析したい方は、左側にある[+]ボタンをクリックして、request、response情報を確認できる。また当該パケットのpcapファイルとして保存し、Wiresharkで分析したい場合は、左上にあるDownload Pcapボタンをクリックする。
結論
Molochは用途の特性上、トラフィック量の変化によって動作問題が発生することがありますので、初期構築時はこのような部分を考慮して設計するとよいでしょう。トラフィック量が増加する場合は、装置増設によるスケールアウトも可能です。
上記のような活用方法に加え、多くのメタデータ情報を利用して、さまざまな検索ができるため、状況に応じてうまく検索して活用すると大いに役立つでしょう。
参考資料
- Molochプロジェクト:https://github.com/aol/moloch
- Molochウェブページ:http://molo.ch/