自宅のブロードバンドルータへのアタックを可視化してみた

# はじめに
自宅のブロードバンドルータ(NEC Aterm WR9500N)の管理画面を見ていたら、セキュリティのログなんてものがダウンロードできるのを知ったので(買ってから何年経ってるんだよ、って話はあるけど)、Splunkに取り込んでみました。

# 手順
### １：SplunkCloudの無償トライアルを申し込む
SplunkのアカウントIDを取得(無償)すると、SplunkCloudの無償トライアルに申し込めます(15日間)。今回はこれを利用していますが、自宅PCやら自前でSplunk環境があるならそちらでも問題なしです。

### ２：ログを取り込む
ダウンロードしたセキュリティログの中身はこんな感じでした。

2019-04-15 19:55:21 secflt- 2.ntc: ATTACK Rejected spoofing ,6 ***.***.***.***[50704] > 183.79.217.124[443] in LAN
2019-06-19 09:48:06 secflt- 2.ntc: ATTACK Rejected spoofing ,6 ***.***.***.***[51148] > 157.7.145.86[443] in LAN
2019-06-20 21:29:41 secflt- 2.ntc: ATTACK Rejected spoofing ,17 ***.***.***.***[53311] > 172.217.26.10[443] in LAN
2019-07-22 09:43:20 secflt- 2.ntc: ATTACK Rejected spoofing ,6 ***.***.***.***[35242] > 54.65.184.136[443] in LAN
2019-08-21 08:57:53 secflt- 2.ntc: ATTACK Rejected spoofing ,6 ***.***.***.***[58398] > 115.165.159.202[443] in LAN
2019-08-28 20:25:01 secflt- 2.ntc: ATTACK Rejected spoofing ,6 ***.***.***.***[36277] > 182.22.28.252[443] in LAN
2019-09-09 22:18:01 secflt- 2.ntc: ATTACK Rejected spoofing ,17 ***.***.***.***[40389] > 172.217.31.129[443] in LAN
2019-09-24 20:54:49 secflt- 2.ntc: ATTACK Rejected spoofing ,6 ***.***.***.***[34695] > 23.57.95.88[443] in LAN
2019-10-04 14:49:15 secflt- 2.ntc: ATTACK Rejected spoofing ,6 ***.***.***.***[42594] > 182.22.25.124[443] in LAN
2019-10-05 09:11:48 secflt- 2.ntc: ATTACK Rejected spoofing ,6 ***.***.***.***[52498] > 173.194.49.41[443] in LAN
2019-10-10 20:15:52 secflt- 2.ntc: ATTACK Rejected spoofing ,6 ***.***.***.***[39522] > 172.217.25.202[443] in LAN

1. [設定]→[データの追加]
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/0ea3ba25-0a50-16df-49f5-1c8e3a14fcf8.png)

2. 「アップロード」を選択
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/edbc406c-ad0a-e814-3433-a03b0d47ed49.png)

3. ログファイルをドラッグ＆ドロップすると下のバーが動きだす。完了になったら上の「次へ」を押す
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/6f40a8d6-71ca-7041-da81-ef87203597b6.png)

4. ログは「時間が命」なので、ログの中のタイムスタンプの形式を正しく認識させる。今回は「2019-11-01 12:00:00」てな形なので、タイムスタンプ形式のところに「%Y-%m-%d %H:%M:%S」を設定する。プリフィックスはタイムスタンプの場所を知らせるのに特定の文字列がある場合は設定するが、今回は行頭なので空白のまま。また先読み＝各行の先頭から何バイト目までを探すかというバイト数も設定しない。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/87d47b88-e232-be29-e760-f4da175e187b.png)

5. 今設定した内容をSplunkに覚えさせるため、ソースタイプを「rt_secure_log」という名前で保存する。以降、新しいログが追加されたときもこのソースタイプを指定して読み込ませれば同じ動き(タイムスタンプを認識する)をしてくれる。
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/f37398f9-2df4-5143-1334-5aaf1b051804.png)

