かわろぐ

技術、セキュリティ、その他もろもろ

MENU

Wowhonyepot のログを StackDriver Logging から GCS に保存する

前回の記事では、Wowhoneypot のログを StackDriver Logging へ出力できる様に設定しました。 しかし、それだけではログは長期間保存されません。公式ドキュメントによると30日しか保持されないようです。 長期保存するためにはGoogle Cloud Strage(以下 GCS)へ転送する必要があるようです。

StackDriver Logging から GCS に転送する方法

エクスポートを作成で簡単に転送できる。タグで wowhoneypot とつけてあるので、それを選択して設定すれば syslog などと混ざることなく wowhoneypot のログだけを GCS へ転送できます。

f:id:kawa_xxx:20181006215856p:plain

GCSから見えるログ

StackDriver Logging から転送されたログは、JSON形式で1時間毎のファイルに分けられて保存されていきます。

f:id:kawa_xxx:20181006215859p:plain

さて、これでログも長期間保存されるようになったので、あとは BigQuery か ElasticSearch などに突っ込んで分析するだけですね!

Google Cloud Platform エンタープライズ設計ガイド

Google Cloud Platform エンタープライズ設計ガイド

Stackdriver Logging に Wowhoneypot のログを吐き出す

前の記事では、サーバーのディスクが溢れない様にログをローテートするところまで作業しました。今回はハニーポットのマシンの外にログを保管する部分をやっていきます。

ハニーポットのログを集めたい

個人の趣味の時間でやっているので、syslog サーバのメンテナンスなんてしたくて、最もやりたいログの分析の部分にフォーカスしたいんですよね。そこで、Google Cloud Platform にロックインされますが、GCP上のサービスを使ってお金で手間を解決したいと思います。

お金でと言っても殆ど、無料枠に収まってしまいほぼ無料ですけどね。。

StackDriver Loggingにログを出す

これはStackDriver のエージェントが Google から提供されているので、ドキュメントを見て以下のコマンドを叩くだけです。

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

エージェントと言っても独自のものではなくて fluentd のカスタマイズ版のようですね。

完了したらStackdriver のエージェントにwowhoneypot のログを拾わせる様に設定しましょう。こちらも設定方法のドキュメントがあるのでそれを見ながらやりました。

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

<source>
  @type tail
  format none
  path /home/wow/wowhoneypot/log/access_log
  pos_file /var/lib/google-fluentd/pos/wowhoney-access_log
  read_from_head true
  tag wowhoneypot
</source>

上記の設定ファイルを作ったらエージェントを再起動します。

sudo service google-fluentd restart

これで、Wowhoneypot のログが StackDriver Logging へ転送されるようになりました。GCPの画面で見るとこんな感じですね。

f:id:kawa_xxx:20180930080411p:plain

エージェントの設定ファルを作成したフォルダにはデフォルトで syslog など他のサービスのログを転送する設定も多数入っています。もし、ログ量を心配するならば、これらを削除なり拡張子の変更をしておくと良いかもしれません。

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

WOWHoneypot のログをローテートする

環境

  • WOWHoneypot 1.1
  • Ubuntu 18.04 LTS

ログを一ヶ月分だけ保持させたい

WOWHoneypotをサービス化してみるではとりあえず常時起動しているように設定しました。このままではログファイルがどんどん肥大化していき、いずれはディスクフルでサーバが止まってしまいます。そこで、今回はログのローテートの設定を入れてみたいと思います。

WOWHoneypot はデフォルトでは log/access_loglog/wowhoneypot.log にそれぞれアクセスログとハニーポットのログと分けて保存されます。ただし、ローテートなどの設定はデフォルトでは出来ないため、動かし続けるとログがディスクを埋め尽くしてしまいます。 ログの集積は別途考えるとして、まずは一ヶ月分のみローカルに日次でファイルを分けた形でログを保持し、それより古いものは削除するという設定をしてみたいと思います。

ログローテートの設定

/etc/logrotate.config に設定を記載しても良いのですが、/etc/logrotate.d/ 配下がインクルードされているので、 wowhoneypot 用のファイルをつくってそこにローテートの設定を記載するようにしましょう。

sudo vi /etc/logrotate.d/wowhoneypot

wowhoneypot は日々増えていくログファイルは2種類あるので、全く同じ設定ですが、2つに分けて書きます。 ログ量の増え方が全然違うのですぐローテートするタイミングを変えたくなるだろうなと思ってです。

/home/wow/wowhoneypot/log/access_log{
        ifenpty
        dateformat .%Y%m%d
        missingok
        daily
        rotate 30
        endscript
}

/home/wow/wowhoneypot/log/wowhoneypot.log{
        ifenpty
        dateformat .%Y%m%d
        missingok
        daily
        rotate 30
        endscript
}

