このブログは、数年前にN高等学校を卒業し株式会社ArmorisにやってきたアルバイトKaepiが書いています。
あるもりすぶろぐの内容は個人の意見です。
概要
今回はGCP(Google Cloud Platform)のVMインスタンス(無料枠)にWOWHoneypotを設置し、そのログをElasticsearchで分析します。
今回の分析にはドメインが必要なので、実践される方はドメインの取得とネームサーバーの変更が必要です。
WOWHoneypotについて導入から分析まで全3回に分けて投稿します。
1. WOWHoneypotのログを分析してみた - 導入編(今回)
2. WOWHoneypotのログを分析してみた - Logstash編
3. WOWHoneypotのログを分析してみた - 分析編
目次
構築
VMインスタンスの構築
GCPのVMインスタンスはGoogleがホストするクラウドサービスの仮想マシンのことです。
VMインスタンスの簡単な設定を済ませるとすぐに利用できるので、手軽にサーバーを用意することができます。
無料枠についてはこちらの説明を見て下さい。
新しいプロジェクトを作成し、左側のメニューからCompute Engine->VMインスタンスを開きます。
リージョン
- リージョン -> us-west1(オレゴン)
- ゾーン -> ws-west1-b
マシンの構成
- マシンファミリー -> 汎用
- シリーズ -> E2
- マシンタイプ -> e2-micro (2 vCPU, 1GBメモリ)
ブートディスク
ファイアウォール
構築したVMインスタンスにssh接続をする
今回ssh接続するためにtera termを使用します。
tera termの設定からSSH鍵生成を開き、生成した2つの鍵を保存します。
次にGCP側に公開鍵(id_rsa.pub)を登録します。
GCPコンソールの左側のメニューからメタデータを開き、SSH認証鍵
に公開鍵を設定します。
VMインスタンスのページに戻り、作成したインスタンスの外部IPを調べてメモしておきます。
tera termを開き、ホストIPを入力したらOKで次に進み、ユーザー名と秘密鍵のパスを入力すると接続することができます。
ドメインの設定とSSL/TLS対応
GCPのコンソールから、ネットワークサービスのCloud DNS
を開きます。
ゾーンを作成
作成ボタンでゾーンを作成します。
Cloud DNSの画面に戻ったら、作成したゾーン名を開いてレコードセットを追加します。
IPv4アドレスの入力欄に作成したVMインスタンスの外部IPを設定してレコードセットを作成します。
ネームサーバーの登録
ドメインのレジストラ側の設定画面でNSレコードを設定する。
登録するNSレコードは先程作成したゾーンのレコードセットにNSレコードがあるのでこれをコピーする。
※この作業はドメインのレジストラごとに違うので、わからない場合は調べながら行ってください。
Let's Encryptで証明書発行
Let's Encryptのクライアント(certbot)を使って、SSL/TLSの対応をします。
Let's Encryptとは、HTTPSを普及させる事を目的としたプロジェクトで、証明書の発行を完全に自動化することで無料で手軽にSSL/TLS対応ができます。
$ sudo apt update $ sudo apt install -y certbot $ sudo certbot certonly --standalone -t
その後は指示に従って情報を入力していきます。
生成された鍵は/etc/letsencrypt/live/ドメイン名/
に保存されています。
Nginxの設定
$ sudo apt install -y nginx
Nginxをインストールしたら、発行した証明書のパスをnginx.conf
に記入します。
$ sudo vim /etc/nginx/nginx.conf ## # SSL Settings ## ~ # 以下を追記 ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;
続いて、リバースプロキシを作っていきます。
$ sudo vim /etc/nginx/conf.d/proxy.conf server { listen 80; server_name ドメイン; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name ドメイン; real_ip_header proxy_protocol; location / { proxy_pass http://localhost:8080; proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header Connection ""; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
この設定では、http(80)で接続して来たらhttps(443)にリダイレクトするサーバーと、受け取ったリクエストをWOWHoneypot(8080)に転送するサーバーの2つがあります。
ただし、nginxでリバースプロキシをすることでWOWHoneypotが受け取る接続元IPがリバースプロキシのIPになってしまうため、X-Real-IPヘッダーを追加することで本当の接続元IPを記録できるようにします。
$ sudo systemctl restart nginx
nginxを再起動して構築は完了です。
WOWHoneypotの構築
Welcome to Omotenashi Web Honeypot(WOWHoneypot)は、簡単に構築可能で、シンプルな機能で動作を把握しやすくした、サーバ側低対話型の入門用 Web ハニーポットです。 ルールベースのマッチ&レスポンス機能により、攻撃者に気持ちよく攻撃してもらい、得られるログの幅を広げることができます。 送信元からの HTTP リクエストをそのまま保存するので、後からじっくりゆっくりログ分析をすることが可能です。
インストール
$ git clone https://github.com/morihisa/WOWHoneypot.git wowhoneypot
サービスの作成
WOWHoneypotを24時間稼働させたいので、systemdを使ってサービスを作成します。
まずWOWHoneypot実行用のシェルスクリプトを用意します。
$ vim wowhonypot.sh #!/bin/bash cd /home/ユーザー名/wowhoneypot /usr/bin/python3 /home/ユーザー名/wowhoneypot/wowhoneypot.py $ sudo chmod 755 wowhoneypot.sh
systemdのサービスを作成します
$ sudo vim /etc/systemd/system/wowhoneypot.service [Unit] Description=WOWHoneypot daemon Documentation=https://github.com/morihisa/WOWHoneypot [Service] ExecStart = /home/ユーザー名/wowhoneypot.sh ExecRestart = /bin/kill -WINCH ${MAINPID} ; /home/ユーザー名/wowhoneypot.sh ExecStop = /bin/kill -WINCH ${MAINPID} Restart = no Type = simple [Install] WantedBy = multi-user.target
$ sudo systemtl enable wowhoneypot.service $ sudo systemtl start wowhoneypot.service
以上で今回の作業は終わりです。
まとめ
今回はGCPのVMインスタンスにWOWHoneypotとnginxのリバースプロキシを構築しました。
次回のLogstash編では、WOWHoneypotのアクセスログを分析しやすいようにLogstashを使って情報の加工と取得を自動化していきます。