ハニーポットを試したく、WOWHoneypotというものを使うことにしました。
WOWHoneypot: 初心者向け! 攻撃者をおもてなしする Web ハニーポット
しかしサーバーからアクセスログを確認する必要があったり、部分的にログがbase64でエンコードされていたり、といった悩みがあったので、kibanaを使って可視化しようといった流れになりました。
構築自体経験が浅く、お座なりな部分もありますが、大目に見てください…
前提
自分はVMwareで構築した後にAWSへ移行という流れをとりました。
今回はVMwareでの構築部分のみ記載していきます。
- OS: Centos7系
- メモリ2GB, プロセッサ2推奨
- NAT設定もお忘れなく
前準備
インストール
git, python3をインストール
vimは任意で
$ yum -y install git
$ yum -y install python3
$ yum -y install vim
ファイアウォール設定
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
インストールするもの
- WOWHoneypot
- Fluentd (td-agent)
- elastic search
- kibana
構成イメージ
WOWHoneypot
WOWHoneypotとは
- 攻撃者をおもてなしする Web ハニーポット
- 送信元からの HTTP リクエストをそのまま保存するので、後からじっくりゆっくりログ分析をすることが可能
Github: https://github.com/morihisa/WOWHoneypot
WOWHoneypot インストール手順
gitからクローンするだけでOK
例:/opt/配下にcloneする場合の流れ
$ cd /opt/
$ git clone https://github.com/morihisa/WOWHoneypot
opt配下に「WOWHoneypot」があれば問題なし
WOWHoneypot 起動確認
「wowhoneypot.py」を起動
$ cd /opt/WOWHoneypot
$ python3 ./wowhoneypot.py
その後、http://"ipアドレス" へアクセス
下記のような画面が表示されれば成功
※バッググラインドで動かしたい場合は下記のサイト参照
https://qiita.com/hogehuga/items/cad931485f58ae487d53
WOWHoneypot アクセスログの確認
ブラウザからアクセスすると、「access_log」にログが書き込まれる
$ tail /opt/WOWHoneypot/log/access_log
すると、Base64でエンコードされている…
Fluentdのプラグインを使うことで、デコードしつつelasticsearchに転送することができるので、その設定をしていきます。
Fluentd
Fluentd(td-agent) とは
- データ収集ソフトウェア
- 主にRubyで構成されている
- 今回インストールする「td-agent」は、Fluentdの安定版
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
Fluentd プラグインインストール
Elasticsearchへのログ転送, base64をデコードするためのプラグインをインストールする。
td-agentをインストールすると、「td-agent-gem」というコマンドが仕様可能となるので、それでインストールを行う
# td-agent-gem install elasticsearch
# td-agent-gem install fluent-plugin-filter-base64-decode
Fluentd 起動確認
systemctlで起動
# systemctl start td-agent
# systemctl enable td-agent
activeになっていれば成功
# systemctl status td-agent
Elasticsearch & kibana
Elasticsearch とは
- 分散検索/分析エンジン
- ログ分析、フルテキスト検索、セキュリティインテリジェンス、ビジネス分析、およびオペレーショナルインテリジェンスのユースケースに広く使用されている
kibana とは
- Elasticsearch専用のデータ視覚化ダッシュボードソフトウェア
- ログの可視化に用いられることが多い
ログ可視化となると、Elasticsearcとkibanaは基本的にセット(あくまで僕のイメージ)。
Elasticsearch kibana インストール手順
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)
Elasticsearch PGPキーのインストール
# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
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
Elasticsearch kibanaのインストール
まとめてkibanaもインストールしてしまう
(少し時間がかかる)
# yum install -y --enablerepo=elasticsearch elasticsearch kibana
- Kibanaに利用するIPアドレスの設定
サーバに割り当てられているIPアドレスにアクセスできるよう設定
# vim /etc/kibana/kibana.yml
↓を追加
server.host: "0.0.0.0"
Elasticsearch kibana 起動確認
systemctlで起動
少し時間がかかる
# systemctl start elasticsearch kibana
# systemctl enable elasticsearch kibana
Elasticsearch アクセス
以下のように表示すればOK
# 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"
}
kibana アクセス
http://"IPアドレス":5601へアクセス
以下のような画面が表示されればOK
8 ログをkibanaで確認する
- FluentdでWOWHoneypotのログの取得・フォーマット・デコード
- 取得したログをElasticsearchへ転送
※WOWHoneypotは、opt配下にクローンした前提で進行
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
kibanaからログを参照
kibanaへアクセスし、サイドバーから「Discover」をクリック
以下のような画面が表示されると思うので、「Create Index Pattern」をクリック
Nameに「logstash*」Timestanp fieldに「@timestamp」を選択し、右下の「Create Index Pattern」をクリック
その後、WOWHoneypotを起動し、何度かアクセスしてログを取得させる
WOWHoneypotアクセス後、少し時間を置くと、下記のようにログが表示