20
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GCP無料枠で始めるハニーポット入門

Last updated at Posted at 2019-10-10

更新内容

  • WOWHoneypot Dockerコンテナを追加(2020/01/15)
  • Citrix ADCの脆弱性(CVE-2019-19781)を観測するハニーポットCitrixHoneypotを追加(2020/01/14)

背景

なるべく安価で安全にハニーポットをはじめてみる入門メモです。

ハンズオンで実習するイベントを予定しています。

第2回 塩尻セキュリティウィークエンド(SSWE)2019 2日目
https://connpass.com/event/149847/

注意事項

ハニーポットは意図してサイバー攻撃を受けて調査する目的の為、場合によっては壊れる事も想定して、いつでも止められる様に準備しましょう。
また様々なマルウェアなどを捕獲する事もありますので、アンチウイルスソフトやサンドボックス環境などで防御策も考慮しておきましょう。

動作環境

  • パブリッククラウド:Google Cloud Platform(GCP)
  • OS:Ubunru Server 18.04 LTS

GCPの無料枠

Googleのパブリッククラウドサービスを利用します。Googleのアカウント作成とクレジットカードの登録が必要です。
無料枠には「12か月間 $300 分の無料トライアル」と「Always Free」があります。
リソースの利用に上限があり、その範囲ならば「Always Free」として課金されない事になっているようです。
詳細は以下のページを参照してください。

今回、ハニーポットで使用するのはGCPの中で仮想マシンサービスを提供する「Compute Engine」になります。
以下の条件ならば「Always Free」になります。

  • f1-micro VM インスタンス
  • リージョンは北米のいずれか1つ(おすすめは日本に近い北米西海岸のus-west1)
  • オレゴン: us-west1
  • アイオワ: us-central1
  • サウスカロライナ: us-east1
  • 30GBのHDD

最初の12ヶ月は$300分利用出来るので上限超えて課金の様子を見てもいいですね。

作成したインスタンスは以下のようになります。
gcp-honeypot-01.png

ファイアウォール設定

2箇所のファイアウォール設定が必要になります。

  • 「Compute Engine」インスタンスの外側(ブラウザ画面で設定)
  • インスタンスのOS側(OSにログインして設定)

両方の設定を適切に設定しないと動作しませんので注意しましょう。

ufw設定

OS側Ubuntuでファイアウォールのufwを設定します。

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install ufw
$ sudo ufw default DENY
$ sudo ufw allow 22/tcp
$ sudo ufw allow 23/tcp
$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp
$ sudo ufw allow 5000/tcp
$ sudo ufw allow 8080/tcp
$ sudo ufw allow 22022/tcp
$ sudo ufw enable
$ sudo ufw status

インスタンスのファイアウォール設定

ブラウザ画面から設定します。
インスタンス作成時のファイアウォール設定でHTTPとHTTPSを有効にしてあれば、ルールに80番と443番は設定されているので、追加で作成するルールはCowrieハニーポットで使用する23番と5000番、メンテナンス用SSHの22022番になります。
特にメンテナンス用SSHのポート番号の設定を忘れるとSSHサーバー設定でポート番号を変更した後に接続が出来なくなるので注意です。多くの方がこれを1度は失敗していますw

gcp-honeypot-02.png

SSHの設定

作成したインスタンスにはSSHにてWebブラウザからもログインが出来ます。別途TeraTermなどのターミナルソフトは不要です。
SSHのハニーポットCowrieを設置するので、SSHの標準ポート番号を変更しておきます。
今回は例として22022番にしてあります。別の番号や接続元IPアドレスの制限なども状況に応じで個々に設定して下さい。

SSHサーバーの設定ファイル修正

/etc/ssh/sshd_config
port 22022

SSHサーバーの再起動

$ sudo systemctl restart ssh

接続中のセッションは変更前のポート番号で維持されるので、もう1つ別のターミナル画面を変更したポート番号を指定して開いて動作確認します。
SSH接続の「ブラウザウィンドウでカスタムポートを開く」で変更したポート番号を指定します。

gcp-honeypot-03.png gcp-honeypot-04.png

無事にSSH接続が出来れば成功です。出来ない場合は最初の接続セッションが維持されているので戻って再確認しましょう。

