更新内容
- 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」として課金されない事になっているようです。
詳細は以下のページを参照してください。
- Google Cloud Platform の無料枠 https://cloud.google.com/free/?hl=ja
今回、ハニーポットで使用するのはGCPの中で仮想マシンサービスを提供する「Compute Engine」になります。
以下の条件ならば「Always Free」になります。
- f1-micro VM インスタンス
- リージョンは北米のいずれか1つ(おすすめは日本に近い北米西海岸のus-west1)
- オレゴン: us-west1
- アイオワ: us-central1
- サウスカロライナ: us-east1
- 30GBのHDD
最初の12ヶ月は$300分利用出来るので上限超えて課金の様子を見てもいいですね。
ファイアウォール設定
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
SSHの設定
作成したインスタンスにはSSHにてWebブラウザからもログインが出来ます。別途TeraTermなどのターミナルソフトは不要です。
SSHのハニーポットCowrieを設置するので、SSHの標準ポート番号を変更しておきます。
今回は例として22022番にしてあります。別の番号や接続元IPアドレスの制限なども状況に応じで個々に設定して下さい。
SSHサーバーの設定ファイル修正
port 22022
SSHサーバーの再起動
$ sudo systemctl restart ssh
接続中のセッションは変更前のポート番号で維持されるので、もう1つ別のターミナル画面を変更したポート番号を指定して開いて動作確認します。
SSH接続の「ブラウザウィンドウでカスタムポートを開く」で変更したポート番号を指定します。
無事にSSH接続が出来れば成功です。出来ない場合は最初の接続セッションが維持されているので戻って再確認しましょう。
Cowrie(Telnet/SSH ハニーポット)
IoT機器を狙ったマルウェアが世界中から大量にTelnetやSSHのサービスポートへ侵入を試みてきます。これはIoT機器の多くに組み込みのLinuxが使用されている事にも起因します。
この状況を観察するハニーポットとしてCowrieを使用してみます。
- Cowrie SSH and Telnet Honeypot https://www.cowrie.org/
- GitHub https://github.com/cowrie/cowrie
- Welcome to Cowrie’s documentation! https://cowrie.readthedocs.io/en/latest/index.html
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機能でポートリダイレクト(ポートフォワーディング)を使用する事にして、ポート番号は修正しません。
[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」行より手前に追加します。
*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を同じインスタンスに設定します。
- cowrie-logviewer https://github.com/mindphluxnet/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
スクリプトファイル修正
log_path = '../var/log/cowrie/'
dl_path = '../var/lib/cowrie/downloads/'
ログビューアの起動
$ python cowrie-logviewer.py &
サービスポートの5000番で起動するので、インスタンスのグローバルIPアドレスで5000番を指定してブラウザで確認してみましょう。
WOWHoneypot(HTTPハニーポット)
WebサーバーのHTTPサービスに来るサイバー攻撃を観察するハニーポットで、WOWHoneypotを使用します。
ufw NATポートリダイレクト設定
サービスポート8080番でWOWHoneypotは起動しますので、Cowrieと同様にufwのNAT機能でポートリダイレクト(ポートフォワーディング)を使用する事にして、ポート番号は修正しません。
ファイアウォール設定については、HTTPの80番やHTTPSの443番は、ここまでの記載途中で既に設定済みです。
ufw設定ファイルにNAT機能ポートリダイレクト(ポートフォワーディング)のルールを追加します。
-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」を作成します。
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