これでひとまず、ディスクフルでhoneypot が止まってしまうということはなくなりました。次回はいよいよログの集積環境を作っていきたいと思います。

参考文献

https://qiita.com/Esfahan/items/a8058f1eb593170855a1

WOWHoneypot をサービス化してみる

前回の記事では単にプログラムを自身のユーザ権限で実行しただけなので、SSHを切断したりするとハニーポット自体も終了してしまいます。なのでちゃんとデーモン化して常時起動しておくようにしてみたいと思います。

WOWHoneypot用のユーザを作る

万が一 WOWHonyepot に脆弱性があってユーザ権限を取られてしまった場合に、影響が最小限になるよう専用ユーザとし、sudo 権限などは与えないでおきます。

$ sudo adduser wow

安直にハニーポット名の先頭三文字を取ったけど、他のハニーポッターな方はもっと凝った名前をつけているのでしょうか…?

サービス化する

wowhoneypot.py を直接起動してしまうと、SSHを切断したりするとハニーポット自体も終了してしまうので、ちゃんとサービス化します。 バージョンアップ等に容易に対応できるように起動用のシェルスクリプトファイルを作ることにします。

以下の内容を、 /home/wow 直下に wowhoneypot.sh として保存します。WOWHoneypot 本体は /home/wow/wowhoneypot 以下にクローンされているとします。

#!/bin/bash
cd /home/wow/wowhoneypot
/usr/bin/python3 /home/wow/wowhoneypot/wowhoneypot.py

systemctl から扱えるように /etc/systemd/system 以下に wowhoneypot.service というファイルで以下の内容を保存します。

[Unit]
Description=WoWHoneypot daemon
Documentation=https://github.com/morihisa/WOWHoneypot

[Service]
ExecStart = /home/wow/wowhoneypot.sh
ExecRestart = /bin/kill -WINCH ${MAINPID} ; /home/wow/wowhoneypot.sh
ExecStop = /bin/kill -WINCH ${MAINPID}
Restart = no
Type = simple
User = wow
Group = wow

[Install]
WantedBy = multi-user.target

サービスとして起動、停止するには以下のコマンドを使います。

$ sudo systemctl enable wowhoneypot.service // 自動起動設定を有効に
$ sudo systemctl start wowhoneypot.service     // サービスを開始する
$ sudo systemctl stop wowhoneypot.service     // サービスを停止する

上記の eneble と start の両方を実行すると、以下のように wowhoneypot のプロセスが起動しているはずです。 もし起動していなかったら、 /var/log/syslog をみて原因を特定しましょう。大抵の場合、実行ファイルのパスが間違っているのではないかと思います。

f:id:kawa_xxx:20180506133236p:plain

おわりに

前回の記事とあわせて、これで wowhonyepot をきちんと植えることが出来ました。 次回は syslog でログを外部サーバに集積、簡易分析するのと、WOWHoneypot 1.1 で実装されたハンティング機能をいじって見ようと思います。

WOWHoneypot を構築してみた

Cowrie につづいて、morihi_soc さんが作成されている、WOWHoneypot を植えてみました。

セットアップ方法

基本的には Github に書いてある環境の通りにセットアップしただけです。とても簡単ですね。唯一違う点は OS が Ubuntu 18.04 LTS だという点くらいでしょうか。

ここには書いてありませんが、サーバ自体のセキュリティアップデートは必ず全て適用して、SSHは秘密鍵のみに設定変更してからハニーポットの運用を開始するようにしましょう。ミイラ取りがミイラになっては仕方ないので…

$ sudo ufw default DENY
$ sudo ufw allow 80/tcp
$ sudo ufw allow 8080/tcp
※ SSH のアクセスポートも環境に合わせて追加してください。
$ sudo ufw enable
$ sudo vi /etc/ufw/before.rules
※ 「*filter」より前に下記の4行を追記する。
———————————————————————————
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
COMMIT
———————————————————————————
$ sudo ufw reload
$ cd ~/
$ git clone https://github.com/morihisa/WOWHoneypot.git wowhoneypot
$ cd wowhoneypot
$ python3 ./wowhoneypot.py

試しにIP直打ちでアクセスしてみると、最下部の2行のようにWOWHoneypotのログにもちゃんと履歴がのこっているし、ログインフォームらしき画面も表示されているので正常に動作していることが確認できました。

f:id:kawa_xxx:20180430160852p:plain

WOWHoneypot を植えて

Cowrieのときはすぐにアクセスが来ましたが、WOWHoneypot の場合は wow と驚く程早く、攻撃者からのアクセスがあるわけではありませんでした。ちゃんとサービス化して気長に待ちましょうかね。

さて、Cowrie と合わせてそろそろログを集積する環境をちゃんとしなくては。