AWS VPC Traffic Mirroringを使ってFraud監視をスタート!

はじめに
----
- Splunkを使った[**Fraud（不正）**](https://www.splunk.com/ja_jp/cyber-security/fraud-detection.html)監視のユースケースは多い
- 特にWebサービスはECサイトをはじめ、**不正ログイン**または**ATO（アカウントテイクオーバー）**のリスクに常にさらされており、2要素認証が完全普及してない状況からも常に被害報告が出ている

![スクリーンショット 2020-10-11 14.29.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/8eccbe7a-3279-c2e7-320d-437dbdd544b4.png)


- そのような状況で、できうる対策として**アカウント認証の異常パターンをモニタリング**することがポイントになってくる
- が、モニタリングの仕組みを実現する上で大きな２つの課題をよく耳にする
    - **アプリケーションから認証ログが出力されていない**
    - **監視ルール作り**や**監視体制**が整っていない


Oops...アプリケーションから認証ログが出力されていない
---
- 必要なデータがない。これでは監視のスタートにたてない・・・アプリケーションの改修も簡単ではない。
- そのような状況に対して、本記事ではアプリケーションを改修しないでWeb(http) トラフィックの[Streamデータ](https://qiita.com/odorusatoshi/items/1a9efe222ba6e8c4c454)からデータを取り出し、Splunkで分析する方法を以前紹介
- AWSの[VPC Traffic Mirroring](https://docs.aws.amazon.com/ja_jp/vpc/latest/mirroring/what-is-traffic-mirroring.html)を利用して、AWSのEC2インスタンス（webサーバ）に流れるhttpトラフィックをSplunk Streamでキャプチャしました
    - (VPC Traffic MirroringってVPC Flowのことかと思っていたらFlowデータではなかった。)

構成イメージ
---
![スクリーンショット 2020-10-11 15.24.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/df83edf1-38ac-60ce-b81b-01b5093db43a.png)


- Webサーバを1から作らなくてもWebサーバみたいなログイン認証データが取れるSplunkを使って検証しました
- AWS MarketPlaceからポチッとインスタンスを2つ作成
    - **Nitro世代のm5a.large**のインスタンスを利用。

設定手順(AWS VPC Traffic Mirroring)
----
- AWSのVPC Traffic Mirroringの設定方法は以下記事が大変参考になりました
    - [VPC Traffic Mirroring を使ってみる](https://developers.cyberagent.co.jp/blog/archives/24851/)
- 上記Blogを参考にして設定します。補足ポイントを以下に記載
    -  VPC Traffic Mirroringを受け取るSplunkサーバには拡張NIC(eth1)をつけて、Traffic MirrorをSplunkサーバの**eth1に流す**
    -  SplunkサーバにアタッチするセキュリティグループのinboundポリシーにUDP port 4789を加える
    -  Traffic Filter Policyの設定例（アウトバウンドデータ（webのレスポンスデータ）もミラー対象にしていないとStream分析に支障をきたします）

**Inbound**
![スクリーンショット 2020-10-11 15.18.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/fd7618c1-a27a-a042-e597-44855703dbbb.png)

**Outbound**
![スクリーンショット 2020-10-11 15.18.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/7f0fddbf-5649-6923-43ac-8d24616cfbb1.png)

- Outboundルールはもう少し絞れたら絞ったほうがいいかもしれませんが、Splunk Stream側で分析対象のトラフィックはいかようにも調整できるのでこれでもOKです。


設定手順(Splunk Stream)
----
- Splunkには以下Appsをインストール。Stream Appsも以前は1つにまとまっていましたが、最近細かく分けた模様
- Splunkサーバに以下Appsをすべてインストール
    - [Splunk App for Stream] (https://splunkbase.splunk.com/app/1809)
        - Forwarder management, dashboards, calculators and admin tools
    - [Splunk Add-on for Stream Wire Data](https://splunkbase.splunk.com/app/5234)
        - Knowledge objects for parsing Stream data for use by users. Installed on Indexers and Search Heads.
    - [Splunk Add-on for Stream Forwarders](https://splunkbase.splunk.com/app/5238)
        - Network data collection tools for capturing network data, interpreting protocols, extracting custom fields and sending to Splunk. Installed on Splunk Universal or Heavy Forwarders.


- Stream Appの初期セットアップ
    - [Installation and Configuration Manual](
https://docs.splunk.com/Documentation/StreamApp/7.3.0/DeployStreamApp/InstallSplunkAppforStream#Set_Splunk_TA_stream_permissions)

```:shell
・パーミション設定
cd /opt/splunk/etc/apps/Splunk_TA_stream
sudo chmod +x ./set_permissions.sh
sudo ./set_permissions.sh

・SplunkサーバにSSHアクセスして以下configを編集し、eth1に入ってくるパケットをstreamのキャプチャ対象にする（デフォルトだとeth0しか見ていない
vi /opt/splunk/etc/apps/Splunk_TA_stream/local/streamfwd.conf 

[streamfwd]
streamfwdcapture.<N>.interfaceRegex = eth1
streamfwdcapture.<N>.offline = false
```

- GUIからにhttpプロトコル内の取得フィールドを細かく選択
    - Splunk Streamのいいところ。柔軟に収集したいフィールドを設定できる。
-![スクリーンショット 2020-10-11 15.45.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/54df6e42-e6bf-0857-f71a-c8383cb0065e.png)


結果
---
- Webサーバに対するhttpトラフィックがキャプチャできています

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/4e238306-dd7b-d9c5-99cd-99a91f4a76e7.png)


- form_dataにはログインアカウント名とパスワード文字列までばっちり見えます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/51800736-1815-3a6b-038c-d1cdd946cb27.png)

- 少なくともログイン時のアカウント名と認証成功か失敗だけでも見れればOKですね。
![スクリーンショット 2020-10-11 15.56.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/f247c5b1-212c-0f79-0cbd-dc1549deca84.png)

- IDとパスワードは正規表現で後からスキーマ定義（Scheme on the read!!）

```:SPL
|rex field=form_data "username=(?<user>[^&|^$]+)"
|rex field=form_data "password=(?<password>[^&|^$]+)"
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/3d63f617-7076-f9f5-2a91-18a413b47197.png)



はまったポイント
---
- VPC Traffic Mirroringのフィルター条件にinboundのみ設定
    - Splunk Streamでhttpトラフィックは可視化できるのだが、なぜか実トラフィック発生からindexされるまでに5分近くかかっていた。
    - 不審におもいoutboundも転送対象にした所、数秒以内でログ検索できるようになった。httpレスポンスも見て解析しているので片方だけの解析によって処理が遅くなっていたのだと思われる


次回について
---
- せっかく集めたデータを活用するためのAppsを紹介します！


参考記事
---
- これらの丁寧な日本語記事のおかげですんなり設定できました。感謝。
    - [VPC Traffic Mirroring を使ってみる](https://developers.cyberagent.co.jp/blog/archives/24851/)
    - [【初心者】AWS VPC Traffic Mirroring を使ってみる](https://qiita.com/mksamba/items/3e3fad914c708d9c9379)