5分で分かるApache Metron

# はじめに

OpenStandia Advent Calendar 18日目の今日は、Apache Metron について書きます。残念ながらまだ実際に動かしていないので、公式ドキュメントの内容をもとに、5分で分かるボリュームで紹介したいと思います。


# Apache Metron とは

## 概要

Apache Metronは、さまざまなオープンソースのビッグデータテクノロジーを統合したセキュリティ分析フレームワークです。

さまざまな脅威情報をもとに、ログやネットワークパケット等の大量データをリアルタイムに分析し、セキュリティの脅威を迅速に検出します。

![image2016-5-20 5 6 51.png](https://qiita-image-store.s3.amazonaws.com/0/208533/137b6258-447f-9737-61d9-278f81b071f9.png)
出典：[Metron Wiki - Metron Core Capabilities and Functional Themes](https://cwiki.apache.org/confluence/display/METRON/Metron+Core+Capabilities+and+Functional+Themes)

## 歴史

Apache Metronは、2013年にCiscoが主体となりOpenSOCという名前で誕生しました。その後、2015年にOpenSOCからMetronに改名し、Apacheインキュベータプロジェクトとして受け入れられ、2017年にApacheトップレベルプロジェクトに移行しました。

![image2016-5-18 12 49 15.png](https://qiita-image-store.s3.amazonaws.com/0/208533/b520526f-582e-c932-78f8-82fe3646e223.png)
出典：[Metron Wiki - Evolution of Apache Metron](https://cwiki.apache.org/confluence/display/METRON/Evolution+of+Apache+Metron)


## バージョンとライセンス

最新のバージョンは0.6.0になります。(2018年12月時点)

ライセンスは、「Apache License version2」になります。 Apache Licenseのコードが使用されていることの明記を条件に、ソースコードの自由な改変と公開が認められています。

# アーキテクチャ

## 概要

Apache MetronはKappaアーキテクチャ（ストリーム処理システム）を採用しています。Apache Kafkaを統一データバス、Apache Stormを処理コンポーネントとした構成になります。

処理概要は、侵入検知システムの出力やファイアウォールのログ等のセキュリティに関連する稼動データをApache Kafkaに取り込み、取り込んだデータに対してApache Stormで位置情報やDNS情報等を付与、アラート、機械学習モデルによるリアルタイムスコアリング等を実行しElasticsearchやHDFSに保存、保存したデータをKibanaやBananaで可視化するというものになります。

![MetronArchitecture.png](https://qiita-image-store.s3.amazonaws.com/0/208533/90ee476a-4888-8259-155d-6c1b4709a0b0.png)


構成は、データ収集、データ処理、データ保管、ユーザーインターフェース（UI）の4領域に分けることができます。以下、それぞれの領域毎に説明します。

## データ収集

### 説明

キャプチャしたパケットデータや、Bro、Snortといった侵入検知システムの出力等を、分散メッセージングシステムのKafkaに投入します。非常に高いレートで、あらゆる種類のセキュリティに関連する稼動データ（セキュリティテレメトリ）をキャプチャし格納します。

![sensor.png](https://qiita-image-store.s3.amazonaws.com/0/208533/17586434-0f2f-9729-b6b9-6a0e5963a2c4.png)


**※1 [YAF](https://tools.netsa.cert.org/yaf/)**
Yet Another Flowmeter。キャプチャしたパケットからIPFIXプロトコルを抽出するツールです。

**※2 [Snort](https://www.snort.org/)**
侵入検知システム。シグネチャベースのパターンマッチ（特定の文字列などが出現したらアラートを報告）を行います。MetronではSnortのアラート機能を使用して、アラートイベントを取り込みます。

**※3 [Bro](https://www.bro.org/)**
侵入検知システム。シグネチャベースのパターンマッチだけでなく、トラフィックのプロトコルを解読した結果を用いて簡単なスクリプトを記述できます。MetronではBroのアラート機能は使用せず、主にHTTPプロトコル、DNSプロトコルの抽出ツールとして使用します。

### データサンプル

- **Broの出力例**
Broの出力結果サンプルです。Broの出力はBroプラグイン（Metron提供部品）によりJSON形式に変換されています。
![pasted image 0-bro.png](https://qiita-image-store.s3.amazonaws.com/0/208533/6f88aeff-e37e-24df-69b5-2ad48d31e86c.png)
出典：[Metron Wiki - Metron Architecture](https://cwiki.apache.org/confluence/display/METRON/Metron+Architecture)



- **FireEyeのsyslog出力例**
標的型攻撃対策ソリューションであるFireEyeのデータをApache NiFiのsyslogプロセッサでキャプチャしたサンプルです。ネイティブフォーマットで取り込まれています。
![pasted image 0-syslog.png](https://qiita-image-store.s3.amazonaws.com/0/208533/125597be-f9b9-dce9-5c86-5fe49eb70d9a.png)
出典：[Metron Wiki - Metron Architecture](https://cwiki.apache.org/confluence/display/METRON/Metron+Architecture)


## データ処理
分散リアルタイム計算システムのStormによる、リアルタイムなデータ処理を行います。

![storm-topology.png](https://qiita-image-store.s3.amazonaws.com/0/208533/799b3c46-f785-76c9-e598-8e8dae4554ff.png)

### 正規化処理

#### 説明

Kafkaに投入されたネイティブフォーマットのデータを、標準化されたJSONフォーマットに変換します。すべてのイベントは少なくとも下記7項目のJSON構造に正規化されます。

|項目|説明|
|---|---|
|ip_src_addr|ネットワーク層の送信元IPアドレス|
|ip_dst_addr|ネットワーク層の送信先IPアドレス|
|ip_src_port|トランスポート層の送信元ポート|
|ip_dst_port|トランスポート層の送信先ポート|
|protocol|トランスポート層のプロトコル|
|timestamp|タイムスタンプ（エポックタイム）|
|original_string|メッセージの文字列表現|

データの出力元に応じた正規化処理（パーサー）が用意されていますが、新しいカスタムパーサーを追加することもできます。

パーサーには以下の種類があります。

|分類|種類|特徴|実装パーサー|
|---|---|---|---|
|汎用パーサー|Grokパーサー<BR>CSVパーサー<BR>JSONパーサー|メッセージフォーマットを設定ファイルで指定するため、コーディング無しで使用できる。<BR>Javaパーサーに比べてはるかに低速。|Squid用パーサー<BR>YAF用パーサー<BR>等|
|Javaパーサー|-|Javaで実装する。<BR>汎用パーサーに比べて高速。|Bro用パーサー<BR>Snort用パーサー<BR>Syslog用パーサー<BR>等|

#### データサンプル
先程のBro出力データサンプルに対して、正規化処理を実行した後のサンプルです。赤枠部分のデータが追加されています。
![pasted image （２）.png](https://qiita-image-store.s3.amazonaws.com/0/208533/0641709f-585a-fa0f-84c0-a8cafb4ca73a.png)
出典：[Metron Wiki - Metron Architecture](https://cwiki.apache.org/confluence/display/METRON/Metron+Architecture)

### エンリッチ処理

#### 説明
正規化したデータに対して、地理位置情報、DNS情報等の情報を付与（データエンリッチメント）します。

サポートしているエンリッチメントは以下になります。

|エンリッチメント|内容|
|---|---|
|Geoエンリッチメント|外部IPアドレスから、緯度座標や都市／州／国を付与する。|
|Assetエンリッチメント|IPアドレスをもとにアセット情報（資産情報）から情報を付与する。|
|Userエンリッチメント|IPとアプリケーションのペアに関するセッションやアラートが、どのユーザのものかを付与する。|

#### データサンプル
先程の正規化処理後のデータサンプルに対して、Geoエンリッチメントを行った後のサンプルです。赤枠部分のデータが追加されています。
![pasted image （３）.png](https://qiita-image-store.s3.amazonaws.com/0/208533/b6cfbbff-f28d-31dc-94b5-f9f8f6947cc0.png)
出典：[Metron Wiki - Metron Architecture](https://cwiki.apache.org/confluence/display/METRON/Metron+Architecture)

### 脅威分析処理

#### 説明
エンリッチメント後、脅威情報を参照し、イベントが脅威に該当した場合はアラートとしてマークされます。なお、Snortによって生成されたイベントはアラートであるため、自動的にアラートとして処理されます。

#### データサンプル
先程のエンリッチメント後のデータサンプルに対して、脅威分析処理を行った後のサンプルです。赤枠部分のデータが追加されています。この例では、アラートとしてマークされています。
![pasted image （４）.png](https://qiita-image-store.s3.amazonaws.com/0/208533/549e510b-ec1f-45d4-cdd4-dea7d3b695ee.png)
出典：[Metron Wiki - Metron Architecture](https://cwiki.apache.org/confluence/display/METRON/Metron+Architecture)

### 機械学習モデル
機械学習モデルを適用し、エンリッチ処理、脅威分析処理を強化することもできます。


## データ保管
全文検索エンジンのElasticsearchや、分散処理基盤HadoopのファイルシステムHDFS等への保管を行います。処理したデータに対して、情報の使用方法に基づいた効率的な情報保管を行います。ログや稼動データは効率的な分析やセキュリティの可視化ができるように保存され、パケットデータは、どのデータが漏洩し、どこに送られたか等を分析できるよう保存されます。

![write.png](https://qiita-image-store.s3.amazonaws.com/0/208533/b3c00e6d-288c-af5a-f573-ed52aaaaae6a.png)


## ユーザーインターフェース（UI）
データ可視化ツールのKibanaによる可視化等を行います。Apache Metronのインターフェースは、1つのページ上で、アラート固有の付加情報や脅威情報を含むアラートのサマリを表示します。さらに、アナリストが調査できるよう高度な検索機能やパケット抽出ツールを提供します。処理結果をHDFSにも出力するため（デフォルト）、Jupyter、IPython、Zeppelinといった分析ツールや、Sparkによる分析等も可能です。

![UI.png](https://qiita-image-store.s3.amazonaws.com/0/208533/dbe3f74c-5de7-9740-7fb1-6ba06743264e.png)

### 画面サンプル（１）
Metronが受信したイベントの合計数、イベント種類、受信日時ヒストグラムを表示するパネル。
![default-dashboard-events.png](https://qiita-image-store.s3.amazonaws.com/0/208533/bbc4c4b3-5e8f-1b5a-3e23-d16aed601f5e.png)
出典：[Metron Wiki - Metron Dashboard](https://cwiki.apache.org/confluence/display/METRON/Metron+Dashboard)

### 画面サンプル（２）
Metronが受信したイベントの地理情報を可視化。
![default-dashboard-geoip.png](https://qiita-image-store.s3.amazonaws.com/0/208533/43280fd4-74c1-5e8d-4881-ab81e3cb1051.png)
出典：[Metron Wiki - Metron Dashboard](https://cwiki.apache.org/confluence/display/METRON/Metron+Dashboard)

### 画面サンプル（３）
YAFの出力結果からフロー数、フロー情報の詳細、各フローの持続時間ヒストグラムを表示。
![default-dashboard-yaf.png](https://qiita-image-store.s3.amazonaws.com/0/208533/55996aef-eed1-7b17-5768-fd0f9f5bfddb.png)
出典：[Metron Wiki - Metron Dashboard](https://cwiki.apache.org/confluence/display/METRON/Metron+Dashboard)

### 画面サンプル（４）
Snortのアラートイベントの種類数、通信元・通信先毎の件数、アラートイベントの詳細を表示。
![default-dashboard-snort.png](https://qiita-image-store.s3.amazonaws.com/0/208533/eb8afcca-a6d0-412a-c3b8-8da91ac1293c.png)
出典：[Metron Wiki - Metron Dashboard](https://cwiki.apache.org/confluence/display/METRON/Metron+Dashboard)

### 画面サンプル（５）
Broが抽出したHTTP通信のリクエスト数、リクエストメソッド、リクエスト詳細を表示。
![default-dashboard-web.png](https://qiita-image-store.s3.amazonaws.com/0/208533/d8e59b71-54c6-753f-3153-ed88296bdf0e.png)
出典：[Metron Wiki - Metron Dashboard](https://cwiki.apache.org/confluence/display/METRON/Metron+Dashboard)

### 画面サンプル（６）
Broが抽出したDNS通信のリクエスト数、リクエスト詳細を表示。
![default-dashboard-dns.png](https://qiita-image-store.s3.amazonaws.com/0/208533/855cd3e5-e866-9c1d-2f1d-48e46a0d7356.png)
出典：[Metron Wiki - Metron Dashboard](https://cwiki.apache.org/confluence/display/METRON/Metron+Dashboard)

### 画面サンプル（７）
PCAPパネルのサンプル。
![PCAP.png](https://qiita-image-store.s3.amazonaws.com/0/208533/48e566f5-ccef-aafe-b40f-6053d39766d5.png)
出典：[Metron Wiki - PCAP Service](https://cwiki.apache.org/confluence/display/METRON/PCAP+Service)


# まとめ
このようにApache Metronは、さまざまなオープンソースプロダクトを使用した、セキュリティアプリケーションフレームワークと言うことができます。

セキュリティに関する意識が高くなっている昨今、[セキュリティ・オペレーション・センター](https://ja.wikipedia.org/wiki/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AA%E3%83%9A%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%BB%E3%83%B3%E3%82%BF%E3%83%BC)（Security Operation Center、SOC）を設置する企業が増えていると思われます。Apache MetronはSOCにとって、脅威の分析時間を短縮、高度なパケットデータ調査機能を提供等、さまざまなメリットを提供することができるのではないでしょうか。

以上、簡単ではありますが、Apache Metronを紹介させていただきました。少しでもApache Metronの魅力をお伝えできたなら幸いです。

# 参考資料
[Apache Metron](http://metron.apache.org/)