6. ホスト名と、ログをため込む先＝インデックスにはmainを指定して「次へ」を押す
![061.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/78052aaa-43d6-678d-7976-c11fd993f131.png)

7. 取り込ませて「サーチ開始」をクリックするとサーチ画面に遷移し、さっき取り込んだログが表示される。しかし、この状態ではログの中身、例えばIPアドレスなどをフィールド(項目)として認識しておらずこのままではサーチ文を書くのが難しいので、フィールド抽出を行う。

![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/576dea6e-7d86-c878-38d5-baef0a8514b5.png)

### ３：フィールド抽出する
1. サーチ画面の右下のペインで、いずれかのイベントの「＞」マークをクリックして展開し、「イベントアクション」→「フィールドの抽出」を選ぶ。
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/9d0dcd96-b487-6403-5cb6-4f546033bf9a.png)

2. 「正規表現」か「区切り文字」かを選択する画面が表示される。今回は「正規表現」でフィールド抽出を行うので、「正規表現」をクリックして「次へ」。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/591f72b8-99ce-2091-cc19-fc4787158815.png)

3. サンプルとして１行だけ選ばれるので、IPアドレスのところをクリックしたまま滑らせて離すとフィールド名を入れるウインドウが開く。ここはスプーフィングされたIPアドレスの宛先になるので「dst_ip」と入力して「Add extraction」を押す。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/60b556ad-03f4-23a7-c6f8-284ca0f7fa95.png)

4. すべての行について「dst_ip」抽出された結果が表示される(最大1000行分)。左端には正常なら緑チェックが、ダメなら赤×がつくのだが、今回はすべて緑チェックなのでOK。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/ab4859d9-2654-4284-da0b-4418ab8990dc.png)

5. 同様にdst_ipの後ろのポート番号を指定して「dst_port」と命名。
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/338e320c-e47e-1441-5ea3-777fb01f41d3.png)

6. 最終的には５つのフィールド名を定義したので「次へ」を押す。
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/1fad0294-273c-1180-b3fa-92f10706ee1a.png)

7. このフィールド抽出定義に任意の名前を付けて保存する。
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/5a900475-5207-5bb0-2585-524cd103c2d8.png)

8. サーチ画面に戻ると５つのフィールド名が表示される。表示されない場合はサーチの時間設定を確認し、過去24時間だったら「全時間」に変更して再サーチ。
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/bffaa75e-7e25-bac7-d6c0-4ff1a48bc762.png)

### ４：サーチ文を書く
こうなれば後はサーチ文をかくだけ。
例えば、reasonごとの件数の推移を見たければ

index=main sourcetype=rt_secure_log | timechart count span=1month by reason

とやれば、１カ月単位の拒否理由ごとに件数を得ることができる。
![qiita1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/f3752c4a-e0a4-7d4f-0859-e0bfa15579e0.png)

なお、細かい話だが、ログは4～10月までしかないので「全時間」指定でサーチすると、ログが存在する期間しか結果が得られず、「11月以降は0件」というのが表示されない。なので、時間指定を「2019/1/1以降」に指定してサーチすると、ログには無い「2019/1～3」と「2019/11～2020/1(＝今日)」までの結果が得られるようになる。

# 結果
このルータではスプーフィング、SMURF攻撃、LAND攻撃の３つを検出するというので、それぞれの件数を単一値で表示するパネルを一番上に並べ、４で作った時系列の件数を面グラフをその下に、最後にdst_ipをiplocationとgeostatsコマンドで変換して統計を取ったものを地図で表示してみた。

![qiita2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552413/e967373c-11c9-b687-e3e2-58b66fe8395d.png)

ということで１カ月に１～２回、スプーフィングと判断した攻撃を受けているようです。ただ、これはIPアドレスがおかしいのでルータも気づいたものでしょうが、内部のIP帯域なんて192～か172～ばっかりでバレバレなので、もしかしたらすでに何かやられている可能性は否定できないなーと、ちょっと怖くなった次第です・・・。