家studyをつづって

IT技術やセキュリティで勉強したことをつづっています。

GCPでWowhoneypotをたてる

概要

Google Cloud Platfom上でWowhoneypotを構築し、取得したログをStackdriverで閲覧できるようにします。
また、ログをCloudStorageにエクスポートします。

 

 

 

構築

VMインスタンス作成

「Compute Engine」-「VMインスタンス」より、インスタンスを作成します。

今回はf1-micro、Ubuntu18.04で作成しました。

f:id:iestudy:20200417091907p:plain

インスタンスの作成

 

SSH鍵生成

VMインスタンスに接続するためのSSHのカギを生成します。

今回はTeratermを使用しました。Teratermの場合、「設定」-「SSH鍵生成」より作成します。
SSH鍵生成画面でコメントに入力したものがユーザ名となります。

「生成」を実行後、公開鍵と秘密鍵を保存します。

f:id:iestudy:20200417092855p:plain

SSH鍵生成

SSH鍵登録

上記で生成した鍵のうち、公開鍵をVMインスタンスに登録します。

GCPのポータル上で、作成したVMインスタンスを選択し、編集から公開鍵を登録します。

f:id:iestudy:20200417093353p:plain

SSH鍵登録

GCP側のファイアウォール設定

VMインスタンスにSSHで接続するポートを変更する場合はこの手順を実施します。

「VPCネットワーク」-「ファイアウォール」より、新しくSSHで接続するためのルールを作成します。

ここで「ターゲット」に入力したものが、VMインスタンス側の「ネットワークタグ」に対応します。

f:id:iestudy:20200417094553p:plain

GCPでのファイアウォール設定

 

構築

VMインスタンスに接続して設定します。

SSHの設定はまだ変更していないので、デフォルトの22番ポートにSSHで接続します。

接続時はSSH鍵生成で入力したユーザ名と秘密鍵を使用します。

 

投入コマンド

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install ufw
sudo ufw default DENY
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8080/tcp・・・Wowhoneypotで使用するポート、実際の攻撃は80でうけつけます。
sudo ufw allow SSHのポートを変更する場合/tcp
sudo ufw enable
sudo ufw status 

以下のファイルで「*filter」より上部に以下の内容を追加します。

この記述で80でアクセスした通信を8080に変更します。

/etc/ufw/before.rules
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
COMMIT

 

その後、ufwをリロードします。

sudo ufw reload

 

Wowhoneypotを構築します。

git clone https://github.com/morihisa/WOWHoneypot.git wowhoneypot

cd wowhoneypot/

 

また、以下の設定方法は別記事の内容を参照して下さい。

  • viの設定(矢印キーで操作できない、バックスペースが使えない事への対処)
  • SSHのポート変更
  • Wowhoneypotのサービス化(サービス化しないと、コンソールを閉じたときにWowhoneypotが停止します。)

 

Stackdriverへログを送信

GCPのStackdriverでWowhoneypotのログが見れるように設定します。

curl -sSO "https://dl.google.com/cloudagents/install-logging-agent.sh"
sudo bash install-logging-agent.sh

 

上記実行後、以下のファイルを新規に作成します。

/etc/google-fluentd/conf.d/wowhoneypot.conf

<source>
@type tail
format none
path Wowhoneypotのディレクトリ/wowhoneypot/log/access_log
pos_file /var/lib/google-fluentd/pos/wowhoney-access_log
read_from_head true
tag wowhoneypot
</source>

上記ファイルの「tag」に設定した名前でGCP上ではログをフィルタして確認ができます。

ファイルを作成したら以下のコマンドを実行します。

sudo service google-fluentd restart 

ここまで実行すると、GCP上でログを確認することができます。

f:id:iestudy:20200417101320p:plain

ログの確認画面

ログをCloudStorageにエクスポート

GCPの管理コンソール上にあるログビューアでは、ログを最大300件までしかダウンロードできないため、ログを外部にエクスポートする設定を行います。ログのエクスポートには以下の3つの方法があるようですが、今回はGCS (Google Cloud Storage)を使ったエクスポートを行います。

  • GCS (Google Cloud Storage)
  • BigQuery
  • Cloud Pub/Sub

GCSバケット作成

エクスポート先となるGCSのバケットを作成します。
「Storage」-「ブラウザ」より、「バケットを作成」をクリックします。
表示される内容に従ってバケットを作成します。

f:id:iestudy:20200421232955p:plain

バケットの作成

エクスポートの設定

作成したGCSバケットにログをエクスポートするための設定(シンク)を作成します。
ログビューワの画面上で対象とするログを表示(フィルタ)し、その後、「シンクの作成」よりエクスポート先を設定します。
今回の場合はGoogleCloudStorageがエクスポート先となります。

f:id:iestudy:20200421233718p:plain

シンクの作成

 

ログの確認

上記の設定を行うと、CloudStorageに日毎のフォルダが作成され、1時間ごとのログファイルが作成されます。(上記シンク設定で過去24時間を選択した状態)

f:id:iestudy:20200424132707p:plain

ログの格納イメージ

ログファイルはJSON形式で格納されます。

ログの扱う方法はまだ試行錯誤段階ですが、今は暫定的にCloudShellより以下を実行してみています。

gsutil cat gs://バケットのパス/*.json >> 日毎に集計したファイル

cloudshell dl 上記で作成した集計ファイル

CloudShellでdlコマンドを実行すると、ダウンロードのダイアログが表示されます。