はじめに
先日ツイートしたWOWHoneypotのログをスプレッドシートに流してデータポータルで可視化するというやつ、ようやっとGitHubリポジトリに公開しました。
元ツイートはこちら。
OSSのハニーポット「WOWHoneypot」のログをGoogleのスプレッドシートへ自動で出力するスクリプトを書いて、更にデータポータルで可視化してみた。貧乏SIEM。 pic.twitter.com/u9q5wXmxEZ
— shinobe179 (@shinobe179) 2022年5月3日
多くの方に使ってみてほしいので、READMEよりももうちょっと丁寧なセットアップ手順を書きます。後半で説明するデータポータルでの可視化までやっても、Lightsailの料金しか発生しないはずのハニーポット環境です。金曜お休みの方はもちろん、そうでない方も土日に、なんならGW中でなくてもいいのでぜひお試しください。
謝辞
今回お世話になった方々(順不同)です。おふたりとも誠にありがとうございました!
- @morihi_soc さん
- WOWHoneypotをまるっとリポジトリに入れて公開することをお許しいただきました
- tokizo(id:tokizuoh)さん
- toizoさんの旧ブログの記事をベースに最初のwatcherを実装し、公開の許可をいただきました
- 現在はwatchdogではなくpygtailによる実装になっています
詳細な手順
GCP:APIの有効化
プロジェクトを作って、左上のハンバーガーメニューから「APIとサービス」をクリックします。
メイン画面左上の「APIとサービスの有効化」をクリックします。
検索フォームが出てくるので、「sheet」「drive」などと検索して、Google Sheets APIとGoogle 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のソースコードを編集しているからです。これだと本家の更新に追従できないので、慣れている方は本家をクローンしてきて、そちらを使うことをおすすめします。
GDPRについて
IPアドレスはGDPRでの保護対象になるとかならないとかって話があって、WOWHoneypotにはまさにGDPR対策として、IPアドレスを全て「0.0.0.0」で記録する機能がついています。デフォルトで無効なので、各自で有効化をご検討ください。個人的にはパスやボディの内容が興味深い一方で、IPアドレスは「IPアドレスだなあ」以上も以下もない*1ので、妙なリスクを負ってまで集めることもないかなと思います。
2022-05-14追記
リポジトリ内のWOWHoneypotに、IPアドレスのSHA256ハッシュをログに記録する機能を付けました。IPアドレスそのものを知る必要はないけど、送信元の区別は付けたい、という場合に使ってみてください。ただし、ハッシュ化されていればGDPRに照らして問題ないという確証は一切ないので、その点はご了承ください。
さいごに
多くの方に興味を持っていただけたようだったので、ちょっと頑張って作ったり書いたりしました。何人かでも試してみていただけたらうれしいです。
*1:MaxMind社のGeoIPデータベースを使って地理情報と紐付けるのも一興ですが、正確性の面で否定的かつもっともな意見も散見されるので、やってないし、今後もやらないと思います