Oracle Cloud に張り付いてきた Bot のログ分析

### はじめに
Oracle Cloud の無料枠が太っ腹だという話を聞いたので、アカウントを作成してノードを立ててみた。iptables と VCN の設定だけ気をつければすぐ使えた。
https://blog.potproject.net/2021/06/01/oracle-cloud-kubernetes

以前から興味があった軽量なハニーポット [Wowhoneypot](https://github.com/morihisa/WOWHoneypot) を立ててみたが、まだなにもおもてなししていない SSH（tcp/22）サービスに多数のログイン試行があったため、まずは `awk` `grep` `sort` `uniq` などでできる簡易なログ分析コマンドを調べてみた。


### 環境
Oracle Cloud の Ubuntu 20.04

```
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
```

### SSH ログの場所と Invalid user ログのサンプル

```
/var/log/auth.log 
```

```
Aug 25 14:30:04 instance-20210825-2124 sshd[33577]: Invalid user admin from 160.176.23.215 port 5808
Aug 25 14:40:36 instance-20210825-2124 sshd[2119]: Invalid user default from 160.176.23.215 port 4110
Aug 25 14:43:49 instance-20210825-2124 sshd[2362]: Invalid user MikroTik from 160.176.23.215 port 1631
```

### username 抽出とユニークカウント 
```
$ cat /var/log/auth.log | awk '/Invalid user/ {print $8}' | uniq -c | sort -r
     20 user1
     20 user
     20 ubnt
     20 telecomadmin
     20 tech
     20 support
     20 profile1
     20 demo
     20 default
     20 administrator
     20 admin1
     20 MikroTik
     19 admin
     13 web
      4 pi
      3 pi
      2 pi
      1 vicidiem
      1 vicidiem
      1 user
      1 user
      1 ubnt
      1 ubnt
      1 ubnt
      1 pi
      1 osmc
      1 osmc
      1 from
```

### username 抽出と送信元 IP アドレスとユニークカウント

```
$ cat /var/log/auth.log | awk '/Invalid user/ {print $8,$10}' | uniq -c | sort -r
     20 user1 160.176.23.215
     20 user 160.176.23.215
     20 ubnt 160.176.23.215
     20 telecomadmin 160.176.23.215
     20 tech 160.176.23.215
     20 support 160.176.23.215
     20 profile1 160.176.23.215
     20 demo 160.176.23.215
     20 default 160.176.23.215
     20 administrator 160.176.23.215
     20 admin1 160.176.23.215
     20 MikroTik 160.176.23.215
     19 admin 160.176.23.215
     13 web 160.176.23.215
      2 pi 98.40.14.28
      2 pi 70.89.91.225
      2 pi 62.16.199.162
      2 pi 139.47.8.98
      1 vicidiem 125.227.67.152
      1 vicidiem 125.227.67.152
      1 user 64.225.73.18
      1 user 134.122.63.251
      1 ubnt 45.93.250.36
      1 ubnt 181.214.158.230
      1 ubnt 181.214.158.230
      1 pi 153.0.148.44
      1 pi 153.0.148.44
      1 osmc 62.24.108.57
      1 osmc 62.24.108.57
      1 from port
```

### 空白ユーザ名の扱い方 暫定案
(注)もっと良い方法があると思いますので詳しい方教えて下さい...

ユーザ名なしでのログイン試行↓があったために、抽出したときに `$8` と `$10` が右に一行ずれている箇所があった。

```
Aug 26 01:13:05 instance-20210825-2124 sshd[2768]: Invalid user  from 65.49.20.66 port 47954
```
だめな例 ↓

```
      1 from port
```

本当はこうなってほしい ↓

```
      1  65.49.20.66
```

条件分岐の書き方がうまくいかなかったため、デリメタを途中でスペースからコンマに変えて扱ったところスペースはスペースのまま扱うことができた。
参考
https://qiita.com/odacoh/items/55cec454fdcf0d87ca01
https://hogetaka.hatenadiary.org/entry/20130104/1357301037

```
$ cat /var/log/auth.log | grep 'Invalid user' | tr " " "," | awk -F, '{print $8,$10}' | uniq -c | sort -r
     20 user1 160.176.23.215
     20 user 160.176.23.215
     20 ubnt 160.176.23.215
     20 telecomadmin 160.176.23.215
     20 tech 160.176.23.215
     20 support 160.176.23.215
     20 profile1 160.176.23.215
     20 demo 160.176.23.215
     20 default 160.176.23.215
     20 administrator 160.176.23.215
     20 admin1 160.176.23.215
     20 MikroTik 160.176.23.215
     19 admin 160.176.23.215
     13 web 160.176.23.215
      2 pi 98.40.14.28
      2 pi 70.89.91.225
      2 pi 62.16.199.162
      2 pi 139.47.8.98
      1 vicidiem 125.227.67.152
      1 vicidiem 125.227.67.152
      1 user 64.225.73.18
      1 user 134.122.63.251
      1 ubnt 45.93.250.36
      1 ubnt 181.214.158.230
      1 ubnt 181.214.158.230
      1 pi 153.0.148.44
      1 pi 153.0.148.44
      1 osmc 62.24.108.57
      1 osmc 62.24.108.57
      1  65.49.20.66
```

#### IP アドレスだけを抽出する方法
regex で only のオプションを使う `-oE` 

```
$ cat /var/log/auth.log | grep 'Invalid user' | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' |  sort | uniq 
103.133.120.78
125.227.67.152
134.122.63.251
139.47.8.98
153.0.148.44
160.176.23.215
181.214.158.230
45.93.250.36
49.149.109.8
62.16.199.162
62.24.108.57
64.225.73.18
65.49.20.66
70.89.91.225
86.127.239.201
98.40.14.28
``` 


### 所感
一行コマンドでいろいろと情報を整理することができることがわかった。日報のような形でメールやチャットに送りつけてもよいかもしれない。
今回 `Invalid user` でフィルタしたが、ログ全体でみても ubuntu ぽい username はあるものの、`ubuntu` での試行がなかった。
MikroTik というネットワーク機器があることを知った。
osmc というのは Kodi のようなメディアサーバの OS らしい。


### おまけ

OracleCloud に GeoIP のデータベースをインストールして、送信元 IP だけを取り出して国名の突合をしてみた。

```
103.133.120.78 : インド
125.227.67.152 : 台灣
134.122.63.251 : オランダ王国
139.47.8.98 : スペイン
153.0.148.44 : 中国
160.176.23.215 : モロッコ王国
181.214.158.230 : パナマ
45.93.250.36 : ドイツ連邦共和国
49.149.109.8 : フィリピン共和国
62.16.199.162 : ノルウェー王国
62.24.108.57 : ケニア共和国
64.225.73.18 : オランダ王国
65.49.20.66 : アメリカ合衆国
70.89.91.225 : アメリカ合衆国
86.127.239.201 : スペイン
98.40.14.28 : アメリカ合衆国
```
参考
https://mattintosh.hatenablog.com/entry/20190307/1551891443