Splunk - BOXの可視化をしてみた

## はじめに
BOX情報をSplunkで可視化する事になったので、@odorusatoshiさんの記事「[Splunkを使ってBOXのファイル操作情報を可視化](https://qiita.com/odorusatoshi/items/d08ba08810ec7bb9c5c2)」をみて、この通りにやろうとしたけど、紹介されていた「Box App for Splunk」は既に無かったので自作してみた話です。

## データ収集
Splunkbaseにある「[Splunk Add-on for Box](https://splunkbase.splunk.com/app/2679)」を利用しました。このAdd-onはSplunk Supported addonなのでマニュアルが公開されています。

https://docs.splunk.com/Documentation/AddOns/released/Box/About

これを読めばデータ収集の方法は分かるかと思いますので、ここは割愛します。

## 可視化
Boxを可視化するにあたり何の情報をダッシュボード化するのかは企業や組織により様々だと思いますが、私は以下の内容を試してみました。

- 認証情報（ログイン成功数、失敗数など）
- ファイルのアップロード情報（回数、データサイズなど）
- ファイルのダウンロード情報（回数、データサイズなど）
- BOXのイベント情報（ファイル作成、編集、削除など）
- アカウント情報（新規作成、編集、削除など）

Splunkで可視化したイメージは以下の通りです。
![box-sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3310888/2a971816-2580-396f-da3e-061637a889b5.png)

## [0] フィールドについて
今回利用するフィールドに`event_type`フィールドと`eventtype`フィールドという似た名前のフィールドが出てきますが、それぞれ情報が異なるので注意ください。

## [1] 認証情報（ログイン成功数、失敗数など）
認証情報は`event_type`フィールドが参考になりそうだったので、それを使う事にします。

### [1-1] BOX認証のイベント統計
私の環境では`event_type`フィールドのバリューとして`LOGIN` `ADMIN_LOGIN` `FAILED_LOGIN`があるので、それぞれの統計を取得してみました。以下はログイン情報を取得するSPLのサンプルです。

```SPL:SPLサンプル
index=<your_index> sourcetype="box:events" event_type="LOGIN"
| stats count 
```

### [1-2] BOX認証のアクセス元統計
どこからBOXの接続があったのか確認する際に`eventtype="box_events_authentication"`で検索を行い、`ip_address`フィールドから位置情報を算出しました。以下はどの国から何回、ログインが成功/失敗しているのかを取得するSPLのサンプルです。

```SPL:SPLサンプル
index=<your_index> sourcetype="box:events" eventtype="box_events_authentication"
| iplocation ip_address 
| top Country event_type
```

私は`Country`フィールドのみを対象としていますが`Region`フィールドや`City`フィールドを組み合わせる事でより細かい粒度にて可視化できます。私はtable情報として取得しましたが、Cluster MAPにて可視化したい場合は`geostat`を利用する事で可視化できます。

## [2] ファイルのアップロード情報（回数、データサイズなど）
### [2-1] BOXアップロード回数の合計値
私の環境では`event_type`フィールドのバリューとして`UPLOAD`があるので、その統計を取得してみました。以下はアップロード回数を取得するSPLのサンプルです。

```SPL:SPLサンプル
index=<your_index> sourcetype="box:events" event_type="UPLOAD"
| stats count 
```

### [2-2] BOXアップロードサイズの合計値
先ほどの`event_type="UPLOAD"`を活用して、`additional_details_size`フィールドのデータサイズの統計を取得してみました。以下はアップロード回数を取得するSPLのサンプルです。

```SPL:SPLサンプル
index=<your_index> sourcetype="box:events" event_type="UPLOAD"
| stats sum(additional_details_size) 
```

これでも良いのですが、私の環境では見づらいので、アップロードサイズの合計値をバイトからギガバイトに変換しました。

```SPL:SPLサンプル
index=<your_index> sourcetype="box:events" event_type="UPLOAD"
| eval A=additional_details_size/(1024*1024*1024) 
| stats sum(A) as B
| eval Upload_GB=round(B,2)
| fields - B
```

フィールド``A``とか``B``とかは任意で変更ください。

## [3] ファイルのダウンロード情報（回数、データサイズなど）
**[2]ファイルのアップロード情報**で利用した`event_type`フィールドのバリューとして`DOWNLOAD`があるので、それに置き換えるだけです。

## [4] BOXのイベント情報（ファイル作成、編集、削除など）
ここまで読んでいる方は薄々気づくでしょうが、要は`event_type`フィールドを参照すればBOXのイベント情報を確認できるので、その統計を取得するSPLサンプルです。

```SPL:SPLサンプル
index=<your_index> sourcetype="box:events" 
| stats count by event_type
```

## [5] アカウント情報（新規作成、編集、削除など）
私の環境では`event_type`フィールドのバリューとして`NEW_USER` `EDIT_USER` `DELETE_USER`があるので、それぞれの統計を取得してみました。以下は新規ユーザ作成に関する統計を取得するSPLのサンプルです。

```SPL:SPLサンプル
index=<your_index> sourcetype="box:events" event_type="NEW_USER"
| stats count 
```

なお、`eventtype=box_events_account`で検索を行うことでアカウントに関するイベントのみに絞れるので、その上で`event_type`フィールドからアカウントのイベント情報を時系列で抽出してみる方法も試してみました。

```SPL:SPLサンプル
index=<your_index> sourcetype="box:events" eventtype="box_events_account"
| timechart count by event_type 
```

## [6] その他
私は組織におけるBOXの利用状況を可視化したかったので、このようなSPLで書きましたが、BOXは`いつ` `誰が` `どのファイルを` `どうした` まで取得可能です。例えば、特定の個人に関するアクティビティも取得可能なので、うまく使えば情報漏洩対策や内部脅威対策、時間外労働者の特定などに活用できるのでは無いかと感じました。

## 終わりに
今回はSplunkbaseからBOXを可視化するAppを見つける事ができなかったので、SPLを書いてBOXを可視化する方法を紹介しましたが、マクニカから[Security Monitoring App for Box](https://www.macnica.co.jp/business/security/manufacturers/splunk/box_security_monitoring_app.html)といった、BOXに関する不正アクセスや設定ミスなどを検知・監視を実現するSplunk用の有償の独自App/サービスがあるようです。興味のある方はチェックしてみては如何でしょうか。なお、私はマクニカの該当App/サービスを試した事が無いので内容は知りません。