WOWHoneypotのログをkibanaで確認したい

ハニーポットを試したく、WOWHoneypotというものを使うことにしました。

[WOWHoneypot: 初心者向け! 攻撃者をおもてなしする Web ハニーポット](https://github.com/morihisa/WOWHoneypot)

しかしサーバーからアクセスログを確認する必要があったり、部分的にログがbase64でエンコードされていたり、といった悩みがあったので、kibanaを使って可視化しようといった流れになりました。

構築自体経験が浅く、お座なりな部分もありますが、大目に見てください…

<style>
body {
    font-size: 17px;
}
</style>

# 前提

自分はVMwareで構築した後にAWSへ移行という流れをとりました。
今回はVMwareでの構築部分のみ記載していきます。

- OS: Centos7系
- メモリ2GB, プロセッサ2推奨
- NAT設定もお忘れなく

<div style="height: 20px"></div>
  
# 前準備​

<div style="height: 20px"></div>
  
## インストール

git, python3をインストール
vimは任意で

 ```
 $ yum -y install git​
 $ yum -y install python3
 $ yum -y install vim
 ```
<div style="height: 20px"></div>

   
## ファイアウォール設定
8080, 5601, 9200を開けます。
```
# firewall-cmd --zone=public --add-port=8080/tcp --permanent
# firewall-cmd --zone=public --add-port=5601/tcp --permanent
# firewall-cmd --zone=public --add-port=9200/tcp --permanent
# firewall-cmd --reload
```


次に、80 ⇒ 8080へポートフォワード (絶対必要ではないが、ブラウザからアクセスするとき少し楽になる)  
  
ユーザーが80番ポートへアクセスしたとき、8080へ飛ばすよう設定
  
```
# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
# firewall-cmd --reload
```
  

<div style="page-break-before:always"></div>

# インストールするもの
  
- WOWHoneypot
- Fluentd (td-agent)
- elastic search
- kibana

# 構成イメージ

ざっくりとですが、こんな感じ。
![architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2673269/4ff26723-7687-632e-394c-ccd6d5c60ee4.png)
  

<div style="page-break-before:always"></div>

# WOWHoneypot
  
## WOWHoneypotとは
- 攻撃者をおもてなしする Web ハニーポット
- 送信元からの HTTP リクエストをそのまま保存するので、​後からじっくりゆっくりログ分析をすることが可能  
  
Github: [https://github.com/morihisa/WOWHoneypot​](https://notepm.jp)  
  
<div style="height: 20px"></div>  

## WOWHoneypot インストール手順
gitからクローンするだけでOK  
例：/opt/配下にcloneする場合の流れ  
  
```
$ cd /opt/
$ git clone https://github.com/morihisa/WOWHoneypot​
```

<div style="height: 20px"></div>
  
opt配下に​「WOWHoneypot」が​あれば問題なし  
  

## WOWHoneypot 起動確認
「wowhoneypot.py」を起動​  
  
```
$ cd /opt/WOWHoneypot
$ python3 ./wowhoneypot.py
```

<div style="height: 20px"></div>
  
  
下記のようなコンソール画面になるはず  
![wowstart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2673269/37957926-bac3-ba57-b15c-2c80c027975a.png)

  
その後、http://"ipアドレス" へアクセス  
下記のような画面が表示されれば成功  
  
![wowhttp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2673269/5922d4ae-5317-c854-dcb1-9db5b20b830e.png)
  
※バッググラインドで動かしたい場合は下記のサイト参照  
[https://qiita.com/hogehuga/items/cad931485f58ae487d53](https://qiita.com/hogehuga/items/cad931485f58ae487d53)  
  
<div style="height: 20px"></div>
  
## WOWHoneypot アクセスログの確認
ブラウザからアクセスすると、「access_log」にログが書き込まれる  
  
```
$ tail /opt/WOWHoneypot/log/access_log
```
  
<div style="height: 20px"></div>
  
すると、Base64でエンコードされている…
Fluentdのプラグインを使うことで、デコードしつつelasticsearchに転送することができるので、その設定をしていきます。
  
<div style="page-break-before:always"></div>

# Fluentd
## Fluentd(td-agent) とは
![fluentdimg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2673269/1ccad93a-b183-a514-5574-b2679cffa14f.png)

- データ収集ソフトウェア
- 主にRubyで構成されている
- 今回インストールする「td-agent」は、Fluentdの安定版​

<div style="height: 20px"></div>

## Fluentd インストール手順
下記のコマンドを入力、yumが実行される  
  
```
# curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh

インストールされたか確認
# yum list | grep td-agent
td-agent.x86_64  3.8.1-0.el7  @treasuredata
```

<div style="height: 20px"></div>

## Fluentd プラグインインストール
Elasticsearchへのログ転送, base64をデコードするためのプラグインをインストールする。  
td-agentをインストールすると、「td-agent-gem」というコマンドが仕様可能となるので、それでインストールを行う  

<div style="height: 20px"></div>

[プラグインを調べるためのサイト](https://rubygems.org/)

<div style="height: 20px"></div>

```
# td-agent-gem install elasticsearch
# td-agent-gem install fluent-plugin-filter-base64-decode
```

<div style="height: 20px"></div>

## Fluentd 起動確認
systemctlで起動
```
# systemctl start td-agent
# systemctl enable td-agent

activeになっていれば成功
# systemctl status td-agent
```

<div style="page-break-before:always"></div>

# Elasticsearch & kibana
## Elasticsearch とは
![elasticimg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2673269/e6824a08-ab5a-4a6b-c778-71969e5f94bc.png)

    
- 分散検索/分析エンジン
- ログ分析、フルテキスト検索、セキュリティインテリジェンス、ビジネス分析、およびオペレーショナルインテリジェンスのユースケースに広く使用されている

<div style="height: 20px"></div>

## kibana とは
![kibana.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2673269/72e6c9e8-bdce-954a-2b06-46d9febe8a6b.png)


- Elasticsearch専用のデータ視覚化ダッシュボードソフトウェア
- ログの可視化に用いられることが多い 

ログ可視化となると、Elasticsearcとkibanaは基本的にセット（あくまで僕のイメージ）。

<div style="height: 20px"></div>

## Elasticsearch kibana インストール手順

<div style="height: 20px"></div>

### Javaのインストール  
```
# yum install java-1.8.0-openjdk-devel -y
# java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
```

<div style="height: 20px"></div>

### Elasticsearch PGPキーのインストール
  
```
# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
```

<div style="height: 20px"></div>
  
### Elasticsearch リポジトリの登録  
  
```
# vim /etc/yum.repos.d/elasticsearch.repo

# 下記を入力し、ファイルを保存
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
```

<div style="height: 20px"></div>
  
### Elasticsearch kibanaのインストール
まとめてkibanaもインストールしてしまう　　
(少し時間がかかる)
```
# yum install -y --enablerepo=elasticsearch  elasticsearch kibana
```

<div style="height: 20px"></div>

- Kibanaに利用するIPアドレスの設定
サーバに割り当てられているIPアドレスにアクセスできるよう設定
```
# vim /etc/kibana/kibana.yml

↓を追加
server.host: "0.0.0.0"
```

<div style="height: 20px"></div>

---
  
## Elasticsearch kibana 起動確認
systemctlで起動
少し時間がかかる
```
# systemctl start elasticsearch kibana
# systemctl enable elasticsearch kibana
```

<div style="height: 20px"></div>

### Elasticsearch アクセス
以下のように表示すればOK  

<div style="height: 20px"></div>
  
```
# curl localhost:9200

{
  "name" : "localhost.localdomain",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "CDwf8sbpTfap9zd7CNDaRw",
  "version" : {
    "number" : "7.15.1",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "83c34f456ae29d60e94d886e455e6a3409bba9ed",
    "build_date" : "2021-10-07T21:56:19.031608185Z",
    "build_snapshot" : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
```

<div style="height: 20px"></div>
  
### kibana アクセス
http://"IPアドレス":5601へアクセス  
  
以下のような画面が表示されればOK
  
![kibanaAccess.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2673269/2ebea889-31d4-568a-a8f7-1def45391056.png)
  
---
  
<div style="page-break-before:always"></div>
  
# 8 ログをkibanaで確認する
- FluentdでWOWHoneypotのログの取得・フォーマット・デコード
- 取得したログをElasticsearchへ転送

※WOWHoneypotは、opt配下にクローンした前提で進行

<div style="height: 20px"></div>

## Fluentdの設定  
ログを取得する設定を記載。
正規表現などの詳しい説明は割愛。
  
```
# vim /etc/td-agent/td-agent.conf

下記のコードを張り付け
<source>
  @type tail
  format /^\[(?<time>[^\]]*)\] (?<clientip>[^ ]*) (?<hostname>[^ ]*) "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<status>[^ ]*) (?<mrrid>[^ ]*) (?<requestbody>[^ ]*)$/
  time_format %Y-%m-%d %H:%M:%S%z
  path /opt/WOWHoneypot/log/access_log
  pos_file /var/log/td-agent/wowhoneypot.log.pos
  tag wowhoneypot-access
</source>

<filter wowhoneypot-access>
  @type base64_decode
  fields requestbody
</filter>

<match wowhoneypot-access>
  @type elasticsearch
  host localhost
  port 9200
  logstash_format true
</match>

--再起動
# systemctl restart td-agent
```
  
<div style="height: 20px"></div>
  
## kibanaからログを参照
kibanaへアクセスし、サイドバーから「Discover」をクリック
<div style="height: 20px"></div>

![kibanaDiscover.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2673269/290cd6b1-4695-bce9-e56e-e0f625c0e401.png)

  
以下のような画面が表示されると思うので、「Create Index Pattern」をクリック 
<div style="height: 20px"></div>

![kibanaIndex.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2673269/624632ba-674c-f852-fbbb-34feb5ce50c3.png)

  
Nameに「logstash*」Timestanp fieldに「@timestamp」を選択し、右下の「Create Index Pattern」をクリック  
<div style="height: 20px"></div>

![kibanaLogstash.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2673269/7786ca83-2661-a2bc-1cba-4311a799931a.png)

  
その後、WOWHoneypotを起動し、何度かアクセスしてログを取得させる
  
WOWHoneypotアクセス後、少し時間を置くと、下記のようにログが表示
<div style="height: 20px"></div>

![kibanaLogs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2673269/70f1c62c-1bd9-2241-068d-b8dc26940bcc.png)