ペネトレーションしのべくん

さようなら、すべてのセキュリティエンジニア

ハニーポット(WOWHoneypot)のログをスプレッドシートに入れて、データポータルで可視化してみた

はじめに

先日ツイートしたWOWHoneypotのログをスプレッドシートに流してデータポータルで可視化するというやつ、ようやっとGitHubリポジトリに公開しました。

github.com

元ツイートはこちら。

多くの方に使ってみてほしいので、READMEよりももうちょっと丁寧なセットアップ手順を書きます。後半で説明するデータポータルでの可視化までやっても、Lightsailの料金しか発生しないはずのハニーポット環境です。金曜お休みの方はもちろん、そうでない方も土日に、なんならGW中でなくてもいいのでぜひお試しください。

謝辞

今回お世話になった方々(順不同)です。おふたりとも誠にありがとうございました!

  • @morihi_soc さん
  • tokizo(id:tokizuoh)さん
    • toizoさんの旧ブログの記事をベースに最初のwatcherを実装し、公開の許可をいただきました
    • 現在はwatchdogではなくpygtailによる実装になっています

詳細な手順

GCPAPIの有効化

プロジェクトを作って、左上のハンバーガーメニューから「APIとサービス」をクリックします。

メイン画面左上の「APIとサービスの有効化」をクリックします。

検索フォームが出てくるので、「sheet」「drive」などと検索して、Google Sheets APIGoogle Drive APIをそれぞれ有効化しましょう。

次は認証情報です。左ペインの「認証情報」をクリックします。

メイン画面左上の「認証情報を作成」をクリックして、「サービス アカウント」を選択します。

サービスアカウント名やIDは任意のもので大丈夫です。ここでは「honeypot」としました。残りの設定は不要なので、「完了」ボタンをクリックします。

認証情報画面に戻ってくるので、今作ったサービスアカウントのアドレスをクリックします。

「キー」タブをクリックして、「鍵を追加」、「新しい鍵を作成」をクリックします。

キーのタイプは「JSON」にして、「作成」をクリックします。JSONファイルがダウンロードされるので、大事にとっておいてください。後で使います。

Google Workspaces:スプレッドシートの作成

スプレッドシートを作って、名前を付けます。「honeypot-log」だと後が楽ですが、私のドライブには同名のスプシがあるので「honeypot-log-sample」とします。シート名も任意のもので大丈夫ですが、こちらも「Sheet1」のままだと後が楽です。

1行目はヘッダーとして使います。デフォルトでは左から以下の値が入ります。

  • タイムスタンプ
  • 送信元IPアドレス
  • 宛先ホスト名
  • リクエストヘッドライン
  • ステータスコード
  • ルールマッチ有無(WOWHoneypotの機能です)
  • リクエスト全体
  • User-Agentヘッダーの内容
  • リクエストメソッド
  • リクエストパス
  • センサーID
  • センサーの地域

それぞれ好きな名前を付けて構いませんが、以下の手順だと楽にできると思います。

  • A1に timestamp source_ip dest_host request status_code match payload user_agent request_method request_path sensor_id sensor_region を貼り付ける
  • 右下に出てくるクリップボードアイコンをクリックして「Split to columns」をクリックする
  • セパレーターとして「Space」をクリックする

これが

こうなって

こうじゃ

スプレッドシートの共有先として、先ほど作ったサービスアカウントを編集権限で追加します。サービスアカウントのメールアドレスは、ダウンロードしたJSONファイルを開くと「client_email」というフィールドに書いてあります。

Google関連の作業は一旦これでおしまいです。

AWS

Lightsailを立てます。任意のリージョンで、Amazon Linux 2、OS Onlyで立ててください。インスタンスプランはデフォルトのもので、少なくとも私の手元では動いています。

サーバーのステータスがRunningになったら、右上のターミナルアイコンをクリックして、ターミナルを開きます。

ターミナルで以下のコマンドを順番に実行していきます。先頭の $ は含めないでください。

$ sudo yum -y update
$ sudo yum -y install git
$ git clone https://github.com/shinobe179/wowhoneypot-with-spreadsheet.git
$ cd wowhoneypot-with-spreadsheet