Cowrie(Telnet/SSH ハニーポット)

IoT機器を狙ったマルウェアが世界中から大量にTelnetやSSHのサービスポートへ侵入を試みてきます。これはIoT機器の多くに組み込みのLinuxが使用されている事にも起因します。
この状況を観察するハニーポットとしてCowrieを使用してみます。

Cowrie インストール

公式ドキュメント通りにインストールすれば簡単に出来ますが、要点をメモしておきます。

基本的なライブラリ等をインストール

$ sudo apt-get install git python-virtualenv libssl-dev libffi-dev build-essential libpython3-dev python3-minimal authbind virtualenv

専用のユーザーアカウントcowrieを作成します、

$ sudo adduser --disabled-password cowrie

作成したcowrieアカウントに切り替えます。

$ sudo su - cowrie

GitHubからCowrieのコードをチェックアウトします。その後はディレクトリを移動します。

$ git clone http://github.com/cowrie/cowrie
$ cd cowrie

仮想環境を設定します。

$ pwd
/home/cowrie/cowrie
$ virtualenv --python=python3 cowrie-env
$ source cowrie-env/bin/activate
(cowrie-env) $ pip install --upgrade pip
(cowrie-env) $ pip install --upgrade -r requirements.txt

Cowrie環境設定ファイルの修正

設定ファイルの「cowrie.cfg.dist」はアップグレードなどで変更されるので、コピーして別の「cowrie.cfg」を用意します。どちらも起動時に参照されます。

$ pwd
/home/cowrie/cowrie
$ cp etc/cowrie.cfg.dist etc/cowrie.cfg

標準ではTelnetが無効なので有効「true」にします。また、待受ポート番号を変更する場合も修正します。
Cowrie標準では、SSHが2222番、Telnetが2223番になっています。
これは22番などがroot権限が無いと利用出来ない為で、root権限のないcowrieユーザーでは何らかの方法が必要になります。公式ドキュメントでは例として3つの方法が掲載されています。
ここではufwのNAT機能でポートリダイレクト(ポートフォワーディング)を使用する事にして、ポート番号は修正しません。

etc/cowrie.cfg
[ssh]
enabled = true
listen_endpoints = tcp:2222:interface=0.0.0.0

[telnet]
enabled = true
listen_endpoints = tcp:2223:interface=0.0.0.0

Cowrieの起動

$ pwd
/home/cowrie/cowrie
$ bin/cowrie start
$ exit

ufw NATポートリダイレクト設定

ufwにCowrieのポート番号を追加します。

$ sudo ufw allow 2222/tcp
$ sudo ufw allow 2223/tcp

ufw設定ファイルにNAT機能ポートリダイレクト(ポートフォワーディング)のルールを追加します。
「*filter」行より手前に追加します。

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

ufwを再読み込みします。

$ sudo ufw reload

これでSSHの22番に来たパケットはCowrieの2222番へ転送されます。
ログファイルを確認してみましょう。

$ sudo su - cowrie
$ cd cowrie
$ tail -f var/log/cowrie/cowrie.log

しばらくするとIotマルウェアの侵入ログが表示されると思います。

cowrie-logviewer

ログファイルをそのまま読む以外に専用のログビューアで見易く観察する事ができます。
大量のログを観察する時に便利ですが、CPUやメモリやストレージのリソースがより多く要るので、場合によってはクラウドより手元に持って来て解析する事を考慮した方が良いかも知れません。
今回はcowrie-logviewerを同じインスタンスに設定します。

インストール設定

& sudo su - cowrie
$ cd cowrie
$ git clone https://github.com/mindphluxnet/cowrie-logviewer
$ cd cowrie-logviewer
$ source ~/cowrie/cowrie-env/bin/activate
$ pip install -r requirements.txt
$ mkdir maxmind
$ cd maxmind
$ wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
$ gunzip GeoLite2-Country.mmdb.gz

スクリプトファイル修正

/home/cowrie/cowrie/cowrie-logviewer/cowrie-logviewer.py
log_path = '../var/log/cowrie/'
dl_path = '../var/lib/cowrie/downloads/'

ログビューアの起動

$ python cowrie-logviewer.py &

サービスポートの5000番で起動するので、インスタンスのグローバルIPアドレスで5000番を指定してブラウザで確認してみましょう。

