ここでは、対話型ハニーポットで有名な Cowrie をインストールし、動作確認を行う手順を紹介します。Cowrie は Python で実装されたハニーポットの一種で、主に以下の様な特徴があります。
- SSH 及び Telnet の対話型ハニーポット:外部に公開されているポート(22/TCPや23/TCP等)を偽装し、攻撃者からのアクセスを受け付けたように見せることができます。
- 攻撃の痕跡としてのログの収集:攻撃者からのログイン使用や、実行したコマンドの履歴をログや JSON ファイルなどの形式で保存することができます。
- エミュレートされたシェルの提供:Debian 5.0 を模した偽のファイルシステムと最小限のファイルコンテンツを提供し、攻撃者のファイル操作を観察可能です。加えて、ダウンロードしたファイル(wget/curl)や、アップロードしたファイル(SFTP/scp)を保存することも可能です。
また、他には監視機能付きの純粋な Telnet 及び SSHプロキシとして実行可能であったりしますが、今回は純粋なハニーポットの本体となるように Ubuntu(本記事執筆時は Ubuntu 22.04 LTS を想定)上に Cowrie をセットアップして動作確認する手順をまとめます。
ハニーポットの導入に際しては、環境自体に最低限のセキュリティ対策を行う目的で、下図で示すようなネットワーク分離(ハニポ用の隔離環境)やパッチの最新化等は実施する前提です。
ハニーポットは、攻撃者が直接的に侵入・攻撃を試みる環境を意図的に構築し、その手法や動機を調査・分析するための仕組みです。一方で、ハニーポットを運用する環境自体の性質や、それをインターネット上に公開する場合には、ハニーポット自体の脆弱性などが起因となり本当に踏み台化されてしまったり、攻撃者が配置したファイル類の不適切な取り扱いによる事故や、攻撃を"誘引"すること自体の様々レギュレーション上のリスクなどが一般的に考えられます。それらの観点を慎重に検討し、対策をきちんと行ったうえで、自己責任で導入・運用をご検討ください。
インストール前の準備
Ubuntu 自体のOSのパッケージを最新化しておきます。
$ sudo apt update
$ sudo apt dist-upgrade
依存関係で必要なくなったパッケージは削除します。
$ sudo apt autoremove
Cowrie には Python 環境が必要なので、関連パッケージ(Python3 関連や OpenSSL、Git 等)をインストールしておきます。
$ sudo apt install git python3 python3-venv python3-dev openssl libssl-dev libffi-dev
GitHub 上にある Cowrie の公式リポジトリから、Cowrie パッケージをダウンロードします。
$ cd /opt
$ sudo git clone https://github.com/cowrie/cowrie.git
$ sudo chown -R $USER:$USER cowrie
$ cd cowrie
Python で作られたアプリケーションである Cowrie は、依存関係を分離するために仮想環境で動作させるのが望ましいです。以下の手順で env_cowrie という仮想環境を作成し、有効化します。
$ pwd
/opt/cowrie
$ python3 -m venv env_cowrie
$ source env_cowrie/bin/activate
(env_cowrie) $
ターミナルのプロンプトが (env_cowrie)
のように変われば仮想環境が有効化された状態です。
Cowrieのインストール & 初期設定
Cowrie のリポジトリには requirements.txt があり、Cowrie が必要とするライブラリがリストされます。これを pip でインストールします。
(env_cowrie) $ pip install --upgrade pip # pip 自体のアップグレード
(env_cowrie) $ pip install --requirement requirements.txt
cowrie.cfg.dist というひな形の設定ファイルがあるので、これをコピーして cowrie.cfg という名前で使用します。
(env_cowrie) $ cp etc/cowrie.cfg.dist etc/cowrie.cfg
SSH と Telnet の利用ポートを確認する。デフォルトでは、2222と2223がそれぞれ使われているので、必要に応じて変更します。
(env_cowrie) $ cat etc/cowrie.cfg | grep ^listen_endpoints
listen_endpoints = tcp:2222:interface=0.0.0.0
listen_endpoints = tcp:2223:interface=0.0.0.0
但し、本当に22/TCP、23/TCPで動作させる場合には注意が必要です。特に SSH(22/TCP)については、運用者がメンテナンスで正常にSSHを使うこともあるので、ハニポ用のサービスポート(ダミーのSSH)と明示的に分けておいた方が、事故のリスクも減らせると思います。攻撃者に開放するには、ハニポの前段にポートフォワード機能のある ルーター や FireWall を置いてハニポが起動しているときだけ攻撃者からのアクセスを受け付けるようにしておいてあげるのが良いかと思います。
デフォルトでは、ssh のみ有効になっているので、必要に応じて telnet も有効にします。
(env_cowrie) $ vim etc/cowrie.cfg
・・中略・・
[telnet]
# Enable Telnet support, disabled by default
enabled = true
・・中略・・
Cowrie のディレクトリ上で仮想環境が有効化された状態で以下を実行します。
(env_cowrie) $ bin/cowrie start
(env_cowrie) $ bin/cowrie status
cowrie is running (PID: 1542).
動作確認
起動に成功していれば、var/log/cowrie/cowrie.log
にログが出力されています。別のターミナルなどを立ち上げて、実際にハニーポットとしての Cowrie にアクセスしてみます。まず、ターミナル①では、ログを tail しておきます。
(env_cowrie) $ tail -f var/log/cowrie/cowrie.log
別のターミナルを立ち上げて、ハニーポットとして立ち上げた 2222/TCP ないし 2223/TCP にアクセスしてみます。
$ ssh root@<cowrieのIP> -p 2222
root@192.168.117.102's password: <- 適当な文字列を入力
root@xxx:~# exit
$ telnet <cowrieのIP> 2223
login: root
Password: <- 適当な文字列を入力
root@xxx:~#
対応するログが出力されているかを確認します。
※ ログは大量に出てくると思います。
(env_cowrie) $ tail -f var/log/cowrie/cowrie.log
・・中略・・
2025-01-25T18:15:45.888236Z [HoneyPotSSHTransport,3,<接続元のIP>] login attempt [b'root'/b'Passw0rd'] succeeded
・・中略・・
2025-01-25T18:32:35.309039Z [CowrieTelnetTransport,1,<接続元のIP>] login attempt [b'root'/b'abc123'] succeeded
・・中略・・
まとめ
本記事では Ubuntu 上で Cowrie をインストールし、SSH/Telnet のハニーポットとして動作させるところまでを紹介しました。Cowrie は比較的導入が容易でありながら、具体的な攻撃のログを収集できるため、調査や監視に適しています。
- 対話型ハニーポット Cowrie の概要
- Cowrie を導入するための前提条件の整備
- Cowrie の導入と簡単な動作確認
Cowrie により得られるログやファイルを分析することで、どのような攻撃手法が流行しているかを可視化したり、自身のセキュリティの勉強にも役に立ちます。もしご興味があれば、きちんとセキュリティ対策を行ったうえでの継続的な運用と分析にチャレンジしてみてください。