Vimもしくは任意のエディタで honeypot-watcher/client_secret.json を開いて、コメントを消して、GCPからダウンロードしたJSONファイルの内容をまるごとコピペしてください。

$ vim honeypot-watcher/client_secret.json

更に honeypot-watcher/config.py を開いて、中身を編集してください。現在4つのパラメータがあり、意味はそれぞれ以下の通りです。

  • sensor_id
  • sensor_region
  • book_name
  • sheet_name
    • ログを書き込むシート名。

ここまで終わったら、以下のコマンドを実行すれば自動でセットアップが進みます。Makefileというファイルに書かれている処理が実行されます。

$ sudo make

不安だったら、以下のコマンドを実行していずれも Active: active (running) と表示されていれば、ひとまずはOKです。

$ systemctl status WOWHoneypot.service
$ systemctl status honeypot-watcher.service

テスト

以下のコマンドを実行して、ログがスプレッドシートに書き込まれれば成功です。

$ curl localhost:8080

わーい。

その後

スプレッドシートへの書き出しがうまくいったら、やってみるとよさそうなこと達です。むしろ本番かもしれません。

データポータルでの可視化

Twitterで言っていた「貧乏SIEM」です。SIEMって高かったり、それなりのマシンスペックが必要だったりするので、趣味で持つにはちょっとハードルが高いです。たまたまGoogleデータポータルなるものがあることを知っていたので、「これ使ったら無料でSIEMやれるんじゃないか……?」というのが、今回の取り組みのきっかけでした。結果、うまくいってよかったです。

以降、さわりの部分だけ手順を紹介します。

手順

画面右上の「Create」をクリックし、「Data source」をクリックします。

Google Sheets」をクリックします。

自分が作ったブック名とログが書き込まれるシート名を選択したら、右上の「CONNECT」ボタンをクリックします。

各列の型を自動でマッピングしてくれます。とりあえずこのまま、右上の「CREATE REPORT」ボタンをクリックします。

「Add a Chart」からグラフを追加できます。各グラフで可視化する値やスタイルなどは、右のペインから選択できます。ガチャガチャいじってれば慣れるので、あとはあなたの感性で思い思いのグラフを描いてください。

参考までに、私のダッシュボードです。一番上には全ログ数とリージョン毎のログ数、その次の段には時系列タイムラインで時間毎のログ数を出しています。それより下は各項目の内訳をテーブルで出しています。バー付きのテーブルが見やすくて多用しています。逆に円グラフなどの視覚的・直感的なグラフは全然使っていません。文字情報を追いかけたいからですかね?

最下部には、リクエスト全体を列に持つテーブルを置いています(画像は割愛)。上のグラフやテーブルで絞り込んで、詳細はこのテーブルで見る、という感じです。

WOWHoneypotの本家リポジトリ利用

今回、WOWHoneypotのソースコードをそのままリポジトリに入れてあります。ログに記録する情報を増やす目的でWOWHoneypotのソースコードを編集しているからです。これだと本家の更新に追従できないので、慣れている方は本家をクローンしてきて、そちらを使うことをおすすめします。

github.com

GDPRについて

IPアドレスGDPRでの保護対象になるとかならないとかって話があって、WOWHoneypotにはまさにGDPR対策として、IPアドレスを全て「0.0.0.0」で記録する機能がついています。デフォルトで無効なので、各自で有効化をご検討ください。個人的にはパスやボディの内容が興味深い一方で、IPアドレスは「IPアドレスだなあ」以上も以下もない*1ので、妙なリスクを負ってまで集めることもないかなと思います。

2022-05-14追記

リポジトリ内のWOWHoneypotに、IPアドレスのSHA256ハッシュをログに記録する機能を付けました。IPアドレスそのものを知る必要はないけど、送信元の区別は付けたい、という場合に使ってみてください。ただし、ハッシュ化されていればGDPRに照らして問題ないという確証は一切ないので、その点はご了承ください。

github.com

さいごに

多くの方に興味を持っていただけたようだったので、ちょっと頑張って作ったり書いたりしました。何人かでも試してみていただけたらうれしいです。

*1:MaxMind社のGeoIPデータベースを使って地理情報と紐付けるのも一興ですが、正確性の面で否定的かつもっともな意見も散見されるので、やってないし、今後もやらないと思います