gcp-honeypot-05.png

WOWHoneypot(HTTPハニーポット)

WebサーバーのHTTPサービスに来るサイバー攻撃を観察するハニーポットで、WOWHoneypotを使用します。

ufw NATポートリダイレクト設定

サービスポート8080番でWOWHoneypotは起動しますので、Cowrieと同様にufwのNAT機能でポートリダイレクト(ポートフォワーディング)を使用する事にして、ポート番号は修正しません。
ファイアウォール設定については、HTTPの80番やHTTPSの443番は、ここまでの記載途中で既に設定済みです。

ufw設定ファイルにNAT機能ポートリダイレクト(ポートフォワーディング)のルールを追加します。

/etc/ufw/before.rules
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

ufwを再読み込みします。

$ sudo ufw reload

これでHTTPの80番に来たパケットはWOWHoneypotの8080番へ転送されます。

WOWHoneypotインストール

専用のユーザーアカウントwowを作成します、

$ sudo adduser --disabled-password wow

作成したwowアカウントに切り替えます。

$ sudo su - wow

GitHubからWOWHoneypotのコードをチェックアウトします。その後はディレクトリを移動します。

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

起動します。

$ python3 wowhoneypot.py &

WOWHoneypot Dockerコンテナ

ローカル実行ではなく、Dockerコンテナで実行する場合

GitHubからWOWHoneypotのコードを落としてきます。その後はディレクトリを移動します。

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

以下のように「Dockerfile」を作成します。

Dockerfile
FROM python:3
RUN mkdir /wowhoneypot
RUN mkdir /wowhoneypot/art
RUN mkdir /wowhoneypot/log
COPY ./. /wowhoneypot
WORKDIR /WOWHoneypot
CMD [ "python", "./wowhoneypot.py"]

Dockerイメージの作成

$ docker build -t wowhoneypot .

Dockerコンテナの実行

$ docker run -d -p 8080:8080 -v /[ローカルPATH]/wowhoneypot:/WOWHoneypot -w /WOWHoneypot --name wowhoneypot wowhoneypot

Docker Volumeオプションでローカルディレクトリにマウントしているので、ログはローカル側に共有されて参照が可能です。

ログファイルを確認してみましょう。

$ tail -f log/access_log

Cowrieよりは少ないですが、しばらくするとマルウェアの侵入ログが表示されると思います。

Web脆弱性診断ツールのOWASP ZAPを使用して、どんなログが表示されるかテストしても良いでしょう。
ただしくれぐれもインスタンスのグローバルIPアドレスを間違えないように注意しましょう。
管轄外の所へ行うと場合によってはサイバー攻撃として責任を問われます。

CitrixHoneypot

Citrix ADCの脆弱性(CVE-2019-19781)を観測するハニーポットCitrixHoneypotを植えてみました。

CitrixHoneypotインストール

GitHubからCitrixHoneypotのコードを落としてきます。

$ git clone https://github.com/MalwareTech/CitrixHoneypot.git CitrixHoneypot

ディレクトリを移動して「logs」「ssl」のディレクトリを作成します。

$ cd CitrixHoneypot
$ mkdir logs ssl

SSLの自己証明書を作成します。

$ openssl req -newkey rsa:2048 -nodes -keyout ssl/key.pem -x509 -days 365 -out ssl/cert.pem

CitrixHoneypotを実行します。

$ python3 CitrixHoneypot.py

CitrixHoneypot Dockerコンテナ

ローカル実行ではなく、Dockerコンテナで実行する場合
GitHubから落としてきてSSLの自己証明書を作成するまでは同様に行います。
ビルドに必要な「Dockerfile」は含まれています。以下が続きになります。

Dockerイメージの作成

$ docker build -t citrixhoneypot .

Dockerコンテナの実行

$ docker run -d -p 443:443 -v /[ローカルPATH]/CitrixHoneypot:/CitrixHoneypot -w /CitrixHoneypot --name citrixhoneypot citrixhoneypot

Docker Volumeオプションでローカルディレクトリにマウントしているので、ログはローカル側に共有されて参照が可能です。

ログファイルを確認してみましょう。

$ tail -f logs/server.log
20
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?