はじめに
- 前に、書いた以下記事を見ていただいた方へ。実際に本番環境で試す前にそもそもstreamデータってどれほど見えるものなのか触れてみたいなという方向けにSAMPLEデータとその使い方の紹介です
- 会員系Webサイトに対する不正ログインの監視や不正決済などの兆候を捉えるためにSplunk Stream Appによるhttpトラフィックの分析が便利です
- 認証イベントが記録されたアプリケーションのログがすぐに用意できない(アプリ改修が必要)などの状況においてStreamを使ってネットワークレイヤーでキャプチャして監視ができるため
- もちろん、Webサイトは通常httpsで提供しているので、SSLアクセラレータなどで復号済みのhttpトラフィックをモニターする必要はあります
- そこで、Splunk StreamでキャプチャしたhttpトラフィックがSplunkに入ることでどのように調査、分析ができるのかを体験するのにBOTSv2のdataを使ってみてみたいと思います
- BOTSデータのいいところ
- すでにindex済みのデータのため、Splunkに取り込んでもライセンスを消費しないで利用できる
- BOTSv2データはFrothly社という架空の飲料メーカーに起きたインシデントを調査していくという背景が用意されています
- 不正ログインはFrothly社のECサイト(store.froth.ly)において発生した体になっています。
作り方
BOTSv2データを準備する
- 前提:Splunkをインストール済みの環境がある状態
- SplunkインスタンスにCLIログインして、以下サイトからBOTSv2のattack onlyデータを直接wgetでダウンロードします
# appフォルダ配下に移動します
cd /opt/splunk/etc/apps
# dataのダウンロード
wget https://s3.amazonaws.com/botsdataset/botsv2/botsv2_data_set_attack_only.tgz
# appフォルダ配下に展開します
tar zxvf botsv2_data_set_attack_only.tgz
# 以下フォルダが生成されることを確認
botsv2_data_set
# ゴミは削除しておきます
rm botsv2_data_set_attack_only.tgz
# Splunk再起動
/opt/splunk/bin/splunk restart
SPLを試す
- データが検索できることを確認
- stream:httpの分析を行う際は、2017/8/1-2017/8/31にかけての時間範囲で選択して検索してください
SPL
index=botsv2 sourcetype=stream:http
8月の間に複数の異なる地域からアクセスのあったアカウントを特定する
- いわゆるリスト型攻撃を想定したときの初歩的な監視例です。
- Webサイトの利用状況からして、利用者が国をまたいでサービスにログインしてくることが割合として低い場合、以下のようなサーチで傾向をみることができます
SPL
index=botsv2 sourcetype="stream:http"
| rex field=form_data "login\[username\]=(?<web_user>[^&|^$]+)"
|search web_user=*@*
|iplocation src
|eval ipcon = src + "_" + Country
|stats count values(ipcon) by web_user
|sort - count
# 解説
# まず2行目でいきなりrexコマンドをつかって、正規表現をもとにECサイトへのログインユーザ情報を抽出しています
# 3行目でログインユーザがメールアドレス形式のものにフィルタ
# 4行目でsrcのIPアドレスにGeo情報をエンリッチします
# 5行目でsrcと国名をくっつけたipconフィールドを新たに生成します
# 6行目でweb_user別に集計をおこないます
# 7行目で降順にソートをかけます
- サーチ結果
- Tom2014のアカウントは3つの異なる国から計5回もログイン試行があったことがわかります。
傾向監視用のダッシュボードSAMPLEを適用して見てみる
-
そのままはりつけて利用できるXMLはこちらです
-
このような画面が用意できます。ぜひ試してみてください。
最後に
- 上で例示したSPLとダッシュボードを実環境のstream:httpデータで適用した場合、色々とチューニングは必要だと思います
- そのための叩き台として参考いただけると幸いです